From 0c15b355ad3a62e13e27d752047b4566da97153f Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Fri, 10 Jul 2015 08:33:17 -0700 Subject: Handle setting of parse name through prime_parser. * parser.c (prime_parser): Take name as argument, and install it into parser. (lisp_parser): Pass name to parse, instead of setting it in the parser object. * parser.y (parse): Take name as argument and pass down to prime_parser. * parser.h (prime_parser, parse): Declarations updated. --- ChangeLog | 14 ++++++++++++++ parser.c | 7 ++++--- parser.h | 4 ++-- parser.y | 4 ++-- 4 files changed, 22 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index 09e1a1bb..d74f5226 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,17 @@ +2015-07-10 Kaz Kylheku + + Handle setting of parse name through prime_parser. + + * parser.c (prime_parser): Take name as argument, + and install it into parser. + (lisp_parser): Pass name to parse, instead of setting it + in the parser object. + + * parser.y (parse): Take name as argument and pass + down to prime_parser. + + * parser.h (prime_parser, parse): Declarations updated. + 2015-07-10 Kaz Kylheku Fix wrong name reported for errors in first top-level form. diff --git a/parser.c b/parser.c index 2bc5879c..9436cf67 100644 --- a/parser.c +++ b/parser.c @@ -124,7 +124,7 @@ static val ensure_parser(val stream) return set(cdr_l(cell), parser(stream, one)); } -void prime_parser(parser_t *p, int hold_byte) +void prime_parser(parser_t *p, int hold_byte, val name) { val secret_token_stream; @@ -142,6 +142,8 @@ void prime_parser(parser_t *p, int hold_byte) set(mkloc(p->stream, p->parser), make_catenated_stream(list(secret_token_stream, p->stream, nao))); } + + set(mkloc(p->name, p->parser), name); } void open_txr_file(val spec_file, val *txr_lisp_p, val *name, val *stream) @@ -255,8 +257,7 @@ val lisp_parse(val source_in, val error_stream, val error_return_val, val name_i { int gc = gc_state(0); - set(mkloc(pi->name, parser), if3(std_error != std_null, name, lit(""))); - parse(pi); + parse(pi, if3(std_error != std_null, name, lit(""))); gc_state(gc); } diff --git a/parser.h b/parser.h index 054c0ee1..ccc1ad23 100644 --- a/parser.h +++ b/parser.h @@ -59,9 +59,9 @@ 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 *txr_lisp_p, val *name, val *stream); -void prime_parser(parser_t *, int hold_byte); +void prime_parser(parser_t *, int hold_byte, val name); int parse_once(val stream, val name, parser_t *parser); -int parse(parser_t *parser); +int parse(parser_t *parser, val name); val source_loc(val form); val source_loc_str(val form); val rlset(val form, val info); diff --git a/parser.y b/parser.y index e71adfda..e82e5b7a 100644 --- a/parser.y +++ b/parser.y @@ -1456,14 +1456,14 @@ int parse_once(val stream, val name, parser_t *parser) return res; } -int parse(parser_t *parser) +int parse(parser_t *parser, val name) { int res; parser->errors = 0; parser->prepared_msg = nil; parser->syntax_tree = nil; - prime_parser(parser, reset_scanner(parser->scanner)); + prime_parser(parser, reset_scanner(parser->scanner), name); res = yyparse(parser->scanner, parser); -- cgit v1.2.3