Browse Source

Fixed the location of a friendly declaration.

Signed-off-by: Dimitar Dobrev <dpldobrev@yahoo.com>
pull/441/head
Dimitar Dobrev 10 years ago
parent
commit
99c124eb53
  1. 15
      src/CppParser/Parser.cpp
  2. 6
      src/Generator.Tests/AST/TestAST.cs
  3. 6
      tests/Native/AST.h

15
src/CppParser/Parser.cpp

@ -2431,7 +2431,22 @@ Friend* Parser::WalkFriend(clang::FriendDecl *FD) @@ -2431,7 +2431,22 @@ Friend* Parser::WalkFriend(clang::FriendDecl *FD)
F->_Namespace = NS;
if (FriendDecl)
{
F->Declaration = WalkDeclarationDef(FriendDecl);
if (F->Declaration)
{
for (auto it = FriendDecl->redecls_begin(); it != FriendDecl->redecls_end(); it++)
{
if (it->getLocation() != FriendDecl->getLocation())
{
auto DecomposedLoc = C->getSourceManager().getDecomposedLoc(it->getLocation());
F->Declaration->LineNumber = C->getSourceManager().getLineNumber(
DecomposedLoc.first, DecomposedLoc.second);
break;
}
}
}
}
//auto TL = FD->getFriendType()->getTypeLoc();
//F->QualifiedType = GetQualifiedType(VD->getType(), WalkType(FD->getFriendType(), &TL));

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

@ -240,6 +240,12 @@ namespace CppSharp.Generator.Tests.AST @@ -240,6 +240,12 @@ namespace CppSharp.Generator.Tests.AST
Assert.AreEqual(63, AstContext.FindClass("HiddenInNamespace").First().LineNumber);
}
[Test]
public void TestLineNumberOfFriend()
{
Assert.AreEqual(82, AstContext.FindFunction("operator+").First().LineNumber);
}
[Test]
public void TestSignature()
{

6
tests/Native/AST.h

@ -72,8 +72,14 @@ class HasConstFunction @@ -72,8 +72,14 @@ class HasConstFunction
public:
void testConstSignature() const;
const int& testConstRefSignature();
friend inline const TestTemplateClass2 operator+(const TestTemplateClass2& f1, const TestTemplateClass2& f2);
};
void testImpl()
{
}
inline const TestTemplateClass2 operator+(const TestTemplateClass2& f1, const TestTemplateClass2& f2)
{
return TestTemplateClass2();
}

Loading…
Cancel
Save