X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=src%2Fparser.lex;h=beca943b1f55c757ec37462a52029c0fedf9aa4c;hb=77374b6b5505022a057dbab119854c6b4ad48916;hp=7da8d5edd12be03dcc0cf4ad8d4d3287fdfcc932;hpb=a200d6291d25b7f287320292edfc61b34216b7f4;p=swftools.git diff --git a/src/parser.lex b/src/parser.lex index 7da8d5e..beca943 100644 --- a/src/parser.lex +++ b/src/parser.lex @@ -1,6 +1,8 @@ %{ #include +#include +#include #include "q.h" #include "parser.h" @@ -118,6 +120,8 @@ static void store(enum type_t type, int line, int column, char*text, int length) #define MAX_INCLUDE_DEPTH 16 YY_BUFFER_STATE include_stack[MAX_INCLUDE_DEPTH]; +int line_stack[MAX_INCLUDE_DEPTH]; +int column_stack[MAX_INCLUDE_DEPTH]; int include_stack_ptr = 0; void handleInclude(char*text, int len) @@ -137,7 +141,10 @@ void handleInclude(char*text, int len) fprintf( stderr, "Includes nested too deeply" ); exit( 1 ); } - include_stack[include_stack_ptr++] = YY_CURRENT_BUFFER; + include_stack[include_stack_ptr] = YY_CURRENT_BUFFER; + line_stack[include_stack_ptr] = line; + column_stack[include_stack_ptr] = column; + include_stack_ptr++; yyin = fopen(text, "rb"); if (!yyin) { fprintf(stderr, "Couldn't open %s\n", text); @@ -208,6 +215,8 @@ RVALUE \"{STRING}\"|([^ \n\r\t]+) yy_delete_buffer( YY_CURRENT_BUFFER ); yy_switch_to_buffer( include_stack[include_stack_ptr] ); + column = column_stack[include_stack_ptr]; + line = line_stack[include_stack_ptr]; } }