Browse Source

Fixed nested abstract classes to get internally implemented.

Signed-off-by: Dimitar Dobrev <dpldobrev@yahoo.com>
pull/516/head
Dimitar Dobrev 11 years ago
parent
commit
5c5c9b8698
  1. 8
      src/Generator/Passes/GenerateAbstractImplementationsPass.cs
  2. 1
      tests/Basic/Basic.Tests.cs
  3. 5
      tests/Basic/Basic.h

8
src/Generator/Passes/GenerateAbstractImplementationsPass.cs

@ -35,12 +35,12 @@ namespace CppSharp.Passes
public override bool VisitClassDecl(Class @class) public override bool VisitClassDecl(Class @class)
{ {
if (!base.VisitClassDecl(@class))
return false;
if (@class.CompleteDeclaration != null) if (@class.CompleteDeclaration != null)
return VisitClassDecl(@class.CompleteDeclaration as Class); return VisitClassDecl(@class.CompleteDeclaration as Class);
if (!VisitDeclaration(@class))
return false;
if (@class.IsAbstract) if (@class.IsAbstract)
{ {
foreach (var ctor in from ctor in @class.Constructors foreach (var ctor in from ctor in @class.Constructors
@ -50,7 +50,7 @@ namespace CppSharp.Passes
internalImpls.Add(AddInternalImplementation(@class)); internalImpls.Add(AddInternalImplementation(@class));
} }
return base.VisitClassDecl(@class); return @class.IsAbstract;
} }
private Class AddInternalImplementation(Class @class) private Class AddInternalImplementation(Class @class)

1
tests/Basic/Basic.Tests.cs

@ -11,6 +11,7 @@ public class BasicTests : GeneratorTestFixture
public void TestUncompilableCode() public void TestUncompilableCode()
{ {
Assert.That(new ChangedAccessOfInheritedProperty().Property, Is.EqualTo(2)); Assert.That(new ChangedAccessOfInheritedProperty().Property, Is.EqualTo(2));
Foo.NestedAbstract a;
} }
[Test] [Test]

5
tests/Basic/Basic.h

@ -15,6 +15,11 @@ private:
Value2 Value2
}; };
public: public:
class NestedAbstract
{
public:
virtual void abstractFunctionInNestedClass() = 0;
};
Foo(); Foo();
Foo(Private p); Foo(Private p);

Loading…
Cancel
Save