Skip to content

Commit 091ef95

Browse files
committed
use ufcs in derive(RustDecodable)
1 parent 525fc4b commit 091ef95

File tree

1 file changed

+31
-19
lines changed

1 file changed

+31
-19
lines changed

compiler/rustc_builtin_macros/src/deriving/decodable.rs

+31-19
Original file line numberDiff line numberDiff line change
@@ -91,18 +91,19 @@ fn decodable_substructure(
9191
Unnamed(ref fields, _) => fields.len(),
9292
Named(ref fields) => fields.len(),
9393
};
94-
let read_struct_field = Ident::new(sym::read_struct_field, trait_span);
94+
let fn_read_struct_field_path: Vec<_> =
95+
cx.def_site_path(&[sym::rustc_serialize, sym::Decodable, sym::read_struct_field]);
9596

9697
let path = cx.path_ident(trait_span, substr.type_ident);
9798
let result =
9899
decode_static_fields(cx, trait_span, path, summary, |cx, span, name, field| {
99100
cx.expr_try(
100101
span,
101-
cx.expr_method_call(
102+
cx.expr_call_global(
102103
span,
103-
blkdecoder.clone(),
104-
read_struct_field,
104+
fn_read_struct_field_path.clone(),
105105
vec![
106+
blkdecoder.clone(),
106107
cx.expr_str(span, name),
107108
cx.expr_usize(span, field),
108109
exprdecode.clone(),
@@ -111,11 +112,14 @@ fn decodable_substructure(
111112
)
112113
});
113114
let result = cx.expr_ok(trait_span, result);
114-
cx.expr_method_call(
115+
let fn_read_struct_path: Vec<_> =
116+
cx.def_site_path(&[sym::rustc_serialize, sym::Decodable, sym::read_struct]);
117+
118+
cx.expr_call_global(
115119
trait_span,
116-
decoder,
117-
Ident::new(sym::read_struct, trait_span),
120+
fn_read_struct_path,
118121
vec![
122+
decoder,
119123
cx.expr_str(trait_span, substr.type_ident.name),
120124
cx.expr_usize(trait_span, nfields),
121125
cx.lambda1(trait_span, result, blkarg),
@@ -127,7 +131,12 @@ fn decodable_substructure(
127131

128132
let mut arms = Vec::with_capacity(fields.len() + 1);
129133
let mut variants = Vec::with_capacity(fields.len());
130-
let rvariant_arg = Ident::new(sym::read_enum_variant_arg, trait_span);
134+
135+
let fn_read_enum_variant_arg_path: Vec<_> = cx.def_site_path(&[
136+
sym::rustc_serialize,
137+
sym::Decodable,
138+
sym::read_enum_variant_arg,
139+
]);
131140

132141
for (i, &(ident, v_span, ref parts)) in fields.iter().enumerate() {
133142
variants.push(cx.expr_str(v_span, ident.name));
@@ -138,11 +147,10 @@ fn decodable_substructure(
138147
let idx = cx.expr_usize(span, field);
139148
cx.expr_try(
140149
span,
141-
cx.expr_method_call(
150+
cx.expr_call_global(
142151
span,
143-
blkdecoder.clone(),
144-
rvariant_arg,
145-
vec![idx, exprdecode.clone()],
152+
fn_read_enum_variant_arg_path.clone(),
153+
vec![blkdecoder.clone(), idx, exprdecode.clone()],
146154
),
147155
)
148156
});
@@ -159,17 +167,21 @@ fn decodable_substructure(
159167
let lambda = cx.lambda(trait_span, vec![blkarg, variant], result);
160168
let variant_vec = cx.expr_vec(trait_span, variants);
161169
let variant_vec = cx.expr_addr_of(trait_span, variant_vec);
162-
let result = cx.expr_method_call(
170+
let fn_read_enum_variant_path: Vec<_> =
171+
cx.def_site_path(&[sym::rustc_serialize, sym::Decodable, sym::read_enum_variant]);
172+
let result = cx.expr_call_global(
163173
trait_span,
164-
blkdecoder,
165-
Ident::new(sym::read_enum_variant, trait_span),
166-
vec![variant_vec, lambda],
174+
fn_read_enum_variant_path,
175+
vec![blkdecoder, variant_vec, lambda],
167176
);
168-
cx.expr_method_call(
177+
let fn_read_enum_path: Vec<_> =
178+
cx.def_site_path(&[sym::rustc_serialize, sym::Decodable, sym::read_enum]);
179+
180+
cx.expr_call_global(
169181
trait_span,
170-
decoder,
171-
Ident::new(sym::read_enum, trait_span),
182+
fn_read_enum_path,
172183
vec![
184+
decoder,
173185
cx.expr_str(trait_span, substr.type_ident.name),
174186
cx.lambda1(trait_span, result, blkarg),
175187
],

0 commit comments

Comments
 (0)