aboutsummaryrefslogtreecommitdiff
path: root/lib/std/json.zig
diff options
context:
space:
mode:
authorTadeo Kondrak <me@tadeo.ca>2020-08-26 13:38:58 -0600
committerTadeo Kondrak <me@tadeo.ca>2020-09-07 06:23:27 -0600
commit771f35c59381dc6359640d7f572411d24e379240 (patch)
treeaaaacae0132fb1939abb825ddc49d066bf02adeb /lib/std/json.zig
parentac19ccf5955488a43b29ea13675c33426aada430 (diff)
downloadzig-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.zig16
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);
}
}