| ... | @@ -3096,6 +3096,14 @@ pub const Type = extern union { | ... | @@ -3096,6 +3096,14 @@ pub const Type = extern union { |
| 3096 | } | 3096 | } |
| 3097 | return Value.initTag(.empty_struct_value); | 3097 | return Value.initTag(.empty_struct_value); |
| 3098 | }, | 3098 | }, |
| | 3099 | .enum_numbered => { |
| | 3100 | const enum_numbered = ty.castTag(.enum_numbered).?.data; |
| | 3101 | if (enum_numbered.fields.count() == 1) { |
| | 3102 | return enum_numbered.values.keys()[0]; |
| | 3103 | } else { |
| | 3104 | return null; |
| | 3105 | } |
| | 3106 | }, |
| 3099 | .enum_full => { | 3107 | .enum_full => { |
| 3100 | const enum_full = ty.castTag(.enum_full).?.data; | 3108 | const enum_full = ty.castTag(.enum_full).?.data; |
| 3101 | if (enum_full.fields.count() == 1) { | 3109 | if (enum_full.fields.count() == 1) { |
| ... | @@ -3112,8 +3120,14 @@ pub const Type = extern union { | ... | @@ -3112,8 +3120,14 @@ pub const Type = extern union { |
| 3112 | return null; | 3120 | return null; |
| 3113 | } | 3121 | } |
| 3114 | }, | 3122 | }, |
| 3115 | .enum_nonexhaustive => ty = ty.castTag(.enum_nonexhaustive).?.data.tag_ty, | 3123 | .enum_nonexhaustive => { |
| 3116 | .enum_numbered => ty = ty.castTag(.enum_numbered).?.data.tag_ty, | 3124 | const tag_ty = ty.castTag(.enum_nonexhaustive).?.data.tag_ty; |
| | 3125 | if (tag_ty.cast(Type.Payload.Bits).?.data == 0) { |
| | 3126 | return Value.initTag(.zero); |
| | 3127 | } else { |
| | 3128 | return null; |
| | 3129 | } |
| | 3130 | }, |
| 3117 | .@"union" => { | 3131 | .@"union" => { |
| 3118 | return null; // TODO | 3132 | return null; // TODO |
| 3119 | }, | 3133 | }, |
| ... | @@ -3137,8 +3151,8 @@ pub const Type = extern union { | ... | @@ -3137,8 +3151,8 @@ pub const Type = extern union { |
| 3137 | .vector, .array, .array_u8 => { | 3151 | .vector, .array, .array_u8 => { |
| 3138 | if (ty.arrayLen() == 0) | 3152 | if (ty.arrayLen() == 0) |
| 3139 | return Value.initTag(.empty_array); | 3153 | return Value.initTag(.empty_array); |
| 3140 | ty = ty.elemType(); | 3154 | _ = ty.elemType().onePossibleValue() orelse return null; |
| 3141 | continue; | 3155 | return Value.initTag(.the_only_possible_value); |
| 3142 | }, | 3156 | }, |
| 3143 | | 3157 | |
| 3144 | .inferred_alloc_const => unreachable, | 3158 | .inferred_alloc_const => unreachable, |