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
return; return;
} }
var typeFullName = TypePrinter.VisitClassDecl(@class); var typeFullName = TypePrinter.VisitClassDecl(@class);
if (!string.IsNullOrEmpty(@class.TranslationUnit.Module.OutputNamespace)) WriteLine($@"SetupVTables(GetType().FullName == ""{
typeFullName = string.Format("{0}.{1}", typeFullName.Type.Replace("global::", string.Empty)}"");");
@class.TranslationUnit.Module.OutputNamespace, typeFullName);
WriteLine("SetupVTables(GetType().FullName == \"{0}\");", typeFullName);
} }
} }

4
tests/CSharp/CSharp.Tests.cs

@ -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() public void TestUnicode()
{ {
using (var testString = new TestString()) using (var testString = new TestString())
@ -650,7 +650,7 @@ public unsafe class CSharpTests : GeneratorTestFixture
using (var missingObjectOnVirtualCall = new MissingObjectOnVirtualCall()) using (var missingObjectOnVirtualCall = new MissingObjectOnVirtualCall())
{ {
hasMissingObjectOnVirtualCall.SetMissingObjectOnVirtualCall(missingObjectOnVirtualCall); hasMissingObjectOnVirtualCall.SetMissingObjectOnVirtualCall(missingObjectOnVirtualCall);
hasMissingObjectOnVirtualCall.MakeMissingObjectOnVirtualCall(); Assert.That(hasMissingObjectOnVirtualCall.MakeMissingObjectOnVirtualCall(), Is.EqualTo(15));
} }
} }
} }

12
tests/CSharp/CSharp.cpp

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

6
tests/CSharp/CSharp.h

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

Loading…
Cancel
Save