diff options
| author | gingerBill <bill@gingerbill.org> | 2018-12-02 18:01:03 +0000 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2018-12-02 18:01:03 +0000 |
| commit | 28583bfff88ff1378a0e71030701071dcfd37462 (patch) | |
| tree | 6d3594ed87f0e1a364f25589ee5c1d8aef820f4a /src/parser.cpp | |
| parent | b2df48dadbc3382fec81f9da0e42d5a0c7be7fff (diff) | |
Change procedure group syntax from `proc[]` to `proc{}`; deprecate `proc[]` (raises warning currently)
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()); |