diff --git a/compiler/rustc_macros/src/serialize.rs b/compiler/rustc_macros/src/serialize.rs index 91a076fa6f6..8d898291e58 100644 --- a/compiler/rustc_macros/src/serialize.rs +++ b/compiler/rustc_macros/src/serialize.rs @@ -60,13 +60,6 @@ fn decodable_body( quote! { #idx => { #construct } } }) .collect(); - let names: TokenStream = variants - .iter() - .map(|vi| { - let variant_name = vi.ast().ident.to_string(); - quote!(#variant_name,) - }) - .collect(); let message = format!( "invalid enum variant tag while decoding `{}`, expected 0..{}", ty_name, @@ -75,7 +68,6 @@ fn decodable_body( quote! { ::rustc_serialize::Decoder::read_enum_variant( __decoder, - &[#names], |__decoder, __variant_idx| { match __variant_idx { #match_inner diff --git a/compiler/rustc_serialize/src/serialize.rs b/compiler/rustc_serialize/src/serialize.rs index 6e0199260f8..b1a75309ccd 100644 --- a/compiler/rustc_serialize/src/serialize.rs +++ b/compiler/rustc_serialize/src/serialize.rs @@ -202,7 +202,7 @@ pub trait Decoder { fn read_raw_bytes_into(&mut self, s: &mut [u8]); #[inline] - fn read_enum_variant(&mut self, _names: &[&str], mut f: F) -> T + fn read_enum_variant(&mut self, mut f: F) -> T where F: FnMut(&mut Self, usize) -> T, { @@ -255,7 +255,7 @@ pub trait Decoder { where F: FnMut(&mut Self, bool) -> T, { - self.read_enum_variant(&["None", "Some"], move |this, idx| match idx { + self.read_enum_variant(move |this, idx| match idx { 0 => f(this, false), 1 => f(this, true), _ => panic!("read_option: expected 0 for None or 1 for Some"), @@ -571,7 +571,7 @@ impl, T2: Encodable> Encodable for Result, T2: Decodable> Decodable for Result { fn decode(d: &mut D) -> Result { - d.read_enum_variant(&["Ok", "Err"], |d, disr| match disr { + d.read_enum_variant(|d, disr| match disr { 0 => Ok(d.read_enum_variant_arg(|d| T1::decode(d))), 1 => Err(d.read_enum_variant_arg(|d| T2::decode(d))), _ => panic!("Encountered invalid discriminant while decoding `Result`."),