diff options
| author | gingerBill <bill@gingerbill.org> | 2024-04-01 13:08:07 +0100 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2024-04-01 13:08:07 +0100 |
| commit | b862691d7524d5dc05d6c43872daa7a488c2411a (patch) | |
| tree | bb9804e3e00b702cc546e1204beab22b83f99a05 /src/check_stmt.cpp | |
| parent | f482cc8374d041795dc106709093f194da5ce5bb (diff) | |
Support `for in` with `bit_set`
Diffstat (limited to 'src/check_stmt.cpp')
| -rw-r--r-- | src/check_stmt.cpp | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/src/check_stmt.cpp b/src/check_stmt.cpp index 1d7e7d4e9..b25df01a6 100644 --- a/src/check_stmt.cpp +++ b/src/check_stmt.cpp @@ -1554,6 +1554,19 @@ gb_internal void check_range_stmt(CheckerContext *ctx, Ast *node, u32 mod_flags) } break; + 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"); + } + add_type_info_type(ctx, operand.type); + break; + case Type_EnumeratedArray: if (is_ptr) use_by_reference_for_value = true; array_add(&vals, t->EnumeratedArray.elem); |