glsl: Centralise sl_pp_macro constructor.

This commit is contained in:
Michal Krol 2009-06-22 09:14:14 +02:00
parent 6a11d4150c
commit 2dad8ed9d6
4 changed files with 24 additions and 18 deletions

View 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++;

View file

@ -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++) {

View 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);

View 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;
}