From 66a9fde12cbc943a2478a1c0c4f3b702cb7c8e2a Mon Sep 17 00:00:00 2001 From: gingerBill Date: Wed, 26 Dec 2018 16:23:25 +0000 Subject: Remove `#[...]` attribute syntax. (Not really worth the change) --- src/parser.cpp | 100 +++++++++++++++++++++++++++------------------------------ 1 file changed, 48 insertions(+), 52 deletions(-) (limited to 'src/parser.cpp') diff --git a/src/parser.cpp b/src/parser.cpp index c81a6683d..85943fa00 100644 --- a/src/parser.cpp +++ b/src/parser.cpp @@ -3851,62 +3851,58 @@ Ast *parse_stmt(AstFile *f) { } case Token_Hash: { + Ast *s = nullptr; Token hash_token = expect_token(f, Token_Hash); - if (f->curr_token.kind == Token_OpenBracket) { - return parse_attribute(f, hash_token, Token_OpenBracket, Token_CloseBracket); - } else { - Ast *s = nullptr; - Token name = expect_token(f, Token_Ident); - String tag = name.string; - - if (tag == "bounds_check") { - s = parse_stmt(f); - s->stmt_state_flags |= StmtStateFlag_bounds_check; - if ((s->stmt_state_flags & StmtStateFlag_no_bounds_check) != 0) { - syntax_error(token, "#bounds_check and #no_bounds_check cannot be applied together"); - } - return s; - } else if (tag == "no_bounds_check") { - s = parse_stmt(f); - s->stmt_state_flags |= StmtStateFlag_no_bounds_check; - if ((s->stmt_state_flags & StmtStateFlag_bounds_check) != 0) { - syntax_error(token, "#bounds_check and #no_bounds_check cannot be applied together"); - } - return s; - } else if (tag == "complete") { - s = parse_stmt(f); - switch (s->kind) { - case Ast_SwitchStmt: - s->SwitchStmt.complete = true; - break; - case Ast_TypeSwitchStmt: - s->TypeSwitchStmt.complete = true; - break; - default: - syntax_error(token, "#complete can only be applied to a switch statement"); - break; - } - return s; - } else if (tag == "assert") { - Ast *t = ast_basic_directive(f, hash_token, tag); - return ast_expr_stmt(f, parse_call_expr(f, t)); - } /* else if (name.string == "no_deferred") { - s = parse_stmt(f); - s->stmt_state_flags |= StmtStateFlag_no_deferred; - } */ - - if (tag == "include") { - syntax_error(token, "#include is not a valid import declaration kind. Did you mean 'import'?"); - s = ast_bad_stmt(f, token, f->curr_token); - } else { - syntax_error(token, "Unknown tag directive used: '%.*s'", LIT(tag)); - s = ast_bad_stmt(f, token, f->curr_token); - } - - fix_advance_to_next_stmt(f); + Token name = expect_token(f, Token_Ident); + String tag = name.string; + if (tag == "bounds_check") { + s = parse_stmt(f); + s->stmt_state_flags |= StmtStateFlag_bounds_check; + if ((s->stmt_state_flags & StmtStateFlag_no_bounds_check) != 0) { + syntax_error(token, "#bounds_check and #no_bounds_check cannot be applied together"); + } return s; + } else if (tag == "no_bounds_check") { + s = parse_stmt(f); + s->stmt_state_flags |= StmtStateFlag_no_bounds_check; + if ((s->stmt_state_flags & StmtStateFlag_bounds_check) != 0) { + syntax_error(token, "#bounds_check and #no_bounds_check cannot be applied together"); + } + return s; + } else if (tag == "complete") { + s = parse_stmt(f); + switch (s->kind) { + case Ast_SwitchStmt: + s->SwitchStmt.complete = true; + break; + case Ast_TypeSwitchStmt: + s->TypeSwitchStmt.complete = true; + break; + default: + syntax_error(token, "#complete can only be applied to a switch statement"); + break; + } + return s; + } else if (tag == "assert") { + Ast *t = ast_basic_directive(f, hash_token, tag); + return ast_expr_stmt(f, parse_call_expr(f, t)); + } /* else if (name.string == "no_deferred") { + s = parse_stmt(f); + s->stmt_state_flags |= StmtStateFlag_no_deferred; + } */ + + if (tag == "include") { + syntax_error(token, "#include is not a valid import declaration kind. Did you mean 'import'?"); + s = ast_bad_stmt(f, token, f->curr_token); + } else { + syntax_error(token, "Unknown tag directive used: '%.*s'", LIT(tag)); + s = ast_bad_stmt(f, token, f->curr_token); } + + fix_advance_to_next_stmt(f); + + return s; } break; case Token_OpenBrace: -- cgit v1.2.3