summaryrefslogtreecommitdiffstats
path: root/clang/lib/Format/Format.cpp
diff options
context:
space:
mode:
authorAlexander Kornienko <alexfh@google.com>2013-06-14 11:46:10 +0000
committerAlexander Kornienko <alexfh@google.com>2013-06-14 11:46:10 +0000
commitbe633908be11c87e0fe7fc295fc617e54396ca9a (patch)
tree84e808c4fe93efce37523c8636110c4c43f5cfaf /clang/lib/Format/Format.cpp
parent7e325fb47702cf705e6d9e13680ca164342def26 (diff)
downloadbcm5719-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.cpp32
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 =
OpenPOWER on IntegriCloud