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
/// <value> /// <value>
/// <c>true</c> to generate class templates; otherwise, <c>false</c>. /// <c>true</c> to generate class templates; otherwise, <c>false</c>.
/// </value> /// </value>
public bool GenerateClassTemplates { get; set; } = false; public bool GenerateClassTemplates { get; set; }
public bool GenerateInternalImports; public bool GenerateInternalImports;
public bool GenerateSequentialLayout { get; set; } public bool GenerateSequentialLayout { get; set; }
public bool UseHeaderDirectories; public bool UseHeaderDirectories;

10
src/Generator/Passes/CheckIgnoredDecls.cs

@ -41,10 +41,6 @@ namespace CppSharp.Passes
if (Options.GenerateClassTemplates) if (Options.GenerateClassTemplates)
IgnoreUnsupportedTemplates(@class); IgnoreUnsupportedTemplates(@class);
else
foreach (var specialization in @class.Specializations.Where(
s => !s.IsExplicitlyGenerated))
specialization.ExplicitlyIgnore();
return true; return true;
} }
@ -54,6 +50,12 @@ namespace CppSharp.Passes
if (!base.VisitClassTemplateSpecializationDecl(specialization)) if (!base.VisitClassTemplateSpecializationDecl(specialization))
return false; return false;
if (!Options.GenerateClassTemplates && !specialization.IsExplicitlyGenerated)
{
specialization.ExplicitlyIgnore();
return false;
}
Declaration decl = null; Declaration decl = null;
if (specialization.Arguments.Any(a => if (specialization.Arguments.Any(a =>
a.Type.Type?.TryGetDeclaration(out decl) == true)) a.Type.Type?.TryGetDeclaration(out decl) == true))

4
tests/NamespacesBase/NamespacesBase.cpp

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

1
tests/NamespacesBase/NamespacesBase.h

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

Loading…
Cancel
Save