diff options
| author | Ginger Bill <bill@gingerbill.org> | 2017-07-29 14:43:42 +0100 |
|---|---|---|
| committer | Ginger Bill <bill@gingerbill.org> | 2017-07-29 14:43:42 +0100 |
| commit | ca36fabfc0496a3be2c20020b992c4ed38860aa9 (patch) | |
| tree | d00409f677da8d1d5e62caa2a855abda1c22c101 /src/check_expr.cpp | |
| parent | 7bd62481ad879704d68104dae5fea759074eb570 (diff) | |
Remove dead code for the "fixed" map idea
Diffstat (limited to 'src/check_expr.cpp')
| -rw-r--r-- | src/check_expr.cpp | 55 |
1 files changed, 17 insertions, 38 deletions
diff --git a/src/check_expr.cpp b/src/check_expr.cpp index 0b5ea9e43..4ac092b64 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -2733,7 +2733,7 @@ Entity *check_ident(Checker *c, Operand *o, AstNode *n, Type *named_type, Type * return e; } -i64 check_array_or_map_count(Checker *c, AstNode *e, bool is_map) { +i64 check_array_count(Checker *c, AstNode *e) { if (e == nullptr) { return 0; } @@ -2746,11 +2746,7 @@ i64 check_array_or_map_count(Checker *c, AstNode *e, bool is_map) { check_expr(c, &o, e); if (o.mode != Addressing_Constant) { if (o.mode != Addressing_Invalid) { - if (is_map) { - error(e, "Fixed map count must be a constant"); - } else { - error(e, "Array count must be a constant"); - } + error(e, "Array count must be a constant"); } return 0; } @@ -2758,26 +2754,15 @@ i64 check_array_or_map_count(Checker *c, AstNode *e, bool is_map) { if (is_type_untyped(type) || is_type_integer(type)) { if (o.value.kind == ExactValue_Integer) { i64 count = i128_to_i64(o.value.value_integer); - if (is_map) { - if (count > 0) { - return count; - } - error(e, "Invalid fixed map count"); - } else { - if (count >= 0) { - return count; - } - error(e, "Invalid negative array count %lld", cast(long long)count); + if (count >= 0) { + return count; } + error(e, "Invalid negative array count %lld", cast(long long)count); return 0; } } - if (is_map) { - error(e, "Fixed map count must be an integer"); - } else { - error(e, "Array count must be an integer"); - } + error(e, "Array count must be an integer"); return 0; } @@ -2801,10 +2786,10 @@ void generate_map_entry_type(gbAllocator a, Type *type) { /* struct { - hash: Map_Key, - next: int, - key: Key_Type, - value: Value_Type, + hash: __MapKey; + next: int; + key: Key; + value: Value; } */ AstNode *dummy_node = gb_alloc_item(a, AstNode); @@ -2819,6 +2804,7 @@ void generate_map_entry_type(gbAllocator a, Type *type) { array_add(&fields, make_entity_field(a, s, make_token_ident(str_lit("value")), type->Map.value, false, 2)); + entry_type->Struct.is_ordered = true; entry_type->Struct.fields = fields; entry_type->Struct.fields_in_src_order = fields; @@ -2828,8 +2814,8 @@ void generate_map_entry_type(gbAllocator a, Type *type) { void generate_map_internal_types(gbAllocator a, Type *type) { GB_ASSERT(type->kind == Type_Map); - if (type->Map.generated_struct_type != nullptr) return; generate_map_entry_type(a, type); + if (type->Map.generated_struct_type != nullptr) return; Type *key = type->Map.key; Type *value = type->Map.value; GB_ASSERT(key != nullptr); @@ -2840,7 +2826,7 @@ void generate_map_internal_types(gbAllocator a, Type *type) { /* struct { hashes: [dynamic]int; - entries; [dynamic]EntryType; + entries: [dynamic]EntryType; } */ AstNode *dummy_node = gb_alloc_item(a, AstNode); @@ -2856,7 +2842,7 @@ void generate_map_internal_types(gbAllocator a, Type *type) { array_add(&fields, make_entity_field(a, s, make_token_ident(str_lit("hashes")), hashes_type, false, 0)); array_add(&fields, make_entity_field(a, s, make_token_ident(str_lit("entries")), entries_type, false, 1)); - + generated_struct_type->Struct.is_ordered = true; generated_struct_type->Struct.fields = fields; generated_struct_type->Struct.fields_in_src_order = fields; @@ -2869,7 +2855,6 @@ void check_map_type(Checker *c, Type *type, AstNode *node) { GB_ASSERT(type->kind == Type_Map); ast_node(mt, MapType, node); - i64 count = check_array_or_map_count(c, mt->count, true); Type *key = check_type(c, mt->key); Type *value = check_type(c, mt->value); @@ -2883,12 +2868,6 @@ void check_map_type(Checker *c, Type *type, AstNode *node) { } } - if (count > 0) { - count = 0; - error(node, "Fixed map types are not yet implemented"); - } - - type->Map.count = count; type->Map.key = key; type->Map.value = value; @@ -3026,7 +3005,7 @@ bool check_type_internal(Checker *c, AstNode *e, Type **type, Type *named_type) case_ast_node(at, ArrayType, e); if (at->count != nullptr) { Type *elem = check_type(c, at->elem, nullptr); - i64 count = check_array_or_map_count(c, at->count, false); + i64 count = check_array_count(c, at->count); if (count < 0) { error(at->count, "... can only be used in conjuction with compound literals"); count = 0; @@ -3050,7 +3029,7 @@ bool check_type_internal(Checker *c, AstNode *e, Type **type, Type *named_type) case_ast_node(vt, VectorType, e); Type *elem = check_type(c, vt->elem); Type *be = base_type(elem); - i64 count = check_array_or_map_count(c, vt->count, false); + i64 count = check_array_count(c, vt->count); if (is_type_vector(be) || (!is_type_boolean(be) && !is_type_numeric(be) && be->kind != Type_Generic)) { gbString err_str = type_to_string(elem); error(vt->elem, "Vector element type must be numerical or a boolean, got `%s`", err_str); @@ -5048,7 +5027,7 @@ bool check_builtin_procedure(Checker *c, Operand *operand, AstNode *call, i32 id if (is_type_slice(type)) { min_args = 2; max_args = 3; - } else if (is_type_dynamic_map(type)) { + } else if (is_type_map(type)) { min_args = 1; max_args = 2; } else if (is_type_dynamic_array(type)) { |