From 4c6c012e284d160d3eccc73f6e54dbdb470210f6 Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Sun, 31 Oct 2021 15:46:58 +0100 Subject: Add a couple of EOF checks --- src/parser.c | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/src/parser.c b/src/parser.c index c042f5d..ef7d336 100644 --- a/src/parser.c +++ b/src/parser.c @@ -121,15 +121,26 @@ parse_lambda(Parser *parser, Errors *errors) { } // Parse body. + bool done = false; while (has_next_token(parser)) { Token tok = peek_token(parser); if (tok.type == TOKEN_RPAREN) { next_token(parser); + done = true; break; } Object *expr = parse_tree(parser, errors); array_push(lambda->body, expr); } + if (!done) { + error_push(errors, (Error){ + .type = ERR_TYPE_PARSER, + .value = ERR_UNBALANCED_PAREN, + .line = tok.line, + .col = tok.col, + }); + return NULL; + } if (array_size(lambda->body) == 0) { error_push(errors, (Error){ .type = ERR_TYPE_PARSER, @@ -181,6 +192,15 @@ parse_if(Parser *parser, Errors *errors) { ret->expr_false = parse_tree(parser, errors); tok = peek_token(parser); + if (tok.type == TOKEN_EOF) { + error_push(errors, (Error){ + .type = ERR_TYPE_PARSER, + .value = ERR_UNBALANCED_PAREN, + .line = tok.line, + .col = tok.col, + }); + return NULL; + } if (tok.type != TOKEN_RPAREN) { error_push(errors, (Error){ .type = ERR_TYPE_PARSER, @@ -236,6 +256,15 @@ parse_var(Parser *parser, Errors *errors) { ret->var_expr = parse_tree(parser, errors); tok = peek_token(parser); + if (tok.type == TOKEN_EOF) { + error_push(errors, (Error){ + .type = ERR_TYPE_PARSER, + .value = ERR_UNBALANCED_PAREN, + .line = tok.line, + .col = tok.col, + }); + return NULL; + } if (tok.type != TOKEN_RPAREN) { error_push(errors, (Error){ .type = ERR_TYPE_PARSER, -- cgit v1.2.1