summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Worth <cworth@cworth.org>2010-06-02 10:48:47 -0700
committerCarl Worth <cworth@cworth.org>2010-06-02 10:57:18 -0700
commit4c22f4dba7a87de4736e01010e361b073a7501c8 (patch)
tree1d93f842e925f261eb84b61269526cb07821c54b
parent2571415d1a7eec72db33cd521ca48fe755c43f9c (diff)
Fix multi-line comment regular expression to handle (non) nested comments.
Ken reminded me of a couple cases that I should be testing. These are the non-nestedness of things that look like nested comments as well as potentially tricky things like "/*/" and "/*/*/". The (non) nested comment case was not working in the case of the comment terminator with multiple '*' characters. We fix this by not considering a '*' as the "non-slash" to terminate a sequence of '*' characters within the comment. We also fix the final match of the terminator to use '+' rather than '*' to require the presence of a final '*' character in the comment terminator.
-rw-r--r--glcpp-lex.l2
-rw-r--r--tests/063-comments.c5
2 files changed, 6 insertions, 1 deletions
diff --git a/glcpp-lex.l b/glcpp-lex.l
index 0954ab7..7bc5fab 100644
--- a/glcpp-lex.l
+++ b/glcpp-lex.l
@@ -53,7 +53,7 @@ HEXADECIMAL_INTEGER 0[xX][0-9a-fA-F]+[uU]?
}
/* Multi-line comments */
-[/][*]([^*]*[*]+[^/])*[^*]*[*]*[/] {
+[/][*]([^*]*[*]+[^*/])*[^*]*[*]+[/] {
if (yyextra->space_tokens)
return SPACE;
}
diff --git a/tests/063-comments.c b/tests/063-comments.c
index 4cda522..e641d2f 100644
--- a/tests/063-comments.c
+++ b/tests/063-comments.c
@@ -13,3 +13,8 @@ and slashes / *** /
and other stuff.
****/
more code here
+/* Test that /* nested
+ comments */
+are not treated like comments.
+/*/ this is a comment */
+/*/*/