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
{ {
TranslationUnitPasses.AddPass(new GenerateSymbolsPass()); TranslationUnitPasses.AddPass(new GenerateSymbolsPass());
TranslationUnitPasses.AddPass(new TrimSpecializationsPass()); TranslationUnitPasses.AddPass(new TrimSpecializationsPass());
TranslationUnitPasses.AddPass(new CheckIgnoredDeclsPass());
} }
library.SetupPasses(this); library.SetupPasses(this);

8
src/Generator/Passes/ConstructorToConversionOperatorPass.cs

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

3
tests/NamespacesDerived/NamespacesDerived.cpp

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

4
tests/NamespacesDerived/NamespacesDerived.h

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

Loading…
Cancel
Save