From aa4d445c20d673e180f3c1686e74cfe33a9b1729 Mon Sep 17 00:00:00 2001 From: Joao Matos Date: Thu, 2 Feb 2023 21:11:24 +0000 Subject: [PATCH] Minor code refactoring for re-use. --- src/Generator/Generators/C/CppTypePrinter.cs | 6 ++-- src/Generator/Generators/CodeGenerator.cs | 6 ++-- src/Generator/Generators/NAPI/NAPIHelpers.cs | 32 ++++++++++++++----- src/Generator/Generators/NAPI/NAPISources.cs | 9 ------ .../Generators/QuickJS/QuickJSSources.cs | 2 +- 5 files changed, 32 insertions(+), 23 deletions(-) diff --git a/src/Generator/Generators/C/CppTypePrinter.cs b/src/Generator/Generators/C/CppTypePrinter.cs index 8acd62c7..f289705f 100644 --- a/src/Generator/Generators/C/CppTypePrinter.cs +++ b/src/Generator/Generators/C/CppTypePrinter.cs @@ -584,7 +584,8 @@ namespace CppSharp.Generators.C 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 @@ namespace CppSharp.Generators.C { args.Add(arg.Integral.ToString(CultureInfo.InvariantCulture)); } + break; } } @@ -634,7 +636,7 @@ namespace CppSharp.Generators.C 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 39eb7e49..e0057a13 100644 --- a/src/Generator/Generators/CodeGenerator.cs +++ b/src/Generator/Generators/CodeGenerator.cs @@ -316,7 +316,7 @@ namespace CppSharp.Generators property.Visit(this); } - VisitClassConstructors(@class); + VisitClassConstructors(@class.Constructors.Where(c => !ASTUtils.CheckIgnoreMethod(c))); VisitClassMethods(@class); return true; @@ -333,9 +333,9 @@ namespace CppSharp.Generators } } - 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 a1f4b939..858c488c 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 @@ using CppSharp.Generators.NAPI; 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 @@ namespace CppSharp.Generators.Cpp 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 @@ namespace CppSharp.Generators.Cpp 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 @@ namespace CppSharp.Generators.Cpp 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 b6676f8b..a78d2948 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 @@ namespace CppSharp.Generators.Cpp { } - 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 3facf63f..7f98a801 100644 --- a/src/Generator/Generators/QuickJS/QuickJSSources.cs +++ b/src/Generator/Generators/QuickJS/QuickJSSources.cs @@ -198,7 +198,7 @@ namespace CppSharp.Generators.Cpp { } - public override void VisitClassConstructors(Class @class) + public override void VisitClassConstructors(IEnumerable ctors) { }