From 60f763a92e1bfa3560b4301cb2c3f4697ac79f03 Mon Sep 17 00:00:00 2001 From: Dimitar Dobrev Date: Mon, 7 Nov 2016 23:57:19 +0200 Subject: [PATCH] Preserved arrays and template specialisations when stripping system types. Signed-off-by: Dimitar Dobrev --- .../Passes/StripUnusedSystemTypesPass.cs | 30 +++++++++++-------- 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/src/Generator/Passes/StripUnusedSystemTypesPass.cs b/src/Generator/Passes/StripUnusedSystemTypesPass.cs index 79120bf3..b241c857 100644 --- a/src/Generator/Passes/StripUnusedSystemTypesPass.cs +++ b/src/Generator/Passes/StripUnusedSystemTypesPass.cs @@ -17,8 +17,6 @@ namespace CppSharp.Passes VisitOptions.VisitFunctionReturnType = false; VisitOptions.VisitNamespaceEnums = false; VisitOptions.VisitNamespaceEvents = false; - VisitOptions.VisitNamespaceTemplates = false; - VisitOptions.VisitNamespaceTypedefs = false; VisitOptions.VisitNamespaceVariables = false; VisitOptions.VisitTemplateArguments = false; } @@ -40,9 +38,17 @@ namespace CppSharp.Passes public override bool VisitFieldDecl(Field field) { - var result = base.VisitFieldDecl(field); - 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; if (tagType != null) { @@ -56,18 +62,18 @@ namespace CppSharp.Passes { MarkAsUsed(tagType.Declaration); } + return true; } - else + + var templateType = desugared as TemplateSpecializationType; + if (templateType != null) { - var template = desugared as TemplateSpecializationType; - if (template != null) - { - MarkAsUsed(template.Template); - MarkAsUsed(template.Template.TemplatedDecl); - } + MarkAsUsed(templateType.Template); + MarkAsUsed(templateType.Template.TemplatedDecl); + return true; } - return result; + return false; } private void MarkAsUsed(Declaration declaration)