diff options
Diffstat (limited to 'src/glsl')
-rw-r--r-- | src/glsl/pp/sl_pp_if.c | 72 |
1 files changed, 30 insertions, 42 deletions
diff --git a/src/glsl/pp/sl_pp_if.c b/src/glsl/pp/sl_pp_if.c index f12f0f142c6..3ddbcc84af8 100644 --- a/src/glsl/pp/sl_pp_if.c +++ b/src/glsl/pp/sl_pp_if.c @@ -32,15 +32,35 @@ static int +_macro_is_defined(struct sl_pp_context *context, + int macro_name) +{ + unsigned int i; + struct sl_pp_macro *macro; + + for (i = 0; i < context->num_extensions; i++) { + if (macro_name == context->extensions[i].name) { + return 1; + } + } + + for (macro = context->macro; macro; macro = macro->next) { + if (macro_name == macro->name) { + return 1; + } + } + + return 0; +} + +static int _parse_defined(struct sl_pp_context *context, struct sl_pp_token_buffer *buffer, struct sl_pp_process_state *state) { struct sl_pp_token_info input; int parens = 0; - int macro_name; - struct sl_pp_macro *macro; - int defined = 0; + int defined; struct sl_pp_token_info result; if (sl_pp_token_buffer_skip_white(buffer, &input)) { @@ -59,13 +79,7 @@ _parse_defined(struct sl_pp_context *context, return -1; } - macro_name = input.data.identifier; - for (macro = context->macro; macro; macro = macro->next) { - if (macro->name == macro_name) { - defined = 1; - break; - } - } + defined = _macro_is_defined(context, input.data.identifier); if (parens) { if (sl_pp_token_buffer_skip_white(buffer, &input)) { @@ -218,22 +232,9 @@ sl_pp_process_ifdef(struct sl_pp_context *context, for (i = first; i < last; i++) { switch (input[i].token) { case SL_PP_IDENTIFIER: - { - struct sl_pp_macro *macro; - int macro_name = input[i].data.identifier; - int defined = 0; - - for (macro = context->macro; macro; macro = macro->next) { - if (macro->name == macro_name) { - defined = 1; - break; - } - } - - context->if_ptr--; - context->if_stack[context->if_ptr] = defined ? 1 : 0; - context->if_value = _evaluate_if_stack(context); - } + context->if_ptr--; + context->if_stack[context->if_ptr] = _macro_is_defined(context, input[i].data.identifier); + context->if_value = _evaluate_if_stack(context); return 0; case SL_PP_WHITESPACE: @@ -265,22 +266,9 @@ sl_pp_process_ifndef(struct sl_pp_context *context, for (i = first; i < last; i++) { switch (input[i].token) { case SL_PP_IDENTIFIER: - { - struct sl_pp_macro *macro; - int macro_name = input[i].data.identifier; - int defined = 0; - - for (macro = context->macro; macro; macro = macro->next) { - if (macro->name == macro_name) { - defined = 1; - break; - } - } - - context->if_ptr--; - context->if_stack[context->if_ptr] = defined ? 0 : 1; - context->if_value = _evaluate_if_stack(context); - } + context->if_ptr--; + context->if_stack[context->if_ptr] = !_macro_is_defined(context, input[i].data.identifier); + context->if_value = _evaluate_if_stack(context); return 0; case SL_PP_WHITESPACE: |