aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFariborz Jahanian <fjahanian@apple.com>2012-12-19 00:01:48 +0000
committerFariborz Jahanian <fjahanian@apple.com>2012-12-19 00:01:48 +0000
commit7c10683c834f051e018c89b090d64bf5e4ca3bcc (patch)
tree30d0be1a2dc6645248f3b671f11066d98c5780b7
parent1850ac6ae954524c821723a0f87df62d004a7293 (diff)
Some code refactoring per Dimitri's comment.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@170478 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--tools/libclang/CXComment.cpp77
-rw-r--r--tools/libclang/SimpleFormatContext.h4
2 files changed, 40 insertions, 41 deletions
diff --git a/tools/libclang/CXComment.cpp b/tools/libclang/CXComment.cpp
index 070b8b8207..abf94a93f9 100644
--- a/tools/libclang/CXComment.cpp
+++ b/tools/libclang/CXComment.cpp
@@ -861,10 +861,10 @@ public:
SmallVectorImpl<char> &Str,
const CommandTraits &Traits,
const SourceManager &SM,
- SimpleFormatContext &RTC,
+ SimpleFormatContext &SFC,
unsigned FUID) :
FC(FC), Result(Str), Traits(Traits), SM(SM),
- FormatRewriterContext(RTC),
+ FormatRewriterContext(SFC),
FormatInMemoryUniqueId(FUID) { }
// Inline content.
@@ -886,10 +886,9 @@ public:
// Helpers.
void appendToResultWithXMLEscaping(StringRef S);
-
- unsigned getFormatInMemoryUniqueId() { return FormatInMemoryUniqueId; }
- SimpleFormatContext &getFormatRewriterContext()
- { return FormatRewriterContext; }
+
+ void formatTextOfDeclaration(const DeclInfo *DI,
+ SmallString<128> &Declaration);
private:
const FullComment *FC;
@@ -915,41 +914,40 @@ void getSourceTextOfDeclaration(const DeclInfo *ThisDecl,
/*Indentation*/0, /*PrintInstantiation*/true);
}
-void formatTextOfDeclaration(CommentASTToXMLConverter *C,
- const DeclInfo *DI,
- SmallString<128> &Declaration) {
+void CommentASTToXMLConverter::formatTextOfDeclaration(
+ const DeclInfo *DI,
+ SmallString<128> &Declaration) {
// FIXME. This conditional is TEMPORARY. We don't want to break multiple
// large tests each time Format.cpp changes. This condition will
// go away and formatting will happen for all declarations.
- if (getenv("LIBCLANG_ACTIVATE_FORMAT")) {
- SimpleFormatContext &FormatRewriterContext =
- C->getFormatRewriterContext();
- // FIXME. formatting API expects null terminated input string.
- // There might be more efficient way of doing this.
- std::string StringDecl = Declaration.str();
+ if (!getenv("LIBCLANG_ACTIVATE_FORMAT"))
+ return;
+
+ // FIXME. formatting API expects null terminated input string.
+ // There might be more efficient way of doing this.
+ std::string StringDecl = Declaration.str();
- // Formatter specific code.
- // Form a unique in memory buffer name.
- llvm::SmallString<128> filename;
- filename += "xmldecl";
- filename += llvm::utostr(C->getFormatInMemoryUniqueId());
- filename += ".xd";
- FileID ID = FormatRewriterContext.createInMemoryFile(filename, StringDecl);
- SourceLocation Start =
- FormatRewriterContext.Sources.getLocForStartOfFile(ID).getLocWithOffset(0);
- unsigned Length = Declaration.size();
+ // Formatter specific code.
+ // Form a unique in memory buffer name.
+ llvm::SmallString<128> filename;
+ filename += "xmldecl";
+ filename += llvm::utostr(FormatInMemoryUniqueId);
+ filename += ".xd";
+ FileID ID = FormatRewriterContext.createInMemoryFile(filename, StringDecl);
+ SourceLocation Start =
+ FormatRewriterContext.Sources.getLocForStartOfFile(ID).getLocWithOffset(0);
+ unsigned Length = Declaration.size();
- std::vector<CharSourceRange>
- Ranges(1, CharSourceRange::getCharRange(Start, Start.getLocWithOffset(Length)));
- ASTContext &Context = DI->CurrentDecl->getASTContext();
- const LangOptions &LangOpts = Context.getLangOpts();
- Lexer Lex(ID, FormatRewriterContext.Sources.getBuffer(ID),
- FormatRewriterContext.Sources, LangOpts);
- tooling::Replacements Replace =
- reformat(format::getLLVMStyle(), Lex, FormatRewriterContext.Sources, Ranges);
- applyAllReplacements(Replace, FormatRewriterContext.Rewrite);
- Declaration = FormatRewriterContext.getRewrittenText(ID);
- }
+ std::vector<CharSourceRange>
+ Ranges(1, CharSourceRange::getCharRange(Start, Start.getLocWithOffset(Length)));
+ ASTContext &Context = DI->CurrentDecl->getASTContext();
+ const LangOptions &LangOpts = Context.getLangOpts();
+ Lexer Lex(ID, FormatRewriterContext.Sources.getBuffer(ID),
+ FormatRewriterContext.Sources, LangOpts);
+ tooling::Replacements Replace =
+ reformat(format::getLLVMStyle(), Lex, FormatRewriterContext.Sources, Ranges);
+ applyAllReplacements(Replace, FormatRewriterContext.Rewrite);
+ Declaration = FormatRewriterContext.getRewrittenText(ID);
}
} // end unnamed namespace
@@ -1216,7 +1214,7 @@ void CommentASTToXMLConverter::visitFullComment(const FullComment *C) {
Result << "<Declaration>";
SmallString<128> Declaration;
getSourceTextOfDeclaration(DI, Declaration);
- formatTextOfDeclaration(this, DI, Declaration);
+ formatTextOfDeclaration(DI, Declaration);
appendToResultWithXMLEscaping(Declaration);
Result << "</Declaration>";
@@ -1382,8 +1380,9 @@ CXString clang_FullComment_getAsXML(CXComment CXC) {
if (!SFC) {
SFC = new SimpleFormatContext(Context.getLangOpts());
TU->FormatContext = SFC;
- }
- else if ((TU->FormatInMemoryUniqueId % 10) == 0) {
+ } else if ((TU->FormatInMemoryUniqueId % 10) == 0) {
+ // Delete after some number of iterators, so the buffers don't grow
+ // too large.
delete SFC;
SFC = new SimpleFormatContext(Context.getLangOpts());
TU->FormatContext = SFC;
diff --git a/tools/libclang/SimpleFormatContext.h b/tools/libclang/SimpleFormatContext.h
index f322e63d06..469a983e4d 100644
--- a/tools/libclang/SimpleFormatContext.h
+++ b/tools/libclang/SimpleFormatContext.h
@@ -7,7 +7,7 @@
//
//===----------------------------------------------------------------------===//
//
-// This file defines a utility class for Rewriter related tests.
+/// \file This file defines a utility class for use of clang-format in libclang
//
//===----------------------------------------------------------------------===//
@@ -30,7 +30,7 @@ namespace clang {
/// a declaration string in memory. This object is instantiated once
/// and used each time a formatting is needed.
class SimpleFormatContext {
- public:
+public:
SimpleFormatContext(LangOptions Options)
: DiagOpts(new DiagnosticOptions()),
Diagnostics(new DiagnosticsEngine(new DiagnosticIDs,