summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--glcpp-lex.l11
-rw-r--r--tests/063-comments.c15
-rwxr-xr-xtests/glcpp-test4
3 files changed, 28 insertions, 2 deletions
diff --git a/glcpp-lex.l b/glcpp-lex.l
index a51d9e185f..0954ab7e83 100644
--- a/glcpp-lex.l
+++ b/glcpp-lex.l
@@ -47,6 +47,17 @@ HEXADECIMAL_INTEGER 0[xX][0-9a-fA-F]+[uU]?
%%
+ /* Single-line comments */
+"//"[^\n]+\n {
+ return NEWLINE;
+}
+
+ /* Multi-line comments */
+[/][*]([^*]*[*]+[^/])*[^*]*[*]*[/] {
+ if (yyextra->space_tokens)
+ return SPACE;
+}
+
{HASH}if/.*\n {
yyextra->lexing_if = 1;
yyextra->space_tokens = 0;
diff --git a/tests/063-comments.c b/tests/063-comments.c
new file mode 100644
index 0000000000..4cda52236e
--- /dev/null
+++ b/tests/063-comments.c
@@ -0,0 +1,15 @@
+/* this is a comment */
+// so is this
+// */
+f = g/**//h;
+/*//*/l();
+m = n//**/o
++ p;
+/* this
+comment spans
+multiple lines and
+contains *** stars
+and slashes / *** /
+and other stuff.
+****/
+more code here
diff --git a/tests/glcpp-test b/tests/glcpp-test
index ba398af0d5..24110333a5 100755
--- a/tests/glcpp-test
+++ b/tests/glcpp-test
@@ -3,8 +3,8 @@
for test in *.c; do
echo "Testing $test"
../glcpp < $test > $test.glcpp
- grep -v '^$' < $test.glcpp > $test.out || true
+ grep -v '^ *$' < $test.glcpp > $test.out || true
gcc -E $test -o $test.gcc
- grep -v '^#' < $test.gcc | grep -v '^$' > $test.expected || true
+ grep -v '^#' < $test.gcc | grep -v '^$' | sed -r -e 's/^ +/ /' > $test.expected || true
diff -u $test.expected $test.out
done