glsl/pp: Store both line number and file index in a single token.
authorMichal Krol <michal@vmware.com>
Thu, 24 Sep 2009 06:43:05 +0000 (08:43 +0200)
committerMichal Krol <michal@vmware.com>
Thu, 24 Sep 2009 06:43:05 +0000 (08:43 +0200)
src/glsl/pp/sl_pp_line.c
src/glsl/pp/sl_pp_process.c
src/glsl/pp/sl_pp_token.h

index e8f751003ac0a4d3c016f7af4ea0a07d6a02ea07..41ddaf6ba256d13f74cb8bf5e9c50f1fdae8dbe4 100644 (file)
@@ -42,6 +42,7 @@ sl_pp_process_line(struct sl_pp_context *context,
    int line_number = -1;
    int file_number = -1;
    unsigned int line;
+   unsigned int file;
 
    memset(&state, 0, sizeof(state));
    for (i = first; i < last;) {
@@ -94,37 +95,25 @@ sl_pp_process_line(struct sl_pp_context *context,
    free(state.out);
 
    line = atoi(sl_pp_context_cstr(context, line_number));
+   if (file_number != -1) {
+      file = atoi(sl_pp_context_cstr(context, file_number));
+   } else {
+      file = context->file;
+   }
 
-   if (context->line != line) {
+   if (context->line != line || context->file != file) {
       struct sl_pp_token_info ti;
 
       ti.token = SL_PP_LINE;
-      ti.data.line = line;
+      ti.data.line.lineno = line;
+      ti.data.line.fileno = file;
       if (sl_pp_process_out(pstate, &ti)) {
          strcpy(context->error_msg, "out of memory");
          return -1;
       }
 
       context->line = line;
-   }
-
-   if (file_number != -1) {
-      unsigned int file;
-
-      file = atoi(sl_pp_context_cstr(context, file_number));
-
-      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)) {
-            strcpy(context->error_msg, "out of memory");
-            return -1;
-         }
-
-         context->file = file;
-      }
+      context->file = file;
    }
 
    return 0;
index ab2f2d8eb459860da857993a6e9938bf3f084029..67ed5888187d6095e8662094e8a8759d22ee48a1 100644 (file)
@@ -79,7 +79,8 @@ sl_pp_process(struct sl_pp_context *context,
       struct sl_pp_token_info ti;
 
       ti.token = SL_PP_LINE;
-      ti.data.line = context->line - 1;
+      ti.data.line.lineno = context->line - 1;
+      ti.data.line.fileno = context->file;
       if (sl_pp_process_out(&state, &ti)) {
          strcpy(context->error_msg, "out of memory");
          return -1;
index 2a7b79ea3f7fb5df9ed02dd3ee36ac68a436fa3f..b1f3389b32cc13c6815ab36016fd81f87f8864ed 100644 (file)
@@ -96,7 +96,6 @@ enum sl_pp_token {
    SL_PP_EXTENSION_DISABLE,
 
    SL_PP_LINE,
-   SL_PP_FILE,
 
    SL_PP_EOF
 };
@@ -108,8 +107,10 @@ union sl_pp_token_data {
    char other;
    int pragma;
    int extension;
-   unsigned int line;
-   unsigned int file;
+   union {
+      unsigned int lineno: 24;
+      unsigned int fileno: 8;
+   } line;
 };
 
 struct sl_pp_token_info {