Browse Source

Fixed a bug causing a class layout to have the class as its own base.

Fixes https://github.com/mono/CppSharp/issues/702.

Signed-off-by: Dimitar Dobrev <dpldobrev@protonmail.com>
pull/705/head
Dimitar Dobrev 9 years ago
parent
commit
56c1fab63b
  1. 13
      src/CppParser/Parser.cpp
  2. 9
      src/Generator.Tests/AST/TestAST.cs

13
src/CppParser/Parser.cpp

@ -102,12 +102,15 @@ void Parser::ReadClassLayout(Class* Class, const clang::RecordDecl* RD, @@ -102,12 +102,15 @@ void Parser::ReadClassLayout(Class* Class, const clang::RecordDecl* RD,
auto CXXRD = dyn_cast<CXXRecordDecl>(RD);
auto Parent = static_cast<AST::Class*>(
WalkDeclaration(RD, /*IgnoreSystemDecls =*/false));
WalkDeclaration(RD, /*CanBeDefinition =*/false));
LayoutBase LayoutBase;
LayoutBase.Offset = Offset.getQuantity();
LayoutBase.Class = Parent;
Class->Layout->Bases.push_back(LayoutBase);
if (Class != Parent)
{
LayoutBase LayoutBase;
LayoutBase.Offset = Offset.getQuantity();
LayoutBase.Class = Parent;
Class->Layout->Bases.push_back(LayoutBase);
}
// Dump bases.
if (CXXRD) {

9
src/Generator.Tests/AST/TestAST.cs

@ -417,5 +417,12 @@ namespace CppSharp.Generator.Tests.AST @@ -417,5 +417,12 @@ namespace CppSharp.Generator.Tests.AST
Assert.That(template.Specializations.Last().Visit(cppTypePrinter),
Is.EqualTo("TestSpecializationArguments<const TestASTEnumItemByName>"));
}
}
[Test]
public void TestLayoutBase()
{
var @class = AstContext.FindCompleteClass("TestComments");
Assert.That(@class.Layout.Bases.Count, Is.EqualTo(0));
}
}
}

Loading…
Cancel
Save