aboutsummaryrefslogtreecommitdiff
path: root/src/types.cpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2024-03-04 20:22:49 +0000
committergingerBill <bill@gingerbill.org>2024-03-04 20:22:49 +0000
commit7ae22b7ce507dca47c3da7aa6d750a8fb557e1ad (patch)
tree7b7b62bb1c0b6e5347a1fc3e6dfa0579be251013 /src/types.cpp
parent3e295734cb5bc6e4e6e446d3f53d8138947f225a (diff)
Update `are_types_identical` for `bit_field`
Diffstat (limited to 'src/types.cpp')
-rw-r--r--src/types.cpp23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/types.cpp b/src/types.cpp
index e4db31246..b442acd53 100644
--- a/src/types.cpp
+++ b/src/types.cpp
@@ -2810,6 +2810,29 @@ gb_internal bool are_types_identical_internal(Type *x, Type *y, bool check_tuple
return are_types_identical(x->SimdVector.elem, y->SimdVector.elem);
}
break;
+
+ case Type_BitField:
+ if (are_types_identical(x->BitField.backing_type, y->BitField.backing_type) &&
+ x->BitField.fields.count == y->BitField.fields.count) {
+ for_array(i, x->BitField.fields) {
+ Entity *a = x->BitField.fields[i];
+ Entity *b = y->BitField.fields[i];
+ if (!are_types_identical(a->type, b->type)) {
+ return false;
+ }
+ if (a->token.string != b->token.string) {
+ return false;
+ }
+ if (x->BitField.bit_sizes[i] != y->BitField.bit_sizes[i]) {
+ return false;
+ }
+ if (x->BitField.bit_offsets[i] != y->BitField.bit_offsets[i]) {
+ return false;
+ }
+ }
+ return true;
+ }
+ break;
}
return false;