diff options
| author | gingerBill <bill@gingerbill.org> | 2018-02-17 11:54:08 +0000 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2018-02-17 11:54:08 +0000 |
| commit | c4d2d287fc0eac7348951ce275a1f3d80f25ef3d (patch) | |
| tree | e082b0f1d744689ced0cdab73dd405981cacbf3a /src/parser.cpp | |
| parent | 6a85546b761b67fa012a2cd49e32b2211bf02971 (diff) | |
#complete switch; Removal of dyncall
Diffstat (limited to 'src/parser.cpp')
| -rw-r--r-- | src/parser.cpp | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/src/parser.cpp b/src/parser.cpp index 8dd5d6d30..2643fb2b3 100644 --- a/src/parser.cpp +++ b/src/parser.cpp @@ -375,6 +375,17 @@ void error(AstNode *node, char *fmt, ...) { va_end(va); } +void error_no_newline(AstNode *node, char *fmt, ...) { + Token token = {}; + if (node != nullptr) { + token = ast_node_token(node); + } + va_list va; + va_start(va, fmt); + error_no_newline_va(token, fmt, va); + va_end(va); +} + void warning(AstNode *node, char *fmt, ...) { va_list va; va_start(va, fmt); @@ -3700,6 +3711,20 @@ AstNode *parse_stmt(AstFile *f) { 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 AstNode_SwitchStmt: + s->SwitchStmt.complete = true; + break; + case AstNode_TypeSwitchStmt: + s->TypeSwitchStmt.complete = true; + break; + default: + syntax_error(token, "#complete can only be applied to a switch statement"); + break; + } + return s; } if (tag == "include") { |