commit b125063dcfb95b470bc7830b188614361d3ba4cb (tree)
parent 50f33734c6cec10a0132644c08ee443c2dd224e2
Author: Andrew Kelley <andrew@ziglang.org>
Date: Wed, 3 May 2023 12:30:06 -0700
InternPool: implement typeHasOnePossibleValue for simple_type
Diffstat:
| M | src/Sema.zig | | | 47 | ++++++++++++++++++++++++++++++++++++++++++++++- |
| M | src/type.zig | | | 47 | ++++++++++++++++++++++++++++++++++++++++++++++- |
2 files changed, 92 insertions(+), 2 deletions(-)
diff --git a/src/Sema.zig b/src/Sema.zig
@@ -32776,7 +32776,52 @@ pub fn typeHasOnePossibleValue(sema: *Sema, ty: Type) CompileError!?Value {
.vector_type => @panic("TODO"),
.optional_type => @panic("TODO"),
.error_union_type => @panic("TODO"),
- .simple_type => @panic("TODO"),
+ .simple_type => |t| switch (t) {
+ .f16,
+ .f32,
+ .f64,
+ .f80,
+ .f128,
+ .usize,
+ .isize,
+ .c_char,
+ .c_short,
+ .c_ushort,
+ .c_int,
+ .c_uint,
+ .c_long,
+ .c_ulong,
+ .c_longlong,
+ .c_ulonglong,
+ .c_longdouble,
+ .anyopaque,
+ .bool,
+ .type,
+ .anyerror,
+ .comptime_int,
+ .comptime_float,
+ .@"anyframe",
+ .enum_literal,
+ .atomic_order,
+ .atomic_rmw_op,
+ .calling_convention,
+ .address_space,
+ .float_mode,
+ .reduce_op,
+ .call_modifier,
+ .prefetch_options,
+ .export_options,
+ .extern_options,
+ .type_info,
+ => return null,
+
+ .void => return Value.void,
+ .noreturn => return Value.initTag(.unreachable_value),
+ .null => return Value.null,
+ .undefined => return Value.undef,
+
+ .generic_poison => return error.GenericPoison,
+ },
.struct_type => @panic("TODO"),
.simple_value => unreachable,
.extern_func => unreachable,
diff --git a/src/type.zig b/src/type.zig
@@ -5030,7 +5030,52 @@ pub const Type = struct {
.vector_type => @panic("TODO"),
.optional_type => @panic("TODO"),
.error_union_type => @panic("TODO"),
- .simple_type => @panic("TODO"),
+ .simple_type => |t| switch (t) {
+ .f16,
+ .f32,
+ .f64,
+ .f80,
+ .f128,
+ .usize,
+ .isize,
+ .c_char,
+ .c_short,
+ .c_ushort,
+ .c_int,
+ .c_uint,
+ .c_long,
+ .c_ulong,
+ .c_longlong,
+ .c_ulonglong,
+ .c_longdouble,
+ .anyopaque,
+ .bool,
+ .type,
+ .anyerror,
+ .comptime_int,
+ .comptime_float,
+ .@"anyframe",
+ .enum_literal,
+ .atomic_order,
+ .atomic_rmw_op,
+ .calling_convention,
+ .address_space,
+ .float_mode,
+ .reduce_op,
+ .call_modifier,
+ .prefetch_options,
+ .export_options,
+ .extern_options,
+ .type_info,
+ => return null,
+
+ .void => return Value.void,
+ .noreturn => return Value.initTag(.unreachable_value),
+ .null => return Value.null,
+ .undefined => return Value.undef,
+
+ .generic_poison => unreachable,
+ },
.struct_type => @panic("TODO"),
.simple_value => unreachable,
.extern_func => unreachable,