diff options
| author | Ginger Bill <bill@gingerbill.org> | 2016-09-14 22:58:24 +0100 |
|---|---|---|
| committer | Ginger Bill <bill@gingerbill.org> | 2016-09-14 22:58:24 +0100 |
| commit | bd365e5176f3bc5f5e249d1a0763520e2973c2ec (patch) | |
| tree | 0fe2d3f44fd478d4f5c1afc688c8d41f84be3a29 /src/checker/expr.cpp | |
| parent | 79f575ae8e7dda58a842dda3690b691e942ea86e (diff) | |
Fix namespacing issues for #import; allow using ImportName
Diffstat (limited to 'src/checker/expr.cpp')
| -rw-r--r-- | src/checker/expr.cpp | 32 |
1 files changed, 20 insertions, 12 deletions
diff --git a/src/checker/expr.cpp b/src/checker/expr.cpp index 0d113af23..982c28942 100644 --- a/src/checker/expr.cpp +++ b/src/checker/expr.cpp @@ -287,7 +287,6 @@ void check_fields(Checker *c, AstNode *node, AstNodeArray decls, Entity *e = make_entity_type_name(c->allocator, c->context.scope, name_token, NULL); add_entity(c, c->context.scope, td->name, e); - gb_printf("%.*s\n", LIT(e->token.string)); check_type_decl(c, e, td->type, NULL, NULL); HashKey key = hash_string(name_token.string); @@ -734,8 +733,25 @@ void check_identifier(Checker *c, Operand *o, AstNode *n, Type *named_type, Cycl if (are_strings_equal(n->Ident.string, make_string("_"))) { error(&c->error_collector, n->Ident, "`_` cannot be used as a value type"); } else { + auto *entries = c->context.scope->elements.entries; + // gb_for_array(i, entries) { + // Entity *elem = entries[i].value; + // if (i > 0) { + // gb_printf(", "); + // } + // gb_printf("%.*s", LIT(elem->token.string)); + // } + // for (Scope *s = c->context.scope; s != NULL; s = s->parent) { + // Entity *elem = s->elements.entries[0].value; + // if (elem == NULL) continue; + // gb_printf("%.*s\n", LIT(elem->token.pos.file)); + // } + // gb_printf("\n"); + + + // Entity *e = scope_lookup_entity(c->context.scope, n->Ident.string); error(&c->error_collector, n->Ident, - "Undeclared named: `%.*s`", LIT(n->Ident.string)); + "Undeclared name: %.*s", LIT(n->Ident.string)); } return; } @@ -915,11 +931,9 @@ Type *check_type(Checker *c, AstNode *e, Type *named_type, CycleChecker *cycle_c type = make_type_array(c->allocator, check_type(c, at->elem, NULL, cycle_checker), check_array_count(c, at->count)); - type->flags |= e->type_flags; set_base_type(named_type, type); } else { type = make_type_slice(c->allocator, check_type(c, at->elem)); - type->flags |= e->type_flags; set_base_type(named_type, type); } goto end; @@ -935,7 +949,6 @@ Type *check_type(Checker *c, AstNode *e, Type *named_type, CycleChecker *cycle_c error(&c->error_collector, ast_node_token(vt->elem), "Vector element type must be numerical or a boolean. Got `%s`", err_str); } type = make_type_vector(c->allocator, elem, count); - type->flags |= e->type_flags; set_base_type(named_type, type); goto end; case_end; @@ -947,7 +960,6 @@ Type *check_type(Checker *c, AstNode *e, Type *named_type, CycleChecker *cycle_c check_struct_type(c, type, e, cycle_checker); check_close_scope(c); type->Record.node = e; - type->flags |= e->type_flags; goto end; case_end; @@ -958,7 +970,6 @@ Type *check_type(Checker *c, AstNode *e, Type *named_type, CycleChecker *cycle_c check_union_type(c, type, e, cycle_checker); check_close_scope(c); type->Record.node = e; - type->flags |= e->type_flags; goto end; case_end; @@ -969,7 +980,6 @@ Type *check_type(Checker *c, AstNode *e, Type *named_type, CycleChecker *cycle_c check_raw_union_type(c, type, e, cycle_checker); check_close_scope(c); type->Record.node = e; - type->flags |= e->type_flags; goto end; case_end; @@ -978,22 +988,21 @@ Type *check_type(Checker *c, AstNode *e, Type *named_type, CycleChecker *cycle_c set_base_type(named_type, type); check_enum_type(c, type, named_type, e); type->Record.node = e; - type->flags |= e->type_flags; goto end; case_end; case_ast_node(pt, PointerType, e); type = make_type_pointer(c->allocator, check_type(c, pt->type)); - type->flags |= e->type_flags; set_base_type(named_type, type); goto end; case_end; case_ast_node(pt, ProcType, e); type = alloc_type(c->allocator, Type_Proc); - type->flags |= e->type_flags; set_base_type(named_type, type); + check_open_scope(c, e); check_procedure_type(c, type, e); + check_close_scope(c); goto end; case_end; @@ -1003,7 +1012,6 @@ Type *check_type(Checker *c, AstNode *e, Type *named_type, CycleChecker *cycle_c check_expr_or_type(c, &o, e); if (o.mode == Addressing_Type) { type = o.type; - type->flags |= e->type_flags; goto end; } } |