glsl/pp: Report correct error line for purify and tokeniser errors.
authorMichal Krol <michal@vmware.com>
Sat, 19 Dec 2009 08:55:27 +0000 (09:55 +0100)
committerMichal Krol <michal@vmware.com>
Sun, 20 Dec 2009 20:18:57 +0000 (21:18 +0100)
src/glsl/pp/sl_pp_context.c
src/glsl/pp/sl_pp_context.h
src/glsl/pp/sl_pp_public.h
src/glsl/pp/sl_pp_token.c

index afc1b84d16af9443e100c28523de38798e853d0c..2ce50790313ca34e332920d17327f30ee859dfa3 100644 (file)
@@ -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,
index d95d29e275c9c6205c5b67cf098d11520b75b34a..fa939143e9a256ca611eee9cefb5780a4a3e9bcd 100644 (file)
@@ -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;
index 076903649cd5941946ccf05ed98bb7ff43c81b65..9d0a08ca45733577eed23adc8c42498781ee88ad 100644 (file)
@@ -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,
index e9a60b6c5085315297b4228cac0f574b0bcbc919..d1abbd5257cc18630d553ef5a93e7556136d37ec 100644 (file)
@@ -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, &current_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;