From cdb2613e5d3434bd34b2ef0a1d0ce7c77386f42e Mon Sep 17 00:00:00 2001 From: Kayne Ruse Date: Wed, 7 Jun 2023 19:20:50 +1000 Subject: [PATCH] Disallowed fn decl in for loop pre clause --- source/toy_parser.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/source/toy_parser.c b/source/toy_parser.c index 193769e..c25b29f 100644 --- a/source/toy_parser.c +++ b/source/toy_parser.c @@ -119,6 +119,7 @@ ParseRule parseRules[]; static void declaration(Toy_Parser* parser, Toy_ASTNode** nodeHandle); static void parsePrecedence(Toy_Parser* parser, Toy_ASTNode** nodeHandle, PrecedenceRule rule); static Toy_Literal readTypeToLiteral(Toy_Parser* parser); +static void varDecl(Toy_Parser* parser, Toy_ASTNode** nodeHandle); //TODO: resolve the messy order of these //the expression rules @@ -1397,7 +1398,13 @@ static void forStmt(Toy_Parser* parser, Toy_ASTNode** nodeHandle) { //check the pre-clause if (parser->current.type != TOY_TOKEN_SEMICOLON) { - declaration(parser, &preClause); //allow defining variables in the pre-clause + //allow defining variables in the pre-clause + if (match(parser, TOY_TOKEN_VAR)) { + varDecl(parser, &preClause); + } + else { + parsePrecedence(parser, &preClause, PREC_ASSIGNMENT); + } } else { consume(parser, TOY_TOKEN_SEMICOLON, "Expected ';' after empty declaration of for clause");