Skip to content

Commit 3ca1579

Browse files
committed
Fixed the generated C# for pure virtual functions with default arguments.
Signed-off-by: Dimitar Dobrev <[email protected]>
1 parent aef1acb commit 3ca1579

File tree

3 files changed

+10
-3
lines changed

3 files changed

+10
-3
lines changed

src/Generator/Driver.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -251,12 +251,12 @@ public void SetupPasses(ILibrary library)
251251

252252
if (Options.IsCSharpGenerator)
253253
{
254-
TranslationUnitPasses.AddPass(new GenerateAbstractImplementationsPass());
255254
if (Options.GenerateDefaultValuesForArguments)
256255
{
257256
TranslationUnitPasses.AddPass(new FixDefaultParamValuesOfOverridesPass());
258257
TranslationUnitPasses.AddPass(new HandleDefaultParamValuesPass());
259258
}
259+
TranslationUnitPasses.AddPass(new GenerateAbstractImplementationsPass());
260260
TranslationUnitPasses.AddPass(new MultipleInheritancePass());
261261
}
262262
TranslationUnitPasses.AddPass(new DelegatesPass());

src/Generator/Passes/GenerateAbstractImplementationsPass.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,8 @@ private static Class AddInternalImplementation(Class @class)
6464
Namespace = internalImpl,
6565
OriginalFunction = abstractMethod,
6666
IsPure = false,
67-
SynthKind = FunctionSynthKind.AbstractImplCall
67+
SynthKind = abstractMethod.SynthKind == FunctionSynthKind.DefaultValueOverload ?
68+
FunctionSynthKind.DefaultValueOverload : FunctionSynthKind.AbstractImplCall
6869
};
6970
impl.OverriddenMethods.Clear();
7071
impl.OverriddenMethods.Add(abstractMethod);
@@ -120,7 +121,7 @@ private static IEnumerable<Method> GetRelevantAbstractMethods(Class @class)
120121
}
121122
else
122123
{
123-
abstractMethods.RemoveAt(i);
124+
abstractMethods.RemoveAt(i);
124125
}
125126
}
126127
}

tests/CSharp/CSharp.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -444,6 +444,12 @@ class DLL_API MethodsWithDefaultValues : public Quux
444444
Foo m_foo;
445445
};
446446

447+
class DLL_API HasPureVirtualWithDefaultArg
448+
{
449+
public:
450+
virtual void pureVirtualWithDefaultArg(Foo* foo = nullptr) = 0;
451+
};
452+
447453
class DLL_API HasOverridesWithChangedAccessBase
448454
{
449455
public:

0 commit comments

Comments
 (0)