From 7f4fdcc4fce79cc1277c2a89a6a4136293c1b2e5 Mon Sep 17 00:00:00 2001 From: Jimmi Holst Christensen Date: Thu, 6 Jan 2022 22:18:27 +0100 Subject: stage2: Implement validating switch on errors --- src/type.zig | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'src/type.zig') diff --git a/src/type.zig b/src/type.zig index b948093994..4ad15f2399 100644 --- a/src/type.zig +++ b/src/type.zig @@ -3617,6 +3617,20 @@ pub const Type = extern union { }; } + // Asserts that `ty` is an error set and not `anyerror`. + pub fn errorSetNames(ty: Type) []const []const u8 { + return switch (ty.tag()) { + .error_set_single => blk: { + // Work around coercion problems + const tmp: *const [1][]const u8 = &ty.castTag(.error_set_single).?.data; + break :blk tmp; + }, + .error_set_merged => ty.castTag(.error_set_merged).?.data.keys(), + .error_set => ty.castTag(.error_set).?.data.names.keys(), + else => unreachable, + }; + } + pub fn enumFields(ty: Type) Module.EnumFull.NameMap { return switch (ty.tag()) { .enum_full, .enum_nonexhaustive => ty.cast(Payload.EnumFull).?.data.fields, -- cgit v1.2.3