diff options
Diffstat (limited to 'src/check_expr.c')
| -rw-r--r-- | src/check_expr.c | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/src/check_expr.c b/src/check_expr.c index 81807e61d..55563cb2d 100644 --- a/src/check_expr.c +++ b/src/check_expr.c @@ -1146,12 +1146,11 @@ void check_map_type(Checker *c, Type *type, AstNode *node) { dummy_node->kind = AstNode_Invalid; check_open_scope(c, dummy_node); - isize field_count = 4; + isize field_count = 3; Entity **fields = gb_alloc_array(a, Entity *, field_count); - fields[0] = make_entity_field(a, c->context.scope, make_token_ident(str_lit("hash")), t_u64, false, false); + fields[0] = make_entity_field(a, c->context.scope, make_token_ident(str_lit("key")), t_u64, false, false); fields[1] = make_entity_field(a, c->context.scope, make_token_ident(str_lit("next")), t_int, false, false); - fields[2] = make_entity_field(a, c->context.scope, make_token_ident(str_lit("key")), key, false, false); - fields[3] = make_entity_field(a, c->context.scope, make_token_ident(str_lit("value")), value, false, false); + fields[2] = make_entity_field(a, c->context.scope, make_token_ident(str_lit("value")), value, false, false); check_close_scope(c); @@ -2821,6 +2820,7 @@ bool check_builtin_procedure(Checker *c, Operand *operand, AstNode *call, i32 id // free :: proc(^Type) // free :: proc([]Type) // free :: proc(string) + // free :: proc(map[K]T) Type *type = operand->type; bool ok = false; if (is_type_pointer(type)) { @@ -2831,6 +2831,8 @@ bool check_builtin_procedure(Checker *c, Operand *operand, AstNode *call, i32 id ok = true; } else if (is_type_dynamic_array(type)) { ok = true; + } else if (is_type_dynamic_map(type)) { + ok = true; } if (!ok) { @@ -2847,17 +2849,18 @@ bool check_builtin_procedure(Checker *c, Operand *operand, AstNode *call, i32 id case BuiltinProc_reserve: { // reserve :: proc(^[dynamic]Type, count: int) { + // reserve :: proc(^map[Key]Type, count: int) { Type *type = operand->type; if (!is_type_pointer(type)) { gbString str = type_to_string(type); - error_node(operand->expr, "Expected a pointer to a dynamic array, got `%s`", str); + error_node(operand->expr, "Expected a pointer, got `%s`", str); gb_string_free(str); return false; } type = type_deref(type); - if (!is_type_dynamic_array(type)) { + if (!is_type_dynamic_array(type) && !is_type_dynamic_map(type)) { gbString str = type_to_string(type); - error_node(operand->expr, "Expected a pointer to a dynamic array, got `%s`", str); + error_node(operand->expr, "Expected a pointer to a dynamic array or dynamic map, got `%s`", str); gb_string_free(str); return false; } |