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
if (Options.IsCSharpGenerator) if (Options.IsCSharpGenerator)
{ {
TranslationUnitPasses.AddPass(new GenerateAbstractImplementationsPass());
if (Options.GenerateDefaultValuesForArguments) if (Options.GenerateDefaultValuesForArguments)
{ {
TranslationUnitPasses.AddPass(new FixDefaultParamValuesOfOverridesPass()); TranslationUnitPasses.AddPass(new FixDefaultParamValuesOfOverridesPass());
TranslationUnitPasses.AddPass(new HandleDefaultParamValuesPass()); TranslationUnitPasses.AddPass(new HandleDefaultParamValuesPass());
} }
TranslationUnitPasses.AddPass(new GenerateAbstractImplementationsPass());
TranslationUnitPasses.AddPass(new MultipleInheritancePass()); TranslationUnitPasses.AddPass(new MultipleInheritancePass());
} }
TranslationUnitPasses.AddPass(new DelegatesPass()); TranslationUnitPasses.AddPass(new DelegatesPass());

5
src/Generator/Passes/GenerateAbstractImplementationsPass.cs

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

6
tests/CSharp/CSharp.h

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

Loading…
Cancel
Save