summaryrefslogtreecommitdiffstats
path: root/src/mesa/shader/slang/slang_preprocess.c
diff options
context:
space:
mode:
authorBrian Paul <[email protected]>2009-06-09 09:14:38 -0600
committerBrian Paul <[email protected]>2009-06-09 09:14:38 -0600
commitcb549775a577cc5c86fefdc7e208b9d5e1d25217 (patch)
tree0e8a27f516ff64a7c97fc21c0112621e672e9e68 /src/mesa/shader/slang/slang_preprocess.c
parent34bb024cf2d02d5d5cb672ead05fa131bdff6dd8 (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.c15
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;