Browse Source

Preserved arrays and template specialisations when stripping system types.

Signed-off-by: Dimitar Dobrev <dpldobrev@protonmail.com>
pull/719/head
Dimitar Dobrev 9 years ago
parent
commit
60f763a92e
  1. 30
      src/Generator/Passes/StripUnusedSystemTypesPass.cs

30
src/Generator/Passes/StripUnusedSystemTypesPass.cs

@ -17,8 +17,6 @@ namespace CppSharp.Passes
VisitOptions.VisitFunctionReturnType = false; VisitOptions.VisitFunctionReturnType = false;
VisitOptions.VisitNamespaceEnums = false; VisitOptions.VisitNamespaceEnums = false;
VisitOptions.VisitNamespaceEvents = false; VisitOptions.VisitNamespaceEvents = false;
VisitOptions.VisitNamespaceTemplates = false;
VisitOptions.VisitNamespaceTypedefs = false;
VisitOptions.VisitNamespaceVariables = false; VisitOptions.VisitNamespaceVariables = false;
VisitOptions.VisitTemplateArguments = false; VisitOptions.VisitTemplateArguments = false;
} }
@ -40,9 +38,17 @@ namespace CppSharp.Passes
public override bool VisitFieldDecl(Field field) public override bool VisitFieldDecl(Field field)
{ {
var result = base.VisitFieldDecl(field);
var desugared = field.Type.Desugar(); var desugared = field.Type.Desugar();
if (TryMarkType(desugared))
return true;
var arrayType = desugared as ArrayType;
return arrayType != null && TryMarkType(arrayType.Type.Desugar());
}
private bool TryMarkType(Type desugared)
{
var tagType = desugared as TagType; var tagType = desugared as TagType;
if (tagType != null) if (tagType != null)
{ {
@ -56,18 +62,18 @@ namespace CppSharp.Passes
{ {
MarkAsUsed(tagType.Declaration); MarkAsUsed(tagType.Declaration);
} }
return true;
} }
else
var templateType = desugared as TemplateSpecializationType;
if (templateType != null)
{ {
var template = desugared as TemplateSpecializationType; MarkAsUsed(templateType.Template);
if (template != null) MarkAsUsed(templateType.Template.TemplatedDecl);
{ return true;
MarkAsUsed(template.Template);
MarkAsUsed(template.Template.TemplatedDecl);
}
} }
return result; return false;
} }
private void MarkAsUsed(Declaration declaration) private void MarkAsUsed(Declaration declaration)

Loading…
Cancel
Save