added weird syntactic sugar for passing code blocks
authorBrendan Hansen <brendan.f.hansen@gmail.com>
Mon, 29 Nov 2021 20:09:01 +0000 (14:09 -0600)
committerBrendan Hansen <brendan.f.hansen@gmail.com>
Mon, 29 Nov 2021 20:09:01 +0000 (14:09 -0600)
src/parser.c

index bfe4a920d1746fcc407f8af69500b784586e536c..4304880fe0363ba9da251d4c4549b332fdc296d9 100644 (file)
@@ -757,17 +757,18 @@ static AstTyped* parse_factor(OnyxParser* parser) {
 //              foo(x, y, #code {
 //                  // ...
 //              })
-//
-//                if (parser->curr->type == '{') {
-//                    AstCodeBlock* code_block = make_node(AstCodeBlock, Ast_Kind_Code_Block);
-//                    code_block->token = parser->curr;
-//                    code_block->type_node = builtin_code_type;
-//
-//                    code_block->code = (AstNode *) parse_block(parser, 1, NULL);
-//                    ((AstBlock *) code_block->code)->rules = Block_Rule_Code_Block;
-//
-//                    bh_arr_push(call_node->args.values, (AstTyped *) code_block);
-//                }
+                if (next_tokens_are(parser, 2, '#', '{')) {
+                    consume_token(parser);
+
+                    AstCodeBlock* code_block = make_node(AstCodeBlock, Ast_Kind_Code_Block);
+                    code_block->token = parser->curr;
+                    code_block->type_node = builtin_code_type;
+
+                    code_block->code = (AstNode *) parse_block(parser, 1, NULL);
+                    ((AstBlock *) code_block->code)->rules = Block_Rule_Code_Block;
+
+                    bh_arr_push(call_node->args.values, (AstTyped *) code_block);
+                }
 
                 // Wrap expressions in AstArgument
                 bh_arr_each(AstTyped *, arg, call_node->args.values) {