From: Dmitri Gribenko Date: Thu, 25 Oct 2012 18:28:26 +0000 (+0000) Subject: Comment to XML conversion: avoid memory allocation while pretty-printing the X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=7c98499ba594116d75555f39a1cce28cd26d76a5;p=clang Comment to XML conversion: avoid memory allocation while pretty-printing the declaration. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@166707 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/tools/libclang/CXComment.cpp b/tools/libclang/CXComment.cpp index 0c3b8c7388..fa149a0ff9 100644 --- a/tools/libclang/CXComment.cpp +++ b/tools/libclang/CXComment.cpp @@ -891,6 +891,19 @@ private: const CommandTraits &Traits; const SourceManager &SM; }; + +void getSourceTextOfDeclaration(const DeclInfo *ThisDecl, + SmallVectorImpl &Str) { + ASTContext &Context = ThisDecl->CurrentDecl->getASTContext(); + const LangOptions &LangOpts = Context.getLangOpts(); + llvm::raw_svector_ostream OS(Str); + PrintingPolicy PPolicy(LangOpts); + PPolicy.SuppressAttributes = true; + PPolicy.TerseOutput = true; + ThisDecl->CurrentDecl->print(OS, PPolicy, + /*Indentation*/0, /*PrintInstantiation*/true); +} + } // end unnamed namespace void CommentASTToXMLConverter::visitTextComment(const TextComment *C) { @@ -1032,20 +1045,6 @@ void CommentASTToXMLConverter::visitVerbatimLineComment( Result << ""; } -static std::string getSourceTextOfDeclaration(const DeclInfo *ThisDecl) { - - ASTContext &Context = ThisDecl->CurrentDecl->getASTContext(); - const LangOptions &LangOpts = Context.getLangOpts(); - std::string SStr; - llvm::raw_string_ostream S(SStr); - PrintingPolicy PPolicy(LangOpts); - PPolicy.SuppressAttributes = true; - PPolicy.TerseOutput = true; - ThisDecl->CurrentDecl->print(S, PPolicy, - /*Indentation*/0, /*PrintInstantiation*/true); - return S.str(); -} - void CommentASTToXMLConverter::visitFullComment(const FullComment *C) { FullCommentParts Parts(C, Traits); @@ -1164,11 +1163,16 @@ void CommentASTToXMLConverter::visitFullComment(const FullComment *C) { Result << "unknown"; } + { + // Pretty-print the declaration. + Result << ""; + SmallString<128> Declaration; + getSourceTextOfDeclaration(DI, Declaration); + appendToResultWithXMLEscaping(Declaration); + Result << ""; + } + bool FirstParagraphIsBrief = false; - Result << ""; - appendToResultWithXMLEscaping(getSourceTextOfDeclaration(DI)); - Result << ""; - if (Parts.Brief) { Result << ""; visit(Parts.Brief);