]> granicus.if.org Git - flex/commitdiff
Fixed bug where yyless did not consider yylineno.
authorJohn Millaway <john43@users.sourceforge.net>
Sun, 28 Jul 2002 18:27:34 +0000 (18:27 +0000)
committerJohn Millaway <john43@users.sourceforge.net>
Sun, 28 Jul 2002 18:27:34 +0000 (18:27 +0000)
flex.skl

index 59d42b2747826698f9e5a7c6ef4e6c0e77ab7567..df44804bd8fa44fb8e8a43bdfc16fab5b04b20f2 100644 (file)
--- 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); \