added: `defer` as alternative to `#bottom_test`
authorBrendan Hansen <brendan.f.hansen@gmail.com>
Sat, 3 Feb 2024 22:16:52 +0000 (16:16 -0600)
committerBrendan Hansen <brendan.f.hansen@gmail.com>
Sat, 3 Feb 2024 22:16:52 +0000 (16:16 -0600)
compiler/src/parser.c

index 3277f2c01ca92e51ee4e9d7610d1ec5666406919..75739546e8c86a10807c45e725b2d34d5b134340 100644 (file)
@@ -1292,7 +1292,8 @@ static AstIfWhile* parse_while_stmt(OnyxParser* parser) {
     AstIfWhile* while_node = make_node(AstIfWhile, Ast_Kind_While);
     while_node->token = while_token;
 
-    if (parse_possible_directive(parser, "bottom_test")) {
+    if (parse_possible_directive(parser, "bottom_test")
+        || consume_token_if_next(parser, Token_Type_Keyword_Defer)) {
         while_node->bottom_test = 1;
     }
 
@@ -1311,6 +1312,11 @@ static AstIfWhile* parse_while_stmt(OnyxParser* parser) {
 
     if (had_initialization || parser->curr->type == ';') {
         expect_token(parser, ';');
+        if (parse_possible_directive(parser, "bottom_test")
+            || consume_token_if_next(parser, Token_Type_Keyword_Defer)) {
+            while_node->bottom_test = 1;
+        }
+
         cond = parse_expression(parser, 1);
     } else {
         cond = (AstTyped *) initialization_or_cond;