diff --git a/src/Generator/Generators/CSharp/CSharpSources.cs b/src/Generator/Generators/CSharp/CSharpSources.cs index c49db501..ea2ee1b2 100644 --- a/src/Generator/Generators/CSharp/CSharpSources.cs +++ b/src/Generator/Generators/CSharp/CSharpSources.cs @@ -2513,12 +2513,7 @@ namespace CppSharp.Generators.CSharp private void GetVirtualCallDelegate(Method method, Class @class, out string delegateId) { - Function @virtual = method; - if (method.OriginalFunction != null && - !((Class) method.OriginalFunction.Namespace).IsInterface) - @virtual = method.OriginalFunction; - - var i = VTables.GetVTableIndex(@virtual, @class); + var i = VTables.GetVTableIndex(method.OriginalFunction ?? method, @class); int vtableIndex = 0; if (Context.ParserOptions.IsMicrosoftAbi) vtableIndex = @class.Layout.VFTables.IndexOf(@class.Layout.VFTables.Where( @@ -2531,7 +2526,7 @@ namespace CppSharp.Generators.CSharp WriteStartBraceIndent(); } - var @delegate = GetVTableMethodDelegateName(@virtual); + var @delegate = GetVTableMethodDelegateName(method.OriginalFunction ?? method); delegateId = Generator.GeneratedIdentifier(@delegate); WriteLine("var {0} = ({1}) Marshal.GetDelegateForFunctionPointer(new IntPtr({2}), typeof({1}));", diff --git a/src/Generator/Generators/Template.cs b/src/Generator/Generators/Template.cs index d771855e..90c097bb 100644 --- a/src/Generator/Generators/Template.cs +++ b/src/Generator/Generators/Template.cs @@ -306,8 +306,8 @@ namespace CppSharp.Generators public string Generate() { - if (Options.IsCSharpGenerator && Options.CompileCode) - return RootBlock.GenerateUnformatted(Options).ToString(); + //if (Options.IsCSharpGenerator && Options.CompileCode) + // return RootBlock.GenerateUnformatted(Options).ToString(); return RootBlock.Generate(Options); } diff --git a/src/Generator/Passes/MultipleInheritancePass.cs b/src/Generator/Passes/MultipleInheritancePass.cs index 62f55959..c379e3d3 100644 --- a/src/Generator/Passes/MultipleInheritancePass.cs +++ b/src/Generator/Passes/MultipleInheritancePass.cs @@ -164,16 +164,11 @@ namespace CppSharp.Passes { foreach (var method in @interface.Methods) { - var existingImpl = @class.Methods.FirstOrDefault( - m => m.OriginalName == method.OriginalName && - m.Parameters.Where(p => !p.Ignore).SequenceEqual( - method.Parameters.Where(p => !p.Ignore), - ParameterTypeComparer.Instance)); - if (existingImpl != null) - { - existingImpl.OriginalFunction = method; + if (@class.Methods.Any(m => m.OriginalName == method.OriginalName && + m.Parameters.Where(p => !p.Ignore).SequenceEqual( + method.Parameters.Where(p => !p.Ignore), + ParameterTypeComparer.Instance))) continue; - } var impl = new Method(method) { Namespace = @class, diff --git a/tests/CSharp/CSharp.Tests.cs b/tests/CSharp/CSharp.Tests.cs index fa949419..86939716 100644 --- a/tests/CSharp/CSharp.Tests.cs +++ b/tests/CSharp/CSharp.Tests.cs @@ -647,8 +647,6 @@ public unsafe class CSharpTests : GeneratorTestFixture { Assert.That(implementsAbstractsFromPrimaryAndSecondary.AbstractInPrimaryBase, Is.EqualTo(101)); Assert.That(implementsAbstractsFromPrimaryAndSecondary.AbstractInSecondaryBase, Is.EqualTo(5)); - Assert.That(implementsAbstractsFromPrimaryAndSecondary.AbstractReturnsFieldInPrimaryBase, Is.EqualTo(201)); - Assert.That(implementsAbstractsFromPrimaryAndSecondary.AbstractReturnsFieldInSecondaryBase, Is.EqualTo(202)); } } diff --git a/tests/CSharp/CSharp.cpp b/tests/CSharp/CSharp.cpp index 9d9074cb..ada200e4 100644 --- a/tests/CSharp/CSharp.cpp +++ b/tests/CSharp/CSharp.cpp @@ -1222,15 +1222,7 @@ void HasMissingObjectOnVirtualCall::setMissingObjectOnVirtualCall(MissingObjectO stackOverflowOnVirtualCall = value; } -AbstractPrimaryBase::~AbstractPrimaryBase() -{ -} - -AbstractSecondaryBase::~AbstractSecondaryBase() -{ -} - -ImplementsAbstractsFromPrimaryAndSecondary::ImplementsAbstractsFromPrimaryAndSecondary() : field(200) +ImplementsAbstractsFromPrimaryAndSecondary::ImplementsAbstractsFromPrimaryAndSecondary() { } @@ -1247,13 +1239,3 @@ int ImplementsAbstractsFromPrimaryAndSecondary::abstractInSecondaryBase() { return 5; } - -int ImplementsAbstractsFromPrimaryAndSecondary::abstractReturnsFieldInPrimaryBase() -{ - return field + 1; -} - -int ImplementsAbstractsFromPrimaryAndSecondary::abstractReturnsFieldInSecondaryBase() -{ - return field + 2; -} diff --git a/tests/CSharp/CSharp.h b/tests/CSharp/CSharp.h index aefbd3a3..910fd8f4 100644 --- a/tests/CSharp/CSharp.h +++ b/tests/CSharp/CSharp.h @@ -1095,28 +1095,20 @@ private: class DLL_API AbstractPrimaryBase { public: - virtual ~AbstractPrimaryBase(); virtual int abstractInPrimaryBase() = 0; - virtual int abstractReturnsFieldInPrimaryBase() = 0; }; class DLL_API AbstractSecondaryBase { public: - virtual ~AbstractSecondaryBase(); virtual int abstractInSecondaryBase() = 0; - virtual int abstractReturnsFieldInSecondaryBase() = 0; }; class DLL_API ImplementsAbstractsFromPrimaryAndSecondary : public AbstractPrimaryBase, public AbstractSecondaryBase { public: ImplementsAbstractsFromPrimaryAndSecondary(); - virtual ~ImplementsAbstractsFromPrimaryAndSecondary(); + ~ImplementsAbstractsFromPrimaryAndSecondary(); virtual int abstractInPrimaryBase(); virtual int abstractInSecondaryBase(); - virtual int abstractReturnsFieldInPrimaryBase(); - virtual int abstractReturnsFieldInSecondaryBase(); -private: - int field; };