authorgravatar for luuk@degram.devLuuk de Gram <luuk@degram.dev> 2023-10-08 21:58:35+02:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2023-10-08 21:58:35+02:00
log54e7f58fcb8cd3fbfd1b1a3efd090c296b0e728b
treef53eeea31e8226da6e2b581ababcb0b3e0dc263f
parent1de242cd732b63bbd8b24579b42b0ccfaf40e193
parent9402f8b74aca76a14c7e9d00fd917e8ae9a02d2f
signaturebadge-question-mark Signed by PGP key 4AEE18F83AFDEB23

Merge pull request #17438 from Luukdegram/issue-17436

wasm - fix `@tagName` for signed enums

2 files changed, 18 insertions(+), 2 deletions(-)

src/arch/wasm/CodeGen.zig+2-2
......@@ -7215,12 +7215,12 @@ fn getTagNameFunction(func: *CodeGen, enum_ty: Type) InnerError!u32 {
72157215 switch (tag_value) {
72167216 .imm32 => |value| {
72177217 try writer.writeByte(std.wasm.opcode(.i32_const));
7218 try leb.writeULEB128(writer, value);
7218 try leb.writeILEB128(writer, @as(i32, @bitCast(value)));
72197219 try writer.writeByte(std.wasm.opcode(.i32_ne));
72207220 },
72217221 .imm64 => |value| {
72227222 try writer.writeByte(std.wasm.opcode(.i64_const));
7223 try leb.writeULEB128(writer, value);
7223 try leb.writeILEB128(writer, @as(i64, @bitCast(value)));
72247224 try writer.writeByte(std.wasm.opcode(.i64_ne));
72257225 },
72267226 else => unreachable,
test/behavior/enum.zig+16
......@@ -1048,6 +1048,22 @@ test "@tagName on enum literals" {
10481048 try comptime expect(mem.eql(u8, @tagName(.FooBar), "FooBar"));
10491049}
10501050
1051test "tag name with signed enum values" {
1052 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
1053 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
1054 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
1055 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
1056
1057 const LocalFoo = enum(isize) {
1058 alfa = 62,
1059 bravo = 63,
1060 charlie = 64,
1061 delta = 65,
1062 };
1063 var b = LocalFoo.bravo;
1064 try expect(mem.eql(u8, @tagName(b), "bravo"));
1065}
1066
10511067test "enum literal casting to optional" {
10521068 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
10531069 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;