Browse Source

Fixed a bug in MS mode and added a test.

Signed-off-by: Dimitar Dobrev <dpldobrev@yahoo.com>
pull/53/head
Dimitar Dobrev 13 years ago
parent
commit
9752096a4c
  1. 7
      src/AST/ClassLayout.cs
  2. 2
      src/Generator/Generators/CSharp/CSharpTextTemplate.cs
  3. 8
      tests/Basic/Basic.Tests.cs
  4. 7
      tests/Basic/Basic.cpp
  5. 11
      tests/Basic/Basic.h

7
src/AST/ClassLayout.cs

@ -99,8 +99,11 @@ namespace CppSharp.AST @@ -99,8 +99,11 @@ namespace CppSharp.AST
Size = classLayout.Size;
DataSize = classLayout.DataSize;
VFTables.AddRange(classLayout.VFTables);
Layout = new VTableLayout();
Layout.Components.AddRange(classLayout.Layout.Components);
if (classLayout.Layout != null)
{
Layout = new VTableLayout();
Layout.Components.AddRange(classLayout.Layout.Components);
}
}
/// <summary>

2
src/Generator/Generators/CSharp/CSharpTextTemplate.cs

@ -1566,7 +1566,7 @@ namespace CppSharp.Generators.CSharp @@ -1566,7 +1566,7 @@ namespace CppSharp.Generators.CSharp
case CppAbi.Microsoft:
i = (from table in @class.Layout.VFTables
let j = table.Layout.Components.FindIndex(m => m.Method == method)
where j > 0
where j >= 0
select j).First();
break;
default:

8
tests/Basic/Basic.Tests.cs

@ -85,5 +85,13 @@ public class BasicTests @@ -85,5 +85,13 @@ public class BasicTests
Foo2 result = foo2 << 3;
Assert.That(result.C, Is.EqualTo(16));
}
[Test]
public void TestAbstractReturnType()
{
var returnsAbstractFoo = new ReturnsAbstractFoo();
AbstractFoo abstractFoo = returnsAbstractFoo.getFoo();
Assert.AreEqual(abstractFoo.pureFunction(), 5);
}
}

7
tests/Basic/Basic.cpp

@ -121,11 +121,16 @@ Bar indirectReturn() @@ -121,11 +121,16 @@ Bar indirectReturn()
return Bar();
}
int ImplementAbstractFoo::pureFunction()
int ImplementsAbstractFoo::pureFunction()
{
return 5;
}
const AbstractFoo& ReturnsAbstractFoo::getFoo()
{
return i;
}
void DefaultParameters::Foo(int a, int b)
{
}

11
tests/Basic/Basic.h

@ -86,12 +86,21 @@ public: @@ -86,12 +86,21 @@ public:
virtual int pureFunction() = 0;
};
class DLL_API ImplementAbstractFoo : public AbstractFoo
class DLL_API ImplementsAbstractFoo : public AbstractFoo
{
public:
virtual int pureFunction();
};
class DLL_API ReturnsAbstractFoo
{
public:
const AbstractFoo& getFoo();
private:
ImplementsAbstractFoo i;
};
DLL_API Bar operator-(const Bar &);
DLL_API Bar operator+(const Bar &, const Bar &);

Loading…
Cancel
Save