Browse Source

Don't generate or move ignored specializations

Signed-off-by: Dimitar Dobrev <dpldobrev@protonmail.com>
pull/1641/head
Dimitar Dobrev 4 years ago
parent
commit
ac8bbee379
  1. 5
      src/Generator/Driver.cs
  2. 1
      src/Generator/Generators/CSharp/CSharpSourcesExtensions.cs
  3. 7
      src/Generator/Passes/CheckIgnoredDecls.cs
  4. 4
      src/Generator/Passes/TrimSpecializationsPass.cs

5
src/Generator/Driver.cs

@ -221,6 +221,8 @@ namespace CppSharp
TranslationUnitPasses.AddPass(new EqualiseAccessOfOverrideAndBasePass()); TranslationUnitPasses.AddPass(new EqualiseAccessOfOverrideAndBasePass());
TranslationUnitPasses.AddPass(new CheckIgnoredDeclsPass()); TranslationUnitPasses.AddPass(new CheckIgnoredDeclsPass());
TranslationUnitPasses.AddPass(new FlattenAnonymousTypesToFields());
TranslationUnitPasses.AddPass(new MarkUsedClassInternalsPass());
if (Options.IsCSharpGenerator) if (Options.IsCSharpGenerator)
{ {
@ -260,7 +262,6 @@ namespace CppSharp
Generator.SetupPasses(); Generator.SetupPasses();
TranslationUnitPasses.AddPass(new FlattenAnonymousTypesToFields());
TranslationUnitPasses.AddPass(new CleanInvalidDeclNamesPass()); TranslationUnitPasses.AddPass(new CleanInvalidDeclNamesPass());
TranslationUnitPasses.AddPass(new FastDelegateToDelegatesPass()); TranslationUnitPasses.AddPass(new FastDelegateToDelegatesPass());
TranslationUnitPasses.AddPass(new FieldToPropertyPass()); TranslationUnitPasses.AddPass(new FieldToPropertyPass());
@ -290,8 +291,6 @@ namespace CppSharp
TranslationUnitPasses.AddPass(new CheckDuplicatedNamesPass()); TranslationUnitPasses.AddPass(new CheckDuplicatedNamesPass());
TranslationUnitPasses.AddPass(new MarkUsedClassInternalsPass());
if (Options.IsCLIGenerator || Options.IsCSharpGenerator) if (Options.IsCLIGenerator || Options.IsCSharpGenerator)
{ {
TranslationUnitPasses.RenameDeclsUpperCase(RenameTargets.Any & ~RenameTargets.Parameter); TranslationUnitPasses.RenameDeclsUpperCase(RenameTargets.Any & ~RenameTargets.Parameter);

1
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; static bool allPointers(TemplateArgument a) => a.Type.Type?.Desugar().IsAddress() == true;
var groups = (from @class in specializations var groups = (from @class in specializations
let spec = @class.GetParentSpecialization() let spec = @class.GetParentSpecialization()
where !spec.Ignore
orderby spec.IsGenerated descending orderby spec.IsGenerated descending
group @class by spec.Arguments.All(allPointers) group @class by spec.Arguments.All(allPointers)
into @group into @group

7
src/Generator/Passes/CheckIgnoredDecls.cs

@ -51,10 +51,12 @@ namespace CppSharp.Passes
if (!base.VisitClassTemplateSpecializationDecl(specialization)) if (!base.VisitClassTemplateSpecializationDecl(specialization))
return false; return false;
if (specialization.GenerationKind == GenerationKind.Internal)
return false;
TypeMap typeMap; TypeMap typeMap;
if (!Options.GenerateClassTemplates && if (!Options.GenerateClassTemplates &&
!specialization.IsExplicitlyGenerated && !specialization.IsExplicitlyGenerated &&
specialization.GenerationKind != GenerationKind.Internal &&
!Context.TypeMaps.FindTypeMap(specialization, out typeMap)) !Context.TypeMaps.FindTypeMap(specialization, out typeMap))
{ {
specialization.ExplicitlyIgnore(); specialization.ExplicitlyIgnore();
@ -594,7 +596,8 @@ namespace CppSharp.Passes
else if (specialization.GenerationKind != GenerationKind.Internal) else if (specialization.GenerationKind != GenerationKind.Internal)
specialization.ExplicitlyIgnore(); specialization.ExplicitlyIgnore();
if (!hasExplicitlyGeneratedSpecializations) if (!hasExplicitlyGeneratedSpecializations &&
@class.GenerationKind != GenerationKind.Internal)
@class.ExplicitlyIgnore(); @class.ExplicitlyIgnore();
} }

4
src/Generator/Passes/TrimSpecializationsPass.cs

@ -151,6 +151,10 @@ namespace CppSharp.Passes
for (int i = template.Specializations.Count - 1; i >= 0; i--) for (int i = template.Specializations.Count - 1; i >= 0; i--)
{ {
var specialization = template.Specializations[i]; var specialization = template.Specializations[i];
if (specialization.Ignore)
{
continue;
}
var modules = (from arg in specialization.Arguments var modules = (from arg in specialization.Arguments
where arg.Type.Type != null where arg.Type.Type != null
&& ASTUtils.IsTypeExternal( && ASTUtils.IsTypeExternal(

Loading…
Cancel
Save