Browse Source

Fixed signatures to include the 'const', if any.

Signed-off-by: Dimitar Dobrev <dpldobrev@yahoo.com>
pull/430/head
Dimitar Dobrev 10 years ago
parent
commit
8505f82ff0
  1. 5
      src/CppParser/Parser.cpp
  2. 8
      src/Generator.Tests/AST/TestAST.cs
  3. 12
      tests/Native/AST.h

5
src/CppParser/Parser.cpp

@ -2218,7 +2218,10 @@ void Parser::WalkFunction(clang::FunctionDecl* FD, Function* F, @@ -2218,7 +2218,10 @@ void Parser::WalkFunction(clang::FunctionDecl* FD, Function* F,
}
}
clang::SourceRange Range(FD->getLocStart(), ParamEndLoc);
// for some weird reason 'kw_const' doesn't work; Clang considers the 'const' a 'raw_identifier'
const clang::SourceLocation& EndLoc = Lexer::findLocationAfterToken(
ParamEndLoc, tok::TokenKind::raw_identifier, C->getSourceManager(), C->getLangOpts(), true);
clang::SourceRange Range(FD->getLocStart(), EndLoc.isValid() ? EndLoc.getLocWithOffset(/* ignore ; */ -1) : ParamEndLoc);
if (ResultLoc.isValid())
Range.setBegin(ResultLoc);

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

@ -239,5 +239,13 @@ namespace CppSharp.Generator.Tests.AST @@ -239,5 +239,13 @@ namespace CppSharp.Generator.Tests.AST
{
Assert.AreEqual(63, AstContext.FindClass("HiddenInNamespace").First().LineNumber);
}
[Test]
public void TestSignature()
{
Assert.AreEqual("void testSignature()", AstContext.FindFunction("testSignature").Single().Signature);
Assert.AreEqual("void testImpl()", AstContext.FindFunction("testImpl").Single().Signature);
Assert.AreEqual("void testConstSignature() const", AstContext.FindClass("HasConstFunction").Single().FindMethod("testConstSignature").Signature);
}
}
}

12
tests/Native/AST.h

@ -64,3 +64,15 @@ namespace HidesClass @@ -64,3 +64,15 @@ namespace HidesClass
{
};
}
void testSignature();
class HasConstFunction
{
public:
void testConstSignature() const;
};
void testImpl()
{
}

Loading…
Cancel
Save