diff options
author | Michal Krol <michal@vmware.com> | 2009-09-04 15:27:08 +0200 |
---|---|---|
committer | Michal Krol <michal@vmware.com> | 2009-09-04 15:27:08 +0200 |
commit | 9d8314b5a8d724ccad71f3505e283e01668e3138 (patch) | |
tree | e5e7dc17fd231d8ab44d41ab622ddf1b51ddd3c0 | |
parent | 28dfa0b2842080b16380f612b9ec380327db7714 (diff) |
glsl: Handle file numbering.
-rw-r--r-- | src/glsl/pp/sl_pp_context.c | 1 | ||||
-rw-r--r-- | src/glsl/pp/sl_pp_context.h | 1 | ||||
-rw-r--r-- | src/glsl/pp/sl_pp_line.c | 21 | ||||
-rw-r--r-- | src/glsl/pp/sl_pp_macro.c | 3 | ||||
-rw-r--r-- | src/glsl/pp/sl_pp_token.h | 2 |
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 { |