diff options
| author | Tadeo Kondrak <me@tadeo.ca> | 2020-08-26 13:38:58 -0600 |
|---|---|---|
| committer | Tadeo Kondrak <me@tadeo.ca> | 2020-09-07 06:23:27 -0600 |
| commit | 771f35c59381dc6359640d7f572411d24e379240 (patch) | |
| tree | aaaacae0132fb1939abb825ddc49d066bf02adeb /lib/std/json.zig | |
| parent | ac19ccf5955488a43b29ea13675c33426aada430 (diff) | |
| download | zig-771f35c59381dc6359640d7f572411d24e379240.tar.gz zig-771f35c59381dc6359640d7f572411d24e379240.zip | |
Use less inefficient method of replacing TypeInfo.UnionField.enum_field
Diffstat (limited to 'lib/std/json.zig')
| -rw-r--r-- | lib/std/json.zig | 16 |
1 files changed, 2 insertions, 14 deletions
diff --git a/lib/std/json.zig b/lib/std/json.zig index 31f8a91127..cf479ab2cd 100644 --- a/lib/std/json.zig +++ b/lib/std/json.zig @@ -1612,14 +1612,8 @@ pub fn parseFree(comptime T: type, value: T, options: ParseOptions) void { }, .Union => |unionInfo| { if (unionInfo.tag_type) |UnionTagType| { - const tag_info = @typeInfo(UnionTagType).Enum; inline for (unionInfo.fields) |u_field| { - comptime var tag_value: @TagType(UnionTagType) = undefined; - inline for (tag_info.fields) |e_field| { - if (comptime mem.eql(u8, u_field.name, e_field.name)) - tag_value = e_field.value; - } - if (@enumToInt(@as(UnionTagType, value)) == tag_value) { + if (value == @field(UnionTagType, u_field.name)) { parseFree(u_field.field_type, @field(value, u_field.name), options); break; } @@ -2463,14 +2457,8 @@ pub fn stringify( const info = @typeInfo(T).Union; if (info.tag_type) |UnionTagType| { - const tag_info = @typeInfo(UnionTagType).Enum; inline for (info.fields) |u_field| { - comptime var tag_value: @TagType(UnionTagType) = undefined; - inline for (tag_info.fields) |e_field| { - if (comptime mem.eql(u8, u_field.name, e_field.name)) - tag_value = e_field.value; - } - if (@enumToInt(@as(UnionTagType, value)) == tag_value) { + if (value == @field(UnionTagType, u_field.name)) { return try stringify(@field(value, u_field.name), options, out_stream); } } |
