aboutsummaryrefslogtreecommitdiff
path: root/src/value.zig
diff options
context:
space:
mode:
authorJacob Young <jacobly0@users.noreply.github.com>2023-05-29 07:30:30 -0400
committerAndrew Kelley <andrew@ziglang.org>2023-06-10 20:47:56 -0700
commit4f70863a55e699c13731325f8c52870119479c02 (patch)
treec3e45219ecaf9ae0fd2ffc7316a0063028d65fce /src/value.zig
parent32692569656d9a178abb24f8fb7893395700cb62 (diff)
downloadzig-4f70863a55e699c13731325f8c52870119479c02.tar.gz
zig-4f70863a55e699c13731325f8c52870119479c02.zip
InternPool: fix various pointer issues
Diffstat (limited to 'src/value.zig')
-rw-r--r--src/value.zig4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/value.zig b/src/value.zig
index 0da5626937..a1f0f68187 100644
--- a/src/value.zig
+++ b/src/value.zig
@@ -1857,7 +1857,8 @@ pub const Value = struct {
.decl => |decl| mod.declPtr(decl).val.elemValue(mod, index),
.mut_decl => |mut_decl| (try mod.declPtr(mut_decl.decl).internValue(mod))
.toValue().elemValue(mod, index),
- .int, .eu_payload, .opt_payload => unreachable,
+ .int, .eu_payload => unreachable,
+ .opt_payload => |base| base.toValue().elemValue(mod, index),
.comptime_field => |field_val| field_val.toValue().elemValue(mod, index),
.elem => |elem| elem.base.toValue().elemValue(mod, index + elem.index),
.field => |field| if (field.base.toValue().pointerDecl(mod)) |decl_index| {
@@ -1866,6 +1867,7 @@ pub const Value = struct {
return field_val.elemValue(mod, index);
} else unreachable,
},
+ .opt => |opt| opt.val.toValue().elemValue(mod, index),
.aggregate => |aggregate| {
const len = mod.intern_pool.aggregateTypeLen(aggregate.ty);
if (index < len) return switch (aggregate.storage) {