summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog14
-rw-r--r--parser.c7
-rw-r--r--parser.h4
-rw-r--r--parser.y4
4 files changed, 22 insertions, 7 deletions
diff --git a/ChangeLog b/ChangeLog
index 09e1a1bb..d74f5226 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,19 @@
2015-07-10 Kaz Kylheku <kaz@kylheku.com>
+ 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 <kaz@kylheku.com>
+
Fix wrong name reported for errors in first top-level form.
* parser.c (read_eval_stream): Get name of original stream,
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);