diff options
| author | Jacob Young <jacobly0@users.noreply.github.com> | 2023-05-19 22:24:29 -0400 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2023-06-10 20:47:53 -0700 |
| commit | f8b6eb63d53bba303a200a5c2493c5d5bddd1f66 (patch) | |
| tree | 1ffdd032e4b7ddaa16aca6a96292abe946cdfbb2 /src/Sema.zig | |
| parent | d28fc5bacb2b27ba3f2a5ed17475b9b790be3ed5 (diff) | |
| download | zig-f8b6eb63d53bba303a200a5c2493c5d5bddd1f66.tar.gz zig-f8b6eb63d53bba303a200a5c2493c5d5bddd1f66.zip | |
Sema: add coerceTupleToStruct result to the InternPool
Diffstat (limited to 'src/Sema.zig')
| -rw-r--r-- | src/Sema.zig | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/src/Sema.zig b/src/Sema.zig index bf4d13824a..22ae6fb531 100644 --- a/src/Sema.zig +++ b/src/Sema.zig @@ -28986,7 +28986,7 @@ fn coerceTupleToStruct( } const fields = struct_ty.structFields(mod); - const field_vals = try sema.arena.alloc(Value, fields.count()); + const field_vals = try sema.arena.alloc(InternPool.Index, fields.count()); const field_refs = try sema.arena.alloc(Air.Inst.Ref, field_vals.len); @memset(field_refs, .none); @@ -29017,7 +29017,8 @@ fn coerceTupleToStruct( } if (runtime_src == null) { if (try sema.resolveMaybeUndefVal(coerced)) |field_val| { - field_vals[field_index] = field_val; + assert(field_val.ip_index != .none); + field_vals[field_index] = field_val.ip_index; } else { runtime_src = field_src; } @@ -29045,7 +29046,8 @@ fn coerceTupleToStruct( continue; } if (runtime_src == null) { - field_vals[i] = field.default_val; + assert(field.default_val.ip_index != .none); + field_vals[i] = field.default_val.ip_index; } else { field_ref.* = try sema.addConstant(field.ty, field.default_val); } @@ -29062,10 +29064,14 @@ fn coerceTupleToStruct( return block.addAggregateInit(struct_ty, field_refs); } - return sema.addConstant( - struct_ty, - try Value.Tag.aggregate.create(sema.arena, field_vals), - ); + assert(struct_ty.ip_index != .none); + const struct_val = try mod.intern(.{ .aggregate = .{ + .ty = struct_ty.ip_index, + .storage = .{ .elems = field_vals }, + } }); + errdefer mod.intern_pool.remove(struct_val); + + return sema.addConstant(struct_ty, struct_val.toValue()); } fn coerceTupleToTuple( |
