Skip to content

Commit 22e8d5f

Browse files
committed
Inline many methods of Encoder
They aren't overridden anyway
1 parent 5cd2922 commit 22e8d5f

File tree

6 files changed

+255
-389
lines changed

6 files changed

+255
-389
lines changed

compiler/rustc_macros/src/serialize.rs

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -146,10 +146,9 @@ fn encodable_body(
146146
.map(|binding| {
147147
let bind_ident = &binding.binding;
148148
let result = quote! {
149-
match ::rustc_serialize::Encoder::emit_struct_field(
149+
match ::rustc_serialize::Encodable::<#encoder_ty>::encode(
150+
#bind_ident,
150151
__encoder,
151-
|__encoder|
152-
::rustc_serialize::Encodable::<#encoder_ty>::encode(#bind_ident, __encoder),
153152
) {
154153
::std::result::Result::Ok(()) => (),
155154
::std::result::Result::Err(__err)
@@ -161,9 +160,7 @@ fn encodable_body(
161160
.collect::<TokenStream>()
162161
});
163162
quote! {
164-
::rustc_serialize::Encoder::emit_struct(__encoder, |__encoder| {
165-
::std::result::Result::Ok(match *self { #encode_inner })
166-
})
163+
::std::result::Result::Ok(match *self { #encode_inner })
167164
}
168165
}
169166
_ => {
@@ -175,10 +172,9 @@ fn encodable_body(
175172
.map(|binding| {
176173
let bind_ident = &binding.binding;
177174
let result = quote! {
178-
match ::rustc_serialize::Encoder::emit_enum_variant_arg(
175+
match ::rustc_serialize::Encodable::<#encoder_ty>::encode(
176+
#bind_ident,
179177
__encoder,
180-
|__encoder|
181-
::rustc_serialize::Encodable::<#encoder_ty>::encode(#bind_ident, __encoder),
182178
) {
183179
::std::result::Result::Ok(()) => (),
184180
::std::result::Result::Err(__err)
@@ -208,11 +204,9 @@ fn encodable_body(
208204
result
209205
});
210206
quote! {
211-
::rustc_serialize::Encoder::emit_enum(__encoder, |__encoder| {
212-
match *self {
213-
#encode_inner
214-
}
215-
})
207+
match *self {
208+
#encode_inner
209+
}
216210
}
217211
}
218212
};

compiler/rustc_serialize/src/collection_impls.rs

Lines changed: 43 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,11 @@ impl<D: Decoder, A: Array<Item: Decodable<D>>> Decodable<D> for SmallVec<A> {
2525

2626
impl<S: Encoder, T: Encodable<S>> Encodable<S> for LinkedList<T> {
2727
fn encode(&self, s: &mut S) -> Result<(), S::Error> {
28-
s.emit_seq(self.len(), |s| {
29-
for e in self.iter() {
30-
s.emit_seq_elt(|s| e.encode(s))?;
31-
}
32-
Ok(())
33-
})
28+
s.emit_usize(self.len())?;
29+
for e in self.iter() {
30+
e.encode(s)?;
31+
}
32+
Ok(())
3433
}
3534
}
3635

@@ -43,12 +42,11 @@ impl<D: Decoder, T: Decodable<D>> Decodable<D> for LinkedList<T> {
4342

4443
impl<S: Encoder, T: Encodable<S>> Encodable<S> for VecDeque<T> {
4544
fn encode(&self, s: &mut S) -> Result<(), S::Error> {
46-
s.emit_seq(self.len(), |s| {
47-
for e in self.iter() {
48-
s.emit_seq_elt(|s| e.encode(s))?;
49-
}
50-
Ok(())
51-
})
45+
s.emit_usize(self.len())?;
46+
for e in self.iter() {
47+
e.encode(s)?;
48+
}
49+
Ok(())
5250
}
5351
}
5452

@@ -65,13 +63,12 @@ where
6563
V: Encodable<S>,
6664
{
6765
fn encode(&self, e: &mut S) -> Result<(), S::Error> {
68-
e.emit_map(self.len(), |e| {
69-
for (key, val) in self.iter() {
70-
e.emit_map_elt_key(|e| key.encode(e))?;
71-
e.emit_map_elt_val(|e| val.encode(e))?;
72-
}
73-
Ok(())
74-
})
66+
e.emit_usize(self.len())?;
67+
for (key, val) in self.iter() {
68+
key.encode(e)?;
69+
val.encode(e)?;
70+
}
71+
Ok(())
7572
}
7673
}
7774

@@ -97,12 +94,11 @@ where
9794
T: Encodable<S> + PartialEq + Ord,
9895
{
9996
fn encode(&self, s: &mut S) -> Result<(), S::Error> {
100-
s.emit_seq(self.len(), |s| {
101-
for e in self.iter() {
102-
s.emit_seq_elt(|s| e.encode(s))?;
103-
}
104-
Ok(())
105-
})
97+
s.emit_usize(self.len())?;
98+
for e in self.iter() {
99+
e.encode(s)?;
100+
}
101+
Ok(())
106102
}
107103
}
108104

@@ -127,13 +123,12 @@ where
127123
S: BuildHasher,
128124
{
129125
fn encode(&self, e: &mut E) -> Result<(), E::Error> {
130-
e.emit_map(self.len(), |e| {
131-
for (key, val) in self.iter() {
132-
e.emit_map_elt_key(|e| key.encode(e))?;
133-
e.emit_map_elt_val(|e| val.encode(e))?;
134-
}
135-
Ok(())
136-
})
126+
e.emit_usize(self.len())?;
127+
for (key, val) in self.iter() {
128+
key.encode(e)?;
129+
val.encode(e)?;
130+
}
131+
Ok(())
137132
}
138133
}
139134

@@ -162,12 +157,11 @@ where
162157
S: BuildHasher,
163158
{
164159
fn encode(&self, s: &mut E) -> Result<(), E::Error> {
165-
s.emit_seq(self.len(), |s| {
166-
for e in self.iter() {
167-
s.emit_seq_elt(|s| e.encode(s))?;
168-
}
169-
Ok(())
170-
})
160+
s.emit_usize(self.len())?;
161+
for e in self.iter() {
162+
e.encode(s)?;
163+
}
164+
Ok(())
171165
}
172166
}
173167

@@ -194,13 +188,12 @@ where
194188
S: BuildHasher,
195189
{
196190
fn encode(&self, e: &mut E) -> Result<(), E::Error> {
197-
e.emit_map(self.len(), |e| {
198-
for (key, val) in self.iter() {
199-
e.emit_map_elt_key(|e| key.encode(e))?;
200-
e.emit_map_elt_val(|e| val.encode(e))?;
201-
}
202-
Ok(())
203-
})
191+
e.emit_usize(self.len())?;
192+
for (key, val) in self.iter() {
193+
key.encode(e)?;
194+
val.encode(e)?;
195+
}
196+
Ok(())
204197
}
205198
}
206199

@@ -229,12 +222,11 @@ where
229222
S: BuildHasher,
230223
{
231224
fn encode(&self, s: &mut E) -> Result<(), E::Error> {
232-
s.emit_seq(self.len(), |s| {
233-
for e in self.iter() {
234-
s.emit_seq_elt(|s| e.encode(s))?;
235-
}
236-
Ok(())
237-
})
225+
s.emit_usize(self.len())?;
226+
for e in self.iter() {
227+
e.encode(s)?;
228+
}
229+
Ok(())
238230
}
239231
}
240232

compiler/rustc_serialize/src/serialize.rs

Lines changed: 16 additions & 127 deletions
Original file line numberDiff line numberDiff line change
@@ -35,15 +35,7 @@ pub trait Encoder {
3535
fn emit_str(&mut self, v: &str) -> Result<(), Self::Error>;
3636
fn emit_raw_bytes(&mut self, s: &[u8]) -> Result<(), Self::Error>;
3737

38-
// Compound types:
39-
#[inline]
40-
fn emit_enum<F>(&mut self, f: F) -> Result<(), Self::Error>
41-
where
42-
F: FnOnce(&mut Self) -> Result<(), Self::Error>,
43-
{
44-
f(self)
45-
}
46-
38+
// Convenience for the derive macro:
4739
fn emit_enum_variant<F>(&mut self, v_id: usize, f: F) -> Result<(), Self::Error>
4840
where
4941
F: FnOnce(&mut Self) -> Result<(), Self::Error>,
@@ -62,106 +54,6 @@ pub trait Encoder {
6254
fn emit_fieldless_enum_variant<const ID: usize>(&mut self) -> Result<(), Self::Error> {
6355
self.emit_usize(ID)
6456
}
65-
66-
#[inline]
67-
fn emit_enum_variant_arg<F>(&mut self, f: F) -> Result<(), Self::Error>
68-
where
69-
F: FnOnce(&mut Self) -> Result<(), Self::Error>,
70-
{
71-
f(self)
72-
}
73-
74-
#[inline]
75-
fn emit_struct<F>(&mut self, f: F) -> Result<(), Self::Error>
76-
where
77-
F: FnOnce(&mut Self) -> Result<(), Self::Error>,
78-
{
79-
f(self)
80-
}
81-
82-
#[inline]
83-
fn emit_struct_field<F>(&mut self, f: F) -> Result<(), Self::Error>
84-
where
85-
F: FnOnce(&mut Self) -> Result<(), Self::Error>,
86-
{
87-
f(self)
88-
}
89-
90-
#[inline]
91-
fn emit_tuple<F>(&mut self, f: F) -> Result<(), Self::Error>
92-
where
93-
F: FnOnce(&mut Self) -> Result<(), Self::Error>,
94-
{
95-
f(self)
96-
}
97-
98-
#[inline]
99-
fn emit_tuple_arg<F>(&mut self, f: F) -> Result<(), Self::Error>
100-
where
101-
F: FnOnce(&mut Self) -> Result<(), Self::Error>,
102-
{
103-
f(self)
104-
}
105-
106-
// Specialized types:
107-
fn emit_option<F>(&mut self, f: F) -> Result<(), Self::Error>
108-
where
109-
F: FnOnce(&mut Self) -> Result<(), Self::Error>,
110-
{
111-
self.emit_enum(f)
112-
}
113-
114-
#[inline]
115-
fn emit_option_none(&mut self) -> Result<(), Self::Error> {
116-
self.emit_enum_variant(0, |_| Ok(()))
117-
}
118-
119-
fn emit_option_some<F>(&mut self, f: F) -> Result<(), Self::Error>
120-
where
121-
F: FnOnce(&mut Self) -> Result<(), Self::Error>,
122-
{
123-
self.emit_enum_variant(1, f)
124-
}
125-
126-
fn emit_seq<F>(&mut self, len: usize, f: F) -> Result<(), Self::Error>
127-
where
128-
F: FnOnce(&mut Self) -> Result<(), Self::Error>,
129-
{
130-
self.emit_usize(len)?;
131-
f(self)
132-
}
133-
134-
#[inline]
135-
fn emit_seq_elt<F>(&mut self, f: F) -> Result<(), Self::Error>
136-
where
137-
F: FnOnce(&mut Self) -> Result<(), Self::Error>,
138-
{
139-
f(self)
140-
}
141-
142-
fn emit_map<F>(&mut self, len: usize, f: F) -> Result<(), Self::Error>
143-
where
144-
F: FnOnce(&mut Self) -> Result<(), Self::Error>,
145-
{
146-
self.emit_usize(len)?;
147-
f(self)
148-
}
149-
150-
#[inline]
151-
fn emit_map_elt_key<F>(&mut self, f: F) -> Result<(), Self::Error>
152-
where
153-
F: FnOnce(&mut Self) -> Result<(), Self::Error>,
154-
{
155-
f(self)
156-
}
157-
158-
#[inline]
159-
fn emit_map_elt_val<F>(&mut self, f: F) -> Result<(), Self::Error>
160-
where
161-
F: FnOnce(&mut Self) -> Result<(), Self::Error>,
162-
{
163-
f(self)
164-
}
16557
}
16658

16759
// Note: all the methods in this trait are infallible, which may be surprising.
@@ -353,12 +245,11 @@ impl<D: Decoder, T: Decodable<D>> Decodable<D> for Rc<T> {
353245

354246
impl<S: Encoder, T: Encodable<S>> Encodable<S> for [T] {
355247
default fn encode(&self, s: &mut S) -> Result<(), S::Error> {
356-
s.emit_seq(self.len(), |s| {
357-
for e in self.iter() {
358-
s.emit_seq_elt(|s| e.encode(s))?
359-
}
360-
Ok(())
361-
})
248+
s.emit_usize(self.len())?;
249+
for e in self.iter() {
250+
e.encode(s)?
251+
}
252+
Ok(())
362253
}
363254
}
364255

@@ -441,10 +332,10 @@ impl<'a, D: Decoder> Decodable<D> for Cow<'a, str> {
441332

442333
impl<S: Encoder, T: Encodable<S>> Encodable<S> for Option<T> {
443334
fn encode(&self, s: &mut S) -> Result<(), S::Error> {
444-
s.emit_option(|s| match *self {
445-
None => s.emit_option_none(),
446-
Some(ref v) => s.emit_option_some(|s| v.encode(s)),
447-
})
335+
match *self {
336+
None => s.emit_enum_variant(0, |_| Ok(())),
337+
Some(ref v) => s.emit_enum_variant(1, |s| v.encode(s)),
338+
}
448339
}
449340
}
450341

@@ -460,10 +351,10 @@ impl<D: Decoder, T: Decodable<D>> Decodable<D> for Option<T> {
460351

461352
impl<S: Encoder, T1: Encodable<S>, T2: Encodable<S>> Encodable<S> for Result<T1, T2> {
462353
fn encode(&self, s: &mut S) -> Result<(), S::Error> {
463-
s.emit_enum(|s| match *self {
464-
Ok(ref v) => s.emit_enum_variant(0, |s| s.emit_enum_variant_arg(|s| v.encode(s))),
465-
Err(ref v) => s.emit_enum_variant(1, |s| s.emit_enum_variant_arg(|s| v.encode(s))),
466-
})
354+
match *self {
355+
Ok(ref v) => s.emit_enum_variant(0, |s| v.encode(s)),
356+
Err(ref v) => s.emit_enum_variant(1, |s| v.encode(s)),
357+
}
467358
}
468359
}
469360

@@ -493,10 +384,8 @@ macro_rules! tuple {
493384
#[allow(non_snake_case)]
494385
fn encode(&self, s: &mut S) -> Result<(), S::Error> {
495386
let ($(ref $name,)+) = *self;
496-
s.emit_tuple(|s| {
497-
$(s.emit_tuple_arg(|s| $name.encode(s))?;)+
498-
Ok(())
499-
})
387+
$($name.encode(s)?;)+
388+
Ok(())
500389
}
501390
}
502391
peel! { $($name,)+ }

0 commit comments

Comments
 (0)