We support both single-line (//) and multi-line (/* ... */) comments
and add a test for this, (trying to stress the rules just a bit by
embedding one comment delimiter into a comment delimited with the
other style, etc.).
To keep the test suite passing we do now discard any output lines from
glcpp that consist only of spacing, (in addition to blank lines as
previously). We also discard any initial whitespace from gcc output.
In neither case should the absence or presence of this whitespace
affect correctness.
%%
+ /* 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;
--- /dev/null
+/* 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
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