diff options
author | Michal Krol <michal@vmware.com> | 2009-12-19 09:55:27 +0100 |
---|---|---|
committer | Michal Krol <michal@vmware.com> | 2009-12-20 21:18:57 +0100 |
commit | e9aa65d2b751f81fecd365fd6a550562417a3ec2 (patch) | |
tree | 4d02b2597425e6e71f6616760a9a6a626a9638d2 /src/glsl/pp | |
parent | a6e663def416f73ea8c0c65e8ee6a4dfaaeffae2 (diff) |
glsl/pp: Report correct error line for purify and tokeniser errors.
Diffstat (limited to 'src/glsl/pp')
-rw-r--r-- | src/glsl/pp/sl_pp_context.c | 14 | ||||
-rw-r--r-- | src/glsl/pp/sl_pp_context.h | 1 | ||||
-rw-r--r-- | src/glsl/pp/sl_pp_public.h | 5 | ||||
-rw-r--r-- | src/glsl/pp/sl_pp_token.c | 3 |
4 files changed, 21 insertions, 2 deletions
diff --git a/src/glsl/pp/sl_pp_context.c b/src/glsl/pp/sl_pp_context.c index afc1b84d16a..2ce50790313 100644 --- a/src/glsl/pp/sl_pp_context.c +++ b/src/glsl/pp/sl_pp_context.c @@ -56,6 +56,7 @@ sl_pp_context_create(void) context->if_ptr = SL_PP_MAX_IF_NESTING; context->if_value = 1; memset(context->error_msg, 0, sizeof(context->error_msg)); + context->error_line = 1; context->line = 1; context->file = 0; @@ -79,6 +80,19 @@ sl_pp_context_error_message(const struct sl_pp_context *context) return context->error_msg; } +void +sl_pp_context_error_position(const struct sl_pp_context *context, + unsigned int *file, + unsigned int *line) +{ + if (file) { + *file = 0; + } + if (line) { + *line = context->error_line; + } +} + int sl_pp_context_add_predefined(struct sl_pp_context *context, const char *name, diff --git a/src/glsl/pp/sl_pp_context.h b/src/glsl/pp/sl_pp_context.h index d95d29e275c..fa939143e9a 100644 --- a/src/glsl/pp/sl_pp_context.h +++ b/src/glsl/pp/sl_pp_context.h @@ -71,6 +71,7 @@ struct sl_pp_context { unsigned int if_value; char error_msg[SL_PP_MAX_ERROR_MSG]; + unsigned int error_line; unsigned int line; unsigned int file; diff --git a/src/glsl/pp/sl_pp_public.h b/src/glsl/pp/sl_pp_public.h index 076903649cd..9d0a08ca457 100644 --- a/src/glsl/pp/sl_pp_public.h +++ b/src/glsl/pp/sl_pp_public.h @@ -45,6 +45,11 @@ sl_pp_context_destroy(struct sl_pp_context *context); const char * sl_pp_context_error_message(const struct sl_pp_context *context); +void +sl_pp_context_error_position(const struct sl_pp_context *context, + unsigned int *file, + unsigned int *line); + int sl_pp_context_add_extension(struct sl_pp_context *context, const char *name, diff --git a/src/glsl/pp/sl_pp_token.c b/src/glsl/pp/sl_pp_token.c index e9a60b6c508..d1abbd5257c 100644 --- a/src/glsl/pp/sl_pp_token.c +++ b/src/glsl/pp/sl_pp_token.c @@ -39,13 +39,12 @@ static int _pure_getc(struct sl_pp_context *context) { char c; - unsigned int current_line; if (context->getc_buf_size) { return context->getc_buf[--context->getc_buf_size]; } - if (sl_pp_purify_getc(&context->pure, &c, ¤t_line, context->error_msg, sizeof(context->error_msg)) == 0) { + if (sl_pp_purify_getc(&context->pure, &c, &context->error_line, context->error_msg, sizeof(context->error_msg)) == 0) { return PURE_ERROR; } return c; |