assembler: Add location support

Let's generate location information about the tokens we are parsing.
This can be used to give accurate location when reporting errors and
warnings.

Signed-off-by: Damien Lespiau <damien.lespiau@intel.com>
This commit is contained in:
Damien Lespiau 2013-01-26 19:51:28 +00:00
parent 574a249142
commit d94e8a6cf0
2 changed files with 19 additions and 6 deletions

View File

@ -276,6 +276,7 @@ static void resolve_subnr(struct brw_reg *reg)
%}
%locations
%start ROOT

View File

@ -9,6 +9,15 @@
int saved_state = 0;
extern char *input_filename;
/* Locations */
int yycolumn = 1;
#define YY_USER_ACTION \
yylloc.first_line = yylloc.last_line = yylineno; \
yylloc.first_column = yycolumn; \
yylloc.last_column = yycolumn+yyleng-1; \
yycolumn += yyleng;
%}
%x BLOCK_COMMENT
%x CHANNEL
@ -16,11 +25,11 @@ extern char *input_filename;
%x FILENAME
%%
\/\/.*[\r\n] { } /* eat up single-line comments */
"\.kernel".*[\r\n] { }
"\.end_kernel".*[\r\n] { }
"\.code".*[\r\n] { }
"\.end_code".*[\r\n] { }
\/\/.*[\r\n] { yycolumn = 1; } /* eat up single-line comments */
"\.kernel".*[\r\n] { yycolumn = 1; }
"\.end_kernel".*[\r\n] { yycolumn = 1; }
"\.code".*[\r\n] { yycolumn = 1; }
"\.end_code".*[\r\n] { yycolumn = 1; }
/* eat up multi-line comments, non-nesting. */
\/\* {
@ -33,6 +42,7 @@ extern char *input_filename;
<BLOCK_COMMENT>. { }
<BLOCK_COMMENT>[\r\n] { }
"#line"" "* {
yycolumn = 1;
saved_state = YYSTATE;
BEGIN(LINENUMBER);
}
@ -407,7 +417,9 @@ yylval.integer = BRW_CHANNEL_W;
return NUMBER;
}
[ \t\n]+ { } /* eat up whitespace */
[ \t]+ { } /* eat up whitespace */
\n { yycolumn = 1; }
. {
fprintf(stderr, "%s: %d: %s at \"%s\"\n",