diff --git a/build/Helpers.lua b/build/Helpers.lua index b68da9a261..6df7a12a90 100644 --- a/build/Helpers.lua +++ b/build/Helpers.lua @@ -61,7 +61,7 @@ msvc_cpp_defines = { } default_gcc_version = "9.0.0" generate_build_config = true premake.path = premake.path .. ";" .. path.join(builddir, "modules") -targetframework = "netcoreapp3.1" +targetframework = "net6.0" function string.starts(str, start) if str == nil then return end diff --git a/src/AST/Class.cs b/src/AST/Class.cs index b1ce831820..59201f9952 100644 --- a/src/AST/Class.cs +++ b/src/AST/Class.cs @@ -286,6 +286,11 @@ public Method FindMethodByUSR(string usr) .FirstOrDefault(m => m.USR == usr); } + public Variable FindVariable(string name) + { + return Variables.FirstOrDefault(m => m.Name == name); + } + public override T Visit(IDeclVisitor visitor) { return visitor.VisitClassDecl(this); diff --git a/src/CLI/CppSharp.CLI.csproj b/src/CLI/CppSharp.CLI.csproj index 4a529cbcc6..9e44e24068 100644 --- a/src/CLI/CppSharp.CLI.csproj +++ b/src/CLI/CppSharp.CLI.csproj @@ -1,6 +1,7 @@  Exe + net6.0 diff --git a/src/Generator/Generators/C/CppTypePrinter.cs b/src/Generator/Generators/C/CppTypePrinter.cs index 8acd62c7cf..f289705f76 100644 --- a/src/Generator/Generators/C/CppTypePrinter.cs +++ b/src/Generator/Generators/C/CppTypePrinter.cs @@ -584,7 +584,8 @@ public override TypePrinterResult VisitClassTemplateSpecializationDecl( args.Add(arg.Type.Visit(this)); break; case TemplateArgument.ArgumentKind.Declaration: - args.Add(arg.Declaration.Visit(this)); + if (arg.Declaration != null) + args.Add(arg.Declaration.Visit(this)); break; case TemplateArgument.ArgumentKind.Integral: ClassTemplate template = specialization.TemplatedDecl; @@ -596,6 +597,7 @@ public override TypePrinterResult VisitClassTemplateSpecializationDecl( { args.Add(arg.Integral.ToString(CultureInfo.InvariantCulture)); } + break; } } @@ -634,7 +636,7 @@ public override TypePrinterResult VisitFunctionDecl(Function function) CppSharp.AST.Type desugared = function.FunctionType.Type.Desugar(); if (!desugared.IsPointerTo(out functionType)) functionType = (FunctionType)desugared; - string exceptionType = Print(functionType.ExceptionSpecType); + string exceptionType = functionType != null ? Print(functionType.ExceptionSpecType) : ""; var @return = function.OriginalReturnType.Visit(this); @return.Name = @class + name; diff --git a/src/Generator/Generators/CodeGenerator.cs b/src/Generator/Generators/CodeGenerator.cs index 39eb7e4984..e0057a13d1 100644 --- a/src/Generator/Generators/CodeGenerator.cs +++ b/src/Generator/Generators/CodeGenerator.cs @@ -316,7 +316,7 @@ public virtual bool VisitClassDeclContext(Class @class) property.Visit(this); } - VisitClassConstructors(@class); + VisitClassConstructors(@class.Constructors.Where(c => !ASTUtils.CheckIgnoreMethod(c))); VisitClassMethods(@class); return true; @@ -333,9 +333,9 @@ public virtual void VisitClassMethods(Class @class) } } - public virtual void VisitClassConstructors(Class @class) + public virtual void VisitClassConstructors(IEnumerable constructors) { - foreach (var ctor in @class.Constructors.Where(c => !ASTUtils.CheckIgnoreMethod(c))) + foreach (var ctor in constructors) { ctor.Visit(this); } diff --git a/src/Generator/Generators/NAPI/NAPIHelpers.cs b/src/Generator/Generators/NAPI/NAPIHelpers.cs index a1f4b93971..858c488cea 100644 --- a/src/Generator/Generators/NAPI/NAPIHelpers.cs +++ b/src/Generator/Generators/NAPI/NAPIHelpers.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Globalization; +using System.IO; using System.Linq; using CppSharp.AST; using CppSharp.AST.Extensions; @@ -9,11 +10,9 @@ namespace CppSharp.Generators.Cpp { - public class NAPICodeGenerator : CCodeGenerator + public class MethodGroupCodeGenerator : CCodeGenerator { - public override string FileExtension => "cpp"; - - public NAPICodeGenerator(BindingContext context, IEnumerable units) + protected MethodGroupCodeGenerator(BindingContext context, IEnumerable units) : base(context, units) { } @@ -43,9 +42,9 @@ public override bool VisitClassDecl(Class @class) return VisitClassDeclContext(@class); } - public override void VisitClassConstructors(Class @class) + public override void VisitClassConstructors(IEnumerable ctors) { - var constructors = @class.Constructors.Where(c => c.IsGenerated && !c.IsCopyConstructor) + var constructors = ctors.Where(c => c.IsGenerated && !c.IsCopyConstructor) .ToList(); if (!constructors.Any()) @@ -59,7 +58,7 @@ public static bool ShouldGenerate(Function function) if (!function.IsGenerated) return false; - if (!(function is Method method)) + if (function is not Method method) return true; if (method.IsConstructor || method.IsDestructor) @@ -88,10 +87,27 @@ public virtual void GenerateMethodGroup(List @group) foreach (var method in @group) { method.Visit(this); - return; } } + public static string GetTranslationUnitName(TranslationUnit unit) + { + var paths = unit.FileRelativePath.Split('/').ToList(); + paths = paths.Select(p => Path.GetFileNameWithoutExtension(p.ToLowerInvariant())).ToList(); + var name = string.Join('_', paths); + return name; + } + } + + public class NAPICodeGenerator : MethodGroupCodeGenerator + { + public override string FileExtension => "cpp"; + + public NAPICodeGenerator(BindingContext context, IEnumerable units) + : base(context, units) + { + } + public virtual MarshalPrinter GetMarshalManagedToNativePrinter(MarshalContext ctx) { return new NAPIMarshalManagedToNativePrinter(ctx); diff --git a/src/Generator/Generators/NAPI/NAPISources.cs b/src/Generator/Generators/NAPI/NAPISources.cs index b6676f8b11..a78d2948b4 100644 --- a/src/Generator/Generators/NAPI/NAPISources.cs +++ b/src/Generator/Generators/NAPI/NAPISources.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using System.Globalization; using System.IO; using System.Linq; using CppSharp.AST; @@ -24,14 +23,6 @@ public NAPISources(BindingContext context, IEnumerable units) { } - public static string GetTranslationUnitName(TranslationUnit unit) - { - var paths = unit.FileRelativePath.Split('/').ToList(); - paths = paths.Select(p => Path.GetFileNameWithoutExtension(p.ToLowerInvariant())).ToList(); - var name = string.Join('_', paths); - return name; - } - public override void Process() { GenerateFilePreamble(CommentKind.BCPL); diff --git a/src/Generator/Generators/QuickJS/QuickJSSources.cs b/src/Generator/Generators/QuickJS/QuickJSSources.cs index 3facf63fd1..7f98a8017a 100644 --- a/src/Generator/Generators/QuickJS/QuickJSSources.cs +++ b/src/Generator/Generators/QuickJS/QuickJSSources.cs @@ -198,7 +198,7 @@ public QuickJSClassFuncDef(BindingContext context) : base(context, null) { } - public override void VisitClassConstructors(Class @class) + public override void VisitClassConstructors(IEnumerable ctors) { }