| ... | @@ -27256,6 +27256,37 @@ fn fieldPtr( | ... | @@ -27256,6 +27256,37 @@ fn fieldPtr( |
| 27256 | if (ip.stringEqlSlice(field_name, "len")) { | 27256 | if (ip.stringEqlSlice(field_name, "len")) { |
| 27257 | const int_val = try mod.intValue(Type.usize, inner_ty.arrayLen(mod)); | 27257 | const int_val = try mod.intValue(Type.usize, inner_ty.arrayLen(mod)); |
| 27258 | return anonDeclRef(sema, int_val.toIntern()); | 27258 | return anonDeclRef(sema, int_val.toIntern()); |
| | 27259 | } else if (ip.stringEqlSlice(field_name, "ptr") and is_pointer_to) { |
| | 27260 | const ptr_info = object_ty.ptrInfo(mod); |
| | 27261 | const new_ptr_ty = try sema.ptrType(.{ |
| | 27262 | .child = Type.fromInterned(ptr_info.child).childType(mod).toIntern(), |
| | 27263 | .sentinel = if (object_ty.sentinel(mod)) |s| s.toIntern() else .none, |
| | 27264 | .flags = .{ |
| | 27265 | .size = .Many, |
| | 27266 | .alignment = ptr_info.flags.alignment, |
| | 27267 | .is_const = ptr_info.flags.is_const, |
| | 27268 | .is_volatile = ptr_info.flags.is_volatile, |
| | 27269 | .is_allowzero = ptr_info.flags.is_allowzero, |
| | 27270 | .address_space = ptr_info.flags.address_space, |
| | 27271 | .vector_index = ptr_info.flags.vector_index, |
| | 27272 | }, |
| | 27273 | .packed_offset = ptr_info.packed_offset, |
| | 27274 | }); |
| | 27275 | const ptr_ptr_info = object_ptr_ty.ptrInfo(mod); |
| | 27276 | const result_ty = try sema.ptrType(.{ |
| | 27277 | .child = new_ptr_ty.toIntern(), |
| | 27278 | .sentinel = if (object_ptr_ty.sentinel(mod)) |s| s.toIntern() else .none, |
| | 27279 | .flags = .{ |
| | 27280 | .alignment = ptr_ptr_info.flags.alignment, |
| | 27281 | .is_const = ptr_ptr_info.flags.is_const, |
| | 27282 | .is_volatile = ptr_ptr_info.flags.is_volatile, |
| | 27283 | .is_allowzero = ptr_ptr_info.flags.is_allowzero, |
| | 27284 | .address_space = ptr_ptr_info.flags.address_space, |
| | 27285 | .vector_index = ptr_ptr_info.flags.vector_index, |
| | 27286 | }, |
| | 27287 | .packed_offset = ptr_ptr_info.packed_offset, |
| | 27288 | }); |
| | 27289 | return sema.bitCast(block, result_ty, object_ptr, src, null); |
| 27259 | } else { | 27290 | } else { |
| 27260 | return sema.fail( | 27291 | return sema.fail( |
| 27261 | block, | 27292 | block, |