diff options
-rw-r--r-- | parser.c | 11 | ||||
-rw-r--r-- | parser.h | 1 |
2 files changed, 11 insertions, 1 deletions
@@ -351,14 +351,17 @@ val read_eval_stream(val stream, val error_stream, val hash_bang_support) for (;;) { val form = lisp_parse(stream, error_stream, error_val, name, colon_k); + val parser = get_parser(stream); if (form == error_val) { - if (parser_errors(get_parser(stream)) == zero) + if (parser_errors(parser) == zero) break; return nil; } (void) eval_intrinsic(form, nil); + if (parser_eof(parser)) + break; } return t; @@ -638,6 +641,12 @@ val parser_errors(val parser) return num(p->errors); } +val parser_eof(val parser) +{ + parser_t *p = coerce(parser_t *, cobj_handle(parser, parser_s)); + return tnil(p->recent_tok.yy_char == 0); +} + void parse_init(void) { parser_s = intern(lit("parser"), user_package); @@ -104,4 +104,5 @@ void parser_cleanup(parser_t *); val parser(val stream, val lineno); val get_parser(val stream); val parser_errors(val parser); +val parser_eof(val parser); void parse_init(void); |