glsl: Output endof token after processing a directive.
authorMichal Krol <michal@vmware.com>
Fri, 4 Sep 2009 09:39:30 +0000 (11:39 +0200)
committerMichal Krol <michal@vmware.com>
Mon, 7 Sep 2009 08:12:03 +0000 (10:12 +0200)
Some directives may output tokens as a result of their operation.

src/glsl/pp/sl_pp_process.c

index be01f9139c152a8188ba1bcba882d8ed365ef844..18289790d19daa79e46e5a599d7c20d3bfd12f78 100644 (file)
@@ -87,6 +87,7 @@ sl_pp_process(struct sl_pp_context *context,
                int found_eol = 0;
                unsigned int first;
                unsigned int last;
+               struct sl_pp_token_info endof;
 
                /* Directive name. */
                name = sl_pp_context_cstr(context, input[i].data.identifier);
@@ -99,17 +100,13 @@ sl_pp_process(struct sl_pp_context *context,
                   switch (input[i].token) {
                   case SL_PP_NEWLINE:
                      /* Preserve newline just for the sake of line numbering. */
-                     if (sl_pp_process_out(&state, &input[i])) {
-                        return -1;
-                     }
+                     endof = input[i];
                      i++;
                      found_eol = 1;
                      break;
 
                   case SL_PP_EOF:
-                     if (sl_pp_process_out(&state, &input[i])) {
-                        return -1;
-                     }
+                     endof = input[i];
                      i++;
                      found_eof = 1;
                      found_eol = 1;
@@ -170,6 +167,10 @@ sl_pp_process(struct sl_pp_context *context,
                      /* XXX: Ignore. */
                   }
                }
+
+               if (sl_pp_process_out(&state, &endof)) {
+                  return -1;
+               }
             }
             break;