diff options
author | Brian Paul <brianp@vmware.com> | 2009-06-10 08:39:58 -0600 |
---|---|---|
committer | Brian Paul <brianp@vmware.com> | 2009-06-10 09:31:01 -0600 |
commit | 506989b20e18be0d2b849ad17710108832040207 (patch) | |
tree | cc115488010a175bdfdce8a774b6a6eb7308eff4 | |
parent | 6f50c9865d96a704cf47f59c3c21b4686bddf1f8 (diff) |
glsl: Fix symbol replacement handling in preprocessor.
(cherry picked from master, commit d9617deb008b75f4a605a30408aeb1948139c33e)
-rw-r--r-- | src/mesa/shader/slang/slang_preprocess.c | 28 |
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; |