Browse Source

Ensured default values, if any, of parameters of overrides, are generated.

Signed-off-by: Dimitar Dobrev <dpldobrev@yahoo.com>

Conflicts:
	src/Generator/Driver.cs
	tests/Basic/Basic.cpp
	tests/Basic/Basic.h
pull/307/head
Dimitar Dobrev 11 years ago
parent
commit
f16a5ff6e0
  1. 3
      src/Generator/Driver.cs
  2. 20
      src/Generator/Passes/FixDefaultParamValuesOfOverridesPass.cs
  3. 6
      tests/CSharpTemp/CSharpTemp.Tests.cs
  4. 8
      tests/CSharpTemp/CSharpTemp.cpp
  5. 12
      tests/CSharpTemp/CSharpTemp.h

3
src/Generator/Driver.cs

@ -241,7 +241,10 @@ namespace CppSharp @@ -241,7 +241,10 @@ namespace CppSharp
TranslationUnitPasses.AddPass(new CheckFlagEnumsPass());
TranslationUnitPasses.AddPass(new CheckDuplicatedNamesPass());
if (Options.IsCSharpGenerator && Options.GenerateDefaultValuesForArguments)
{
TranslationUnitPasses.AddPass(new HandleDefaultParamValuesPass());
TranslationUnitPasses.AddPass(new FixDefaultParamValuesOfOverridesPass());
}
if (Options.GenerateAbstractImpls)
TranslationUnitPasses.AddPass(new GenerateAbstractImplementationsPass());

20
src/Generator/Passes/FixDefaultParamValuesOfOverridesPass.cs

@ -0,0 +1,20 @@ @@ -0,0 +1,20 @@
using CppSharp.AST;
namespace CppSharp.Passes
{
public class FixDefaultParamValuesOfOverridesPass : TranslationUnitPass
{
public override bool VisitMethodDecl(Method method)
{
if (method.IsOverride && !method.IsSynthetized)
{
Method rootBaseMethod = ((Class) method.Namespace).GetRootBaseMethod(method);
for (int i = 0; i < method.Parameters.Count; i++)
{
method.Parameters[i].DefaultArgument = rootBaseMethod.Parameters[i].DefaultArgument;
}
}
return base.VisitMethodDecl(method);
}
}
}

6
tests/CSharpTemp/CSharpTemp.Tests.cs

@ -144,4 +144,10 @@ public class CSharpTempTests : GeneratorTestFixture @@ -144,4 +144,10 @@ public class CSharpTempTests : GeneratorTestFixture
{
AnotherUnit.FunctionInAnotherUnit();
}
[Test]
public void TestPrivateOverride()
{
new HasPrivateOverride().PrivateOverride();
}
}

8
tests/CSharpTemp/CSharpTemp.cpp

@ -234,3 +234,11 @@ void MethodsWithDefaultValues::DefaultRefTypeBeforeAndAfterOthers(int i, Foo foo @@ -234,3 +234,11 @@ void MethodsWithDefaultValues::DefaultRefTypeBeforeAndAfterOthers(int i, Foo foo
void MethodsWithDefaultValues::DefaultIntAssignedAnEnum(int i)
{
}
void HasPrivateOverrideBase::privateOverride(int i)
{
}
void HasPrivateOverride::privateOverride(int i)
{
}

12
tests/CSharpTemp/CSharpTemp.h

@ -186,3 +186,15 @@ public: @@ -186,3 +186,15 @@ public:
void DefaultRefTypeBeforeAndAfterOthers(int i = 5, Foo foo = Foo(), Bar::Items item = Bar::Item2, Baz baz = Baz());
void DefaultIntAssignedAnEnum(int i = Bar::Item1);
};
class DLL_API HasPrivateOverrideBase
{
public:
virtual void privateOverride(int i = 5);
};
class DLL_API HasPrivateOverride : public HasPrivateOverrideBase
{
private:
virtual void privateOverride(int i);
};

Loading…
Cancel
Save