glsl: Rework reserved word/keyword handling in the lexer.
authorKenneth Graunke <kenneth@whitecape.org>
Sun, 14 Nov 2010 04:32:59 +0000 (20:32 -0800)
committerKenneth Graunke <kenneth@whitecape.org>
Mon, 15 Nov 2010 21:33:57 +0000 (13:33 -0800)
commit285036fbb03d7f10a8b93774d0290a33ea2e5e13
treeebc407a100939b4297977829447cdb953a0e4162
parent5dc74e9c77de7d30ac08c25f224ffa93006d8d7c
glsl: Rework reserved word/keyword handling in the lexer.

This consolidates the TOKEN_OR_IDENTIFIER and RESERVED_WORD macros into
a single KEYWORD macro.

The old TOKEN_OR_IDENTIFIER macros handled the case of a word going from
an identifier to a keyword; the RESERVED_WORD macro handled a word going
from a reserved word to a language keyword.  However, neither could
properly handle samplerBuffer (for example), which is an identifier in
1.10 and 1.20, a reserved word in 1.30, and a keyword in 1.40 and on.

Furthermore, the existing macros didn't properly handle reserved words
in GLSL ES 1.00.  The best they could do was return a token (rather than
an identifier), resulting in an obtuse parser error, rather than a
user-friendly "you used a reserved word" error message.
src/glsl/glsl_lexer.lpp