diff options
author | Dmitri Gribenko <gribozavr@gmail.com> | 2012-09-09 20:47:31 +0000 |
---|---|---|
committer | Dmitri Gribenko <gribozavr@gmail.com> | 2012-09-09 20:47:31 +0000 |
commit | 4a66557c297e1e5a71a3da4ceca1969800e7de70 (patch) | |
tree | 7f053e525ca2a766895a432dff3031624960542b /lib/AST/RawCommentList.cpp | |
parent | ce15cce38c34ae73348457da73c52df81cde3588 (diff) |
RawCommentList: don't copy the whole new RawComment to LastComment each time.
We just need a single SourceLocation for previous comment end.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163482 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/AST/RawCommentList.cpp')
-rw-r--r-- | lib/AST/RawCommentList.cpp | 30 |
1 files changed, 14 insertions, 16 deletions
diff --git a/lib/AST/RawCommentList.cpp b/lib/AST/RawCommentList.cpp index 1003140849..ae5740e5b9 100644 --- a/lib/AST/RawCommentList.cpp +++ b/lib/AST/RawCommentList.cpp @@ -181,26 +181,22 @@ bool containsOnlyWhitespace(StringRef Str) { return Str.find_first_not_of(" \t\f\v\r\n") == StringRef::npos; } -bool onlyWhitespaceBetweenComments(SourceManager &SM, - const RawComment &C1, const RawComment &C2) { - std::pair<FileID, unsigned> C1EndLocInfo = SM.getDecomposedLoc( - C1.getSourceRange().getEnd()); - std::pair<FileID, unsigned> C2BeginLocInfo = SM.getDecomposedLoc( - C2.getSourceRange().getBegin()); - - // Question does not make sense if comments are located in different files. - if (C1EndLocInfo.first != C2BeginLocInfo.first) +bool onlyWhitespaceBetween(SourceManager &SM, + SourceLocation Loc1, SourceLocation Loc2) { + std::pair<FileID, unsigned> Loc1Info = SM.getDecomposedLoc(Loc1); + std::pair<FileID, unsigned> Loc2Info = SM.getDecomposedLoc(Loc2); + + // Question does not make sense if locations are in different files. + if (Loc1Info.first != Loc2Info.first) return false; bool Invalid = false; - const char *Buffer = SM.getBufferData(C1EndLocInfo.first, &Invalid).data(); + const char *Buffer = SM.getBufferData(Loc1Info.first, &Invalid).data(); if (Invalid) return false; - StringRef TextBetweenComments(Buffer + C1EndLocInfo.second, - C2BeginLocInfo.second - C1EndLocInfo.second); - - return containsOnlyWhitespace(TextBetweenComments); + StringRef Text(Buffer + Loc1Info.second, Loc2Info.second - Loc1Info.second); + return containsOnlyWhitespace(Text); } } // unnamed namespace @@ -220,11 +216,13 @@ void RawCommentList::addComment(const RawComment &RC, } if (OnlyWhitespaceSeen) { - if (!onlyWhitespaceBetweenComments(SourceMgr, LastComment, RC)) + if (!onlyWhitespaceBetween(SourceMgr, + PrevCommentEndLoc, + RC.getSourceRange().getBegin())) OnlyWhitespaceSeen = false; } - LastComment = RC; + PrevCommentEndLoc = RC.getSourceRange().getEnd(); // Ordinary comments are not interesting for us. if (RC.isOrdinary()) |