aboutsummaryrefslogtreecommitdiff
path: root/src/Sema.zig
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2023-05-05 19:13:43 -0700
committerAndrew Kelley <andrew@ziglang.org>2023-06-10 20:42:29 -0700
commit31aee50c1a96b7e72b42ee885636b27fbcac8eb4 (patch)
treeddd17a80a48fa620a6d4cea9d8f6a970eb90845d /src/Sema.zig
parent08e97639513f09e2797bd7afcdfdfecdad6c6fd8 (diff)
downloadzig-31aee50c1a96b7e72b42ee885636b27fbcac8eb4.tar.gz
zig-31aee50c1a96b7e72b42ee885636b27fbcac8eb4.zip
InternPool: add a slice encoding
This uses the data field to reference its pointer field type, which allows for efficient and infallible access of a slice type's pointer type.
Diffstat (limited to 'src/Sema.zig')
-rw-r--r--src/Sema.zig11
1 files changed, 6 insertions, 5 deletions
diff --git a/src/Sema.zig b/src/Sema.zig
index 088d830280..ced5eb247c 100644
--- a/src/Sema.zig
+++ b/src/Sema.zig
@@ -24201,7 +24201,7 @@ fn fieldPtr(
if (mem.eql(u8, field_name, "ptr")) {
const buf = try sema.arena.create(Type.SlicePtrFieldTypeBuffer);
- const slice_ptr_ty = inner_ty.slicePtrFieldType(buf);
+ const slice_ptr_ty = inner_ty.slicePtrFieldType(buf, mod);
const result_ty = try Type.ptr(sema.arena, sema.mod, .{
.pointee_type = slice_ptr_ty,
@@ -27804,7 +27804,7 @@ fn beginComptimePtrMutation(
sema,
block,
src,
- parent.ty.slicePtrFieldType(try sema.arena.create(Type.SlicePtrFieldTypeBuffer)),
+ parent.ty.slicePtrFieldType(try sema.arena.create(Type.SlicePtrFieldTypeBuffer), mod),
&val_ptr.castTag(.slice).?.data.ptr,
ptr_elem_ty,
parent.decl_ref_mut,
@@ -27859,7 +27859,7 @@ fn beginComptimePtrMutation(
sema,
block,
src,
- parent.ty.slicePtrFieldType(try sema.arena.create(Type.SlicePtrFieldTypeBuffer)),
+ parent.ty.slicePtrFieldType(try sema.arena.create(Type.SlicePtrFieldTypeBuffer), mod),
&val_ptr.castTag(.slice).?.data.ptr,
ptr_elem_ty,
parent.decl_ref_mut,
@@ -28256,7 +28256,7 @@ fn beginComptimePtrLoad(
const slice_val = tv.val.castTag(.slice).?.data;
deref.pointee = switch (field_index) {
Value.Payload.Slice.ptr_index => TypedValue{
- .ty = field_ptr.container_ty.slicePtrFieldType(try sema.arena.create(Type.SlicePtrFieldTypeBuffer)),
+ .ty = field_ptr.container_ty.slicePtrFieldType(try sema.arena.create(Type.SlicePtrFieldTypeBuffer), mod),
.val = slice_val.ptr,
},
Value.Payload.Slice.len_index => TypedValue{
@@ -29339,8 +29339,9 @@ fn analyzeSlicePtr(
slice: Air.Inst.Ref,
slice_ty: Type,
) CompileError!Air.Inst.Ref {
+ const mod = sema.mod;
const buf = try sema.arena.create(Type.SlicePtrFieldTypeBuffer);
- const result_ty = slice_ty.slicePtrFieldType(buf);
+ const result_ty = slice_ty.slicePtrFieldType(buf, mod);
if (try sema.resolveMaybeUndefVal(slice)) |val| {
if (val.isUndef()) return sema.addConstUndef(result_ty);
return sema.addConstant(result_ty, val.slicePtr());