Commit 9626811725

Andrew Kelley <andrew@ziglang.org>
2023-05-06 05:34:19
Sema: add typeHasOnePossibleValue logic for InternPool
1 parent 31aee50
Changed files (1)
src/Sema.zig
@@ -32950,14 +32950,27 @@ pub fn typeHasOnePossibleValue(sema: *Sema, ty: Type) CompileError!?Value {
             }
         },
         .ptr_type => return null,
-        .array_type => @panic("TODO"),
+        .array_type => |array_type| {
+            if (array_type.len == 0)
+                return Value.initTag(.empty_array);
+            if ((try sema.typeHasOnePossibleValue(array_type.child.toType())) != null) {
+                return Value.initTag(.the_only_possible_value);
+            }
+            return null;
+        },
         .vector_type => |vector_type| {
             if (vector_type.len == 0) return Value.initTag(.empty_array);
             if (try sema.typeHasOnePossibleValue(vector_type.child.toType())) |v| return v;
             return null;
         },
-        .opt_type => @panic("TODO"),
-        .error_union_type => @panic("TODO"),
+        .opt_type => |child| {
+            if (child.toType().isNoReturn()) {
+                return Value.null;
+            } else {
+                return null;
+            }
+        },
+        .error_union_type => return null,
         .simple_type => |t| switch (t) {
             .f16,
             .f32,