From e8e100be7bfa627c819b646ba893ae7b5feb5834 Mon Sep 17 00:00:00 2001 From: Dimitar Dobrev Date: Wed, 29 Nov 2017 15:55:09 +0200 Subject: [PATCH] Fixed the generated C# when a constructor takes a specialisation. Signed-off-by: Dimitar Dobrev --- src/Generator/Options.cs | 2 +- src/Generator/Passes/CheckIgnoredDecls.cs | 10 ++++++---- tests/NamespacesBase/NamespacesBase.cpp | 4 ++++ tests/NamespacesBase/NamespacesBase.h | 1 + 4 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/Generator/Options.cs b/src/Generator/Options.cs index be5213f2..0cc28857 100644 --- a/src/Generator/Options.cs +++ b/src/Generator/Options.cs @@ -99,7 +99,7 @@ namespace CppSharp /// /// true to generate class templates; otherwise, false. /// - public bool GenerateClassTemplates { get; set; } = false; + public bool GenerateClassTemplates { get; set; } public bool GenerateInternalImports; public bool GenerateSequentialLayout { get; set; } public bool UseHeaderDirectories; diff --git a/src/Generator/Passes/CheckIgnoredDecls.cs b/src/Generator/Passes/CheckIgnoredDecls.cs index 7de12e78..f8440608 100644 --- a/src/Generator/Passes/CheckIgnoredDecls.cs +++ b/src/Generator/Passes/CheckIgnoredDecls.cs @@ -41,10 +41,6 @@ namespace CppSharp.Passes if (Options.GenerateClassTemplates) IgnoreUnsupportedTemplates(@class); - else - foreach (var specialization in @class.Specializations.Where( - s => !s.IsExplicitlyGenerated)) - specialization.ExplicitlyIgnore(); return true; } @@ -54,6 +50,12 @@ namespace CppSharp.Passes if (!base.VisitClassTemplateSpecializationDecl(specialization)) return false; + if (!Options.GenerateClassTemplates && !specialization.IsExplicitlyGenerated) + { + specialization.ExplicitlyIgnore(); + return false; + } + Declaration decl = null; if (specialization.Arguments.Any(a => a.Type.Type?.TryGetDeclaration(out decl) == true)) diff --git a/tests/NamespacesBase/NamespacesBase.cpp b/tests/NamespacesBase/NamespacesBase.cpp index d348a8cf..51757f77 100644 --- a/tests/NamespacesBase/NamespacesBase.cpp +++ b/tests/NamespacesBase/NamespacesBase.cpp @@ -32,6 +32,10 @@ HasVirtualInCore::HasVirtualInCore() { } +HasVirtualInCore::HasVirtualInCore(TemplateClass t) +{ +} + int HasVirtualInCore::virtualInCore(int parameter) { return 1; diff --git a/tests/NamespacesBase/NamespacesBase.h b/tests/NamespacesBase/NamespacesBase.h index 84f51a6f..3c495812 100644 --- a/tests/NamespacesBase/NamespacesBase.h +++ b/tests/NamespacesBase/NamespacesBase.h @@ -63,6 +63,7 @@ class DLL_API HasVirtualInCore { public: HasVirtualInCore(); + HasVirtualInCore(TemplateClass t); virtual int virtualInCore(int parameter); };