Mesa (master): glsl: Fix symbol replacement handling in preprocessor.

Michał Król michal at kemper.freedesktop.org
Wed Jun 10 10:15:41 UTC 2009


Module: Mesa
Branch: master
Commit: d9617deb008b75f4a605a30408aeb1948139c33e
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=d9617deb008b75f4a605a30408aeb1948139c33e

Author: Michal Krol <michal at vmware.com>
Date:   Wed Jun 10 12:15:13 2009 +0200

glsl: Fix symbol replacement handling in preprocessor.

---

 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 f9390f7..15cd1ec 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;
 




More information about the mesa-commit mailing list