From 76927b80247a348ea92732e0cf15e6beb2d56826 Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Sun, 7 Jun 2015 20:08:22 -0700 Subject: * parser.c (stream_parser_hash): New static variable. (parser_mark): Mark parser and primer members. (parser, ensure_parser): new argument: primer. (get_parser_impl, ensure_parser): New static functions. (prime_parser): New function. (lisp_parse): Multiple calls to this function on the same stream now logically continue the parse, not resetting the line number to 1. (parse_init): Initialize and gc-protect stream_parser_hash. * parser.h (parser_t): New members, primer and parser. (prime_parser): Declared. (parser): Declaration updated. * parser.y (parse): Now responsible for calling prime_parser. --- parser.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'parser.h') diff --git a/parser.h b/parser.h index e1de30b2..46572b1f 100644 --- a/parser.h +++ b/parser.h @@ -27,12 +27,14 @@ typedef struct yyguts_t scanner_t; typedef struct { + val parser; cnum lineno; int errors; val stream; val name; val prepared_msg; val syntax_tree; + val primer; scanner_t *scanner; } parser_t; @@ -56,6 +58,7 @@ parser_t *yyget_extra(yyscan_t scanner); void yyset_extra(parser_t *, yyscan_t); void parser_l_init(void); void open_txr_file(val spec_file, val *name, val *stream); +val prime_parser(val parser); int parse_once(val stream, val name, parser_t *parser); int parse(parser_t *parser); val source_loc(val form); @@ -68,5 +71,5 @@ INLINE val rlcp(val to, val from) val rlcp_tree(val to, val from); val regex_parse(val string, val error_stream); val lisp_parse(val source, val error_stream, val error_return_val, val name); -val parser(val stream, val lineno); +val parser(val stream, val lineno, val primer); void parse_init(void); -- cgit v1.2.3