[Intel-gfx] [PATCH 57/90] assembler: Add location support
Damien Lespiau
damien.lespiau at intel.com
Mon Feb 4 16:27:52 CET 2013
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 at intel.com>
---
assembler/gram.y | 1 +
assembler/lex.l | 24 ++++++++++++++++++------
2 files changed, 19 insertions(+), 6 deletions(-)
diff --git a/assembler/gram.y b/assembler/gram.y
index 8b56bd9..9a4e510 100644
--- a/assembler/gram.y
+++ b/assembler/gram.y
@@ -276,6 +276,7 @@ static void resolve_subnr(struct brw_reg *reg)
%}
+%locations
%start ROOT
diff --git a/assembler/lex.l b/assembler/lex.l
index 626042f..769d98b 100644
--- a/assembler/lex.l
+++ b/assembler/lex.l
@@ -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",
--
1.7.7.5
More information about the Intel-gfx
mailing list