| ... | @@ -9362,7 +9362,7 @@ fn zirTruncate(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai | ... | @@ -9362,7 +9362,7 @@ fn zirTruncate(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai |
| 9362 | const dest_info = dest_ty.intInfo(target); | 9362 | const dest_info = dest_ty.intInfo(target); |
| 9363 | | 9363 | |
| 9364 | if (src_info.bits == 0 or dest_info.bits == 0) { | 9364 | if (src_info.bits == 0 or dest_info.bits == 0) { |
| 9365 | return sema.addConstant(dest_ty, Value.initTag(.zero)); | 9365 | return sema.addConstant(dest_ty, Value.zero); |
| 9366 | } | 9366 | } |
| 9367 | | 9367 | |
| 9368 | if (!src_is_comptime_int) { | 9368 | if (!src_is_comptime_int) { |
| ... | @@ -10884,7 +10884,7 @@ fn fieldVal( | ... | @@ -10884,7 +10884,7 @@ fn fieldVal( |
| 10884 | }, | 10884 | }, |
| 10885 | else => {}, | 10885 | else => {}, |
| 10886 | } | 10886 | } |
| 10887 | return sema.fail(block, src, "type '{}' does not support field access (fieldVal, {}.{s})", .{ object_ty, object_ty, field_name }); | 10887 | return sema.fail(block, src, "type '{}' does not support field access", .{object_ty}); |
| 10888 | } | 10888 | } |
| 10889 | | 10889 | |
| 10890 | fn fieldPtr( | 10890 | fn fieldPtr( |
| ... | @@ -13742,10 +13742,9 @@ fn typeHasOnePossibleValue( | ... | @@ -13742,10 +13742,9 @@ fn typeHasOnePossibleValue( |
| 13742 | sema: *Sema, | 13742 | sema: *Sema, |
| 13743 | block: *Block, | 13743 | block: *Block, |
| 13744 | src: LazySrcLoc, | 13744 | src: LazySrcLoc, |
| 13745 | starting_type: Type, | 13745 | ty: Type, |
| 13746 | ) CompileError!?Value { | 13746 | ) CompileError!?Value { |
| 13747 | var ty = starting_type; | 13747 | switch (ty.tag()) { |
| 13748 | while (true) switch (ty.tag()) { | | |
| 13749 | .f16, | 13748 | .f16, |
| 13750 | .f32, | 13749 | .f32, |
| 13751 | .f64, | 13750 | .f64, |
| ... | @@ -13839,7 +13838,7 @@ fn typeHasOnePossibleValue( | ... | @@ -13839,7 +13838,7 @@ fn typeHasOnePossibleValue( |
| 13839 | const enum_obj = resolved_ty.castTag(.enum_numbered).?.data; | 13838 | const enum_obj = resolved_ty.castTag(.enum_numbered).?.data; |
| 13840 | if (enum_obj.fields.count() == 1) { | 13839 | if (enum_obj.fields.count() == 1) { |
| 13841 | if (enum_obj.values.count() == 0) { | 13840 | if (enum_obj.values.count() == 0) { |
| 13842 | return Value.initTag(.zero); // auto-numbered | 13841 | return Value.zero; // auto-numbered |
| 13843 | } else { | 13842 | } else { |
| 13844 | return enum_obj.values.keys()[0]; | 13843 | return enum_obj.values.keys()[0]; |
| 13845 | } | 13844 | } |
| ... | @@ -13852,7 +13851,7 @@ fn typeHasOnePossibleValue( | ... | @@ -13852,7 +13851,7 @@ fn typeHasOnePossibleValue( |
| 13852 | const enum_obj = resolved_ty.castTag(.enum_full).?.data; | 13851 | const enum_obj = resolved_ty.castTag(.enum_full).?.data; |
| 13853 | if (enum_obj.fields.count() == 1) { | 13852 | if (enum_obj.fields.count() == 1) { |
| 13854 | if (enum_obj.values.count() == 0) { | 13853 | if (enum_obj.values.count() == 0) { |
| 13855 | return Value.initTag(.zero); // auto-numbered | 13854 | return Value.zero; // auto-numbered |
| 13856 | } else { | 13855 | } else { |
| 13857 | return enum_obj.values.keys()[0]; | 13856 | return enum_obj.values.keys()[0]; |
| 13858 | } | 13857 | } |
| ... | @@ -13864,15 +13863,15 @@ fn typeHasOnePossibleValue( | ... | @@ -13864,15 +13863,15 @@ fn typeHasOnePossibleValue( |
| 13864 | const resolved_ty = try sema.resolveTypeFields(block, src, ty); | 13863 | const resolved_ty = try sema.resolveTypeFields(block, src, ty); |
| 13865 | const enum_simple = resolved_ty.castTag(.enum_simple).?.data; | 13864 | const enum_simple = resolved_ty.castTag(.enum_simple).?.data; |
| 13866 | if (enum_simple.fields.count() == 1) { | 13865 | if (enum_simple.fields.count() == 1) { |
| 13867 | return Value.initTag(.zero); | 13866 | return Value.zero; |
| 13868 | } else { | 13867 | } else { |
| 13869 | return null; | 13868 | return null; |
| 13870 | } | 13869 | } |
| 13871 | }, | 13870 | }, |
| 13872 | .enum_nonexhaustive => { | 13871 | .enum_nonexhaustive => { |
| 13873 | const tag_ty = ty.castTag(.enum_nonexhaustive).?.data.tag_ty; | 13872 | const tag_ty = ty.castTag(.enum_nonexhaustive).?.data.tag_ty; |
| 13874 | if (tag_ty.cast(Type.Payload.Bits).?.data == 0) { | 13873 | if (!tag_ty.hasCodeGenBits()) { |
| 13875 | return Value.initTag(.zero); | 13874 | return Value.zero; |
| 13876 | } else { | 13875 | } else { |
| 13877 | return null; | 13876 | return null; |
| 13878 | } | 13877 | } |
| ... | @@ -13892,7 +13891,7 @@ fn typeHasOnePossibleValue( | ... | @@ -13892,7 +13891,7 @@ fn typeHasOnePossibleValue( |
| 13892 | | 13891 | |
| 13893 | .int_unsigned, .int_signed => { | 13892 | .int_unsigned, .int_signed => { |
| 13894 | if (ty.cast(Type.Payload.Bits).?.data == 0) { | 13893 | if (ty.cast(Type.Payload.Bits).?.data == 0) { |
| 13895 | return Value.initTag(.zero); | 13894 | return Value.zero; |
| 13896 | } else { | 13895 | } else { |
| 13897 | return null; | 13896 | return null; |
| 13898 | } | 13897 | } |
| ... | @@ -13900,14 +13899,16 @@ fn typeHasOnePossibleValue( | ... | @@ -13900,14 +13899,16 @@ fn typeHasOnePossibleValue( |
| 13900 | .vector, .array, .array_u8 => { | 13899 | .vector, .array, .array_u8 => { |
| 13901 | if (ty.arrayLen() == 0) | 13900 | if (ty.arrayLen() == 0) |
| 13902 | return Value.initTag(.empty_array); | 13901 | return Value.initTag(.empty_array); |
| 13903 | _ = (try sema.typeHasOnePossibleValue(block, src, ty.elemType())) orelse return null; | 13902 | if ((try sema.typeHasOnePossibleValue(block, src, ty.elemType())) != null) { |
| 13904 | return Value.initTag(.the_only_possible_value); | 13903 | return Value.initTag(.the_only_possible_value); |
| | 13904 | } |
| | 13905 | return null; |
| 13905 | }, | 13906 | }, |
| 13906 | | 13907 | |
| 13907 | .inferred_alloc_const => unreachable, | 13908 | .inferred_alloc_const => unreachable, |
| 13908 | .inferred_alloc_mut => unreachable, | 13909 | .inferred_alloc_mut => unreachable, |
| 13909 | .generic_poison => return error.GenericPoison, | 13910 | .generic_poison => return error.GenericPoison, |
| 13910 | }; | 13911 | } |
| 13911 | } | 13912 | } |
| 13912 | | 13913 | |
| 13913 | fn getAstTree(sema: *Sema, block: *Block) CompileError!*const std.zig.Ast { | 13914 | fn getAstTree(sema: *Sema, block: *Block) CompileError!*const std.zig.Ast { |