diff options
author | John Millaway <john43@users.sourceforge.net> | 2002-07-28 18:27:34 +0000 |
---|---|---|
committer | John Millaway <john43@users.sourceforge.net> | 2002-07-28 18:27:34 +0000 |
commit | 7e3d20173b9612ea1f929c4133f6867a0b9401c9 (patch) | |
tree | a0df85055263bf600c6d093c4386c9a4719a5dd8 /flex.skl | |
parent | 78a7eeee8b83a8140298e55edfa8ab1416dcec42 (diff) |
Fixed bug where yyless did not consider yylineno.
Diffstat (limited to 'flex.skl')
-rw-r--r-- | flex.skl | 14 |
1 files changed, 14 insertions, 0 deletions
@@ -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); \ |