Browse Source

Fixed the generation of copy ctors when mutiple inheritance is involved.

Signed-off-by: Dimitar Dobrev <dpldobrev@yahoo.com>
pull/332/head
Dimitar Dobrev 11 years ago
parent
commit
d2e01b1eda
  1. 13
      src/Generator/AST/Utils.cs
  2. 15
      tests/CSharpTemp/CSharpTemp.Tests.cs

13
src/Generator/AST/Utils.cs

@ -49,11 +49,14 @@ namespace CppSharp.AST @@ -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;
}
}
}

15
tests/CSharpTemp/CSharpTemp.Tests.cs

@ -156,4 +156,19 @@ public class CSharpTempTests : GeneratorTestFixture @@ -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]);
}
}
}
Loading…
Cancel
Save