diff options
author | Dmitri Gribenko <gribozavr@gmail.com> | 2012-07-24 16:10:47 +0000 |
---|---|---|
committer | Dmitri Gribenko <gribozavr@gmail.com> | 2012-07-24 16:10:47 +0000 |
commit | 1c85d5b17d0bd4b688e6fd4a59ad9c6dc4a817a6 (patch) | |
tree | 8802e3ba0c749c7d9db109beb37ebbfe2c1577dc /clang | |
parent | 86f8bbced497389de5d35f0d6728ad9d846347b4 (diff) | |
download | bcm5719-llvm-1c85d5b17d0bd4b688e6fd4a59ad9c6dc4a817a6.tar.gz bcm5719-llvm-1c85d5b17d0bd4b688e6fd4a59ad9c6dc4a817a6.zip |
Comment parsing: retokenized text tokens are now pushed back in correct (not
reverse) order
llvm-svn: 160675
Diffstat (limited to 'clang')
-rw-r--r-- | clang/include/clang/AST/CommentParser.h | 2 | ||||
-rw-r--r-- | clang/lib/AST/CommentParser.cpp | 7 | ||||
-rw-r--r-- | clang/unittests/AST/CommentParser.cpp | 25 |
3 files changed, 31 insertions, 3 deletions
diff --git a/clang/include/clang/AST/CommentParser.h b/clang/include/clang/AST/CommentParser.h index 47cab25f250..1e4e4f8694b 100644 --- a/clang/include/clang/AST/CommentParser.h +++ b/clang/include/clang/AST/CommentParser.h @@ -83,7 +83,7 @@ class Parser { MoreLATokens.push_back(Tok); for (const Token *I = &Toks.back(), - *B = &Toks.front() + 1; + *B = &Toks.front(); I != B; --I) { MoreLATokens.push_back(*I); } diff --git a/clang/lib/AST/CommentParser.cpp b/clang/lib/AST/CommentParser.cpp index 6b7e0ab49d4..92ea7042ff1 100644 --- a/clang/lib/AST/CommentParser.cpp +++ b/clang/lib/AST/CommentParser.cpp @@ -105,9 +105,12 @@ BlockCommandComment *Parser::parseBlockCommand() { BC = parseBlockCommandArgs(BC, Retokenizer, NumArgs); // Put back tokens we didn't use. + SmallVector<Token, 16> TextToks; Token Text; - while (Retokenizer.lexText(Text)) - putBack(Text); + while (Retokenizer.lexText(Text)) { + TextToks.push_back(Text); + } + putBack(TextToks); } BlockContentComment *Block = parseParagraphOrBlockCommand(); diff --git a/clang/unittests/AST/CommentParser.cpp b/clang/unittests/AST/CommentParser.cpp index 87e10cebc06..ed7681d5c58 100644 --- a/clang/unittests/AST/CommentParser.cpp +++ b/clang/unittests/AST/CommentParser.cpp @@ -755,6 +755,31 @@ TEST_F(CommentParserTest, ParamCommand4) { } } +TEST_F(CommentParserTest, ParamCommand5) { + const char *Source = + "// \\param aaa \\% Bbb \\$ ccc\n"; + + FullComment *FC = parseString(Source); + ASSERT_TRUE(HasChildCount(FC, 2)); + + ASSERT_TRUE(HasParagraphCommentAt(FC, 0, " ")); + { + ParamCommandComment *PCC; + ParagraphComment *PC; + ASSERT_TRUE(HasParamCommandAt(FC, 1, PCC, "param", + ParamCommandComment::In, + /* IsDirectionExplicit = */ false, + "aaa", PC)); + ASSERT_TRUE(HasChildCount(PCC, 1)); + + ASSERT_TRUE(HasChildCount(PC, 5)); + ASSERT_TRUE(HasTextAt(PC, 0, " ")); + ASSERT_TRUE(HasTextAt(PC, 1, "%")); + ASSERT_TRUE(HasTextAt(PC, 2, " Bbb ")); + ASSERT_TRUE(HasTextAt(PC, 3, "$")); + ASSERT_TRUE(HasTextAt(PC, 4, " ccc")); + } +} TEST_F(CommentParserTest, InlineCommand1) { const char *Source = "// \\c"; |