diff options
author | Manuel Klimek <klimek@google.com> | 2013-01-07 08:54:53 +0000 |
---|---|---|
committer | Manuel Klimek <klimek@google.com> | 2013-01-07 08:54:53 +0000 |
commit | 6cf581436e9e59a18f6a362027a69eaaa9b67597 (patch) | |
tree | 822343254b5e40cafa896e5f5ca7e7e4ca2ce8a6 /lib/Format/Format.cpp | |
parent | 9541938d4e3b9cbafdf0e1a28900c535b82767a4 (diff) |
Fix layouting of single-line-comments preceded by an escaped newline.
Previously, we'd format
int i;\
// comment
as
int i; // comment
The problem is that the escaped newline is part of the next token, and
thus the raw token text of the comment doesn't start with "//".
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@171713 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Format/Format.cpp')
-rw-r--r-- | lib/Format/Format.cpp | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/lib/Format/Format.cpp b/lib/Format/Format.cpp index a6beff0e4f..35c1e403c6 100644 --- a/lib/Format/Format.cpp +++ b/lib/Format/Format.cpp @@ -520,8 +520,8 @@ private: class TokenAnnotator { public: TokenAnnotator(const UnwrappedLine &Line, const FormatStyle &Style, - SourceManager &SourceMgr) - : Line(Line), Style(Style), SourceMgr(SourceMgr) { + SourceManager &SourceMgr, Lexer &Lex) + : Line(Line), Style(Style), SourceMgr(SourceMgr), Lex(Lex) { } /// \brief A parser that gathers additional information about tokens. @@ -865,10 +865,9 @@ private: } else if (isBinaryOperator(Line.Tokens[i])) { Annotation.Type = TokenAnnotation::TT_BinaryOperator; } else if (Tok.Tok.is(tok::comment)) { - // FIXME: Use Lexer::getSpelling(Tok, SourceMgr, LangOpts, bool*); - StringRef Data(SourceMgr.getCharacterData(Tok.Tok.getLocation()), - Tok.Tok.getLength()); - if (Data.startswith("//")) + std::string Data( + Lexer::getSpelling(Tok.Tok, SourceMgr, Lex.getLangOpts())); + if (StringRef(Data).startswith("//")) Annotation.Type = TokenAnnotation::TT_LineComment; else Annotation.Type = TokenAnnotation::TT_BlockComment; @@ -1012,6 +1011,7 @@ private: const UnwrappedLine &Line; FormatStyle Style; SourceManager &SourceMgr; + Lexer &Lex; std::vector<TokenAnnotation> Annotations; }; @@ -1142,7 +1142,7 @@ private: LineRange.getBegin())) continue; - TokenAnnotator Annotator(TheLine, Style, SourceMgr); + TokenAnnotator Annotator(TheLine, Style, SourceMgr, Lex); if (!Annotator.annotate()) break; UnwrappedLineFormatter Formatter( |