Browse Source

Merge pull request #446 from ddobrev/master

Fixed the signatures of const functions
pull/447/merge
João Matos 10 years ago
parent
commit
e65c0ce1ea
  1. 14
      src/CppParser/Parser.cpp
  2. 7
      src/Generator.Tests/AST/TestAST.cs
  3. 3
      tests/Native/AST.h

14
src/CppParser/Parser.cpp

@ -2197,7 +2197,6 @@ void Parser::WalkFunction(clang::FunctionDecl* FD, Function* F, @@ -2197,7 +2197,6 @@ void Parser::WalkFunction(clang::FunctionDecl* FD, Function* F,
F->Mangled = Mangled;
clang::SourceLocation ParamStartLoc = FD->getLocStart();
clang::SourceLocation ParamEndLoc = FD->getLocEnd();
clang::SourceLocation ResultLoc;
auto FTSI = FD->getTypeSourceInfo();
@ -2213,7 +2212,6 @@ void Parser::WalkFunction(clang::FunctionDecl* FD, Function* F, @@ -2213,7 +2212,6 @@ void Parser::WalkFunction(clang::FunctionDecl* FD, Function* F,
assert (!FTInfo.isNull());
ParamStartLoc = FTInfo.getLParenLoc();
ParamEndLoc = FTInfo.getRParenLoc();
ResultLoc = FTInfo.getReturnLoc().getLocStart();
}
}
@ -2222,17 +2220,7 @@ void Parser::WalkFunction(clang::FunctionDecl* FD, Function* F, @@ -2222,17 +2220,7 @@ void Parser::WalkFunction(clang::FunctionDecl* FD, Function* F,
if (ResultLoc.isValid())
BeginLoc = ResultLoc;
// For some weird reason 'kw_const' doesn't work; Clang considers the 'const' a 'raw_identifier'
clang::SourceLocation EndLoc = Lexer::findLocationAfterToken(
ParamEndLoc, tok::TokenKind::raw_identifier, C->getSourceManager(), C->getLangOpts(),
/*SkipTrailingWhitespaceAndNewLine=*/true);
if (EndLoc.isValid())
EndLoc = EndLoc.getLocWithOffset(/*Offset=*/-1);
else
EndLoc = ParamEndLoc;
clang::SourceRange Range(BeginLoc, EndLoc);
clang::SourceRange Range(BeginLoc, FD->getLocEnd());
std::string Sig;
if (GetDeclText(Range, Sig))

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

@ -243,7 +243,7 @@ namespace CppSharp.Generator.Tests.AST @@ -243,7 +243,7 @@ namespace CppSharp.Generator.Tests.AST
[Test]
public void TestLineNumberOfFriend()
{
Assert.AreEqual(83, AstContext.FindFunction("operator+").First().LineNumberStart);
Assert.AreEqual(86, AstContext.FindFunction("operator+").First().LineNumberStart);
}
[Test]
@ -251,7 +251,10 @@ namespace CppSharp.Generator.Tests.AST @@ -251,7 +251,10 @@ namespace CppSharp.Generator.Tests.AST
{
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);
Assert.AreEqual("void testConstSignature() const",
AstContext.FindClass("HasConstFunction").Single().FindMethod("testConstSignature").Signature);
Assert.AreEqual("void testConstSignatureWithTrailingMacro() const",
AstContext.FindClass("HasConstFunction").Single().FindMethod("testConstSignatureWithTrailingMacro").Signature);
// TODO: restore when the const of a return type is fixed properly
//Assert.AreEqual("const int& testConstRefSignature()", AstContext.FindClass("HasConstFunction").Single().FindMethod("testConstRefSignature").Signature);
//Assert.AreEqual("const int& testStaticConstRefSignature()", AstContext.FindClass("HasConstFunction").Single().FindMethod("testStaticConstRefSignature").Signature);

3
tests/Native/AST.h

@ -67,10 +67,13 @@ namespace HidesClass @@ -67,10 +67,13 @@ namespace HidesClass
void testSignature();
#define MY_MACRO
class HasConstFunction
{
public:
void testConstSignature() const;
void testConstSignatureWithTrailingMacro() const MY_MACRO;
const int& testConstRefSignature();
static const int& testStaticConstRefSignature();
friend inline const TestTemplateClass2 operator+(const TestTemplateClass2& f1, const TestTemplateClass2& f2);

Loading…
Cancel
Save