summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian Paul <brianp@vmware.com>2009-06-10 08:39:58 -0600
committerBrian Paul <brianp@vmware.com>2009-06-10 09:31:01 -0600
commit506989b20e18be0d2b849ad17710108832040207 (patch)
treecc115488010a175bdfdce8a774b6a6eb7308eff4
parent6f50c9865d96a704cf47f59c3c21b4686bddf1f8 (diff)
glsl: Fix symbol replacement handling in preprocessor.
(cherry picked from master, commit d9617deb008b75f4a605a30408aeb1948139c33e)
-rw-r--r--src/mesa/shader/slang/slang_preprocess.c28
1 files changed, 15 insertions, 13 deletions
diff --git a/src/mesa/shader/slang/slang_preprocess.c b/src/mesa/shader/slang/slang_preprocess.c
index 0e95cdb525..f73400dbc6 100644
--- a/src/mesa/shader/slang/slang_preprocess.c
+++ b/src/mesa/shader/slang/slang_preprocess.c
@@ -1012,8 +1012,6 @@ preprocess_source (slang_string *output, const char *source,
case TOKEN_DEFINE:
{
pp_symbol *symbol = NULL;
- slang_string replacement;
- expand_state es;
/* Parse macro name. */
id = (const char *) (&prod[i]);
@@ -1055,21 +1053,25 @@ preprocess_source (slang_string *output, const char *source,
id = (const char *) (&prod[i]);
idlen = _mesa_strlen (id);
if (state.cond.top->effective) {
+ slang_string replacement;
+ expand_state es;
+
pp_annotate (output, ") %s", id);
- }
- slang_string_init(&replacement);
- slang_string_pushs(&replacement, id, idlen);
- i += idlen + 1;
- /* Expand macro replacement. */
- es.output = &symbol->replacement;
- es.input = slang_string_cstr(&replacement);
- es.state = &state;
- if (!expand(&es, &state.symbols)) {
+ slang_string_init(&replacement);
+ slang_string_pushs(&replacement, id, idlen);
+
+ /* Expand macro replacement. */
+ es.output = &symbol->replacement;
+ es.input = slang_string_cstr(&replacement);
+ es.state = &state;
+ if (!expand(&es, &state.symbols)) {
+ slang_string_free(&replacement);
+ goto error;
+ }
slang_string_free(&replacement);
- goto error;
}
- slang_string_free(&replacement);
+ i += idlen + 1;
}
break;