| ... | @@ -15862,7 +15862,8 @@ fn zirOffsetOf(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai | ... | @@ -15862,7 +15862,8 @@ fn zirOffsetOf(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai |
| 15862 | | 15862 | |
| 15863 | fn bitOffsetOf(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!u64 { | 15863 | fn bitOffsetOf(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!u64 { |
| 15864 | const inst_data = sema.code.instructions.items(.data)[inst].pl_node; | 15864 | const inst_data = sema.code.instructions.items(.data)[inst].pl_node; |
| 15865 | sema.src = .{ .node_offset_bin_op = inst_data.src_node }; | 15865 | const src: LazySrcLoc = .{ .node_offset_bin_op = inst_data.src_node }; |
| | 15866 | sema.src = src; |
| 15866 | const lhs_src: LazySrcLoc = .{ .node_offset_bin_lhs = inst_data.src_node }; | 15867 | const lhs_src: LazySrcLoc = .{ .node_offset_bin_lhs = inst_data.src_node }; |
| 15867 | const rhs_src: LazySrcLoc = .{ .node_offset_bin_rhs = inst_data.src_node }; | 15868 | const rhs_src: LazySrcLoc = .{ .node_offset_bin_rhs = inst_data.src_node }; |
| 15868 | const extra = sema.code.extraData(Zir.Inst.Bin, inst_data.payload_index).data; | 15869 | const extra = sema.code.extraData(Zir.Inst.Bin, inst_data.payload_index).data; |
| ... | @@ -15885,13 +15886,11 @@ fn bitOffsetOf(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!u6 | ... | @@ -15885,13 +15886,11 @@ fn bitOffsetOf(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!u6 |
| 15885 | }, | 15886 | }, |
| 15886 | } | 15887 | } |
| 15887 | | 15888 | |
| 15888 | const field_index = if (ty.isTuple()) b: { | 15889 | const field_index = if (ty.isTuple()) blk: { |
| 15889 | if (std.fmt.parseUnsigned(u32, field_name, 10)) |idx| { | 15890 | if (mem.eql(u8, field_name, "len")) { |
| 15890 | if (idx < ty.structFieldCount()) break :b idx; | 15891 | return sema.fail(block, src, "no offset available for 'len' field of tuple", .{}); |
| 15891 | } else |_| {} | 15892 | } |
| 15892 | return sema.fail(block, rhs_src, "tuple '{}' has no such field '{s}'", .{ | 15893 | break :blk try sema.tupleFieldIndex(block, ty, field_name, rhs_src); |
| 15893 | ty.fmt(sema.mod), field_name, | | |
| 15894 | }); | | |
| 15895 | } else try sema.structFieldIndex(block, ty, field_name, rhs_src); | 15894 | } else try sema.structFieldIndex(block, ty, field_name, rhs_src); |
| 15896 | | 15895 | |
| 15897 | switch (ty.containerLayout()) { | 15896 | switch (ty.containerLayout()) { |
| ... | @@ -17173,13 +17172,11 @@ fn zirFieldParentPtr(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileEr | ... | @@ -17173,13 +17172,11 @@ fn zirFieldParentPtr(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileEr |
| 17173 | } | 17172 | } |
| 17174 | try sema.resolveTypeLayout(block, ty_src, struct_ty); | 17173 | try sema.resolveTypeLayout(block, ty_src, struct_ty); |
| 17175 | | 17174 | |
| 17176 | const field_index = if (struct_ty.isTuple()) b: { | 17175 | const field_index = if (struct_ty.isTuple()) blk: { |
| 17177 | if (std.fmt.parseUnsigned(u32, field_name, 10)) |idx| { | 17176 | if (mem.eql(u8, field_name, "len")) { |
| 17178 | if (idx < struct_ty.structFieldCount()) break :b idx; | 17177 | return sema.fail(block, src, "cannot get @fieldParentPtr of 'len' field of tuple", .{}); |
| 17179 | } else |_| {} | 17178 | } |
| 17180 | return sema.fail(block, name_src, "tuple '{}' has no such field '{s}'", .{ | 17179 | break :blk try sema.tupleFieldIndex(block, struct_ty, field_name, name_src); |
| 17181 | struct_ty.fmt(sema.mod), field_name, | | |
| 17182 | }); | | |
| 17183 | } else try sema.structFieldIndex(block, struct_ty, field_name, name_src); | 17180 | } else try sema.structFieldIndex(block, struct_ty, field_name, name_src); |
| 17184 | | 17181 | |
| 17185 | try sema.checkPtrOperand(block, ptr_src, field_ptr_ty); | 17182 | try sema.checkPtrOperand(block, ptr_src, field_ptr_ty); |
| ... | @@ -19222,17 +19219,13 @@ fn tupleFieldIndex( | ... | @@ -19222,17 +19219,13 @@ fn tupleFieldIndex( |
| 19222 | field_name: []const u8, | 19219 | field_name: []const u8, |
| 19223 | field_name_src: LazySrcLoc, | 19220 | field_name_src: LazySrcLoc, |
| 19224 | ) CompileError!u32 { | 19221 | ) CompileError!u32 { |
| 19225 | const field_index = std.fmt.parseUnsigned(u32, field_name, 10) catch |err| { | 19222 | if (std.fmt.parseUnsigned(u32, field_name, 10)) |field_index| { |
| 19226 | return sema.fail(block, field_name_src, "tuple '{}' has no such field '{s}': {s}", .{ | 19223 | if (field_index < tuple_ty.structFieldCount()) return field_index; |
| 19227 | tuple_ty.fmt(sema.mod), field_name, @errorName(err), | 19224 | } else |_| {} |
| 19228 | }); | 19225 | |
| 19229 | }; | 19226 | return sema.fail(block, field_name_src, "no field named '{s}' in tuple '{}'", .{ |
| 19230 | if (field_index >= tuple_ty.structFieldCount()) { | 19227 | field_name, tuple_ty.fmt(sema.mod), |
| 19231 | return sema.fail(block, field_name_src, "tuple '{}' has no such field '{s}'", .{ | 19228 | }); |
| 19232 | tuple_ty.fmt(sema.mod), field_name, | | |
| 19233 | }); | | |
| 19234 | } | | |
| 19235 | return field_index; | | |
| 19236 | } | 19229 | } |
| 19237 | | 19230 | |
| 19238 | fn tupleFieldValByIndex( | 19231 | fn tupleFieldValByIndex( |
| ... | @@ -25768,8 +25761,8 @@ fn anonStructFieldIndex( | ... | @@ -25768,8 +25761,8 @@ fn anonStructFieldIndex( |
| 25768 | return @intCast(u32, i); | 25761 | return @intCast(u32, i); |
| 25769 | } | 25762 | } |
| 25770 | } | 25763 | } |
| 25771 | return sema.fail(block, field_src, "anonymous struct '{}' has no such field '{s}'", .{ | 25764 | return sema.fail(block, field_src, "no field named '{s}' in anonymous struct '{}'", .{ |
| 25772 | struct_ty.fmt(sema.mod), field_name, | 25765 | field_name, struct_ty.fmt(sema.mod), |
| 25773 | }); | 25766 | }); |
| 25774 | } | 25767 | } |
| 25775 | | 25768 | |