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
Size = classLayout.Size; Size = classLayout.Size;
DataSize = classLayout.DataSize; DataSize = classLayout.DataSize;
VFTables.AddRange(classLayout.VFTables); VFTables.AddRange(classLayout.VFTables);
Layout = new VTableLayout(); if (classLayout.Layout != null)
Layout.Components.AddRange(classLayout.Layout.Components); {
Layout = new VTableLayout();
Layout.Components.AddRange(classLayout.Layout.Components);
}
} }
/// <summary> /// <summary>

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

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

8
tests/Basic/Basic.Tests.cs

@ -85,5 +85,13 @@ public class BasicTests
Foo2 result = foo2 << 3; Foo2 result = foo2 << 3;
Assert.That(result.C, Is.EqualTo(16)); 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()
return Bar(); return Bar();
} }
int ImplementAbstractFoo::pureFunction() int ImplementsAbstractFoo::pureFunction()
{ {
return 5; return 5;
} }
const AbstractFoo& ReturnsAbstractFoo::getFoo()
{
return i;
}
void DefaultParameters::Foo(int a, int b) void DefaultParameters::Foo(int a, int b)
{ {
} }

11
tests/Basic/Basic.h

@ -86,12 +86,21 @@ public:
virtual int pureFunction() = 0; virtual int pureFunction() = 0;
}; };
class DLL_API ImplementAbstractFoo : public AbstractFoo class DLL_API ImplementsAbstractFoo : public AbstractFoo
{ {
public: public:
virtual int pureFunction(); 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 &);
DLL_API Bar operator+(const Bar &, const Bar &); DLL_API Bar operator+(const Bar &, const Bar &);

Loading…
Cancel
Save