glsl: glcpp: Move handling of #line directives from lexer to parser.
authorCarl Worth <cworth@cworth.org>
Sat, 9 Jun 2012 23:31:06 +0000 (16:31 -0700)
committerCarl Worth <cworth@cworth.org>
Tue, 26 Jun 2012 22:23:49 +0000 (15:23 -0700)
commitaac78ce8234d96932c38b3f48b1d828077bc0027
treea4e067870c6e57d69aeb68f8ea6717adf4cdee78
parent39f8c46eaa4d1c3b072cd97d256fe973c1791b14
glsl: glcpp: Move handling of #line directives from lexer to parser.

The GLSL specification requires that #line directives be interpreted
after macro expansion. Our existing implementation of #line macros in
the lexer prevents conformance on this point.

Moving the handling of #line from the lexer to the parser gives us the
macro expansion we need. An additional benefit is that the
preprocessor also now supports comments on the same line as #line
directives.

Finally, the preprocessor now emits the (fully-macro-expanded) #line
directives into the output. This allows the full GLSL compiler to also
see and interpret these directives so it can also generate correct
line numbers in error messages.

Signed-off-by: Carl Worth <cworth@cworth.org>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/glsl/glcpp/glcpp-lex.l
src/glsl/glcpp/glcpp-parse.y
src/glsl/glcpp/glcpp.h
src/glsl/glcpp/tests/091-hash-line.c.expected