| ... | @@ -21394,14 +21394,30 @@ fn fieldCallBind( | ... | @@ -21394,14 +21394,30 @@ fn fieldCallBind( |
| 21394 | switch (concrete_ty.zigTypeTag()) { | 21394 | switch (concrete_ty.zigTypeTag()) { |
| 21395 | .Struct => { | 21395 | .Struct => { |
| 21396 | const struct_ty = try sema.resolveTypeFields(block, src, concrete_ty); | 21396 | const struct_ty = try sema.resolveTypeFields(block, src, concrete_ty); |
| 21397 | const struct_obj = struct_ty.castTag(.@"struct").?.data; | 21397 | if (struct_ty.castTag(.@"struct")) |struct_obj| { |
| 21398 | | 21398 | const field_index_usize = struct_obj.data.fields.getIndex(field_name) orelse |
| 21399 | const field_index_usize = struct_obj.fields.getIndex(field_name) orelse | 21399 | break :find_field; |
| 21400 | break :find_field; | 21400 | const field_index = @intCast(u32, field_index_usize); |
| 21401 | const field_index = @intCast(u32, field_index_usize); | 21401 | const field = struct_obj.data.fields.values()[field_index]; |
| 21402 | const field = struct_obj.fields.values()[field_index]; | | |
| 21403 | | 21402 | |
| 21404 | return finishFieldCallBind(sema, block, src, ptr_ty, field.ty, field_index, object_ptr); | 21403 | return finishFieldCallBind(sema, block, src, ptr_ty, field.ty, field_index, object_ptr); |
| | 21404 | } else if (struct_ty.isTuple()) { |
| | 21405 | if (mem.eql(u8, field_name, "len")) { |
| | 21406 | return sema.addIntUnsigned(Type.usize, struct_ty.structFieldCount()); |
| | 21407 | } |
| | 21408 | if (std.fmt.parseUnsigned(u32, field_name, 10)) |field_index| { |
| | 21409 | if (field_index >= struct_ty.structFieldCount()) break :find_field; |
| | 21410 | return finishFieldCallBind(sema, block, src, ptr_ty, struct_ty.structFieldType(field_index), field_index, object_ptr); |
| | 21411 | } else |_| {} |
| | 21412 | } else { |
| | 21413 | const max = struct_ty.structFieldCount(); |
| | 21414 | var i: u32 = 0; |
| | 21415 | while (i < max) : (i += 1) { |
| | 21416 | if (mem.eql(u8, struct_ty.structFieldName(i), field_name)) { |
| | 21417 | return finishFieldCallBind(sema, block, src, ptr_ty, struct_ty.structFieldType(i), i, object_ptr); |
| | 21418 | } |
| | 21419 | } |
| | 21420 | } |
| 21405 | }, | 21421 | }, |
| 21406 | .Union => { | 21422 | .Union => { |
| 21407 | const union_ty = try sema.resolveTypeFields(block, src, concrete_ty); | 21423 | const union_ty = try sema.resolveTypeFields(block, src, concrete_ty); |