zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit 3267eb3a28f6c747772a40beedac14f5feae814f (tree)
parent b77679039fd40aa1693781f99ac89f2dc705e5c2
Author: IntegratedQuantum <jahe788@gmail.com>
Date:   Mon, 19 Jun 2023 21:39:35 +0200

Fix @enumToInt and @tagName for auto-numbered enums with signed tag type.

Diffstat:
Msrc/InternPool.zig | 6+++++-
Mtest/behavior/enum.zig | 5+++++
2 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/src/InternPool.zig b/src/InternPool.zig @@ -448,7 +448,11 @@ pub const Key = union(enum) { if (x >= self.names.len) return null; return @intCast(u32, x); }, - .i64, .big_int => return null, // out of range + .i64 => |x| { + if (x >= self.names.len or x < 0) return null; + return @intCast(u32, x); + }, + .big_int => return null, // out of range .lazy_align, .lazy_size => unreachable, } } diff --git a/test/behavior/enum.zig b/test/behavior/enum.zig @@ -812,6 +812,11 @@ test "signed integer as enum tag" { try expect(@intFromEnum(SignedEnum.A2) == 1); } +test "int to enum with signed tag type" { + const E = enum(i32) { a, b, c }; + try expect(@intToEnum(E, 0) == .a); +} + test "enum with one member and custom tag type" { const E = enum(u2) { One,