Browse Source

Fixed a regression causing objects to be missing at virtual calls.

Signed-off-by: Dimitar Dobrev <dpldobrev@protonmail.com>
pull/818/head
Dimitar Dobrev 8 years ago
parent
commit
2352681f5b
  1. 6
      src/Generator/Generators/CSharp/CSharpSources.cs
  2. 4
      tests/CSharp/CSharp.Tests.cs
  3. 12
      tests/CSharp/CSharp.cpp
  4. 6
      tests/CSharp/CSharp.h

6
src/Generator/Generators/CSharp/CSharpSources.cs

@ -1607,10 +1607,8 @@ namespace CppSharp.Generators.CSharp @@ -1607,10 +1607,8 @@ namespace CppSharp.Generators.CSharp
return;
}
var typeFullName = TypePrinter.VisitClassDecl(@class);
if (!string.IsNullOrEmpty(@class.TranslationUnit.Module.OutputNamespace))
typeFullName = string.Format("{0}.{1}",
@class.TranslationUnit.Module.OutputNamespace, typeFullName);
WriteLine("SetupVTables(GetType().FullName == \"{0}\");", typeFullName);
WriteLine($@"SetupVTables(GetType().FullName == ""{
typeFullName.Type.Replace("global::", string.Empty)}"");");
}
}

4
tests/CSharp/CSharp.Tests.cs

@ -609,7 +609,7 @@ public unsafe class CSharpTests : GeneratorTestFixture @@ -609,7 +609,7 @@ public unsafe class CSharpTests : GeneratorTestFixture
}
}
[Test, Ignore("For no reason this doesn't work at all, and I am tired of bugs. I fixed the compilation of this thing, I have no intention of fixing it at run-time too.")]
[Test]
public void TestUnicode()
{
using (var testString = new TestString())
@ -650,7 +650,7 @@ public unsafe class CSharpTests : GeneratorTestFixture @@ -650,7 +650,7 @@ public unsafe class CSharpTests : GeneratorTestFixture
using (var missingObjectOnVirtualCall = new MissingObjectOnVirtualCall())
{
hasMissingObjectOnVirtualCall.SetMissingObjectOnVirtualCall(missingObjectOnVirtualCall);
hasMissingObjectOnVirtualCall.MakeMissingObjectOnVirtualCall();
Assert.That(hasMissingObjectOnVirtualCall.MakeMissingObjectOnVirtualCall(), Is.EqualTo(15));
}
}
}

12
tests/CSharp/CSharp.cpp

@ -1,4 +1,4 @@ @@ -1,4 +1,4 @@
#include "CSharp.h"
#include "CSharp.h"
Foo::Foo(const char* name)
{
@ -1205,25 +1205,27 @@ MissingObjectOnVirtualCallSecondaryBase::MissingObjectOnVirtualCallSecondaryBase @@ -1205,25 +1205,27 @@ MissingObjectOnVirtualCallSecondaryBase::MissingObjectOnVirtualCallSecondaryBase
{
}
void MissingObjectOnVirtualCallSecondaryBase::f()
int MissingObjectOnVirtualCallSecondaryBase::f()
{
return 5;
}
MissingObjectOnVirtualCall::MissingObjectOnVirtualCall()
{
}
void MissingObjectOnVirtualCall::f()
int MissingObjectOnVirtualCall::f()
{
return 15;
}
HasMissingObjectOnVirtualCall::HasMissingObjectOnVirtualCall()
{
}
void HasMissingObjectOnVirtualCall::makeMissingObjectOnVirtualCall()
int HasMissingObjectOnVirtualCall::makeMissingObjectOnVirtualCall()
{
stackOverflowOnVirtualCall->f();
return stackOverflowOnVirtualCall->f();
}
void HasMissingObjectOnVirtualCall::setMissingObjectOnVirtualCall(MissingObjectOnVirtualCall* value)

6
tests/CSharp/CSharp.h

@ -1075,21 +1075,21 @@ class DLL_API MissingObjectOnVirtualCallSecondaryBase @@ -1075,21 +1075,21 @@ class DLL_API MissingObjectOnVirtualCallSecondaryBase
{
public:
MissingObjectOnVirtualCallSecondaryBase();
virtual void f();
virtual int f();
};
class DLL_API MissingObjectOnVirtualCall : public HasVirtualDtor1, public MissingObjectOnVirtualCallSecondaryBase
{
public:
MissingObjectOnVirtualCall();
void f();
int f();
};
class DLL_API HasMissingObjectOnVirtualCall
{
public:
HasMissingObjectOnVirtualCall();
void makeMissingObjectOnVirtualCall();
int makeMissingObjectOnVirtualCall();
void setMissingObjectOnVirtualCall(MissingObjectOnVirtualCall* value);
private:
MissingObjectOnVirtualCall* stackOverflowOnVirtualCall;

Loading…
Cancel
Save