Browse Source

Fixed the generated C# when an abstract function has no default args but its overrides do.

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

11
src/Generator/Passes/FixDefaultParamValuesOfOverridesPass.cs

@ -11,10 +11,15 @@ namespace CppSharp.Passes @@ -11,10 +11,15 @@ namespace CppSharp.Passes
Method rootBaseMethod = ((Class) method.Namespace).GetBaseMethod(method);
for (int i = 0; i < method.Parameters.Count; i++)
{
if (rootBaseMethod.Parameters[i].DefaultArgument != null)
var rootBaseParameter = rootBaseMethod.Parameters[i];
var parameter = method.Parameters[i];
if (rootBaseParameter.DefaultArgument == null)
{
method.Parameters[i].DefaultArgument =
rootBaseMethod.Parameters[i].DefaultArgument.Clone();
parameter.DefaultArgument = null;
}
else
{
parameter.DefaultArgument = rootBaseParameter.DefaultArgument.Clone();
}
}
}

9
tests/CSharp/CSharp.Tests.cs

@ -44,6 +44,11 @@ public unsafe class CSharpTests : GeneratorTestFixture @@ -44,6 +44,11 @@ public unsafe class CSharpTests : GeneratorTestFixture
var isNoParams = foo.IsNoParams;
foo.SetNoParams();
foo.Width = 5;
using (var hasSecondaryBaseWithAbstractWithDefaultArg = new HasSecondaryBaseWithAbstractWithDefaultArg())
{
hasSecondaryBaseWithAbstractWithDefaultArg.Abstract();
hasSecondaryBaseWithAbstractWithDefaultArg.AbstractWithNoDefaultArg(foo);
}
}
using (var hasOverride = new HasOverrideOfHasPropertyWithDerivedType())
hasOverride.CauseRenamingError();
@ -58,10 +63,6 @@ public unsafe class CSharpTests : GeneratorTestFixture @@ -58,10 +63,6 @@ public unsafe class CSharpTests : GeneratorTestFixture
{
int i = typeMappedWithOperator | 5;
}
using (var hasSecondaryBaseWithAbstractWithDefaultArg = new HasSecondaryBaseWithAbstractWithDefaultArg())
{
hasSecondaryBaseWithAbstractWithDefaultArg.Abstract();
}
}
[Test]

12
tests/CSharp/CSharp.cpp

@ -1142,6 +1142,14 @@ TestString::~TestString() @@ -1142,6 +1142,14 @@ TestString::~TestString()
{
}
PrimaryBaseWithAbstractWithDefaultArg::PrimaryBaseWithAbstractWithDefaultArg()
{
}
PrimaryBaseWithAbstractWithDefaultArg::~PrimaryBaseWithAbstractWithDefaultArg()
{
}
SecondaryBaseWithAbstractWithDefaultArg::SecondaryBaseWithAbstractWithDefaultArg()
{
}
@ -1161,3 +1169,7 @@ HasSecondaryBaseWithAbstractWithDefaultArg::~HasSecondaryBaseWithAbstractWithDef @@ -1161,3 +1169,7 @@ HasSecondaryBaseWithAbstractWithDefaultArg::~HasSecondaryBaseWithAbstractWithDef
void HasSecondaryBaseWithAbstractWithDefaultArg::abstract(const Foo& foo)
{
}
void HasSecondaryBaseWithAbstractWithDefaultArg::abstractWithNoDefaultArg(const Foo& foo)
{
}

11
tests/CSharp/CSharp.h

@ -1031,6 +1031,14 @@ void decltypeFunctionPointer(); @@ -1031,6 +1031,14 @@ void decltypeFunctionPointer();
using funcPtr = decltype(&decltypeFunctionPointer);
void usesDecltypeFunctionPointer(funcPtr func);
class DLL_API PrimaryBaseWithAbstractWithDefaultArg
{
public:
PrimaryBaseWithAbstractWithDefaultArg();
~PrimaryBaseWithAbstractWithDefaultArg();
virtual void abstractWithNoDefaultArg(const Foo& foo) = 0;
};
class DLL_API SecondaryBaseWithAbstractWithDefaultArg
{
public:
@ -1039,10 +1047,11 @@ public: @@ -1039,10 +1047,11 @@ public:
virtual void abstract(const Foo& foo = Foo()) = 0;
};
class DLL_API HasSecondaryBaseWithAbstractWithDefaultArg : public Foo, public SecondaryBaseWithAbstractWithDefaultArg
class DLL_API HasSecondaryBaseWithAbstractWithDefaultArg : public PrimaryBaseWithAbstractWithDefaultArg, public SecondaryBaseWithAbstractWithDefaultArg
{
public:
HasSecondaryBaseWithAbstractWithDefaultArg();
~HasSecondaryBaseWithAbstractWithDefaultArg();
virtual void abstract(const Foo& foo = Foo());
virtual void abstractWithNoDefaultArg(const Foo& foo = Foo());
};

Loading…
Cancel
Save