aboutsummaryrefslogtreecommitdiff
path: root/src/check_stmt.cpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2024-04-01 13:08:07 +0100
committergingerBill <bill@gingerbill.org>2024-04-01 13:08:07 +0100
commitb862691d7524d5dc05d6c43872daa7a488c2411a (patch)
treebb9804e3e00b702cc546e1204beab22b83f99a05 /src/check_stmt.cpp
parentf482cc8374d041795dc106709093f194da5ce5bb (diff)
Support `for in` with `bit_set`
Diffstat (limited to 'src/check_stmt.cpp')
-rw-r--r--src/check_stmt.cpp13
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);