From: Axel Naumann Date: Fri, 19 Sep 2014 09:11:06 +0000 (+0200) Subject: Write function fwd decls! Follow DeclRefExpr template args. X-Git-Tag: v6-02-00-rc1~54 X-Git-Url: https://root.cern.ch/gitweb?p=root.git;a=commitdiff_plain;h=3a1c58d18c3e7cea117f2b5f0acb8ab8304ea3a2 Write function fwd decls! Follow DeclRefExpr template args. --- diff --git a/interpreter/cling/lib/Interpreter/ForwardDeclPrinter.cpp b/interpreter/cling/lib/Interpreter/ForwardDeclPrinter.cpp index a13b75b..867ade9 100644 --- a/interpreter/cling/lib/Interpreter/ForwardDeclPrinter.cpp +++ b/interpreter/cling/lib/Interpreter/ForwardDeclPrinter.cpp @@ -513,7 +513,8 @@ namespace cling { // D->getBody()->printPretty(Out, 0, SubPolicy, Indentation); } - Out() << ";\n"; + std::string output = stream.take(true); + Out() << output << ";\n"; } void ForwardDeclPrinter::VisitFriendDecl(FriendDecl *D) { @@ -550,6 +551,16 @@ namespace cling { void ForwardDeclPrinter::VisitVarDecl(VarDecl *D) { + QualType T = D->getTypeSourceInfo() + ? D->getTypeSourceInfo()->getType() + : D->getASTContext().getUnqualifiedObjCPointerType(D->getType()); + + Visit(T); + if (m_SkipFlag) { + skipCurrentDecl(); + return; + } + if (D->isDefinedOutsideFunctionOrMethod() && D->getStorageClass() != SC_Extern) Out() << "extern "; @@ -581,10 +592,6 @@ namespace cling { Out() << "__module_private__ "; } - QualType T = D->getTypeSourceInfo() - ? D->getTypeSourceInfo()->getType() - : D->getASTContext().getUnqualifiedObjCPointerType(D->getType()); - //FIXME: It prints restrict as restrict //which is not valid C++ //Should be __restrict @@ -1018,7 +1025,12 @@ namespace cling { VisitTemplateName(TA.getAsTemplateOrTemplatePattern()); break; case clang::TemplateArgument::Expression: - // Nothing to fwd declare, hopefully... + if (DeclRefExpr* DRE = dyn_cast(TA.getAsExpr())) { + Visit(DRE->getFoundDecl()); + if (m_SkipFlag) { + return; + } + } break; default: Log() << "Visit(Type*): Unexpected TemplateSpecializationType "