diff options
author | Brian Paul <[email protected]> | 2009-06-09 09:14:38 -0600 |
---|---|---|
committer | Brian Paul <[email protected]> | 2009-06-09 09:14:38 -0600 |
commit | cb549775a577cc5c86fefdc7e208b9d5e1d25217 (patch) | |
tree | 0e8a27f516ff64a7c97fc21c0112621e672e9e68 /src/mesa/shader/slang/slang_preprocess.c | |
parent | 34bb024cf2d02d5d5cb672ead05fa131bdff6dd8 (diff) |
glsl: Expand nested preprocessor macros.
(cherry picked from master, commit ef8caec29ae73bb2bbeb48f0578d839ef29348cd)
Diffstat (limited to 'src/mesa/shader/slang/slang_preprocess.c')
-rw-r--r-- | src/mesa/shader/slang/slang_preprocess.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/src/mesa/shader/slang/slang_preprocess.c b/src/mesa/shader/slang/slang_preprocess.c index fd98fae360b..0e95cdb525e 100644 --- a/src/mesa/shader/slang/slang_preprocess.c +++ b/src/mesa/shader/slang/slang_preprocess.c @@ -1012,6 +1012,8 @@ 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]); @@ -1054,9 +1056,20 @@ preprocess_source (slang_string *output, const char *source, idlen = _mesa_strlen (id); if (state.cond.top->effective) { pp_annotate (output, ") %s", id); - slang_string_pushs (&symbol->replacement, id, idlen); } + 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_free(&replacement); + goto error; + } + slang_string_free(&replacement); } break; |