[cfe-commits] r159303 - in /cfe/trunk: lib/AST/CommentLexer.cpp unittests/AST/CommentLexer.cpp
Dmitri Gribenko
gribozavr at gmail.com
Wed Jun 27 16:28:29 PDT 2012
Author: gribozavr
Date: Wed Jun 27 18:28:29 2012
New Revision: 159303
URL: http://llvm.org/viewvc/llvm-project?rev=159303&view=rev
Log:
Fix an infinite loop in comment lexer: we were not advancing in the input character stream when we saw a '<' that is not a start of an HTML tag.
Modified:
cfe/trunk/lib/AST/CommentLexer.cpp
cfe/trunk/unittests/AST/CommentLexer.cpp
Modified: cfe/trunk/lib/AST/CommentLexer.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/CommentLexer.cpp?rev=159303&r1=159302&r2=159303&view=diff
==============================================================================
--- cfe/trunk/lib/AST/CommentLexer.cpp (original)
+++ cfe/trunk/lib/AST/CommentLexer.cpp Wed Jun 27 18:28:29 2012
@@ -357,6 +357,11 @@
setupAndLexHTMLOpenTag(T);
else if (C == '/')
lexHTMLCloseTag(T);
+ else {
+ StringRef Text(BufferPtr, TokenPtr - BufferPtr);
+ formTokenWithChars(T, TokenPtr, tok::text);
+ T.setText(Text);
+ }
return;
}
Modified: cfe/trunk/unittests/AST/CommentLexer.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/AST/CommentLexer.cpp?rev=159303&r1=159302&r2=159303&view=diff
==============================================================================
--- cfe/trunk/unittests/AST/CommentLexer.cpp (original)
+++ cfe/trunk/unittests/AST/CommentLexer.cpp Wed Jun 27 18:28:29 2012
@@ -683,6 +683,28 @@
}
TEST_F(CommentLexerTest, HTML2) {
+ const char *Source =
+ "// < tag";
+
+ std::vector<Token> Toks;
+
+ lexString(Source, Toks);
+
+ ASSERT_EQ(4U, Toks.size());
+
+ ASSERT_EQ(tok::text, Toks[0].getKind());
+ ASSERT_EQ(StringRef(" "), Toks[0].getText());
+
+ ASSERT_EQ(tok::text, Toks[1].getKind());
+ ASSERT_EQ(StringRef("<"), Toks[1].getText());
+
+ ASSERT_EQ(tok::text, Toks[2].getKind());
+ ASSERT_EQ(StringRef(" tag"), Toks[2].getText());
+
+ ASSERT_EQ(tok::newline, Toks[3].getKind());
+}
+
+TEST_F(CommentLexerTest, HTML3) {
const char *Sources[] = {
"// <tag",
"// <tag "
@@ -705,7 +727,7 @@
}
}
-TEST_F(CommentLexerTest, HTML3) {
+TEST_F(CommentLexerTest, HTML4) {
const char *Source = "// <tag=";
std::vector<Token> Toks;
@@ -726,7 +748,7 @@
ASSERT_EQ(tok::newline, Toks[3].getKind());
}
-TEST_F(CommentLexerTest, HTML4) {
+TEST_F(CommentLexerTest, HTML5) {
const char *Sources[] = {
"// <tag attr",
"// <tag attr "
@@ -752,7 +774,7 @@
}
}
-TEST_F(CommentLexerTest, HTML5) {
+TEST_F(CommentLexerTest, HTML6) {
const char *Sources[] = {
"// <tag attr=",
"// <tag attr ="
@@ -780,7 +802,7 @@
}
}
-TEST_F(CommentLexerTest, HTML6) {
+TEST_F(CommentLexerTest, HTML7) {
const char *Sources[] = {
"// <tag attr=\"",
"// <tag attr = \"",
@@ -813,7 +835,7 @@
}
}
-TEST_F(CommentLexerTest, HTML7) {
+TEST_F(CommentLexerTest, HTML8) {
const char *Source = "// <tag attr=@";
std::vector<Token> Toks;
@@ -839,7 +861,7 @@
ASSERT_EQ(tok::newline, Toks[5].getKind());
}
-TEST_F(CommentLexerTest, HTML8) {
+TEST_F(CommentLexerTest, HTML9) {
const char *Sources[] = {
"// <tag attr=\"val\\\"\\'val",
"// <tag attr=\"val\\\"\\'val\"",
@@ -872,7 +894,7 @@
}
}
-TEST_F(CommentLexerTest, HTML9) {
+TEST_F(CommentLexerTest, HTML10) {
const char *Sources[] = {
"// <tag attr=\"val\\\"\\'val\">",
"// <tag attr=\'val\\\"\\'val\'>"
@@ -905,7 +927,7 @@
}
}
-TEST_F(CommentLexerTest, HTML10) {
+TEST_F(CommentLexerTest, HTML11) {
const char *Source = "// </";
std::vector<Token> Toks;
@@ -924,7 +946,7 @@
}
-TEST_F(CommentLexerTest, HTML11) {
+TEST_F(CommentLexerTest, HTML12) {
const char *Source = "// </@";
std::vector<Token> Toks;
@@ -945,7 +967,7 @@
ASSERT_EQ(tok::newline, Toks[3].getKind());
}
-TEST_F(CommentLexerTest, HTML12) {
+TEST_F(CommentLexerTest, HTML13) {
const char *Sources[] = {
"// </tag",
"// </tag>",
More information about the cfe-commits
mailing list