diff options
| author | gingerBill <bill@gingerbill.org> | 2024-03-04 20:22:49 +0000 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2024-03-04 20:22:49 +0000 |
| commit | 7ae22b7ce507dca47c3da7aa6d750a8fb557e1ad (patch) | |
| tree | 7b7b62bb1c0b6e5347a1fc3e6dfa0579be251013 /src | |
| parent | 3e295734cb5bc6e4e6e446d3f53d8138947f225a (diff) | |
Update `are_types_identical` for `bit_field`
Diffstat (limited to 'src')
| -rw-r--r-- | src/types.cpp | 23 |
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; |