diff options
author | Alexander Kornienko <alexfh@google.com> | 2013-06-14 11:46:10 +0000 |
---|---|---|
committer | Alexander Kornienko <alexfh@google.com> | 2013-06-14 11:46:10 +0000 |
commit | be633908be11c87e0fe7fc295fc617e54396ca9a (patch) | |
tree | 84e808c4fe93efce37523c8636110c4c43f5cfaf /clang/lib/Format/Format.cpp | |
parent | 7e325fb47702cf705e6d9e13680ca164342def26 (diff) | |
download | bcm5719-llvm-be633908be11c87e0fe7fc295fc617e54396ca9a.tar.gz bcm5719-llvm-be633908be11c87e0fe7fc295fc617e54396ca9a.zip |
Don't remove backslashes from block comments.
Summary:
Don't remove backslashes from block comments. Previously this
/* \ \ \ \ \ \
*/
would be turned to this:
/*
*/
which spoils some kinds of ASCII-art, people use in their comments. The behavior
was related to handling escaped newlines in block comments inside preprocessor
directives. This patch makes handling it in a more civilized way.
Reviewers: klimek
Reviewed By: klimek
CC: cfe-commits
Differential Revision: http://llvm-reviews.chandlerc.com/D979
llvm-svn: 183978
Diffstat (limited to 'clang/lib/Format/Format.cpp')
-rw-r--r-- | clang/lib/Format/Format.cpp | 32 |
1 files changed, 13 insertions, 19 deletions
diff --git a/clang/lib/Format/Format.cpp b/clang/lib/Format/Format.cpp index e0a05b64ecc..92d58ba04c7 100644 --- a/clang/lib/Format/Format.cpp +++ b/clang/lib/Format/Format.cpp @@ -804,7 +804,6 @@ private: /// cover the cost of the additional line breaks. unsigned breakProtrudingToken(const FormatToken &Current, LineState &State, bool DryRun) { - unsigned UnbreakableTailLength = Current.UnbreakableTailLength; llvm::OwningPtr<BreakableToken> Token; unsigned StartColumn = State.Column - Current.CodePointCount; unsigned OriginalStartColumn = @@ -814,37 +813,34 @@ private: if (Current.is(tok::string_literal) && Current.Type != TT_ImplicitStringLiteral) { // Only break up default narrow strings. - const char *LiteralData = - SourceMgr.getCharacterData(Current.getStartOfNonWhitespace()); - if (!LiteralData || *LiteralData != '"') + if (!Current.TokenText.startswith("\"")) return 0; - Token.reset(new BreakableStringLiteral(Current, StartColumn, Encoding)); + Token.reset(new BreakableStringLiteral(Current, StartColumn, + Line.InPPDirective, Encoding)); } else if (Current.Type == TT_BlockComment) { - BreakableBlockComment *BBC = new BreakableBlockComment( + Token.reset(new BreakableBlockComment( Style, Current, StartColumn, OriginalStartColumn, !Current.Previous, - Encoding); - Token.reset(BBC); + Line.InPPDirective, Encoding)); } else if (Current.Type == TT_LineComment && (Current.Previous == NULL || Current.Previous->Type != TT_ImplicitStringLiteral)) { - Token.reset(new BreakableLineComment(Current, StartColumn, Encoding)); + Token.reset(new BreakableLineComment(Current, StartColumn, + Line.InPPDirective, Encoding)); } else { return 0; } - if (UnbreakableTailLength >= getColumnLimit()) + if (Current.UnbreakableTailLength >= getColumnLimit()) return 0; - unsigned RemainingSpace = getColumnLimit() - UnbreakableTailLength; + unsigned RemainingSpace = getColumnLimit() - Current.UnbreakableTailLength; bool BreakInserted = false; unsigned Penalty = 0; unsigned PositionAfterLastLineInToken = 0; for (unsigned LineIndex = 0, EndIndex = Token->getLineCount(); LineIndex != EndIndex; ++LineIndex) { - if (!DryRun) { - Token->replaceWhitespaceBefore(LineIndex, Line.InPPDirective, - Whitespaces); - } + if (!DryRun) + Token->replaceWhitespaceBefore(LineIndex, Whitespaces); unsigned TailOffset = 0; unsigned RemainingTokenColumns = Token->getLineLengthAfterSplit( LineIndex, TailOffset, StringRef::npos); @@ -858,10 +854,8 @@ private: LineIndex, TailOffset + Split.first + Split.second, StringRef::npos); assert(NewRemainingTokenColumns < RemainingTokenColumns); - if (!DryRun) { - Token->insertBreak(LineIndex, TailOffset, Split, Line.InPPDirective, - Whitespaces); - } + if (!DryRun) + Token->insertBreak(LineIndex, TailOffset, Split, Whitespaces); Penalty += Current.is(tok::string_literal) ? Style.PenaltyBreakString : Style.PenaltyBreakComment; unsigned ColumnsUsed = |