Browse Source

Generate valid C++ for protected ctors of pure classes

Signed-off-by: Dimitar Dobrev <dpldobrev@protonmail.com>
pull/1635/head
Dimitar Dobrev 4 years ago
parent
commit
49122e0d62
  1. 6
      src/Generator/Passes/SymbolsCodeGenerator.cs
  2. 4
      tests/CSharp/CSharp.cpp
  3. 7
      tests/CSharp/CSharp.h

6
src/Generator/Passes/SymbolsCodeGenerator.cs

@ -157,12 +157,12 @@ namespace CppSharp.Passes @@ -157,12 +157,12 @@ namespace CppSharp.Passes
Write("extern \"C\" ");
Write($"{GetExporting()}void {wrapper}({signature}) ");
if (method.Access == AccessSpecifier.Protected ||
((Class) method.Namespace).IsAbstract)
bool isAbstract = ((Class) method.Namespace).IsAbstract;
if (method.Access == AccessSpecifier.Protected || isAbstract)
{
Write($@"{{ ::new ({Helpers.InstanceField}) {
wrapper}{method.Namespace.Name}({@params}); }}");
WriteLine(method.Access == AccessSpecifier.Protected ? " };" : string.Empty);
WriteLine(!isAbstract ? " };" : string.Empty);
}
else
{

4
tests/CSharp/CSharp.cpp

@ -832,10 +832,6 @@ int MethodsWithDefaultValues::getA() @@ -832,10 +832,6 @@ int MethodsWithDefaultValues::getA()
return m_foo.A;
}
HasPureVirtualWithDefaultArg::~HasPureVirtualWithDefaultArg()
{
}
HasOverridesWithChangedAccessBase::HasOverridesWithChangedAccessBase()
{
}

7
tests/CSharp/CSharp.h

@ -489,11 +489,14 @@ private: @@ -489,11 +489,14 @@ private:
Foo m_foo;
};
class DLL_API HasPureVirtualWithDefaultArg
// don't export this one or the bug doesn't reproduce on windows
class HasPureVirtualWithDefaultArg
{
public:
virtual ~HasPureVirtualWithDefaultArg();
virtual ~HasPureVirtualWithDefaultArg() {}
virtual void pureVirtualWithDefaultArg(Foo* foo = nullptr) = 0;
protected:
HasPureVirtualWithDefaultArg() {}
};
class DLL_API HasOverridesWithChangedAccessBase

Loading…
Cancel
Save