Browse Source

Fixed the generated C# for pure virtual functions with default arguments.

Signed-off-by: Dimitar Dobrev <dpldobrev@protonmail.com>
pull/1139/head
Dimitar Dobrev 7 years ago
parent
commit
3ca1579d02
  1. 2
      src/Generator/Driver.cs
  2. 5
      src/Generator/Passes/GenerateAbstractImplementationsPass.cs
  3. 6
      tests/CSharp/CSharp.h

2
src/Generator/Driver.cs

@ -251,12 +251,12 @@ namespace CppSharp @@ -251,12 +251,12 @@ namespace CppSharp
if (Options.IsCSharpGenerator)
{
TranslationUnitPasses.AddPass(new GenerateAbstractImplementationsPass());
if (Options.GenerateDefaultValuesForArguments)
{
TranslationUnitPasses.AddPass(new FixDefaultParamValuesOfOverridesPass());
TranslationUnitPasses.AddPass(new HandleDefaultParamValuesPass());
}
TranslationUnitPasses.AddPass(new GenerateAbstractImplementationsPass());
TranslationUnitPasses.AddPass(new MultipleInheritancePass());
}
TranslationUnitPasses.AddPass(new DelegatesPass());

5
src/Generator/Passes/GenerateAbstractImplementationsPass.cs

@ -64,7 +64,8 @@ namespace CppSharp.Passes @@ -64,7 +64,8 @@ namespace CppSharp.Passes
Namespace = internalImpl,
OriginalFunction = abstractMethod,
IsPure = false,
SynthKind = FunctionSynthKind.AbstractImplCall
SynthKind = abstractMethod.SynthKind == FunctionSynthKind.DefaultValueOverload ?
FunctionSynthKind.DefaultValueOverload : FunctionSynthKind.AbstractImplCall
};
impl.OverriddenMethods.Clear();
impl.OverriddenMethods.Add(abstractMethod);
@ -120,7 +121,7 @@ namespace CppSharp.Passes @@ -120,7 +121,7 @@ namespace CppSharp.Passes
}
else
{
abstractMethods.RemoveAt(i);
abstractMethods.RemoveAt(i);
}
}
}

6
tests/CSharp/CSharp.h

@ -444,6 +444,12 @@ private: @@ -444,6 +444,12 @@ private:
Foo m_foo;
};
class DLL_API HasPureVirtualWithDefaultArg
{
public:
virtual void pureVirtualWithDefaultArg(Foo* foo = nullptr) = 0;
};
class DLL_API HasOverridesWithChangedAccessBase
{
public:

Loading…
Cancel
Save