aboutsummaryrefslogtreecommitdiff
path: root/src/Sema.zig
diff options
context:
space:
mode:
authorJacob Young <jacobly0@users.noreply.github.com>2023-05-19 22:24:29 -0400
committerAndrew Kelley <andrew@ziglang.org>2023-06-10 20:47:53 -0700
commitf8b6eb63d53bba303a200a5c2493c5d5bddd1f66 (patch)
tree1ffdd032e4b7ddaa16aca6a96292abe946cdfbb2 /src/Sema.zig
parentd28fc5bacb2b27ba3f2a5ed17475b9b790be3ed5 (diff)
downloadzig-f8b6eb63d53bba303a200a5c2493c5d5bddd1f66.tar.gz
zig-f8b6eb63d53bba303a200a5c2493c5d5bddd1f66.zip
Sema: add coerceTupleToStruct result to the InternPool
Diffstat (limited to 'src/Sema.zig')
-rw-r--r--src/Sema.zig20
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(