summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/glsl/pp/sl_pp_define.c6
-rw-r--r--src/glsl/pp/sl_pp_macro.c29
-rw-r--r--src/glsl/pp/sl_pp_macro.h5
-rw-r--r--src/glsl/pp/sl_pp_process.c2
4 files changed, 24 insertions, 18 deletions
diff --git a/src/glsl/pp/sl_pp_define.c b/src/glsl/pp/sl_pp_define.c
index 39d14350641..e8a23fedcd8 100644
--- a/src/glsl/pp/sl_pp_define.c
+++ b/src/glsl/pp/sl_pp_define.c
@@ -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++;
diff --git a/src/glsl/pp/sl_pp_macro.c b/src/glsl/pp/sl_pp_macro.c
index 82591b9d77d..0138270c67b 100644
--- a/src/glsl/pp/sl_pp_macro.c
+++ b/src/glsl/pp/sl_pp_macro.c
@@ -30,13 +30,17 @@
#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++) {
diff --git a/src/glsl/pp/sl_pp_macro.h b/src/glsl/pp/sl_pp_macro.h
index eeb338eec45..63edd21aa24 100644
--- a/src/glsl/pp/sl_pp_macro.h
+++ b/src/glsl/pp/sl_pp_macro.h
@@ -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);
diff --git a/src/glsl/pp/sl_pp_process.c b/src/glsl/pp/sl_pp_process.c
index e930966604c..baffaf2cd95 100644
--- a/src/glsl/pp/sl_pp_process.c
+++ b/src/glsl/pp/sl_pp_process.c
@@ -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;
}