aboutsummaryrefslogtreecommitdiff
path: root/src/codegen.zig
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2023-05-07 15:38:31 -0700
committerAndrew Kelley <andrew@ziglang.org>2023-06-10 20:42:29 -0700
commit4d88f825bc5eb14aa00446f046ab4714a4fdce70 (patch)
tree4729946dff1e6ae200426418f4f6653003468d4f /src/codegen.zig
parenta5fb16959423005de999fb541d5d5e9aebb8e09e (diff)
downloadzig-4d88f825bc5eb14aa00446f046ab4714a4fdce70.tar.gz
zig-4d88f825bc5eb14aa00446f046ab4714a4fdce70.zip
stage2: implement intTagType logic
This commit changes a lot of `*const Module` to `*Module` to make it work, since accessing the integer tag type of an enum might need to mutate the InternPool by adding a new integer type into it. An alternate strategy would be to pre-heat the InternPool with the integer tag type when creating an enum type, which would make it so that intTagType could accept a const Module instead of a mutable one, asserting that the InternPool already had the integer tag type.
Diffstat (limited to 'src/codegen.zig')
-rw-r--r--src/codegen.zig8
1 files changed, 4 insertions, 4 deletions
diff --git a/src/codegen.zig b/src/codegen.zig
index 8bd478bf7c..70df1fc17b 100644
--- a/src/codegen.zig
+++ b/src/codegen.zig
@@ -1241,7 +1241,7 @@ pub fn genTypedValue(
if (enum_values.count() != 0) {
const tag_val = enum_values.keys()[field_index.data];
return genTypedValue(bin_file, src_loc, .{
- .ty = typed_value.ty.intTagType(),
+ .ty = try typed_value.ty.intTagType(mod),
.val = tag_val,
}, owner_decl_index);
} else {
@@ -1251,7 +1251,7 @@ pub fn genTypedValue(
else => unreachable,
}
} else {
- const int_tag_ty = typed_value.ty.intTagType();
+ const int_tag_ty = try typed_value.ty.intTagType(mod);
return genTypedValue(bin_file, src_loc, .{
.ty = int_tag_ty,
.val = typed_value.val,
@@ -1303,7 +1303,7 @@ pub fn genTypedValue(
return genUnnamedConst(bin_file, src_loc, typed_value, owner_decl_index);
}
-pub fn errUnionPayloadOffset(payload_ty: Type, mod: *const Module) u64 {
+pub fn errUnionPayloadOffset(payload_ty: Type, mod: *Module) u64 {
if (!payload_ty.hasRuntimeBitsIgnoreComptime(mod)) return 0;
const payload_align = payload_ty.abiAlignment(mod);
const error_align = Type.anyerror.abiAlignment(mod);
@@ -1314,7 +1314,7 @@ pub fn errUnionPayloadOffset(payload_ty: Type, mod: *const Module) u64 {
}
}
-pub fn errUnionErrorOffset(payload_ty: Type, mod: *const Module) u64 {
+pub fn errUnionErrorOffset(payload_ty: Type, mod: *Module) u64 {
if (!payload_ty.hasRuntimeBitsIgnoreComptime(mod)) return 0;
const payload_align = payload_ty.abiAlignment(mod);
const error_align = Type.anyerror.abiAlignment(mod);