glsl: Implement `undef' preprocessor directive.

This commit is contained in:
Michal Krol
2009-06-26 12:48:14 +02:00
parent a294715612
commit 3dc2b5f71c
3 changed files with 54 additions and 9 deletions
+35
View File
@@ -176,3 +176,38 @@ sl_pp_process_define(struct sl_pp_context *context,
return 0;
}
int
sl_pp_process_undef(struct sl_pp_context *context,
const struct sl_pp_token_info *input,
unsigned int first,
unsigned int last)
{
int macro_name = -1;
struct sl_pp_macro **pmacro;
struct sl_pp_macro *macro;
if (first < last && input[first].token == SL_PP_IDENTIFIER) {
macro_name = input[first].data.identifier;
}
if (macro_name == -1) {
return 0;
}
for (pmacro = &context->macro; *pmacro; pmacro = &(**pmacro).next) {
if ((**pmacro).name == macro_name) {
break;
}
}
if (!*pmacro) {
return 0;
}
macro = *pmacro;
*pmacro = macro->next;
macro->next = NULL;
sl_pp_macro_free(macro);
return 0;
}
+13 -9
View File
@@ -122,13 +122,7 @@ sl_pp_process(struct sl_pp_context *context,
last = i - 1;
if (!strcmp(name, "define")) {
if (context->if_value) {
if (sl_pp_process_define(context, input, first, last)) {
return -1;
}
}
} else if (!strcmp(name, "if")) {
if (!strcmp(name, "if")) {
if (sl_pp_process_if(context, input, first, last)) {
return -1;
}
@@ -152,8 +146,18 @@ sl_pp_process(struct sl_pp_context *context,
if (sl_pp_process_endif(context, input, first, last)) {
return -1;
}
} else {
/* XXX: Ignore. */
} else if (context->if_value) {
if (!strcmp(name, "define")) {
if (sl_pp_process_define(context, input, first, last)) {
return -1;
}
} else if (!strcmp(name, "undef")) {
if (sl_pp_process_undef(context, input, first, last)) {
return -1;
}
} else {
/* XXX: Ignore. */
}
}
}
break;
+6
View File
@@ -50,6 +50,12 @@ sl_pp_process_define(struct sl_pp_context *context,
unsigned int first,
unsigned int last);
int
sl_pp_process_undef(struct sl_pp_context *context,
const struct sl_pp_token_info *input,
unsigned int first,
unsigned int last);
int
sl_pp_process_if(struct sl_pp_context *context,
const struct sl_pp_token_info *input,