diff options
| author | Ginger Bill <bill@gingerbill.org> | 2016-09-02 15:51:48 +0100 |
|---|---|---|
| committer | Ginger Bill <bill@gingerbill.org> | 2016-09-02 15:51:48 +0100 |
| commit | e1a6775661d1ef57b84effa9b4c567c030b87556 (patch) | |
| tree | 47de7c1dee8b691d750c1b35833194c8b0fe8d8a /src/checker/stmt.cpp | |
| parent | 25e9b9bc87a5b4fa14fc7d47ca3077849ee5648d (diff) | |
Runtime assert
Diffstat (limited to 'src/checker/stmt.cpp')
| -rw-r--r-- | src/checker/stmt.cpp | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/src/checker/stmt.cpp b/src/checker/stmt.cpp index ed8b340d8..3508321c7 100644 --- a/src/checker/stmt.cpp +++ b/src/checker/stmt.cpp @@ -203,6 +203,21 @@ Type *check_init_variable(Checker *c, Entity *e, Operand *operand, String contex if (operand->mode == Addressing_Invalid || operand->type == t_invalid || e->type == t_invalid) { + + if (operand->mode == Addressing_Builtin) { + gbString expr_str = expr_to_string(operand->expr); + defer (gb_string_free(expr_str)); + + // TODO(bill): is this a good enough error message? + error(&c->error_collector, ast_node_token(operand->expr), + "Cannot assign builtin procedure `%s` in %.*s", + expr_str, + LIT(context_name)); + + operand->mode = Addressing_Invalid; + } + + if (e->type == NULL) e->type = t_invalid; return NULL; @@ -530,7 +545,7 @@ void check_entity_decl(Checker *c, Entity *e, DeclInfo *d, Type *named_type, Cyc -void check_var_decl(Checker *c, AstNode *node) { +void check_var_decl_node(Checker *c, AstNode *node) { ast_node(vd, VarDecl, node); isize entity_count = vd->name_count; isize entity_index = 0; @@ -1150,7 +1165,7 @@ void check_stmt(Checker *c, AstNode *node, u32 flags) { if (vd->name_count > 1 && vd->type != NULL) { error(&c->error_collector, us->token, "`using` can only be applied to one variable of the same type"); } - check_var_decl(c, us->node); + check_var_decl_node(c, us->node); for (AstNode *item = vd->name_list; item != NULL; item = item->next) { ast_node(i, Ident, item); @@ -1191,7 +1206,7 @@ void check_stmt(Checker *c, AstNode *node, u32 flags) { case_ast_node(vd, VarDecl, node); - check_var_decl(c, node); + check_var_decl_node(c, node); case_end; case_ast_node(pd, ProcDecl, node); |