diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2023-05-05 19:13:43 -0700 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2023-06-10 20:42:29 -0700 |
| commit | 31aee50c1a96b7e72b42ee885636b27fbcac8eb4 (patch) | |
| tree | ddd17a80a48fa620a6d4cea9d8f6a970eb90845d /src/Sema.zig | |
| parent | 08e97639513f09e2797bd7afcdfdfecdad6c6fd8 (diff) | |
| download | zig-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.zig | 11 |
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()); |
