Browse Source

Fixed the generated C# when a constructor takes a specialisation.

Signed-off-by: Dimitar Dobrev <dpldobrev@protonmail.com>
pull/1011/head
Dimitar Dobrev 8 years ago
parent
commit
e8e100be7b
  1. 2
      src/Generator/Options.cs
  2. 10
      src/Generator/Passes/CheckIgnoredDecls.cs
  3. 4
      tests/NamespacesBase/NamespacesBase.cpp
  4. 1
      tests/NamespacesBase/NamespacesBase.h

2
src/Generator/Options.cs

@ -99,7 +99,7 @@ namespace CppSharp @@ -99,7 +99,7 @@ namespace CppSharp
/// <value>
/// <c>true</c> to generate class templates; otherwise, <c>false</c>.
/// </value>
public bool GenerateClassTemplates { get; set; } = false;
public bool GenerateClassTemplates { get; set; }
public bool GenerateInternalImports;
public bool GenerateSequentialLayout { get; set; }
public bool UseHeaderDirectories;

10
src/Generator/Passes/CheckIgnoredDecls.cs

@ -41,10 +41,6 @@ namespace CppSharp.Passes @@ -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 @@ -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))

4
tests/NamespacesBase/NamespacesBase.cpp

@ -32,6 +32,10 @@ HasVirtualInCore::HasVirtualInCore() @@ -32,6 +32,10 @@ HasVirtualInCore::HasVirtualInCore()
{
}
HasVirtualInCore::HasVirtualInCore(TemplateClass<HasVirtualInCore> t)
{
}
int HasVirtualInCore::virtualInCore(int parameter)
{
return 1;

1
tests/NamespacesBase/NamespacesBase.h

@ -63,6 +63,7 @@ class DLL_API HasVirtualInCore @@ -63,6 +63,7 @@ class DLL_API HasVirtualInCore
{
public:
HasVirtualInCore();
HasVirtualInCore(TemplateClass<HasVirtualInCore> t);
virtual int virtualInCore(int parameter);
};

Loading…
Cancel
Save