Browse Source

Fixed the generated C# when an abstract function in a secondary base has a non-primitive default argument.

Signed-off-by: Dimitar Dobrev <dpldobrev@protonmail.com>
pull/696/head
Dimitar Dobrev 9 years ago
parent
commit
6245f9e105
  1. 3
      src/Generator/Passes/MultipleInheritancePass.cs
  2. 4
      tests/CSharp/CSharp.Tests.cs
  3. 20
      tests/CSharp/CSharp.cpp
  4. 16
      tests/CSharp/CSharp.h

3
src/Generator/Passes/MultipleInheritancePass.cs

@ -165,7 +165,8 @@ namespace CppSharp.Passes @@ -165,7 +165,8 @@ namespace CppSharp.Passes
foreach (var method in @interface.Methods)
{
if (@class.Methods.Any(m => m.OriginalName == method.OriginalName &&
m.Parameters.SequenceEqual(method.Parameters.Where(p => !p.Ignore),
m.Parameters.Where(p => !p.Ignore).SequenceEqual(
method.Parameters.Where(p => !p.Ignore),
ParameterTypeComparer.Instance)))
continue;
var impl = new Method(method)

4
tests/CSharp/CSharp.Tests.cs

@ -58,6 +58,10 @@ public unsafe class CSharpTests : GeneratorTestFixture @@ -58,6 +58,10 @@ public unsafe class CSharpTests : GeneratorTestFixture
{
int i = typeMappedWithOperator | 5;
}
using (var hasSecondaryBaseWithAbstractWithDefaultArg = new HasSecondaryBaseWithAbstractWithDefaultArg())
{
hasSecondaryBaseWithAbstractWithDefaultArg.Abstract();
}
}
[Test]

20
tests/CSharp/CSharp.cpp

@ -1141,3 +1141,23 @@ TestString::TestString() : unicodeConst(L"ქართული ენა"), uni @@ -1141,3 +1141,23 @@ TestString::TestString() : unicodeConst(L"ქართული ენა"), uni
TestString::~TestString()
{
}
SecondaryBaseWithAbstractWithDefaultArg::SecondaryBaseWithAbstractWithDefaultArg()
{
}
SecondaryBaseWithAbstractWithDefaultArg::~SecondaryBaseWithAbstractWithDefaultArg()
{
}
HasSecondaryBaseWithAbstractWithDefaultArg::HasSecondaryBaseWithAbstractWithDefaultArg()
{
}
HasSecondaryBaseWithAbstractWithDefaultArg::~HasSecondaryBaseWithAbstractWithDefaultArg()
{
}
void HasSecondaryBaseWithAbstractWithDefaultArg::abstract(const Foo& foo)
{
}

16
tests/CSharp/CSharp.h

@ -1030,3 +1030,19 @@ void decltypeFunctionPointer(); @@ -1030,3 +1030,19 @@ void decltypeFunctionPointer();
using funcPtr = decltype(&decltypeFunctionPointer);
void usesDecltypeFunctionPointer(funcPtr func);
class DLL_API SecondaryBaseWithAbstractWithDefaultArg
{
public:
SecondaryBaseWithAbstractWithDefaultArg();
~SecondaryBaseWithAbstractWithDefaultArg();
virtual void abstract(const Foo& foo = Foo()) = 0;
};
class DLL_API HasSecondaryBaseWithAbstractWithDefaultArg : public Foo, public SecondaryBaseWithAbstractWithDefaultArg
{
public:
HasSecondaryBaseWithAbstractWithDefaultArg();
~HasSecondaryBaseWithAbstractWithDefaultArg();
virtual void abstract(const Foo& foo = Foo());
};

Loading…
Cancel
Save