summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lex.yy.c.shipped3
-rw-r--r--parser.c2
-rw-r--r--parser.h1
-rw-r--r--parser.l3
-rw-r--r--tests/012/syntax.tl6
5 files changed, 15 insertions, 0 deletions
diff --git a/lex.yy.c.shipped b/lex.yy.c.shipped
index 35825975..f8a74c51 100644
--- a/lex.yy.c.shipped
+++ b/lex.yy.c.shipped
@@ -6730,11 +6730,14 @@ int yylex(YYSTYPE *yylval_param, yyscan_t yyscanner)
struct yy_token *tok = &yyextra->tok_pushback[--yyextra->tok_idx];
yyextra->recent_tok = *tok;
*yylval_param = tok->yy_lval;
+ if (tok->yy_lex_state && tok->yy_lex_state != YYSTATE)
+ yy_push_state(tok->yy_lex_state, yyg);
return tok->yy_char;
}
yy_char = yyextra->recent_tok.yy_char = yylex_impl(yylval_param, yyscanner);
yyextra->recent_tok.yy_lval = *yylval_param;
+ yyextra->recent_tok.yy_lex_state = YYSTATE;
return yy_char;
}
diff --git a/parser.c b/parser.c
index 48928741..51739f95 100644
--- a/parser.c
+++ b/parser.c
@@ -135,9 +135,11 @@ void parser_common_init(parser_t *p)
p->scanner = convert(scanner_t *, yyscan);
yyset_extra(p, p->scanner);
p->recent_tok.yy_char = 0;
+ p->recent_tok.yy_lex_state = 0;
p->recent_tok.yy_lval.val = 0;
for (i = 0; i < 4; i++) {
p->tok_pushback[i].yy_char = 0;
+ p->tok_pushback[i].yy_lex_state = 0;
p->tok_pushback[i].yy_lval.val = 0;
}
p->tok_idx = 0;
diff --git a/parser.h b/parser.h
index 001efc2b..d27ba0f9 100644
--- a/parser.h
+++ b/parser.h
@@ -39,6 +39,7 @@ typedef struct parser parser_t;
struct yy_token {
int yy_char;
YYSTYPE yy_lval;
+ int yy_lex_state;
};
struct circ_stack {
diff --git a/parser.l b/parser.l
index 98cdf344..fdd42726 100644
--- a/parser.l
+++ b/parser.l
@@ -1222,11 +1222,14 @@ int yylex(YYSTYPE *yylval_param, yyscan_t yyscanner)
struct yy_token *tok = &yyextra->tok_pushback[--yyextra->tok_idx];
yyextra->recent_tok = *tok;
*yylval_param = tok->yy_lval;
+ if (tok->yy_lex_state && tok->yy_lex_state != YYSTATE)
+ yy_push_state(tok->yy_lex_state, yyg);
return tok->yy_char;
}
yy_char = yyextra->recent_tok.yy_char = yylex_impl(yylval_param, yyscanner);
yyextra->recent_tok.yy_lval = *yylval_param;
+ yyextra->recent_tok.yy_lex_state = YYSTATE;
return yy_char;
}
diff --git a/tests/012/syntax.tl b/tests/012/syntax.tl
index 6b6f331a..87b01d67 100644
--- a/tests/012/syntax.tl
+++ b/tests/012/syntax.tl
@@ -1,5 +1,11 @@
(load "../common")
+"top level literal"
+
+".."
+
+"."
+
#;(commented out list)
#;3.14
#;abc