glsl/glcpp: Fix preprocessor error condition for macro redefinition

This patch specifically fixes redefinition condition for white space
changes. #define and #undef functionality in GLSL follows the standard
for C++ preprocessors for macro definitions.

From https://gcc.gnu.org/onlinedocs/cpp/Undefining-and-Redefining-Macros.html:

These definitions are effectively the same:

     #define FOUR (2 + 2)
     #define FOUR         (2    +    2)
     #define FOUR (2 /* two */ + 2)

but these are not:

     #define FOUR (2 + 2)
     #define FOUR ( 2+2 )
     #define FOUR (2 * 2)
     #define FOUR(score,and,seven,years,ago) (2 + 2)

Fixes Khronos GLES3 CTS tests;
invalid_object_whitespace_vertex
invalid_object_whitespace_fragment

Signed-off-by: Anuj Phogat <anuj.phogat@gmail.com>
Reviewed-by: Carl Worth <cworth@cworth.org>
This commit is contained in:
Anuj Phogat 2014-06-06 16:56:59 -07:00 committed by Carl Worth
parent 1a46dd6edd
commit a6e9cd14ca

View file

@ -939,14 +939,16 @@ _token_list_equal_ignoring_space (token_list_t *a, token_list_t *b)
if (node_a == NULL || node_b == NULL)
return 0;
if (node_a->token->type == SPACE) {
node_a = node_a->next;
continue;
}
if (node_b->token->type == SPACE) {
node_b = node_b->next;
/* Make sure whitespace appears in the same places in both.
* It need not be exactly the same amount of whitespace,
* though.
*/
if (node_a->token->type == SPACE
&& node_b->token->type == SPACE) {
while (node_a->token->type == SPACE)
node_a = node_a->next;
while (node_b->token->type == SPACE)
node_b = node_b->next;
continue;
}