diff options
| author | Jacob Young <jacobly0@users.noreply.github.com> | 2023-05-08 20:04:40 -0400 |
|---|---|---|
| committer | Jacob Young <jacobly0@users.noreply.github.com> | 2023-05-15 03:07:51 -0400 |
| commit | 81664f17d5ec4382057bc3d2c8774d8804791a04 (patch) | |
| tree | 944f5df8addce217e221c0c867b3b9781cce6048 /src/codegen.zig | |
| parent | e36e9323f4c4ce66013ba4774ff0145fc9cad34d (diff) | |
| download | zig-81664f17d5ec4382057bc3d2c8774d8804791a04.tar.gz zig-81664f17d5ec4382057bc3d2c8774d8804791a04.zip | |
codegen: implement global enum_numbered
Diffstat (limited to 'src/codegen.zig')
| -rw-r--r-- | src/codegen.zig | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/src/codegen.zig b/src/codegen.zig index 9d479b90cd..7f65df2804 100644 --- a/src/codegen.zig +++ b/src/codegen.zig @@ -1189,12 +1189,16 @@ pub fn genTypedValue( .enum_simple => { return GenResult.mcv(.{ .immediate = field_index.data }); }, - .enum_full, .enum_nonexhaustive => { - const enum_full = typed_value.ty.cast(Type.Payload.EnumFull).?.data; - if (enum_full.values.count() != 0) { - const tag_val = enum_full.values.keys()[field_index.data]; + .enum_numbered, .enum_full, .enum_nonexhaustive => { + const enum_values = if (typed_value.ty.castTag(.enum_numbered)) |pl| + pl.data.values + else + typed_value.ty.cast(Type.Payload.EnumFull).?.data.values; + if (enum_values.count() != 0) { + const tag_val = enum_values.keys()[field_index.data]; + var buf: Type.Payload.Bits = undefined; return genTypedValue(bin_file, src_loc, .{ - .ty = enum_full.tag_ty, + .ty = typed_value.ty.intTagType(&buf), .val = tag_val, }, owner_decl_index); } else { |
