Commit 3267eb3a28

IntegratedQuantum <jahe788@gmail.com>
2023-06-19 21:39:35
Fix @enumToInt and @tagName for auto-numbered enums with signed tag type.
1 parent b776790
Changed files (2)
src
test
behavior
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,
             }
         }
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,