Browse Source

Update `are_types_identical` for `bit_field`

gingerBill 1 year ago
parent
commit
7ae22b7ce5
1 changed files with 23 additions and 0 deletions
  1. 23 0
      src/types.cpp

+ 23 - 0
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;