aboutsummaryrefslogtreecommitdiff
path: root/src/value.zig
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2023-05-14 19:23:41 -0700
committerAndrew Kelley <andrew@ziglang.org>2023-06-10 20:47:52 -0700
commitd18881de1be811c1dff52590223b92c916c4b773 (patch)
treec4c2f82134654737d0921efc360f900e428d5d92 /src/value.zig
parent88dbd62bcbac24c09791a7838d2f08c2f540967a (diff)
downloadzig-d18881de1be811c1dff52590223b92c916c4b773.tar.gz
zig-d18881de1be811c1dff52590223b92c916c4b773.zip
stage2: move anon tuples and anon structs to InternPool
Diffstat (limited to 'src/value.zig')
-rw-r--r--src/value.zig52
1 files changed, 20 insertions, 32 deletions
diff --git a/src/value.zig b/src/value.zig
index 84408424f0..50e3fc8061 100644
--- a/src/value.zig
+++ b/src/value.zig
@@ -1889,26 +1889,28 @@ pub const Value = struct {
const b_field_vals = b.castTag(.aggregate).?.data;
assert(a_field_vals.len == b_field_vals.len);
- if (ty.isSimpleTupleOrAnonStruct()) {
- const types = ty.tupleFields().types;
- assert(types.len == a_field_vals.len);
- for (types, 0..) |field_ty, i| {
- if (!(try eqlAdvanced(a_field_vals[i], field_ty, b_field_vals[i], field_ty, mod, opt_sema))) {
- return false;
+ switch (mod.intern_pool.indexToKey(ty.ip_index)) {
+ .anon_struct_type => |anon_struct| {
+ assert(anon_struct.types.len == a_field_vals.len);
+ for (anon_struct.types, 0..) |field_ty, i| {
+ if (!(try eqlAdvanced(a_field_vals[i], field_ty.toType(), b_field_vals[i], field_ty.toType(), mod, opt_sema))) {
+ return false;
+ }
}
- }
- return true;
- }
-
- if (ty.zigTypeTag(mod) == .Struct) {
- const fields = ty.structFields(mod).values();
- assert(fields.len == a_field_vals.len);
- for (fields, 0..) |field, i| {
- if (!(try eqlAdvanced(a_field_vals[i], field.ty, b_field_vals[i], field.ty, mod, opt_sema))) {
- return false;
+ return true;
+ },
+ .struct_type => |struct_type| {
+ const struct_obj = mod.structPtrUnwrap(struct_type.index).?;
+ const fields = struct_obj.fields.values();
+ assert(fields.len == a_field_vals.len);
+ for (fields, 0..) |field, i| {
+ if (!(try eqlAdvanced(a_field_vals[i], field.ty, b_field_vals[i], field.ty, mod, opt_sema))) {
+ return false;
+ }
}
- }
- return true;
+ return true;
+ },
+ else => {},
}
const elem_ty = ty.childType(mod);
@@ -2017,20 +2019,6 @@ pub const Value = struct {
if ((try ty.onePossibleValue(mod)) != null) {
return true;
}
- if (a_ty.castTag(.anon_struct)) |payload| {
- const tuple = payload.data;
- if (tuple.values.len != 1) {
- return false;
- }
- const field_name = tuple.names[0];
- const union_obj = mod.typeToUnion(ty).?;
- const field_index = @intCast(u32, union_obj.fields.getIndex(field_name) orelse return false);
- const tag_and_val = b.castTag(.@"union").?.data;
- const field_tag = try mod.enumValueFieldIndex(union_obj.tag_ty, field_index);
- const tag_matches = tag_and_val.tag.eql(field_tag, union_obj.tag_ty, mod);
- if (!tag_matches) return false;
- return eqlAdvanced(tag_and_val.val, union_obj.tag_ty, tuple.values[0], tuple.types[0], mod, opt_sema);
- }
return false;
},
.Float => {