diff options
| author | Vadim Petrochenkov <vadim.petrochenkov@gmail.com> | 2015-10-25 18:33:51 +0300 |
|---|---|---|
| committer | Vadim Petrochenkov <vadim.petrochenkov@gmail.com> | 2015-10-25 18:33:51 +0300 |
| commit | e8ddbba2ed356df4f5ef8f0742b810a4ecf82a50 (patch) | |
| tree | bbbc512c7b941f599658cade4e44cdd30c8de9f1 /src/libsyntax/ast.rs | |
| parent | f68cd9aef12f474e7205771f3ef9385f254813e1 (diff) | |
| download | rust-e8ddbba2ed356df4f5ef8f0742b810a4ecf82a50.tar.gz rust-e8ddbba2ed356df4f5ef8f0742b810a4ecf82a50.zip | |
syntax/rustc_front: Simplify VariantData::fields
And use VariantData instead of P<VariantData> in Item_ and Variant_
Diffstat (limited to 'src/libsyntax/ast.rs')
| -rw-r--r-- | src/libsyntax/ast.rs | 18 |
1 files changed, 6 insertions, 12 deletions
diff --git a/src/libsyntax/ast.rs b/src/libsyntax/ast.rs index a45f5c9048c..7b3c33d53a3 100644 --- a/src/libsyntax/ast.rs +++ b/src/libsyntax/ast.rs @@ -65,7 +65,6 @@ use std::fmt; use std::rc::Rc; use std::borrow::Cow; use std::hash::{Hash, Hasher}; -use std::{iter, option, slice}; use serialize::{Encodable, Decodable, Encoder, Decoder}; /// A name is a part of an identifier, representing a string or gensym. It's @@ -1578,7 +1577,7 @@ pub struct EnumDef { pub struct Variant_ { pub name: Ident, pub attrs: Vec<Attribute>, - pub data: P<VariantData>, + pub data: VariantData, /// Explicit discriminant, eg `Foo = 1` pub disr_expr: Option<P<Expr>>, } @@ -1757,17 +1756,12 @@ pub enum VariantData { Unit(NodeId), } -pub type FieldIter<'a> = iter::FlatMap<option::IntoIter<&'a Vec<StructField>>, - slice::Iter<'a, StructField>, - fn(&Vec<StructField>) -> slice::Iter<StructField>>; - impl VariantData { - pub fn fields(&self) -> FieldIter { - fn vec_iter<T>(v: &Vec<T>) -> slice::Iter<T> { v.iter() } + pub fn fields(&self) -> &[StructField] { match *self { - VariantData::Struct(ref fields, _) | VariantData::Tuple(ref fields, _) => Some(fields), - _ => None, - }.into_iter().flat_map(vec_iter) + VariantData::Struct(ref fields, _) | VariantData::Tuple(ref fields, _) => fields, + _ => &[], + } } pub fn id(&self) -> NodeId { match *self { @@ -1826,7 +1820,7 @@ pub enum Item_ { /// An enum definition, e.g. `enum Foo<A, B> {C<A>, D<B>}` ItemEnum(EnumDef, Generics), /// A struct definition, e.g. `struct Foo<A> {x: A}` - ItemStruct(P<VariantData>, Generics), + ItemStruct(VariantData, Generics), /// Represents a Trait Declaration ItemTrait(Unsafety, Generics, |
