diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2021-10-05 23:05:14 -0700 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2021-10-05 23:05:14 -0700 |
| commit | e16ddad49f1b3e4ce10ce8fb653e48f24a9d4837 (patch) | |
| tree | 131a0873355fecce3c1abac1d0f42b8cab27d515 /src/value.zig | |
| parent | cb616cb7972bb2f38ea4527c7ec0ae3cc0d64c7c (diff) | |
| download | zig-e16ddad49f1b3e4ce10ce8fb653e48f24a9d4837.tar.gz zig-e16ddad49f1b3e4ce10ce8fb653e48f24a9d4837.zip | |
stage2: enum fixes
* Sema: fix a missing copy on enum tag values
* LLVM backend: fix lowering of enum constant values for enums with
specified tag values.
* Value: fix enumToInt for `enum_numbered` cases.
The float widening behavior tests which rely on compiler-rt symbols are
now passing.
Diffstat (limited to 'src/value.zig')
| -rw-r--r-- | src/value.zig | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/src/value.zig b/src/value.zig index 90d98bd539..4e8c79c93b 100644 --- a/src/value.zig +++ b/src/value.zig @@ -858,6 +858,19 @@ pub const Value = extern union { return Value.initPayload(&buffer.base); } }, + .enum_numbered => { + const enum_obj = ty.castTag(.enum_numbered).?.data; + if (enum_obj.values.count() != 0) { + return enum_obj.values.keys()[field_index]; + } else { + // Field index and integer values are the same. + buffer.* = .{ + .base = .{ .tag = .int_u64 }, + .data = field_index, + }; + return Value.initPayload(&buffer.base); + } + }, .enum_simple => { // Field index and integer values are the same. buffer.* = .{ |
