From d2e01b1eda32efe2ffb3c93a91fbec34cd51e2b6 Mon Sep 17 00:00:00 2001 From: Dimitar Dobrev Date: Mon, 6 Oct 2014 00:24:13 +0300 Subject: [PATCH] Fixed the generation of copy ctors when mutiple inheritance is involved. Signed-off-by: Dimitar Dobrev --- src/Generator/AST/Utils.cs | 13 ++++++++----- tests/CSharpTemp/CSharpTemp.Tests.cs | 15 +++++++++++++++ 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/src/Generator/AST/Utils.cs b/src/Generator/AST/Utils.cs index cabd7f36..94880ab7 100644 --- a/src/Generator/AST/Utils.cs +++ b/src/Generator/AST/Utils.cs @@ -49,11 +49,14 @@ namespace CppSharp.AST while (baseClass != null && baseClass.HasBaseClass) { baseClass = baseClass.BaseClass; - var copyConstructor = baseClass.Methods.FirstOrDefault(m => m.IsCopyConstructor); - if (copyConstructor == null - || copyConstructor.Access == AccessSpecifier.Private - || !copyConstructor.IsDeclared) - return true; + if (!baseClass.IsInterface) + { + var copyConstructor = baseClass.Methods.FirstOrDefault(m => m.IsCopyConstructor); + if (copyConstructor == null + || copyConstructor.Access == AccessSpecifier.Private + || !copyConstructor.IsDeclared) + return true; + } } } diff --git a/tests/CSharpTemp/CSharpTemp.Tests.cs b/tests/CSharpTemp/CSharpTemp.Tests.cs index d818affb..788f4f48 100644 --- a/tests/CSharpTemp/CSharpTemp.Tests.cs +++ b/tests/CSharpTemp/CSharpTemp.Tests.cs @@ -156,4 +156,19 @@ public class CSharpTempTests : GeneratorTestFixture { Assert.AreEqual(TestFlag.Flag2, new ComplexType().ReturnsQFlags); } + + [Test] + public void TestCopyCtor() + { + Qux q1 = new Qux(); + for (int i = 0; i < q1.Array.Length; i++) + { + q1.Array[i] = i; + } + Qux q2 = new Qux(q1); + for (int i = 0; i < q2.Array.Length; i++) + { + Assert.AreEqual(q1.Array[i], q2.Array[i]); + } + } } \ No newline at end of file