Browse Source

Fixed a bug when overriding a function located in a dependency.

Signed-off-by: Dimitar Dobrev <dpldobrev@yahoo.com>
pull/566/head
Dimitar Dobrev 10 years ago
parent
commit
55bc99bc3f
  1. 4
      src/Generator/Generators/CSharp/CSharpTextTemplate.cs
  2. 3
      src/Generator/Passes/FindSymbolsPass.cs
  3. 9
      tests/NamespacesBase/NamespacesBase.cpp
  4. 7
      tests/NamespacesBase/NamespacesBase.h
  5. 21
      tests/NamespacesDerived/NamespacesDerived.Tests.cs
  6. 9
      tests/NamespacesDerived/NamespacesDerived.cpp
  7. 8
      tests/NamespacesDerived/NamespacesDerived.h

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

@ -1479,7 +1479,7 @@ namespace CppSharp.Generators.CSharp
for (int i = 0; i < method.Parameters.Count; i++) for (int i = 0; i < method.Parameters.Count; i++)
{ {
var param = method.Parameters[i]; var param = method.Parameters[i];
if (!param.IsGenerated) if (!param.IsGenerated && param.GenerationKind != GenerationKind.Link)
continue; continue;
if (param.Kind == ParameterKind.IndirectReturnType) if (param.Kind == ParameterKind.IndirectReturnType)
@ -1506,7 +1506,7 @@ namespace CppSharp.Generators.CSharp
if (hasReturn) if (hasReturn)
Write("var {0} = ", Helpers.ReturnIdentifier); Write("var {0} = ", Helpers.ReturnIdentifier);
if (method.IsGenerated) if (method.IsGenerated || method.GenerationKind == GenerationKind.Link)
{ {
WriteLine("{0}.{1}({2});", Helpers.TargetIdentifier, WriteLine("{0}.{1}({2});", Helpers.TargetIdentifier,
method.Name, string.Join(", ", marshals)); method.Name, string.Join(", ", marshals));

3
src/Generator/Passes/FindSymbolsPass.cs

@ -15,7 +15,8 @@ namespace CppSharp.Passes
var mangledDecl = decl as IMangledDecl; var mangledDecl = decl as IMangledDecl;
var method = decl as Method; var method = decl as Method;
if (mangledDecl != null && !(method != null && (method.IsPure || method.IsSynthetized)) && if (decl.IsGenerated && mangledDecl != null &&
!(method != null && (method.IsPure || method.IsSynthetized)) &&
!VisitMangledDeclaration(mangledDecl)) !VisitMangledDeclaration(mangledDecl))
{ {
decl.ExplicitlyIgnore(); decl.ExplicitlyIgnore();

9
tests/NamespacesBase/NamespacesBase.cpp

@ -27,3 +27,12 @@ Base2::Base2(int i) : Base(i)
void Base2::parent(int i) void Base2::parent(int i)
{ {
} }
HasVirtualInCore::HasVirtualInCore()
{
}
int HasVirtualInCore::virtualInCore(int parameter)
{
return 1;
}

7
tests/NamespacesBase/NamespacesBase.h

@ -52,3 +52,10 @@ template <typename T>
class TemplateClass class TemplateClass
{ {
}; };
class DLL_API HasVirtualInCore
{
public:
HasVirtualInCore();
virtual int virtualInCore(int parameter);
};

21
tests/NamespacesDerived/NamespacesDerived.Tests.cs

@ -11,4 +11,25 @@ public class NamespaceDerivedTests
var parent = derived.Parent; var parent = derived.Parent;
derived.parent(0); derived.parent(0);
} }
[Test]
public void TestOverrideMethodFromDependency()
{
using (var overrideMethodFromDependency = new OverrideMethodFromDependency())
{
using (var managedObject = new OverrideMethodFromDependency())
{
overrideMethodFromDependency.ManagedObject = managedObject;
Assert.That(overrideMethodFromDependency.CallManagedOverride(), Is.EqualTo(2));
}
}
}
private class OverrideMethodFromDependency : HasVirtualInDependency
{
public override int VirtualInCore(int parameter)
{
return 2;
}
}
} }

9
tests/NamespacesDerived/NamespacesDerived.cpp

@ -61,3 +61,12 @@ Abstract* Derived2::getAbstract()
{ {
return 0; return 0;
} }
HasVirtualInDependency::HasVirtualInDependency()
{
}
int HasVirtualInDependency::callManagedOverride()
{
return managedObject->virtualInCore(0);
}

8
tests/NamespacesDerived/NamespacesDerived.h

@ -61,3 +61,11 @@ public:
private: private:
TemplateClass<int> t; TemplateClass<int> t;
}; };
class DLL_API HasVirtualInDependency : public HasVirtualInCore
{
public:
HasVirtualInDependency();
HasVirtualInDependency* managedObject;
int callManagedOverride();
};

Loading…
Cancel
Save