glsl/glcpp: Add explicit error for "#define without macro name"
authorCarl Worth <cworth@cworth.org>
Wed, 2 Jul 2014 00:40:28 +0000 (17:40 -0700)
committerIan Romanick <ian.d.romanick@intel.com>
Thu, 7 Aug 2014 23:08:28 +0000 (16:08 -0700)
commita196ab1f8aacf657e591a0a15c80c3f37b9496b0
tree3ccc4e58c34408990b44f6c6ffa3ccbfa2c57500
parentb6ab52b7f941b689753d4b9af7d58083e6917fd6
glsl/glcpp: Add explicit error for "#define without macro name"

Previously, glcpp would emit an error like this if <EOF> happened to occur
immediately after the "#define", but in general would just get confused,
(leading to un-helpful error messages).

To fix things to generate a clean error message, we do a few things:

1. Don't require horizontal whitespace immediately after #define

2. Add a production for the error case, (DEFINE_TOKEN followed
   immediately by a NEWLINE token).

3. Make the lexer reset to the <INITIAL> state after every NEWLINE.

This 3rd point prevents the lexer from getting so confused and generating
further spurious errors in the file because it was stuck in the <DEFINE> start
condition.

We also drop the similar error message from the <EOF> rule since the
newly-added rule will have already printed the error message.

Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
src/glsl/glcpp/glcpp-lex.l
src/glsl/glcpp/glcpp-parse.y
src/glsl/glcpp/tests/132-eof-without-newline-define.c.expected