about summary refs log tree commit diff
path: root/src/libsyntax/ast.rs
diff options
context:
space:
mode:
authorVadim Petrochenkov <vadim.petrochenkov@gmail.com>2015-10-25 18:33:51 +0300
committerVadim Petrochenkov <vadim.petrochenkov@gmail.com>2015-10-25 18:33:51 +0300
commite8ddbba2ed356df4f5ef8f0742b810a4ecf82a50 (patch)
treebbbc512c7b941f599658cade4e44cdd30c8de9f1 /src/libsyntax/ast.rs
parentf68cd9aef12f474e7205771f3ef9385f254813e1 (diff)
downloadrust-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.rs18
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,