summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichal Krol <michal@vmware.com>2009-09-04 15:27:08 +0200
committerMichal Krol <michal@vmware.com>2009-09-04 15:27:08 +0200
commit9d8314b5a8d724ccad71f3505e283e01668e3138 (patch)
treee5e7dc17fd231d8ab44d41ab622ddf1b51ddd3c0
parent28dfa0b2842080b16380f612b9ec380327db7714 (diff)
glsl: Handle file numbering.
-rw-r--r--src/glsl/pp/sl_pp_context.c1
-rw-r--r--src/glsl/pp/sl_pp_context.h1
-rw-r--r--src/glsl/pp/sl_pp_line.c21
-rw-r--r--src/glsl/pp/sl_pp_macro.c3
-rw-r--r--src/glsl/pp/sl_pp_token.h2
5 files changed, 25 insertions, 3 deletions
diff --git a/src/glsl/pp/sl_pp_context.c b/src/glsl/pp/sl_pp_context.c
index 6aaf76828c..2fca3791a2 100644
--- a/src/glsl/pp/sl_pp_context.c
+++ b/src/glsl/pp/sl_pp_context.c
@@ -38,6 +38,7 @@ sl_pp_context_init(struct sl_pp_context *context)
context->if_value = 1;
memset(context->error_msg, 0, sizeof(context->error_msg));
context->line = 1;
+ context->file = 0;
}
void
diff --git a/src/glsl/pp/sl_pp_context.h b/src/glsl/pp/sl_pp_context.h
index d656648d0d..c7e6770f44 100644
--- a/src/glsl/pp/sl_pp_context.h
+++ b/src/glsl/pp/sl_pp_context.h
@@ -50,6 +50,7 @@ struct sl_pp_context {
char error_msg[SL_PP_MAX_ERROR_MSG];
unsigned int line;
+ unsigned int file;
};
void
diff --git a/src/glsl/pp/sl_pp_line.c b/src/glsl/pp/sl_pp_line.c
index 9b9f45dced..a56417a861 100644
--- a/src/glsl/pp/sl_pp_line.c
+++ b/src/glsl/pp/sl_pp_line.c
@@ -134,7 +134,26 @@ sl_pp_process_line(struct sl_pp_context *context,
context->line = line;
}
- /* TODO: Do something with the file number. */
+ if (file_number != -1) {
+ unsigned int file;
+
+ str = sl_pp_context_cstr(context, file_number);
+ if (_parse_integer(str, &file)) {
+ return -1;
+ }
+
+ if (context->file != file) {
+ struct sl_pp_token_info ti;
+
+ ti.token = SL_PP_FILE;
+ ti.data.file = file;
+ if (sl_pp_process_out(pstate, &ti)) {
+ return -1;
+ }
+
+ context->file = file;
+ }
+ }
return 0;
}
diff --git a/src/glsl/pp/sl_pp_macro.c b/src/glsl/pp/sl_pp_macro.c
index b6214f66ed..d14c982555 100644
--- a/src/glsl/pp/sl_pp_macro.c
+++ b/src/glsl/pp/sl_pp_macro.c
@@ -138,9 +138,8 @@ sl_pp_macro_expand(struct sl_pp_context *context,
(*pi)++;
return 0;
}
- /* TODO: Having the following built-ins hardcoded is a bit lame. */
if (!strcmp(macro_str, "__FILE__")) {
- if (!mute && _out_number(context, state, 0)) {
+ if (!mute && _out_number(context, state, context->file)) {
return -1;
}
(*pi)++;
diff --git a/src/glsl/pp/sl_pp_token.h b/src/glsl/pp/sl_pp_token.h
index b347e5cf7a..5901959383 100644
--- a/src/glsl/pp/sl_pp_token.h
+++ b/src/glsl/pp/sl_pp_token.h
@@ -97,6 +97,7 @@ enum sl_pp_token {
SL_PP_EXTENSION_DISABLE,
SL_PP_LINE,
+ SL_PP_FILE,
SL_PP_EOF
};
@@ -108,6 +109,7 @@ union sl_pp_token_data {
int pragma;
int extension;
unsigned int line;
+ unsigned int file;
};
struct sl_pp_token_info {