From ac8bbee3792cfcf84057793278327df7d3c0cf78 Mon Sep 17 00:00:00 2001 From: Dimitar Dobrev Date: Fri, 29 Oct 2021 22:08:21 +0300 Subject: [PATCH] Don't generate or move ignored specializations Signed-off-by: Dimitar Dobrev --- src/Generator/Driver.cs | 5 ++--- src/Generator/Generators/CSharp/CSharpSourcesExtensions.cs | 1 + src/Generator/Passes/CheckIgnoredDecls.cs | 7 +++++-- src/Generator/Passes/TrimSpecializationsPass.cs | 4 ++++ 4 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/Generator/Driver.cs b/src/Generator/Driver.cs index b79790b8..349a6980 100644 --- a/src/Generator/Driver.cs +++ b/src/Generator/Driver.cs @@ -221,6 +221,8 @@ namespace CppSharp TranslationUnitPasses.AddPass(new EqualiseAccessOfOverrideAndBasePass()); TranslationUnitPasses.AddPass(new CheckIgnoredDeclsPass()); + TranslationUnitPasses.AddPass(new FlattenAnonymousTypesToFields()); + TranslationUnitPasses.AddPass(new MarkUsedClassInternalsPass()); if (Options.IsCSharpGenerator) { @@ -260,7 +262,6 @@ namespace CppSharp Generator.SetupPasses(); - TranslationUnitPasses.AddPass(new FlattenAnonymousTypesToFields()); TranslationUnitPasses.AddPass(new CleanInvalidDeclNamesPass()); TranslationUnitPasses.AddPass(new FastDelegateToDelegatesPass()); TranslationUnitPasses.AddPass(new FieldToPropertyPass()); @@ -290,8 +291,6 @@ namespace CppSharp TranslationUnitPasses.AddPass(new CheckDuplicatedNamesPass()); - TranslationUnitPasses.AddPass(new MarkUsedClassInternalsPass()); - if (Options.IsCLIGenerator || Options.IsCSharpGenerator) { TranslationUnitPasses.RenameDeclsUpperCase(RenameTargets.Any & ~RenameTargets.Parameter); diff --git a/src/Generator/Generators/CSharp/CSharpSourcesExtensions.cs b/src/Generator/Generators/CSharp/CSharpSourcesExtensions.cs index b122c0ea..d3cd5d70 100644 --- a/src/Generator/Generators/CSharp/CSharpSourcesExtensions.cs +++ b/src/Generator/Generators/CSharp/CSharpSourcesExtensions.cs @@ -41,6 +41,7 @@ namespace CppSharp.Generators.CSharp static bool allPointers(TemplateArgument a) => a.Type.Type?.Desugar().IsAddress() == true; var groups = (from @class in specializations let spec = @class.GetParentSpecialization() + where !spec.Ignore orderby spec.IsGenerated descending group @class by spec.Arguments.All(allPointers) into @group diff --git a/src/Generator/Passes/CheckIgnoredDecls.cs b/src/Generator/Passes/CheckIgnoredDecls.cs index 9d5d3c6d..806988fb 100644 --- a/src/Generator/Passes/CheckIgnoredDecls.cs +++ b/src/Generator/Passes/CheckIgnoredDecls.cs @@ -51,10 +51,12 @@ namespace CppSharp.Passes if (!base.VisitClassTemplateSpecializationDecl(specialization)) return false; + if (specialization.GenerationKind == GenerationKind.Internal) + return false; + TypeMap typeMap; if (!Options.GenerateClassTemplates && !specialization.IsExplicitlyGenerated && - specialization.GenerationKind != GenerationKind.Internal && !Context.TypeMaps.FindTypeMap(specialization, out typeMap)) { specialization.ExplicitlyIgnore(); @@ -594,7 +596,8 @@ namespace CppSharp.Passes else if (specialization.GenerationKind != GenerationKind.Internal) specialization.ExplicitlyIgnore(); - if (!hasExplicitlyGeneratedSpecializations) + if (!hasExplicitlyGeneratedSpecializations && + @class.GenerationKind != GenerationKind.Internal) @class.ExplicitlyIgnore(); } diff --git a/src/Generator/Passes/TrimSpecializationsPass.cs b/src/Generator/Passes/TrimSpecializationsPass.cs index 22f71839..680dd42a 100644 --- a/src/Generator/Passes/TrimSpecializationsPass.cs +++ b/src/Generator/Passes/TrimSpecializationsPass.cs @@ -151,6 +151,10 @@ namespace CppSharp.Passes for (int i = template.Specializations.Count - 1; i >= 0; i--) { var specialization = template.Specializations[i]; + if (specialization.Ignore) + { + continue; + } var modules = (from arg in specialization.Arguments where arg.Type.Type != null && ASTUtils.IsTypeExternal(