diff options
| author | gingerBill <bill@gingerbill.org> | 2024-04-01 13:12:09 +0100 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2024-04-01 13:12:09 +0100 |
| commit | 3fa02427b318e6e4e226de8b0435a47e01ceb415 (patch) | |
| tree | 34f2732b479aa1bec5b5a1832362127a04f8da7a | |
| parent | b862691d7524d5dc05d6c43872daa7a488c2411a (diff) | |
Unify error message logic for ranges over `bit_set`
| -rw-r--r-- | src/check_stmt.cpp | 14 |
1 files changed, 5 insertions, 9 deletions
diff --git a/src/check_stmt.cpp b/src/check_stmt.cpp index b25df01a6..1df582e6c 100644 --- a/src/check_stmt.cpp +++ b/src/check_stmt.cpp @@ -1479,6 +1479,7 @@ gb_internal void check_range_stmt(CheckerContext *ctx, Ast *node, u32 mod_flags) auto vals = array_make<Type *>(temporary_allocator(), 0, 2); auto entities = array_make<Entity *>(temporary_allocator(), 0, 2); bool is_map = false; + bool is_bit_set = false; bool use_by_reference_for_value = false; bool is_soa = false; bool is_reverse = rs->reverse; @@ -1556,14 +1557,9 @@ gb_internal void check_range_stmt(CheckerContext *ctx, Ast *node, u32 mod_flags) case Type_BitSet: array_add(&vals, t->BitSet.elem); - if (rs->vals.count > 1) { - error(rs->vals[1], "Expected 1 name when iterating over a bit_set, got %td", rs->vals.count); - } - if (rs->vals.count == 1 && - rs->vals[0]->kind == Ast_UnaryExpr && - rs->vals[0]->UnaryExpr.op.kind == Token_And) { - error(rs->vals[0], "When iteraing across a bit_set, you cannot modify the value with '&' as that does not make much sense"); - } + max_val_count = 1; + is_bit_set = true; + is_possibly_addressable = false; add_type_info_type(ctx, operand.type); break; @@ -1722,7 +1718,7 @@ gb_internal void check_range_stmt(CheckerContext *ctx, Ast *node, u32 mod_flags) if (is_possibly_addressable && i == addressable_index) { entity->flags &= ~EntityFlag_Value; } else { - char const *idx_name = is_map ? "key" : "index"; + char const *idx_name = is_map ? "key" : is_bit_set ? "element" : "index"; error(token, "The %s variable '%.*s' cannot be made addressable", idx_name, LIT(str)); } } else if (i == addressable_index && use_by_reference_for_value) { |