From 10c298df37f430b4c7914448fb43a05bbec6302f Mon Sep 17 00:00:00 2001 From: David Walter Seikel Date: Mon, 16 Jan 2012 08:42:48 +1000 Subject: yylineno does not track colums, so do it myself. --- LuaSL/src/LuaSL_LSL_tree.c | 3 +++ LuaSL/src/LuaSL_LSL_tree.h | 1 + LuaSL/src/LuaSL_lexer.l | 19 ++++++++++++++++--- 3 files changed, 20 insertions(+), 3 deletions(-) (limited to 'LuaSL') diff --git a/LuaSL/src/LuaSL_LSL_tree.c b/LuaSL/src/LuaSL_LSL_tree.c index 0f9013a..b1bbaa7 100644 --- a/LuaSL/src/LuaSL_LSL_tree.c +++ b/LuaSL/src/LuaSL_LSL_tree.c @@ -761,6 +761,9 @@ static int nextFile(LuaSL_yyparseParam *param) burnLeaf(param->ast); param->ast = NULL; param->lval = calloc(1, sizeof(LSL_Leaf)); + // Text editors usually start counting at 1, even programmers editors. + param->column = 1; + param->line = 1; return TRUE; } /* diff --git a/LuaSL/src/LuaSL_LSL_tree.h b/LuaSL/src/LuaSL_LSL_tree.h index 1429393..b547976 100644 --- a/LuaSL/src/LuaSL_LSL_tree.h +++ b/LuaSL/src/LuaSL_LSL_tree.h @@ -276,6 +276,7 @@ typedef struct LSL_Leaf *ast; char *ignorableText; LSL_Leaf *lval; + int column, line; } LuaSL_yyparseParam; diff --git a/LuaSL/src/LuaSL_lexer.l b/LuaSL/src/LuaSL_lexer.l index c805659..afc99ce 100644 --- a/LuaSL/src/LuaSL_lexer.l +++ b/LuaSL/src/LuaSL_lexer.l @@ -8,7 +8,7 @@ int common(YYSTYPE *lval, char *text, LuaSL_yyparseParam *param, boolean checkIg %} %option reentrant never-interactive batch -%option bison-bridge yylineno 8bit +%option bison-bridge 8bit %option noreject noyymore %option backup debug perf-report perf-report verbose warn %option align full @@ -115,9 +115,22 @@ STRING \"(\\.|[^\\"\n])*\" int common(YYSTYPE *lval, char *text, LuaSL_yyparseParam *param, boolean checkIgnorable, int type) { + char *p; + + for (p = text; *p; p++) + { + if ('\n' == *p) + { + param->line++; + param->column = 1; + } + else + param->column++; + } + lval->token = tokens[type - lowestToken]; - lval->line = yyget_lineno(param->scanner); - lval->column = yyget_column(param->scanner); + lval->line = param->line; + lval->column = param->column; if (checkIgnorable) { -- cgit v1.1