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
Write("extern \"C\" "); Write("extern \"C\" ");
Write($"{GetExporting()}void {wrapper}({signature}) "); Write($"{GetExporting()}void {wrapper}({signature}) ");
if (method.Access == AccessSpecifier.Protected || bool isAbstract = ((Class) method.Namespace).IsAbstract;
((Class) method.Namespace).IsAbstract) if (method.Access == AccessSpecifier.Protected || isAbstract)
{ {
Write($@"{{ ::new ({Helpers.InstanceField}) { Write($@"{{ ::new ({Helpers.InstanceField}) {
wrapper}{method.Namespace.Name}({@params}); }}"); wrapper}{method.Namespace.Name}({@params}); }}");
WriteLine(method.Access == AccessSpecifier.Protected ? " };" : string.Empty); WriteLine(!isAbstract ? " };" : string.Empty);
} }
else else
{ {

4
tests/CSharp/CSharp.cpp

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

7
tests/CSharp/CSharp.h

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

Loading…
Cancel
Save