Browse Source

Improved the recognition of inlined functions by checking their redeclarations.

The parsing of function bodies is no longer needed and it slows parsing down significantly so it is now turned off.
pull/750/head
Dimitar Dobrev 8 years ago
parent
commit
32f315d206
  1. 10
      src/CppParser/Parser.cpp
  2. 3
      src/Generator.Tests/AST/TestAST.cs

10
src/CppParser/Parser.cpp

@ -2860,6 +2860,14 @@ void Parser::WalkFunction(const clang::FunctionDecl* FD, Function* F, @@ -2860,6 +2860,14 @@ void Parser::WalkFunction(const clang::FunctionDecl* FD, Function* F,
F->isConstExpr = FD->isConstexpr();
F->isVariadic = FD->isVariadic();
F->isInline = FD->isInlined();
for (const auto& R : FD->redecls())
{
if (R->isInlined())
{
F->isInline = true;
break;
}
}
F->isDependent = FD->isDependentContext();
F->isPure = FD->isPure();
F->isDeleted = FD->isDeleted();
@ -3912,7 +3920,7 @@ ParserResult* Parser::ParseHeader(const std::vector<std::string>& SourceFiles, P @@ -3912,7 +3920,7 @@ ParserResult* Parser::ParseHeader(const std::vector<std::string>& SourceFiles, P
clang::DiagnosticConsumer* client = c->getDiagnostics().getClient();
client->BeginSourceFile(c->getLangOpts(), &c->getPreprocessor());
ParseAST(c->getSema());
ParseAST(c->getSema(), /*PrintStats=*/false, /*SkipFunctionBodies=*/true);
client->EndSourceFile();

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

@ -302,8 +302,7 @@ namespace CppSharp.Generator.Tests.AST @@ -302,8 +302,7 @@ namespace CppSharp.Generator.Tests.AST
public void TestSignature()
{
Assert.AreEqual("void testSignature()", AstContext.FindFunction("testSignature").Single().Signature);
Assert.AreEqual($"void testImpl(){Environment.NewLine}{{{Environment.NewLine}}}",
AstContext.FindFunction("testImpl").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 testConstSignatureWithTrailingMacro() const",

Loading…
Cancel
Save