diff options
Diffstat (limited to 'src/parser.cpp')
| -rw-r--r-- | src/parser.cpp | 32 |
1 files changed, 17 insertions, 15 deletions
diff --git a/src/parser.cpp b/src/parser.cpp index 8aadba765..44f46150e 100644 --- a/src/parser.cpp +++ b/src/parser.cpp @@ -89,8 +89,7 @@ enum ProcCallingConvention { enum VarDeclFlag { VarDeclFlag_using = 1<<0, - VarDeclFlag_immutable = 1<<1, - VarDeclFlag_thread_local = 1<<2, + VarDeclFlag_thread_local = 1<<1, }; enum StmtStateFlag { @@ -2590,17 +2589,24 @@ AstNode *parse_gen_decl(AstFile *f, Token token, ParseSpecFunc *func) { Token open = {}; Token close = {}; - if (f->curr_token.kind == Token_OpenBrace) { + if (f->curr_token.kind == Token_OpenParen) { specs = make_ast_node_array(f); - open = expect_token(f, Token_OpenBrace); - while (f->curr_token.kind != Token_CloseBrace && + open = expect_token(f, Token_OpenParen); + bool require_semicolon_after_paren = false; + while (f->curr_token.kind != Token_CloseParen && f->curr_token.kind != Token_EOF) { AstNode *spec = func(f, token); array_add(&specs, spec); - expect_semicolon(f, spec); + if (f->curr_token.kind == Token_CloseParen && + f->curr_token.pos.line == f->prev_token.pos.line) { + require_semicolon_after_paren = true; + } else { + expect_semicolon(f, spec); + } } - close = expect_token(f, Token_CloseBrace); - if (f->curr_token.pos.line == close.pos.line || + close = expect_token(f, Token_CloseParen); + if (require_semicolon_after_paren || + f->curr_token.pos.line == close.pos.line || open.pos.line == close.pos.line) { expect_semicolon(f, NULL); } @@ -2614,11 +2620,7 @@ AstNode *parse_gen_decl(AstFile *f, Token token, ParseSpecFunc *func) { syntax_error(token, "Empty %.*s declaration list", LIT(token_strings[token.kind])); } - AstNode *decl = ast_gen_decl(f, token, open, close, specs); - if (token.kind == Token_let) { - decl->GenDecl.flags |= VarDeclFlag_immutable; - } - return decl; + return ast_gen_decl(f, token, open, close, specs); } PARSE_SPEC_FUNC(parse_value_spec) { @@ -3247,7 +3249,7 @@ AstNode *parse_field_list(AstFile *f, isize *name_count_, u32 allowed_flags, Tok } if (allow_token(f, Token_Eq)) { // TODO(bill): Should this be true==lhs or false==rhs? - default_value = parse_expr(f, true); + default_value = parse_expr(f, false); if (!is_procedure) { syntax_error(f->curr_token, "Default parameters are only allowed for procedures"); } @@ -3281,7 +3283,7 @@ AstNode *parse_field_list(AstFile *f, isize *name_count_, u32 allowed_flags, Tok } if (allow_token(f, Token_Eq)) { // TODO(bill): Should this be true==lhs or false==rhs? - default_value = parse_expr(f, true); + default_value = parse_expr(f, false); if (!is_procedure) { syntax_error(f->curr_token, "Default parameters are only allowed for procedures"); } |