Skip to content

Commit de02c1a

Browse files
committed
Fixed the implementation of secondary bases with overloads caused by default values.
Signed-off-by: Dimitar Dobrev <[email protected]>
1 parent b7187c8 commit de02c1a

File tree

4 files changed

+17
-3
lines changed

4 files changed

+17
-3
lines changed

src/Generator/Passes/MultipleInheritancePass.cs

+2-1
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,8 @@ private static void ImplementInterfaceMethods(Class @class, Class @interface)
196196
foreach (var method in @interface.Methods)
197197
{
198198
if (@class.Methods.Any(m => m.OriginalName == method.OriginalName &&
199-
m.Parameters.SequenceEqual(method.Parameters, parameterTypeComparer)))
199+
m.Parameters.SequenceEqual(method.Parameters.Where(p => !p.Ignore),
200+
parameterTypeComparer)))
200201
continue;
201202
var impl = new Method(method)
202203
{

tests/CSharpTemp/CSharpTemp.Tests.cs

+8
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,14 @@ public void TestUncompilableCode()
2222
new InheritanceBuffer().Dispose();
2323
new HasProtectedVirtual().Dispose();
2424
new Proprietor(5).Dispose();
25+
using (var testOverrideFromSecondaryBase = new TestOverrideFromSecondaryBase())
26+
{
27+
testOverrideFromSecondaryBase.function();
28+
var ok = false;
29+
testOverrideFromSecondaryBase.function(ref ok);
30+
var property = testOverrideFromSecondaryBase.property;
31+
testOverrideFromSecondaryBase.VirtualMember();
32+
}
2533
using (var foo = new Foo())
2634
{
2735
var isNoParams = foo.IsNoParams;

tests/CSharpTemp/CSharpTemp.cpp

+5-1
Original file line numberDiff line numberDiff line change
@@ -585,7 +585,7 @@ void SecondaryBase::setProperty(int value)
585585
{
586586
}
587587

588-
void SecondaryBase::function()
588+
void SecondaryBase::function(bool* ok)
589589
{
590590
}
591591

@@ -602,6 +602,10 @@ void SecondaryBase::setProtectedProperty(int value)
602602
{
603603
}
604604

605+
TestOverrideFromSecondaryBase::TestOverrideFromSecondaryBase()
606+
{
607+
}
608+
605609
void TestOverrideFromSecondaryBase::VirtualMember()
606610
{
607611
}

tests/CSharpTemp/CSharpTemp.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -573,7 +573,7 @@ class DLL_API SecondaryBase
573573
virtual void VirtualMember();
574574
int property();
575575
void setProperty(int value);
576-
void function();
576+
void function(bool* ok = 0);
577577
protected:
578578
void protectedFunction();
579579
int protectedProperty();
@@ -583,6 +583,7 @@ class DLL_API SecondaryBase
583583
class DLL_API TestOverrideFromSecondaryBase : public Foo, public SecondaryBase
584584
{
585585
public:
586+
TestOverrideFromSecondaryBase();
586587
void VirtualMember();
587588
void setProperty(int value);
588589
};

0 commit comments

Comments
 (0)