authorgravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2023-05-19 22:24:29-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2023-06-10 20:47:53-07:00
logf8b6eb63d53bba303a200a5c2493c5d5bddd1f66
tree1ffdd032e4b7ddaa16aca6a96292abe946cdfbb2
parentd28fc5bacb2b27ba3f2a5ed17475b9b790be3ed5

Sema: add coerceTupleToStruct result to the InternPool


1 files changed, 13 insertions(+), 7 deletions(-)

src/Sema.zig+13-7
......@@ -28986,7 +28986,7 @@ fn coerceTupleToStruct(
2898628986 }
2898728987
2898828988 const fields = struct_ty.structFields(mod);
28989 const field_vals = try sema.arena.alloc(Value, fields.count());
28989 const field_vals = try sema.arena.alloc(InternPool.Index, fields.count());
2899028990 const field_refs = try sema.arena.alloc(Air.Inst.Ref, field_vals.len);
2899128991 @memset(field_refs, .none);
2899228992
......@@ -29017,7 +29017,8 @@ fn coerceTupleToStruct(
2901729017 }
2901829018 if (runtime_src == null) {
2901929019 if (try sema.resolveMaybeUndefVal(coerced)) |field_val| {
29020 field_vals[field_index] = field_val;
29020 assert(field_val.ip_index != .none);
29021 field_vals[field_index] = field_val.ip_index;
2902129022 } else {
2902229023 runtime_src = field_src;
2902329024 }
......@@ -29045,7 +29046,8 @@ fn coerceTupleToStruct(
2904529046 continue;
2904629047 }
2904729048 if (runtime_src == null) {
29048 field_vals[i] = field.default_val;
29049 assert(field.default_val.ip_index != .none);
29050 field_vals[i] = field.default_val.ip_index;
2904929051 } else {
2905029052 field_ref.* = try sema.addConstant(field.ty, field.default_val);
2905129053 }
......@@ -29062,10 +29064,14 @@ fn coerceTupleToStruct(
2906229064 return block.addAggregateInit(struct_ty, field_refs);
2906329065 }
2906429066
29065 return sema.addConstant(
29066 struct_ty,
29067 try Value.Tag.aggregate.create(sema.arena, field_vals),
29068 );
29067 assert(struct_ty.ip_index != .none);
29068 const struct_val = try mod.intern(.{ .aggregate = .{
29069 .ty = struct_ty.ip_index,
29070 .storage = .{ .elems = field_vals },
29071 } });
29072 errdefer mod.intern_pool.remove(struct_val);
29073
29074 return sema.addConstant(struct_ty, struct_val.toValue());
2906929075}
2907029076
2907129077fn coerceTupleToTuple(