mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-22 02:40:11 +01:00
Implement comment handling in the lexer (with test).
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.
This commit is contained in:
parent
a771a40e22
commit
2571415d1a
3 changed files with 28 additions and 2 deletions
11
glcpp-lex.l
11
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;
|
||||
|
|
|
|||
15
tests/063-comments.c
Normal file
15
tests/063-comments.c
Normal file
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue