aboutsummaryrefslogtreecommitdiff
path: root/src/codegen
diff options
context:
space:
mode:
authorAli Chraghi <alichraghi@proton.me>2024-02-02 17:48:16 +0330
committerAli Chraghi <alichraghi@proton.me>2024-02-05 11:55:14 +0330
commit739108c9f00b0f2532cb9bc3794f4ce1de821ab1 (patch)
tree590de5905618e12f9fb2e097df8f925dd01691c6 /src/codegen
parentb41aad019364b2c99934339d70aa4f37d945f248 (diff)
downloadzig-739108c9f00b0f2532cb9bc3794f4ce1de821ab1.tar.gz
zig-739108c9f00b0f2532cb9bc3794f4ce1de821ab1.zip
spirv: support enum integer values in Assembler
Diffstat (limited to 'src/codegen')
-rw-r--r--src/codegen/spirv/Assembler.zig8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/codegen/spirv/Assembler.zig b/src/codegen/spirv/Assembler.zig
index 87e18d4bd8..7cecd7ee38 100644
--- a/src/codegen/spirv/Assembler.zig
+++ b/src/codegen/spirv/Assembler.zig
@@ -591,9 +591,13 @@ fn parseValueEnum(self: *Assembler, kind: spec.OperandKind) !void {
try self.expectToken(.value);
const text = self.tokenText(tok);
+ const int_value = std.fmt.parseInt(u32, text, 0) catch null;
const enumerant = for (kind.enumerants()) |enumerant| {
- if (std.mem.eql(u8, enumerant.name, text))
- break enumerant;
+ if (int_value) |v| {
+ if (v == enumerant.value) break enumerant;
+ } else {
+ if (std.mem.eql(u8, enumerant.name, text)) break enumerant;
+ }
} else {
return self.fail(tok.start, "'{s}' is not a valid value for enumeration {s}", .{ text, @tagName(kind) });
};