@@ -2844,6 +2844,22 @@ Parameter* Parser::WalkParameter(const clang::ParmVarDecl* PVD,
2844
2844
return P;
2845
2845
}
2846
2846
2847
+ void Parser::SetBody (const clang::FunctionDecl* FD, Function* F)
2848
+ {
2849
+ F->Body = GetFunctionBody (FD);
2850
+ F->isInline = FD->isInlined ();
2851
+ if (!F->Body .empty () && F->isInline )
2852
+ return ;
2853
+ for (const auto & R : FD->redecls ())
2854
+ {
2855
+ if (F->Body .empty ())
2856
+ F->Body = GetFunctionBody (R);
2857
+ F->isInline |= R->isInlined ();
2858
+ if (!F->Body .empty () && F->isInline )
2859
+ break ;
2860
+ }
2861
+ }
2862
+
2847
2863
void Parser::WalkFunction (const clang::FunctionDecl* FD, Function* F,
2848
2864
bool IsDependent)
2849
2865
{
@@ -2859,18 +2875,10 @@ void Parser::WalkFunction(const clang::FunctionDecl* FD, Function* F,
2859
2875
F->_namespace = NS;
2860
2876
F->isConstExpr = FD->isConstexpr ();
2861
2877
F->isVariadic = FD->isVariadic ();
2862
- F->isInline = FD->isInlined ();
2863
- for (const auto & R : FD->redecls ())
2864
- {
2865
- if (R->isInlined ())
2866
- {
2867
- F->isInline = true ;
2868
- break ;
2869
- }
2870
- }
2871
2878
F->isDependent = FD->isDependentContext ();
2872
2879
F->isPure = FD->isPure ();
2873
2880
F->isDeleted = FD->isDeleted ();
2881
+ SetBody (FD, F);
2874
2882
if (auto InstantiatedFrom = FD->getTemplateInstantiationPattern ())
2875
2883
F->instantiatedFrom = static_cast <Function*>(WalkDeclaration (InstantiatedFrom));
2876
2884
@@ -3920,7 +3928,7 @@ ParserResult* Parser::ParseHeader(const std::vector<std::string>& SourceFiles, P
3920
3928
clang::DiagnosticConsumer* client = c->getDiagnostics ().getClient ();
3921
3929
client->BeginSourceFile (c->getLangOpts (), &c->getPreprocessor ());
3922
3930
3923
- ParseAST (c->getSema (), /* PrintStats= */ false , /* SkipFunctionBodies= */ true );
3931
+ ParseAST (c->getSema ());
3924
3932
3925
3933
client->EndSourceFile ();
3926
3934
0 commit comments