diff options
author | Carl Worth <cworth@cworth.org> | 2014-07-01 17:40:28 -0700 |
---|---|---|
committer | Ian Romanick <ian.d.romanick@intel.com> | 2014-08-07 16:08:28 -0700 |
commit | a196ab1f8aacf657e591a0a15c80c3f37b9496b0 (patch) | |
tree | 3ccc4e58c34408990b44f6c6ffa3ccbfa2c57500 /src/glsl/glcpp/glcpp-parse.y | |
parent | b6ab52b7f941b689753d4b9af7d58083e6917fd6 (diff) | |
download | external_mesa3d-a196ab1f8aacf657e591a0a15c80c3f37b9496b0.zip external_mesa3d-a196ab1f8aacf657e591a0a15c80c3f37b9496b0.tar.gz external_mesa3d-a196ab1f8aacf657e591a0a15c80c3f37b9496b0.tar.bz2 |
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>
Diffstat (limited to 'src/glsl/glcpp/glcpp-parse.y')
-rw-r--r-- | src/glsl/glcpp/glcpp-parse.y | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/src/glsl/glcpp/glcpp-parse.y b/src/glsl/glcpp/glcpp-parse.y index e2e8aca..25da2a5 100644 --- a/src/glsl/glcpp/glcpp-parse.y +++ b/src/glsl/glcpp/glcpp-parse.y @@ -424,6 +424,9 @@ control_line_error: HASH_TOKEN ERROR_TOKEN NEWLINE { glcpp_error(& @1, parser, "#%s", $2); } +| HASH_TOKEN DEFINE_TOKEN NEWLINE { + glcpp_error (& @1, parser, "#define without macro name"); + } | HASH_TOKEN GARBAGE pp_tokens NEWLINE { glcpp_error (& @1, parser, "Illegal non-directive after #"); } |