glcpp: Fix so that trailing punctuation does not prevent macro expansion
authorCarl Worth <cworth@cworth.org>
Sat, 21 Jan 2012 17:24:11 +0000 (09:24 -0800)
committerCarl Worth <cworth@cworth.org>
Thu, 2 Feb 2012 20:05:21 +0000 (12:05 -0800)
commit7ab1c7f7926c75a07f33eb149d0fc17dcfaffd5e
treeb443754439bfedbe61527857afd87f74a24f88f9
parente931b0e05b19259b0f5b53faf73b375013ab1cb3
glcpp: Fix so that trailing punctuation does not prevent macro expansion

The trick here is that flex always chooses the rule that matches the most
text. So with a input text of "two:" which we want to be lexed as an
IDENTIFIER token "two" followed by an OTHER token ":" the previous OTHER
rule would match longer as a single token of "two:" which we don't want.

We prevent this by forcing the OTHER pattern to never match any
characters that appear in other constructs, (no letters, numbers, #,
_, whitespace, nor any punctuation that appear in CPP operators).

Fixes bug #44764:

GLSL preprocessor doesn't replace defines ending with ":"
https://bugs.freedesktop.org/show_bug.cgi?id=44764

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
NOTE: This is a candidate for stable release branches.
src/glsl/glcpp/glcpp-lex.l