From: John Millaway Date: Sun, 28 Jul 2002 18:27:34 +0000 (+0000) Subject: Fixed bug where yyless did not consider yylineno. X-Git-Tag: flex-2-5-11~9 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=7e3d20173b9612ea1f929c4133f6867a0b9401c9;p=flex Fixed bug where yyless did not consider yylineno. --- 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); \