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

3
src/Generator/Passes/FindSymbolsPass.cs

@ -15,7 +15,8 @@ namespace CppSharp.Passes @@ -15,7 +15,8 @@ namespace CppSharp.Passes
var mangledDecl = decl as IMangledDecl;
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))
{
decl.ExplicitlyIgnore();

9
tests/NamespacesBase/NamespacesBase.cpp

@ -27,3 +27,12 @@ Base2::Base2(int i) : Base(i) @@ -27,3 +27,12 @@ Base2::Base2(int i) : Base(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> @@ -52,3 +52,10 @@ template <typename T>
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 @@ -11,4 +11,25 @@ public class NamespaceDerivedTests
var parent = derived.Parent;
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() @@ -61,3 +61,12 @@ Abstract* Derived2::getAbstract()
{
return 0;
}
HasVirtualInDependency::HasVirtualInDependency()
{
}
int HasVirtualInDependency::callManagedOverride()
{
return managedObject->virtualInCore(0);
}

8
tests/NamespacesDerived/NamespacesDerived.h

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

Loading…
Cancel
Save