From d471a41369690a9d2d9b8862ea5ff0ae9cbe40fc Mon Sep 17 00:00:00 2001 From: Mustafa Quraish Date: Tue, 1 Feb 2022 04:08:59 -0500 Subject: Add basic `defer` implementation. We don't have any closures yet, so it's essentially the same as just moving the statement after the `defer` keyword to the end of the block/ right before returning from the function. --- src/parser.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'src/parser.c') diff --git a/src/parser.c b/src/parser.c index a0ec7a1..0cd0e5f 100644 --- a/src/parser.c +++ b/src/parser.c @@ -507,6 +507,10 @@ Node *parse_statement(Lexer *lexer) node->loop.body = parse_statement(lexer); } else if (token.type == TOKEN_OPEN_BRACE) { node = parse_block(lexer); + } else if (token.type == TOKEN_DEFER) { + Lexer_next(lexer); + node = Node_new(AST_DEFER); + node->unary_expr = parse_statement(lexer); } else { // Default to trying to handle it as an expression node = parse_expression(lexer); -- cgit v1.2.3