diff options
Diffstat (limited to 'src/parser.cpp')
| -rw-r--r-- | src/parser.cpp | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/src/parser.cpp b/src/parser.cpp index e64c42ed5..bce0260cb 100644 --- a/src/parser.cpp +++ b/src/parser.cpp @@ -1742,8 +1742,31 @@ Ast *parse_operand(AstFile *f, bool lhs) { case Token_proc: { Token token = expect_token(f, Token_proc); - if (f->curr_token.kind == Token_OpenBracket) { // ProcGroup + if (f->curr_token.kind == Token_OpenBrace) { // ProcGroup + Token open = expect_token(f, Token_OpenBrace); + + auto args = array_make<Ast *>(heap_allocator()); + + while (f->curr_token.kind != Token_CloseBrace && + f->curr_token.kind != Token_EOF) { + Ast *elem = parse_expr(f, false); + array_add(&args, elem); + + if (!allow_token(f, Token_Comma)) { + break; + } + } + + Token close = expect_token(f, Token_CloseBrace); + + if (args.count == 0) { + syntax_error(token, "Expected a least 1 argument in a procedure group"); + } + + return ast_proc_group(f, token, open, close, args); + } else if (f->curr_token.kind == Token_OpenBracket) { // ProcGroup Token open = expect_token(f, Token_OpenBracket); + warning(open, "Procedure groups using [] are now deprecated, please use {} instead"); auto args = array_make<Ast *>(heap_allocator()); |