glsl: Centralise sl_pp_macro constructor.
authorMichal Krol <michal@vmware.com>
Mon, 22 Jun 2009 07:14:14 +0000 (09:14 +0200)
committerMichal Krol <michal@vmware.com>
Mon, 7 Sep 2009 08:11:48 +0000 (10:11 +0200)
src/glsl/pp/sl_pp_define.c
src/glsl/pp/sl_pp_macro.c
src/glsl/pp/sl_pp_macro.h
src/glsl/pp/sl_pp_process.c

index 39d14350641acfe45dc3166b530c8984c96ca908..e8a23fedcd8d3175fec9f9ed51cece8f3350ae9b 100644 (file)
@@ -112,12 +112,6 @@ sl_pp_process_define(struct sl_pp_context *context,
    unsigned int body_len;
    unsigned int j;
 
-   macro->name = -1;
-   macro->num_args = -1;
-   macro->arg = NULL;
-   macro->body = NULL;
-   macro->next = NULL;
-
    if (first < last && input[first].token == SL_PP_IDENTIFIER) {
       macro->name = input[first].data.identifier;
       first++;
index 82591b9d77d16b569b2527caad3af15ca3ec66c8..0138270c67b5e30e7348defda2a1f7de3ab9e387 100644 (file)
 #include "sl_pp_process.h"
 
 
-static void
-skip_whitespace(const struct sl_pp_token_info *input,
-                unsigned int *pi)
+struct sl_pp_macro *
+sl_pp_macro_new(void)
 {
-   while (input[*pi].token == SL_PP_WHITESPACE) {
-      (*pi)++;
+   struct sl_pp_macro *macro;
+
+   macro = calloc(1, sizeof(struct sl_pp_macro));
+   if (macro) {
+      macro->name = -1;
+      macro->num_args = -1;
    }
+   return macro;
 }
 
 void
@@ -60,6 +64,15 @@ sl_pp_macro_free(struct sl_pp_macro *macro)
    }
 }
 
+static void
+skip_whitespace(const struct sl_pp_token_info *input,
+                unsigned int *pi)
+{
+   while (input[*pi].token == SL_PP_WHITESPACE) {
+      (*pi)++;
+   }
+}
+
 int
 sl_pp_macro_expand(struct sl_pp_context *context,
                    const struct sl_pp_token_info *input,
@@ -124,16 +137,12 @@ sl_pp_macro_expand(struct sl_pp_context *context,
          unsigned int paren_nesting = 0;
          unsigned int k;
 
-         *pmacro = malloc(sizeof(struct sl_pp_macro));
+         *pmacro = sl_pp_macro_new();
          if (!*pmacro) {
             return -1;
          }
 
          (**pmacro).name = formal_arg->name;
-         (**pmacro).num_args = -1;
-         (**pmacro).arg = NULL;
-         (**pmacro).body = NULL;
-         (**pmacro).next = NULL;
 
          body_len = 1;
          for (i = *pi; !done; i++) {
index eeb338eec458cc09075f4c9dd669a07438ed72b2..63edd21aa2482fa8f8795134cca995525a9b48bc 100644 (file)
@@ -38,12 +38,15 @@ struct sl_pp_macro_formal_arg {
 
 struct sl_pp_macro {
    int name;
-   int num_args;
+   int num_args;                       /* -1 means no args, 0 means `()' */
    struct sl_pp_macro_formal_arg *arg;
    struct sl_pp_token_info *body;
    struct sl_pp_macro *next;
 };
 
+struct sl_pp_macro *
+sl_pp_macro_new(void);
+
 void
 sl_pp_macro_free(struct sl_pp_macro *macro);
 
index e930966604cd1c38c0c2c1e97807a3315bf70476..baffaf2cd956f02edc384423d4fdf9a5f290047e 100644 (file)
@@ -133,7 +133,7 @@ sl_pp_process(struct sl_pp_context *context,
                last = i - 1;
 
                if (!strcmp(name, "define")) {
-                  *macro = malloc(sizeof(struct sl_pp_macro));
+                  *macro = sl_pp_macro_new();
                   if (!*macro) {
                      return -1;
                   }