From de02c1af27c5684edb05539ff337a85b59704fc3 Mon Sep 17 00:00:00 2001 From: Dimitar Dobrev Date: Tue, 11 Aug 2015 02:09:17 +0300 Subject: [PATCH] Fixed the implementation of secondary bases with overloads caused by default values. Signed-off-by: Dimitar Dobrev --- src/Generator/Passes/MultipleInheritancePass.cs | 3 ++- tests/CSharpTemp/CSharpTemp.Tests.cs | 8 ++++++++ tests/CSharpTemp/CSharpTemp.cpp | 6 +++++- tests/CSharpTemp/CSharpTemp.h | 3 ++- 4 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/Generator/Passes/MultipleInheritancePass.cs b/src/Generator/Passes/MultipleInheritancePass.cs index c2ece93d..240ec819 100644 --- a/src/Generator/Passes/MultipleInheritancePass.cs +++ b/src/Generator/Passes/MultipleInheritancePass.cs @@ -196,7 +196,8 @@ namespace CppSharp.Passes foreach (var method in @interface.Methods) { if (@class.Methods.Any(m => m.OriginalName == method.OriginalName && - m.Parameters.SequenceEqual(method.Parameters, parameterTypeComparer))) + m.Parameters.SequenceEqual(method.Parameters.Where(p => !p.Ignore), + parameterTypeComparer))) continue; var impl = new Method(method) { diff --git a/tests/CSharpTemp/CSharpTemp.Tests.cs b/tests/CSharpTemp/CSharpTemp.Tests.cs index da8a0ce9..1df0d8ca 100644 --- a/tests/CSharpTemp/CSharpTemp.Tests.cs +++ b/tests/CSharpTemp/CSharpTemp.Tests.cs @@ -22,6 +22,14 @@ public class CSharpTempTests : GeneratorTestFixture new InheritanceBuffer().Dispose(); new HasProtectedVirtual().Dispose(); new Proprietor(5).Dispose(); + using (var testOverrideFromSecondaryBase = new TestOverrideFromSecondaryBase()) + { + testOverrideFromSecondaryBase.function(); + var ok = false; + testOverrideFromSecondaryBase.function(ref ok); + var property = testOverrideFromSecondaryBase.property; + testOverrideFromSecondaryBase.VirtualMember(); + } using (var foo = new Foo()) { var isNoParams = foo.IsNoParams; diff --git a/tests/CSharpTemp/CSharpTemp.cpp b/tests/CSharpTemp/CSharpTemp.cpp index 855ece0b..e7521c08 100644 --- a/tests/CSharpTemp/CSharpTemp.cpp +++ b/tests/CSharpTemp/CSharpTemp.cpp @@ -585,7 +585,7 @@ void SecondaryBase::setProperty(int value) { } -void SecondaryBase::function() +void SecondaryBase::function(bool* ok) { } @@ -602,6 +602,10 @@ void SecondaryBase::setProtectedProperty(int value) { } +TestOverrideFromSecondaryBase::TestOverrideFromSecondaryBase() +{ +} + void TestOverrideFromSecondaryBase::VirtualMember() { } diff --git a/tests/CSharpTemp/CSharpTemp.h b/tests/CSharpTemp/CSharpTemp.h index 263fb105..f07cf11d 100644 --- a/tests/CSharpTemp/CSharpTemp.h +++ b/tests/CSharpTemp/CSharpTemp.h @@ -573,7 +573,7 @@ public: virtual void VirtualMember(); int property(); void setProperty(int value); - void function(); + void function(bool* ok = 0); protected: void protectedFunction(); int protectedProperty(); @@ -583,6 +583,7 @@ protected: class DLL_API TestOverrideFromSecondaryBase : public Foo, public SecondaryBase { public: + TestOverrideFromSecondaryBase(); void VirtualMember(); void setProperty(int value); };