From 7e3d20173b9612ea1f929c4133f6867a0b9401c9 Mon Sep 17 00:00:00 2001 From: John Millaway Date: Sun, 28 Jul 2002 18:27:34 +0000 Subject: [PATCH] Fixed bug where yyless did not consider yylineno. --- flex.skl | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/flex.skl b/flex.skl index 59d42b2..df44804 100644 --- a/flex.skl +++ b/flex.skl @@ -238,6 +238,18 @@ extern FILE *yyin, *yyout; #define EOB_ACT_END_OF_FILE 1 #define EOB_ACT_LAST_MATCH 2 +#ifdef YY_USE_LINENO +#define YY_LESS_LINENO(n) \ + do { \ + int yyl;\ + for ( yyl = n; yyl < yyleng; ++yyl )\ + if ( yytext[yyl] == '\n' )\ + --yylineno;\ + }while(0) +#else +#define YY_LESS_LINENO(n) +#endif + /* The funky do-while in the following #define is used to turn the definition * int a single C statement (which needs a semi-colon terminator). This * avoids problems with code like: @@ -258,6 +270,7 @@ extern FILE *yyin, *yyout; do \ { \ /* Undo effects of setting up yytext. */ \ + YY_LESS_LINENO(n);\ *yy_cp = YY_G(yy_hold_char); \ YY_RESTORE_YY_MORE_OFFSET \ YY_G(yy_c_buf_p) = yy_cp = yy_bp + n - YY_MORE_ADJ; \ @@ -1723,6 +1736,7 @@ void yyFlexLexer::LexerError( yyconst char msg[] ) do \ { \ /* Undo effects of setting up yytext. */ \ + YY_LESS_LINENO(n);\ yytext[yyleng] = YY_G(yy_hold_char); \ YY_G(yy_c_buf_p) = yytext + n; \ YY_G(yy_hold_char) = *YY_G(yy_c_buf_p); \ -- 2.40.0