summaryrefslogtreecommitdiffstats
path: root/parser.c
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2019-04-21 04:15:01 -0700
committerKaz Kylheku <kaz@kylheku.com>2019-04-21 04:15:01 -0700
commit4f2f300bb835af37b86b8a1239bec6fb469b289f (patch)
tree6f29d6524e747a70a596d11aa5511d8353b7222c /parser.c
parent2e36e0feae8d1dd75c8410b365d7dc33b30ce66b (diff)
downloadtxr-4f2f300bb835af37b86b8a1239bec6fb469b289f.tar.gz
txr-4f2f300bb835af37b86b8a1239bec6fb469b289f.tar.bz2
txr-4f2f300bb835af37b86b8a1239bec6fb469b289f.zip
bugfix: source lineno off by one under hash bang.
* eval.c (load): When we read and discard a hash bang line, we must set the parser line number to two. * parser.c (parser_set_lineno): New function. * parser.h (parser_set_lineno): Declared. * txr.c (check_hash_bang): New argument, occurs. (txr_main): Track whether hash bang has occurred in a new local variable hb_occurs. Then, before parsing, if hash bang has occurred, set the line number to two.
Diffstat (limited to 'parser.c')
-rw-r--r--parser.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/parser.c b/parser.c
index fbc2e2ca..7662614e 100644
--- a/parser.c
+++ b/parser.c
@@ -193,6 +193,14 @@ static void pushback_token(parser_t *p, struct yy_token *tok)
p->tok_pushback[p->tok_idx++] = *tok;
}
+val parser_set_lineno(val self, val stream, val lineno)
+{
+ val parser = ensure_parser(stream);
+ parser_t *pi = parser_get_impl(self, parser);
+ pi->lineno = c_num(lineno);
+ return stream;
+}
+
void prime_parser(parser_t *p, val name, enum prime_parser prim)
{
struct yy_token sec_tok = { 0 };