Browse Source

Fixed the generated C# when a constructor has a default parameter with type an external specialisation.

Signed-off-by: Dimitar Dobrev <dpldobrev@protonmail.com>
pull/1033/head
Dimitar Dobrev 8 years ago
parent
commit
c264690e90
  1. 1
      src/Generator/Driver.cs
  2. 8
      src/Generator/Passes/ConstructorToConversionOperatorPass.cs
  3. 3
      tests/NamespacesDerived/NamespacesDerived.cpp
  4. 4
      tests/NamespacesDerived/NamespacesDerived.h

1
src/Generator/Driver.cs

@ -224,6 +224,7 @@ namespace CppSharp @@ -224,6 +224,7 @@ namespace CppSharp
{
TranslationUnitPasses.AddPass(new GenerateSymbolsPass());
TranslationUnitPasses.AddPass(new TrimSpecializationsPass());
TranslationUnitPasses.AddPass(new CheckIgnoredDeclsPass());
}
library.SetupPasses(this);

8
src/Generator/Passes/ConstructorToConversionOperatorPass.cs

@ -12,10 +12,10 @@ namespace CppSharp.Passes @@ -12,10 +12,10 @@ namespace CppSharp.Passes
{
public override bool VisitMethodDecl(Method method)
{
if (AlreadyVisited(method) || !method.IsGenerated || !method.IsConstructor
|| method.IsCopyConstructor
if (AlreadyVisited(method) || !method.IsGenerated || !method.IsConstructor ||
method.IsCopyConstructor ||
// conversion operators can only be public
|| method.Access != AccessSpecifier.Public)
method.Access != AccessSpecifier.Public)
return false;
var @params = method.Parameters.Where(p => p.Kind == ParameterKind.Regular).ToList();
@ -29,7 +29,7 @@ namespace CppSharp.Passes @@ -29,7 +29,7 @@ namespace CppSharp.Passes
(p.DefaultArgument.Declaration == null ||
p.DefaultArgument.Declaration.Ignore)));
if (nonDefaultParams > 1)
return false;
return false;
}
else
{

3
tests/NamespacesDerived/NamespacesDerived.cpp

@ -62,7 +62,8 @@ Abstract* Derived2::getAbstract() @@ -62,7 +62,8 @@ Abstract* Derived2::getAbstract()
return 0;
}
DerivedFromExternalSpecialization::DerivedFromExternalSpecialization()
DerivedFromExternalSpecialization::DerivedFromExternalSpecialization(int i,
TemplateWithIndependentFields<HasVirtualInDependency> defaultExternalSpecialization)
{
}

4
tests/NamespacesDerived/NamespacesDerived.h

@ -74,7 +74,9 @@ public: @@ -74,7 +74,9 @@ public:
class DLL_API DerivedFromExternalSpecialization : public TemplateWithIndependentFields<Derived>
{
public:
DerivedFromExternalSpecialization();
DerivedFromExternalSpecialization(int i,
TemplateWithIndependentFields<HasVirtualInDependency> defaultExternalSpecialization =
TemplateWithIndependentFields<HasVirtualInDependency>());
~DerivedFromExternalSpecialization();
TemplateWithIndependentFields<Base3> returnExternalSpecialization();
};

Loading…
Cancel
Save