summaryrefslogtreecommitdiff
path: root/flex.skl
diff options
context:
space:
mode:
authorJohn Millaway <john43@users.sourceforge.net>2002-07-28 18:27:34 +0000
committerJohn Millaway <john43@users.sourceforge.net>2002-07-28 18:27:34 +0000
commit7e3d20173b9612ea1f929c4133f6867a0b9401c9 (patch)
treea0df85055263bf600c6d093c4386c9a4719a5dd8 /flex.skl
parent78a7eeee8b83a8140298e55edfa8ab1416dcec42 (diff)
Fixed bug where yyless did not consider yylineno.
Diffstat (limited to 'flex.skl')
-rw-r--r--flex.skl14
1 files changed, 14 insertions, 0 deletions
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); \