Browse Source

Fixed the generated C# when a base class is an external specialisation.

Signed-off-by: Dimitar Dobrev <dpldobrev@protonmail.com>
pull/1033/head
Dimitar Dobrev 8 years ago
parent
commit
fbd76adcb9
  1. 6
      src/Generator/Passes/TrimSpecializationsPass.cs
  2. 7
      tests/NamespacesBase/NamespacesBase.h
  3. 8
      tests/NamespacesDerived/NamespacesDerived.cpp
  4. 1
      tests/NamespacesDerived/NamespacesDerived.cs
  5. 7
      tests/NamespacesDerived/NamespacesDerived.h

6
src/Generator/Passes/TrimSpecializationsPass.cs

@ -190,7 +190,11 @@ namespace CppSharp.Passes
{ {
var specialization = @base.Class as ClassTemplateSpecialization; var specialization = @base.Class as ClassTemplateSpecialization;
if (specialization != null) if (specialization != null)
AddSpecialization(specialization); {
if (!ASTUtils.CheckTypeForSpecialization(@base.Type, @class,
AddSpecialization, Context.TypeMaps))
CheckForInternalSpecialization(@class, @base.Type);
}
CheckBasesForSpecialization(@base.Class); CheckBasesForSpecialization(@base.Class);
} }
} }

7
tests/NamespacesBase/NamespacesBase.h

@ -59,6 +59,13 @@ class TemplateClass
T t; T t;
}; };
template <typename T>
class TemplateWithIndependentFields
{
public:
void useDependentPointer(const T* t);
};
class DLL_API HasVirtualInCore class DLL_API HasVirtualInCore
{ {
public: public:

8
tests/NamespacesDerived/NamespacesDerived.cpp

@ -62,6 +62,14 @@ Abstract* Derived2::getAbstract()
return 0; return 0;
} }
DerivedFromExternalSpecialization::DerivedFromExternalSpecialization()
{
}
DerivedFromExternalSpecialization::~DerivedFromExternalSpecialization()
{
}
HasVirtualInDependency::HasVirtualInDependency() HasVirtualInDependency::HasVirtualInDependency()
{ {
} }

1
tests/NamespacesDerived/NamespacesDerived.cs

@ -16,6 +16,7 @@ namespace CppSharp.Tests
{ {
base.Setup(driver); base.Setup(driver);
driver.Options.GenerateDefaultValuesForArguments = true; driver.Options.GenerateDefaultValuesForArguments = true;
driver.Options.GenerateClassTemplates = true;
driver.Options.Modules[1].IncludeDirs.Add(GetTestsDirectory("NamespacesDerived")); driver.Options.Modules[1].IncludeDirs.Add(GetTestsDirectory("NamespacesDerived"));
var @base = "NamespacesBase"; var @base = "NamespacesBase";

7
tests/NamespacesDerived/NamespacesDerived.h

@ -71,6 +71,13 @@ public:
int callManagedOverride(); int callManagedOverride();
}; };
class DLL_API DerivedFromExternalSpecialization : public TemplateWithIndependentFields<Derived>
{
public:
DerivedFromExternalSpecialization();
~DerivedFromExternalSpecialization();
};
class DLL_API DerivedFromSecondaryBaseInDependency : public Derived, public SecondaryBase class DLL_API DerivedFromSecondaryBaseInDependency : public Derived, public SecondaryBase
{ {
public: public:

Loading…
Cancel
Save