Browse Source

Merge pull request #332 from ddobrev/master

Fixed the generation of copy ctors when mutiple inheritance is involved
pull/333/head
João Matos 11 years ago
parent
commit
92c85ac58a
  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
while (baseClass != null && baseClass.HasBaseClass) while (baseClass != null && baseClass.HasBaseClass)
{ {
baseClass = baseClass.BaseClass; baseClass = baseClass.BaseClass;
var copyConstructor = baseClass.Methods.FirstOrDefault(m => m.IsCopyConstructor); if (!baseClass.IsInterface)
if (copyConstructor == null {
|| copyConstructor.Access == AccessSpecifier.Private var copyConstructor = baseClass.Methods.FirstOrDefault(m => m.IsCopyConstructor);
|| !copyConstructor.IsDeclared) if (copyConstructor == null
return true; || copyConstructor.Access == AccessSpecifier.Private
|| !copyConstructor.IsDeclared)
return true;
}
} }
} }

15
tests/CSharpTemp/CSharpTemp.Tests.cs

@ -156,4 +156,19 @@ public class CSharpTempTests : GeneratorTestFixture
{ {
Assert.AreEqual(TestFlag.Flag2, new ComplexType().ReturnsQFlags); 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