aboutsummaryrefslogtreecommitdiff
path: root/src/parser.cpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2018-12-26 16:23:25 +0000
committergingerBill <bill@gingerbill.org>2018-12-26 16:23:25 +0000
commit66a9fde12cbc943a2478a1c0c4f3b702cb7c8e2a (patch)
treeb4d67af3e4dc7e482b340a68f4b41d8c4949d841 /src/parser.cpp
parenteb5af2876ab73e49d4844f2861091367e682887b (diff)
Remove `#[...]` attribute syntax.
(Not really worth the change)
Diffstat (limited to 'src/parser.cpp')
-rw-r--r--src/parser.cpp100
1 files changed, 48 insertions, 52 deletions
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: