projects
/
mesa.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
547ac28
)
glsl/pp: Expand unknown identifiers to 0 in if/elif expressions.
author
Michal Krol
<michal@vmware.com>
Fri, 20 Nov 2009 07:59:50 +0000
(08:59 +0100)
committer
Michal Krol
<michal@vmware.com>
Fri, 20 Nov 2009 07:59:50 +0000
(08:59 +0100)
src/glsl/pp/sl_pp_if.c
patch
|
blob
|
history
src/glsl/pp/sl_pp_line.c
patch
|
blob
|
history
src/glsl/pp/sl_pp_macro.c
patch
|
blob
|
history
src/glsl/pp/sl_pp_macro.h
patch
|
blob
|
history
src/glsl/pp/sl_pp_process.c
patch
|
blob
|
history
diff --git
a/src/glsl/pp/sl_pp_if.c
b/src/glsl/pp/sl_pp_if.c
index a0b3635dd5a4132bb7473c1cc0d9b875389107c4..6610bc69f3c93772bad946522584c7a21c86a24f 100644
(file)
--- a/
src/glsl/pp/sl_pp_if.c
+++ b/
src/glsl/pp/sl_pp_if.c
@@
-137,7
+137,7
@@
_parse_if(struct sl_pp_context *context,
return -1;
}
} else {
return -1;
}
} else {
- if (sl_pp_macro_expand(context, input, &i, NULL, &state, 0)) {
+ if (sl_pp_macro_expand(context, input, &i, NULL, &state,
sl_pp_macro_expand_unknown_to_
0)) {
free(state.out);
return -1;
}
free(state.out);
return -1;
}
diff --git
a/src/glsl/pp/sl_pp_line.c
b/src/glsl/pp/sl_pp_line.c
index fc2dd89e68b4bd8b525333c28d3b9ae52a7b4788..ed5acc697ce6875e331a031c28380aa87fe20a63 100644
(file)
--- a/
src/glsl/pp/sl_pp_line.c
+++ b/
src/glsl/pp/sl_pp_line.c
@@
-53,7
+53,7
@@
sl_pp_process_line(struct sl_pp_context *context,
break;
case SL_PP_IDENTIFIER:
break;
case SL_PP_IDENTIFIER:
- if (sl_pp_macro_expand(context, input, &i, NULL, &state,
0
)) {
+ if (sl_pp_macro_expand(context, input, &i, NULL, &state,
sl_pp_macro_expand_normal
)) {
free(state.out);
return -1;
}
free(state.out);
return -1;
}
diff --git
a/src/glsl/pp/sl_pp_macro.c
b/src/glsl/pp/sl_pp_macro.c
index d6c32a0e78299e6a4fb04908e0187f0073ff7551..29f1229dd7d835a8994c1067aadfa55e61e8ec5b 100644
(file)
--- a/
src/glsl/pp/sl_pp_macro.c
+++ b/
src/glsl/pp/sl_pp_macro.c
@@
-28,6
+28,7
@@
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
+#include "sl_pp_public.h"
#include "sl_pp_macro.h"
#include "sl_pp_process.h"
#include "sl_pp_macro.h"
#include "sl_pp_process.h"
@@
-122,8
+123,9
@@
sl_pp_macro_expand(struct sl_pp_context *context,
unsigned int *pi,
struct sl_pp_macro *local,
struct sl_pp_process_state *state,
unsigned int *pi,
struct sl_pp_macro *local,
struct sl_pp_process_state *state,
-
int mute
)
+
enum sl_pp_macro_expand_behaviour behaviour
)
{
{
+ int mute = (behaviour == sl_pp_macro_expand_mute);
int macro_name;
struct sl_pp_macro *macro = NULL;
struct sl_pp_macro *actual_arg = NULL;
int macro_name;
struct sl_pp_macro *macro = NULL;
struct sl_pp_macro *actual_arg = NULL;
@@
-183,7
+185,12
@@
sl_pp_macro_expand(struct sl_pp_context *context,
}
if (!macro) {
}
if (!macro) {
- if (!mute) {
+ if (behaviour == sl_pp_macro_expand_unknown_to_0) {
+ if (_out_number(context, state, 0)) {
+ strcpy(context->error_msg, "out of memory");
+ return -1;
+ }
+ } else if (!mute) {
if (sl_pp_process_out(state, &input[*pi])) {
strcpy(context->error_msg, "out of memory");
return -1;
if (sl_pp_process_out(state, &input[*pi])) {
strcpy(context->error_msg, "out of memory");
return -1;
@@
-274,7
+281,7
@@
sl_pp_macro_expand(struct sl_pp_context *context,
break;
case SL_PP_IDENTIFIER:
break;
case SL_PP_IDENTIFIER:
- if (sl_pp_macro_expand(context, input, &i, local, &arg_state,
0
)) {
+ if (sl_pp_macro_expand(context, input, &i, local, &arg_state,
sl_pp_macro_expand_normal
)) {
free(arg_state.out);
return -1;
}
free(arg_state.out);
return -1;
}
@@
-339,7
+346,7
@@
sl_pp_macro_expand(struct sl_pp_context *context,
break;
case SL_PP_IDENTIFIER:
break;
case SL_PP_IDENTIFIER:
- if (sl_pp_macro_expand(context, macro->body, &j, actual_arg, state,
mute
)) {
+ if (sl_pp_macro_expand(context, macro->body, &j, actual_arg, state,
behaviour
)) {
return -1;
}
break;
return -1;
}
break;
diff --git
a/src/glsl/pp/sl_pp_macro.h
b/src/glsl/pp/sl_pp_macro.h
index e3ae2fc71253b6cb3f0c72154df60215ebcb0347..3ad3438236a660c59d55942508fb5190b990be2e 100644
(file)
--- a/
src/glsl/pp/sl_pp_macro.h
+++ b/
src/glsl/pp/sl_pp_macro.h
@@
-56,12
+56,18
@@
sl_pp_macro_free(struct sl_pp_macro *macro);
void
sl_pp_macro_reset(struct sl_pp_macro *macro);
void
sl_pp_macro_reset(struct sl_pp_macro *macro);
+enum sl_pp_macro_expand_behaviour {
+ sl_pp_macro_expand_normal,
+ sl_pp_macro_expand_mute,
+ sl_pp_macro_expand_unknown_to_0
+};
+
int
sl_pp_macro_expand(struct sl_pp_context *context,
const struct sl_pp_token_info *input,
unsigned int *pi,
struct sl_pp_macro *local,
struct sl_pp_process_state *state,
int
sl_pp_macro_expand(struct sl_pp_context *context,
const struct sl_pp_token_info *input,
unsigned int *pi,
struct sl_pp_macro *local,
struct sl_pp_process_state *state,
-
int mute
);
+
enum sl_pp_macro_expand_behaviour behaviour
);
#endif /* SL_PP_MACRO_H */
#endif /* SL_PP_MACRO_H */
diff --git
a/src/glsl/pp/sl_pp_process.c
b/src/glsl/pp/sl_pp_process.c
index 4b783e40b4def68e1204e237ed612d29e11a7e64..e2adc2a0215098b363e0941780e4fbdcf06f75d4 100644
(file)
--- a/
src/glsl/pp/sl_pp_process.c
+++ b/
src/glsl/pp/sl_pp_process.c
@@
-257,7
+257,8
@@
sl_pp_process(struct sl_pp_context *context,
break;
case SL_PP_IDENTIFIER:
break;
case SL_PP_IDENTIFIER:
- if (sl_pp_macro_expand(context, input, &i, NULL, &state, !context->if_value)) {
+ if (sl_pp_macro_expand(context, input, &i, NULL, &state,
+ context->if_value ? sl_pp_macro_expand_normal : sl_pp_macro_expand_mute)) {
return -1;
}
break;
return -1;
}
break;