]> git.lizzy.rs Git - rust.git/commitdiff
Merge VariantData and VariantData_
authorVadim Petrochenkov <vadim.petrochenkov@gmail.com>
Sat, 10 Oct 2015 00:28:40 +0000 (03:28 +0300)
committerVadim Petrochenkov <vadim.petrochenkov@gmail.com>
Tue, 13 Oct 2015 12:19:27 +0000 (15:19 +0300)
28 files changed:
src/librustc/front/map/collector.rs
src/librustc/metadata/encoder.rs
src/librustc/middle/astencode.rs
src/librustc/middle/check_static_recursion.rs
src/librustc/middle/const_eval.rs
src/librustc/middle/dead.rs
src/librustc/middle/stability.rs
src/librustc_front/fold.rs
src/librustc_front/hir.rs
src/librustc_front/lowering.rs
src/librustc_front/util.rs
src/librustc_lint/builtin.rs
src/librustc_privacy/lib.rs
src/librustc_resolve/build_reduced_graph.rs
src/librustc_trans/save/dump_csv.rs
src/librustc_trans/trans/base.rs
src/librustc_trans/trans/inline.rs
src/librustc_trans/trans/monomorphize.rs
src/librustc_typeck/collect.rs
src/librustdoc/clean/mod.rs
src/librustdoc/visit_ast.rs
src/libsyntax/ast.rs
src/libsyntax/ast_util.rs
src/libsyntax/config.rs
src/libsyntax/ext/build.rs
src/libsyntax/fold.rs
src/libsyntax/parse/parser.rs
src/libsyntax/print/pprust.rs

index aa5d482b89a831219094ef0dbcbb53cdfc6774ae..fc7531d3f61bae924d5091dbd6ec080c59cd7cf6 100644 (file)
@@ -134,7 +134,7 @@ fn visit_item(&mut self, i: &'ast Item) {
             ItemEnum(ref enum_definition, _) => {
                 for v in &enum_definition.variants {
                     let variant_def_index =
-                        self.insert_def(v.node.data.id,
+                        self.insert_def(v.node.data.id(),
                                         NodeVariant(&**v),
                                         DefPathData::EnumVariant(v.node.name));
 
@@ -151,7 +151,7 @@ fn visit_item(&mut self, i: &'ast Item) {
             ItemStruct(ref struct_def, _) => {
                 // If this is a tuple-like struct, register the constructor.
                 if !struct_def.is_struct() {
-                    self.insert_def(struct_def.id,
+                    self.insert_def(struct_def.id(),
                                     NodeStructCtor(&**struct_def),
                                     DefPathData::StructCtor);
                 }
index 81305099705ce75a546c7418119ed8399f797693..8e2c2e6a0bfbd2d0ce8fc09f787ee967edf3bd91 100644 (file)
@@ -382,7 +382,7 @@ fn each_auxiliary_node_id<F>(item: &hir::Item, callback: F) -> bool where
         hir::ItemStruct(ref struct_def, _) => {
             // If this is a newtype struct, return the constructor.
             if struct_def.is_tuple() {
-                continue_ = callback(struct_def.id);
+                continue_ = callback(struct_def.id());
             }
         }
         _ => {}
@@ -1019,7 +1019,7 @@ fn encode_info_for_item<'a, 'tcx>(ecx: &EncodeContext<'a, 'tcx>,
         encode_attributes(rbml_w, &item.attrs);
         encode_repr_attrs(rbml_w, ecx, &item.attrs);
         for v in &enum_definition.variants {
-            encode_variant_id(rbml_w, ecx.tcx.map.local_def_id(v.node.data.id));
+            encode_variant_id(rbml_w, ecx.tcx.map.local_def_id(v.node.data.id()));
         }
         encode_inlined_item(ecx, rbml_w, InlinedItemRef::Item(item));
         encode_path(rbml_w, path);
@@ -1069,7 +1069,7 @@ fn encode_info_for_item<'a, 'tcx>(ecx: &EncodeContext<'a, 'tcx>,
         encode_inherent_implementations(ecx, rbml_w, def_id);
 
         if !struct_def.is_struct() {
-            let ctor_did = ecx.tcx.map.local_def_id(struct_def.id);
+            let ctor_did = ecx.tcx.map.local_def_id(struct_def.id());
             rbml_w.wr_tagged_u64(tag_items_data_item_struct_ctor,
                                  def_to_u64(ctor_did));
         }
@@ -1082,7 +1082,7 @@ fn encode_info_for_item<'a, 'tcx>(ecx: &EncodeContext<'a, 'tcx>,
 
         // If this is a tuple-like struct, encode the type of the constructor.
         if !struct_def.is_struct() {
-            encode_info_for_struct_ctor(ecx, rbml_w, item.name, struct_def.id, index, item.id);
+            encode_info_for_struct_ctor(ecx, rbml_w, item.name, struct_def.id(), index, item.id);
         }
       }
       hir::ItemDefaultImpl(unsafety, _) => {
index 584f6cb4e99d76f44ba85a4d31724b85055b2b4e..e81445f19ede661ff85aadda7ee947415bf41ce7 100644 (file)
@@ -1315,8 +1315,8 @@ fn copy_item_type(dcx: &DecodeContext,
                     def.variants.iter().zip(orig_def.variants.iter())
                 {
                     debug!("astencode: copying variant {:?} => {:?}",
-                           orig_variant.did, i_variant.node.data.id);
-                    copy_item_type(dcx, i_variant.node.data.id, orig_variant.did);
+                           orig_variant.did, i_variant.node.data.id());
+                    copy_item_type(dcx, i_variant.node.data.id(), orig_variant.did);
                 }
             }
             hir::ItemStruct(ref def, _) => {
@@ -1324,8 +1324,8 @@ fn copy_item_type(dcx: &DecodeContext,
                     let ctor_did = dcx.tcx.lookup_adt_def(orig_did)
                         .struct_variant().did;
                     debug!("astencode: copying ctor {:?} => {:?}", ctor_did,
-                           def.id);
-                    copy_item_type(dcx, def.id, ctor_did);
+                           def.id());
+                    copy_item_type(dcx, def.id(), ctor_did);
                 }
             }
             _ => {}
index 226c27ea62048d2d6a9c3e95faa96ccc7acf9086..fd73fe45180becc792314c348b6c0f0d6300d293 100644 (file)
@@ -168,7 +168,7 @@ fn populate_enum_discriminants(&self, enum_definition: &'ast hir::EnumDef) {
         let mut discriminant_map = self.discriminant_map.borrow_mut();
         match enum_definition.variants.first() {
             None => { return; }
-            Some(variant) if discriminant_map.contains_key(&variant.node.data.id) => {
+            Some(variant) if discriminant_map.contains_key(&variant.node.data.id()) => {
                 return;
             }
             _ => {}
@@ -177,7 +177,7 @@ fn populate_enum_discriminants(&self, enum_definition: &'ast hir::EnumDef) {
         // Go through all the variants.
         let mut variant_stack: Vec<ast::NodeId> = Vec::new();
         for variant in enum_definition.variants.iter().rev() {
-            variant_stack.push(variant.node.data.id);
+            variant_stack.push(variant.node.data.id());
             // When we find an expression, every variant currently on the stack
             // is affected by that expression.
             if let Some(ref expr) = variant.node.disr_expr {
@@ -208,7 +208,7 @@ fn visit_enum_def(&mut self, enum_definition: &'ast hir::EnumDef,
 
     fn visit_variant(&mut self, variant: &'ast hir::Variant,
                      _: &'ast hir::Generics, _: ast::NodeId) {
-        let variant_id = variant.node.data.id;
+        let variant_id = variant.node.data.id();
         let maybe_expr;
         if let Some(get_expr) = self.discriminant_map.borrow().get(&variant_id) {
             // This is necessary because we need to let the `discriminant_map`
index e0850a55ff0aaa9f102e0c221b476299260935df..3c68fb62e244519fad1b19848740bbe94304447d 100644 (file)
@@ -63,7 +63,7 @@ fn lookup_variant_by_id<'a>(tcx: &'a ty::ctxt,
     fn variant_expr<'a>(variants: &'a [P<hir::Variant>], id: ast::NodeId)
                         -> Option<&'a Expr> {
         for variant in variants {
-            if variant.node.data.id == id {
+            if variant.node.data.id() == id {
                 return variant.node.disr_expr.as_ref().map(|e| &**e);
             }
         }
index 9d15b53a6d826c68a41e85a7926ec880b0108f03..7b11419d92562c4e0300a05d87d15c49fc6c5243 100644 (file)
@@ -339,7 +339,8 @@ fn visit_item(&mut self, item: &hir::Item) {
         }
         match item.node {
             hir::ItemEnum(ref enum_def, _) if allow_dead_code => {
-                self.worklist.extend(enum_def.variants.iter().map(|variant| variant.node.data.id));
+                self.worklist.extend(enum_def.variants.iter()
+                                                      .map(|variant| variant.node.data.id()));
             }
             hir::ItemTrait(_, _, _, ref trait_items) => {
                 for trait_item in trait_items {
@@ -427,7 +428,7 @@ fn find_live(tcx: &ty::ctxt,
 fn get_struct_ctor_id(item: &hir::Item) -> Option<ast::NodeId> {
     match item.node {
         hir::ItemStruct(ref struct_def, _) if !struct_def.is_struct() => {
-            Some(struct_def.id)
+            Some(struct_def.id())
         }
         _ => None
     }
@@ -466,7 +467,7 @@ fn should_warn_about_field(&mut self, node: &hir::StructField_) -> bool {
     }
 
     fn should_warn_about_variant(&mut self, variant: &hir::Variant_) -> bool {
-        !self.symbol_is_live(variant.data.id, None)
+        !self.symbol_is_live(variant.data.id(), None)
             && !has_allow_dead_code_or_lang_attr(&variant.attrs)
     }
 
@@ -542,7 +543,7 @@ fn visit_item(&mut self, item: &hir::Item) {
                 hir::ItemEnum(ref enum_def, _) => {
                     for variant in &enum_def.variants {
                         if self.should_warn_about_variant(&variant.node) {
-                            self.warn_dead_code(variant.node.data.id, variant.span,
+                            self.warn_dead_code(variant.node.data.id(), variant.span,
                                                 variant.node.name, "variant");
                         }
                     }
index 23bb4a1fe393d5dfe7c523733fe6ec9896568acc..af295c3e584b04310fe160b6657d298fd3eba0bd 100644 (file)
@@ -186,7 +186,7 @@ fn visit_item(&mut self, i: &Item) {
 
         if let hir::ItemStruct(ref sd, _) = i.node {
             if !sd.is_struct() {
-                self.annotate(sd.id, true, &i.attrs, i.span, |_| {}, true)
+                self.annotate(sd.id(), true, &i.attrs, i.span, |_| {}, true)
             }
         }
     }
@@ -208,7 +208,7 @@ fn visit_impl_item(&mut self, ii: &hir::ImplItem) {
     }
 
     fn visit_variant(&mut self, var: &Variant, g: &'v Generics, item_id: NodeId) {
-        self.annotate(var.node.data.id, true, &var.node.attrs, var.span,
+        self.annotate(var.node.data.id(), true, &var.node.attrs, var.span,
                       |v| visit::walk_variant(v, var, g, item_id), true)
     }
 
index fd69d2007ff133155f67ceee35d87e79d795dfb1..dafca7188d5adc7b7b7d88f77b0a43c228b76b2d 100644 (file)
@@ -694,18 +694,15 @@ pub fn noop_fold_where_predicate<T: Folder>(pred: WherePredicate, fld: &mut T) -
 }
 
 pub fn noop_fold_struct_def<T: Folder>(struct_def: P<VariantData>, fld: &mut T) -> P<VariantData> {
-    struct_def.map(|VariantData { data_, id }| {
-        VariantData {
-            data_: match data_ {
-                VariantData_::Struct(fields) => {
-                    VariantData_::Struct(fields.move_map(|f| fld.fold_struct_field(f)))
-                }
-                VariantData_::Tuple(fields) => {
-                    VariantData_::Tuple(fields.move_map(|f| fld.fold_struct_field(f)))
-                }
-                VariantData_::Unit => VariantData_::Unit
-            },
-            id: fld.new_id(id),
+    struct_def.map(|vdata| {
+        match vdata {
+            VariantData::Struct(fields, id) => {
+                VariantData::Struct(fields.move_map(|f| fld.fold_struct_field(f)), fld.new_id(id))
+            }
+            VariantData::Tuple(fields, id) => {
+                VariantData::Tuple(fields.move_map(|f| fld.fold_struct_field(f)), fld.new_id(id))
+            }
+            VariantData::Unit(id) => VariantData::Unit(fld.new_id(id))
         }
     })
 }
index b5170b7496b46d1049295c6ea8f9f56d17b5a5b1..a64e1e147fe8014c8c042e963fd6bab187a0e9ae 100644 (file)
@@ -1162,18 +1162,10 @@ pub fn is_unnamed(&self) -> bool {
 }
 
 #[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
-pub enum VariantData_ {
-    Struct(Vec<StructField>),
-    Tuple(Vec<StructField>),
-    Unit,
-}
-
-#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
-pub struct VariantData {
-    pub data_: VariantData_,
-    /// ID of the constructor. This is only used for tuple- or enum-like
-    /// structs.
-    pub id: NodeId,
+pub enum VariantData {
+    Struct(Vec<StructField>, NodeId),
+    Tuple(Vec<StructField>, NodeId),
+    Unit(NodeId),
 }
 
 pub type FieldIter<'a> = iter::FlatMap<option::IntoIter<&'a Vec<StructField>>,
@@ -1183,19 +1175,24 @@ pub struct VariantData {
 impl VariantData {
     pub fn fields(&self) -> FieldIter {
         fn vec_iter<T>(v: &Vec<T>) -> slice::Iter<T> { v.iter() }
-        match self.data_ {
-            VariantData_::Struct(ref fields) | VariantData_::Tuple(ref fields) => Some(fields),
+        match *self {
+            VariantData::Struct(ref fields, _) | VariantData::Tuple(ref fields, _) => Some(fields),
             _ => None,
         }.into_iter().flat_map(vec_iter)
     }
+    pub fn id(&self) -> NodeId {
+        match *self {
+            VariantData::Struct(_, id) | VariantData::Tuple(_, id) | VariantData::Unit(id) => id
+        }
+    }
     pub fn is_struct(&self) -> bool {
-        if let VariantData_::Struct(..) = self.data_ { true } else { false }
+        if let VariantData::Struct(..) = *self { true } else { false }
     }
     pub fn is_tuple(&self) -> bool {
-        if let VariantData_::Tuple(..) = self.data_ { true } else { false }
+        if let VariantData::Tuple(..) = *self { true } else { false }
     }
     pub fn is_unit(&self) -> bool {
-        if let VariantData_::Unit = self.data_ { true } else { false }
+        if let VariantData::Unit(..) = *self { true } else { false }
     }
 }
 
index 2f257a47dbf7067861bf009c538196670ca12873..890896eb1c5aafbeb84d3c38097a0217a4c60c92 100644 (file)
@@ -499,19 +499,16 @@ pub fn lower_where_predicate(_lctx: &LoweringContext,
 }
 
 pub fn lower_struct_def(_lctx: &LoweringContext, sd: &VariantData) -> P<hir::VariantData> {
-    P(hir::VariantData {
-        id: sd.id,
-        data_: match sd.data_ {
-            VariantData_::Struct(ref fields) => {
-                hir::VariantData_::Struct(fields.iter()
-                                                .map(|f| lower_struct_field(_lctx, f)).collect())
-            }
-            VariantData_::Tuple(ref fields) => {
-                hir::VariantData_::Tuple(fields.iter()
-                                               .map(|f| lower_struct_field(_lctx, f)).collect())
-            }
-            VariantData_::Unit => hir::VariantData_::Unit
+    P(match *sd {
+        VariantData::Struct(ref fields, id) => {
+            hir::VariantData::Struct(fields.iter()
+                                           .map(|f| lower_struct_field(_lctx, f)).collect(), id)
+        }
+        VariantData::Tuple(ref fields, id) => {
+            hir::VariantData::Tuple(fields.iter()
+                                          .map(|f| lower_struct_field(_lctx, f)).collect(), id)
         }
+        VariantData::Unit(id) => hir::VariantData::Unit(id)
     })
 }
 
index 8bf3ccd0b810c6114daadf46220d87a4649c5bf4..5d8973ead47db27a1ddea1bc4a8128d9c7834b01 100644 (file)
@@ -287,7 +287,7 @@ fn visit_variant_data(&mut self,
                         _: &hir::Generics,
                         _: NodeId,
                         _: Span) {
-        self.operation.visit_id(struct_def.id);
+        self.operation.visit_id(struct_def.id());
         visit::walk_struct_def(self, struct_def);
     }
 
index ea8ea4ebf0dacaa976a2f440f11fa6504e3de2c7..f5a58656080db785f1fd276c677905637093d826 100644 (file)
@@ -527,7 +527,8 @@ fn check_struct_field(&mut self, cx: &LateContext, sf: &hir::StructField) {
     }
 
     fn check_variant(&mut self, cx: &LateContext, v: &hir::Variant, _: &hir::Generics) {
-        self.check_missing_docs_attrs(cx, Some(v.node.data.id), &v.node.attrs, v.span, "a variant");
+        self.check_missing_docs_attrs(cx, Some(v.node.data.id()),
+                                      &v.node.attrs, v.span, "a variant");
         assert!(!self.in_variant);
         self.in_variant = true;
     }
index b139b275785168a911b820494a65964171c79844..608558ac2bdb9e6a7005192246d590cf2d4aa147 100644 (file)
@@ -82,7 +82,7 @@ fn visit_item(&mut self, item: &hir::Item) {
                     // The parent is considered the enclosing enum because the
                     // enum will dictate the privacy visibility of this variant
                     // instead.
-                    self.parents.insert(variant.node.data.id, item.id);
+                    self.parents.insert(variant.node.data.id(), item.id);
                 }
             }
 
@@ -133,7 +133,7 @@ fn visit_variant_data(&mut self, s: &hir::VariantData, _: ast::Name,
         // Struct constructors are parented to their struct definitions because
         // they essentially are the struct definitions.
         if !s.is_struct() {
-            self.parents.insert(s.id, item_id);
+            self.parents.insert(s.id(), item_id);
         }
 
         // While we have the id of the struct definition, go ahead and parent
@@ -233,8 +233,8 @@ fn visit_item(&mut self, item: &hir::Item) {
             // public all variants are public unless they're explicitly priv
             hir::ItemEnum(ref def, _) if public_first => {
                 for variant in &def.variants {
-                    self.exported_items.insert(variant.node.data.id);
-                    self.public_items.insert(variant.node.data.id);
+                    self.exported_items.insert(variant.node.data.id());
+                    self.public_items.insert(variant.node.data.id());
                 }
             }
 
@@ -320,7 +320,7 @@ fn visit_item(&mut self, item: &hir::Item) {
             // Struct constructors are public if the struct is all public.
             hir::ItemStruct(ref def, _) if public_first => {
                 if !def.is_struct() {
-                    self.exported_items.insert(def.id);
+                    self.exported_items.insert(def.id());
                 }
                 // fields can be public or private, so lets check
                 for field in def.fields() {
@@ -1431,7 +1431,7 @@ fn visit_ty(&mut self, t: &hir::Ty) {
     }
 
     fn visit_variant(&mut self, v: &hir::Variant, g: &hir::Generics, item_id: ast::NodeId) {
-        if self.exported_items.contains(&v.node.data.id) {
+        if self.exported_items.contains(&v.node.data.id()) {
             self.in_variant = true;
             visit::walk_variant(self, v, g, item_id);
             self.in_variant = false;
index 43943fbb129dc12faa0d81058b41ef9f082aebe5..c051f8c263723916ede63359efcb5a17f644b067 100644 (file)
@@ -495,7 +495,7 @@ fn build_reduced_graph_for_item(&mut self, item: &Item, parent: &Rc<Module>) ->
                 let (forbid, ctor_id) = if struct_def.is_struct() {
                     (ForbidDuplicateTypesAndModules, None)
                 } else {
-                    (ForbidDuplicateTypesAndValues, Some(struct_def.id))
+                    (ForbidDuplicateTypesAndValues, Some(struct_def.id()))
                 };
 
                 let name_bindings = self.add_child(name, parent, forbid, sp);
@@ -590,7 +590,7 @@ fn build_reduced_graph_for_variant(&mut self,
         let name = variant.node.name;
         let is_exported = if variant.node.data.is_struct() {
             // Not adding fields for variants as they are not accessed with a self receiver
-            let variant_def_id = self.ast_map.local_def_id(variant.node.data.id);
+            let variant_def_id = self.ast_map.local_def_id(variant.node.data.id());
             self.structs.insert(variant_def_id, Vec::new());
             true
         } else {
@@ -603,10 +603,12 @@ fn build_reduced_graph_for_variant(&mut self,
         // variants are always treated as importable to allow them to be glob
         // used
         child.define_value(DefVariant(item_id,
-                                      self.ast_map.local_def_id(variant.node.data.id), is_exported),
+                                      self.ast_map.local_def_id(variant.node.data.id()),
+                                      is_exported),
                            variant.span, DefModifiers::PUBLIC | DefModifiers::IMPORTABLE);
         child.define_type(DefVariant(item_id,
-                                     self.ast_map.local_def_id(variant.node.data.id), is_exported),
+                                     self.ast_map.local_def_id(variant.node.data.id()),
+                                     is_exported),
                           variant.span, DefModifiers::PUBLIC | DefModifiers::IMPORTABLE);
     }
 
index d31b8b6f0e48ddda8ffad42542a2a9892c60609c..146fa857fc8504e05648767b1424a03d1ae486b4 100644 (file)
@@ -467,7 +467,7 @@ fn process_struct(&mut self,
         self.fmt.struct_str(item.span,
                             sub_span,
                             item.id,
-                            def.id,
+                            def.id(),
                             &qualname,
                             self.cur_scope,
                             &val);
@@ -503,15 +503,15 @@ fn process_enum(&mut self,
 
             self.fmt.struct_variant_str(variant.span,
                                         self.span.span_for_first_ident(variant.span),
-                                        variant.node.data.id,
-                                        variant.node.data.id,
+                                        variant.node.data.id(),
+                                        variant.node.data.id(),
                                         &qualname,
                                         &enum_data.qualname,
                                         &val,
                                         enum_data.id);
 
             for field in variant.node.data.fields() {
-                self.process_struct_field_def(field, variant.node.data.id);
+                self.process_struct_field_def(field, variant.node.data.id());
                 self.visit_ty(&*field.node.ty);
             }
         }
index c692f8a1836054916e2ebcb789e46ab8ac3a75c2..9fa1aaf76f819dc5fcd1d31c42c954a9ff874e69 100644 (file)
@@ -2458,7 +2458,7 @@ pub fn get_item_val(ccx: &CrateContext, id: ast::NodeId) -> ValueRef {
                 ccx.sess().bug("attempt to register a constructor of \
                                   a non-tuple-like struct")
             } else {
-                struct_def.id
+                struct_def.id()
             };
             let parent = ccx.tcx().map.get_parent(id);
             let struct_item = ccx.tcx().map.expect_item(parent);
index 923214a536227e0c2b5c79b854c291ac46853f74..14e1ca7675f790f9981089818017478ff4a362eb 100644 (file)
@@ -110,8 +110,8 @@ fn instantiate_inline(ccx: &CrateContext, fn_id: DefId)
                     let ty_vs = &ccx.tcx().lookup_adt_def(parent_id).variants;
                     assert_eq!(ast_vs.len(), ty_vs.len());
                     for (ast_v, ty_v) in ast_vs.iter().zip(ty_vs.iter()) {
-                        if ty_v.did == fn_id { my_id = ast_v.node.data.id; }
-                        ccx.external().borrow_mut().insert(ty_v.did, Some(ast_v.node.data.id));
+                        if ty_v.did == fn_id { my_id = ast_v.node.data.id(); }
+                        ccx.external().borrow_mut().insert(ty_v.did, Some(ast_v.node.data.id()));
                     }
                 }
                 hir::ItemStruct(ref struct_def, _) => {
@@ -119,8 +119,8 @@ fn instantiate_inline(ccx: &CrateContext, fn_id: DefId)
                         ccx.sess().bug("instantiate_inline: called on a \
                                                                  non-tuple struct")
                     } else {
-                        ccx.external().borrow_mut().insert(fn_id, Some(struct_def.id));
-                        my_id = struct_def.id;
+                        ccx.external().borrow_mut().insert(fn_id, Some(struct_def.id()));
+                        my_id = struct_def.id();
                     }
                 }
                 _ => ccx.sess().bug("instantiate_inline: item has a \
index 440b667e8012dff22cf739ed0913eb14af14ec24..f84f0feb9603020e139ed75e6b6e3299b2b63884 100644 (file)
@@ -250,7 +250,7 @@ pub fn monomorphic_fn<'a, 'tcx>(ccx: &CrateContext<'a, 'tcx>,
                 panic!("ast-mapped struct didn't have a ctor id")
             }
             base::trans_tuple_struct(ccx,
-                                     struct_def.id,
+                                     struct_def.id(),
                                      psubsts,
                                      d);
             d
index 31f7f3174b8af3cf13152ea0b98b8deadf56af44..194710a46fbceb388f30665b12aabe1c351f46ea 100644 (file)
@@ -1015,7 +1015,7 @@ fn convert_item(ccx: &CrateCtxt, it: &hir::Item) {
             }
 
             if !struct_def.is_struct() {
-                convert_variant_ctor(tcx, struct_def.id, variant, scheme, predicates);
+                convert_variant_ctor(tcx, struct_def.id(), variant, scheme, predicates);
             }
         },
         hir::ItemTy(_, ref generics) => {
@@ -1075,7 +1075,7 @@ fn convert_enum_variant_types<'a, 'tcx>(ccx: &CrateCtxt<'a, 'tcx>,
         // an item.
         convert_variant_ctor(
             ccx.tcx,
-            variant.node.data.id,
+            variant.node.data.id(),
             ty_variant,
             scheme.clone(),
             predicates.clone()
@@ -1126,7 +1126,7 @@ fn convert_struct_def<'tcx>(tcx: &ty::ctxt<'tcx>,
 
     let did = tcx.map.local_def_id(it.id);
     let ctor_id = if !def.is_struct() {
-        tcx.map.local_def_id(def.id)
+        tcx.map.local_def_id(def.id())
     } else {
         did
     };
@@ -1209,7 +1209,7 @@ fn convert_enum_variant<'tcx>(tcx: &ty::ctxt<'tcx>,
                                   disr: ty::Disr)
                                   -> ty::VariantDefData<'tcx, 'tcx>
     {
-        let did = tcx.map.local_def_id(v.node.data.id);
+        let did = tcx.map.local_def_id(v.node.data.id());
         let name = v.node.name;
         convert_struct_variant(tcx, did, name, disr, &v.node.data)
     }
index e5090c167dfe0cb50890bf80ed17cbf6b58dce04..e4420d0dd92fa0ce11cf0994497aa3f6a2d9481c 100644 (file)
@@ -1853,7 +1853,7 @@ fn clean(&self, cx: &DocContext) -> Item {
             source: self.whence.clean(cx),
             visibility: None,
             stability: self.stab.clean(cx),
-            def_id: cx.map.local_def_id(self.def.id),
+            def_id: cx.map.local_def_id(self.def.id()),
             inner: VariantItem(Variant {
                 kind: struct_def_to_variant_kind(&self.def, cx),
             }),
index 19edccc4fe25f0aba5ddd5a665f8fd70baf8306b..1487c1668aac74a64211bb90074c8c02e6867885 100644 (file)
@@ -111,7 +111,7 @@ pub fn visit_enum_def(&mut self, it: &hir::Item,
             variants: def.variants.iter().map(|v| Variant {
                 name: v.node.name,
                 attrs: v.node.attrs.clone(),
-                stab: self.stability(v.node.data.id),
+                stab: self.stability(v.node.data.id()),
                 def: v.node.data.clone(),
                 whence: v.span,
             }).collect(),
index 34181b2e0971510477d8cd115b9f4b6d4bb61f54..7c82813775e2116fb79cd12e9d7e5de0de1376b1 100644 (file)
@@ -1742,18 +1742,10 @@ pub fn is_unnamed(&self) -> bool {
 }
 
 #[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
-pub enum VariantData_ {
-    Struct(Vec<StructField>),
-    Tuple(Vec<StructField>),
-    Unit,
-}
-
-#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
-pub struct VariantData {
-    pub data_: VariantData_,
-    /// ID of the constructor. This is only used for tuple- or enum-like
-    /// structs.
-    pub id: NodeId,
+pub enum VariantData {
+    Struct(Vec<StructField>, NodeId),
+    Tuple(Vec<StructField>, NodeId),
+    Unit(NodeId),
 }
 
 pub type FieldIter<'a> = iter::FlatMap<option::IntoIter<&'a Vec<StructField>>,
@@ -1763,19 +1755,24 @@ pub struct VariantData {
 impl VariantData {
     pub fn fields(&self) -> FieldIter {
         fn vec_iter<T>(v: &Vec<T>) -> slice::Iter<T> { v.iter() }
-        match self.data_ {
-            VariantData_::Struct(ref fields) | VariantData_::Tuple(ref fields) => Some(fields),
+        match *self {
+            VariantData::Struct(ref fields, _) | VariantData::Tuple(ref fields, _) => Some(fields),
             _ => None,
         }.into_iter().flat_map(vec_iter)
     }
+    pub fn id(&self) -> NodeId {
+        match *self {
+            VariantData::Struct(_, id) | VariantData::Tuple(_, id) | VariantData::Unit(id) => id
+        }
+    }
     pub fn is_struct(&self) -> bool {
-        if let VariantData_::Struct(..) = self.data_ { true } else { false }
+        if let VariantData::Struct(..) = *self { true } else { false }
     }
     pub fn is_tuple(&self) -> bool {
-        if let VariantData_::Tuple(..) = self.data_ { true } else { false }
+        if let VariantData::Tuple(..) = *self { true } else { false }
     }
     pub fn is_unit(&self) -> bool {
-        if let VariantData_::Unit = self.data_ { true } else { false }
+        if let VariantData::Unit(..) = *self { true } else { false }
     }
 }
 
index 42382d0459fdd9dc5ec4f7e6bb99fda0229d5c53..8c3360512d512f632880670a7929f42bfabae4b4 100644 (file)
@@ -458,7 +458,7 @@ fn visit_variant_data(&mut self,
                         _: &ast::Generics,
                         _: NodeId,
                         _: Span) {
-        self.operation.visit_id(struct_def.id);
+        self.operation.visit_id(struct_def.id());
         visit::walk_struct_def(self, struct_def);
     }
 
index 739bb36d985257cf0a1bafd798950847f5ad67f3..0ca110c5b1ed2cf1a490e7f3f9f782b91a8a5c53 100644 (file)
@@ -167,22 +167,19 @@ fn fold_item_underscore<F>(cx: &mut Context<F>, item: ast::Item_) -> ast::Item_
 fn fold_struct<F>(cx: &mut Context<F>, def: P<ast::VariantData>) -> P<ast::VariantData> where
     F: FnMut(&[ast::Attribute]) -> bool
 {
-    def.map(|ast::VariantData { data_, id }| {
-        ast::VariantData {
-            data_: match data_ {
-                ast::VariantData_::Struct(fields) => {
-                    ast::VariantData_::Struct(fields.into_iter().filter(|m| {
-                        (cx.in_cfg)(&m.node.attrs)
-                    }).collect())
-                }
-                ast::VariantData_::Tuple(fields) => {
-                    ast::VariantData_::Tuple(fields.into_iter().filter(|m| {
-                        (cx.in_cfg)(&m.node.attrs)
-                    }).collect())
-                }
-                ast::VariantData_::Unit => ast::VariantData_::Unit
-            },
-            id: id,
+    def.map(|vdata| {
+        match vdata {
+            ast::VariantData::Struct(fields, id) => {
+                ast::VariantData::Struct(fields.into_iter().filter(|m| {
+                    (cx.in_cfg)(&m.node.attrs)
+                }).collect(), id)
+            }
+            ast::VariantData::Tuple(fields, id) => {
+                ast::VariantData::Tuple(fields.into_iter().filter(|m| {
+                    (cx.in_cfg)(&m.node.attrs)
+                }).collect(), id)
+            }
+            ast::VariantData::Unit(id) => ast::VariantData::Unit(id)
         }
     })
 }
index 25657b9c6ccdf41fdfbbf6bdd19bd56fc86d0112..9b06fbd0a0b858ef73b6615bbed3849be0b7ee4f 100644 (file)
@@ -1002,18 +1002,17 @@ fn variant(&self, span: Span, name: Ident, tys: Vec<P<ast::Ty>> ) -> ast::Varian
             }}
         }).collect();
 
-        let data_ = if fields.is_empty() {
-            ast::VariantData_::Unit
+        let vdata = if fields.is_empty() {
+            ast::VariantData::Unit(ast::DUMMY_NODE_ID)
         } else {
-            ast::VariantData_::Tuple(fields)
+            ast::VariantData::Tuple(fields, ast::DUMMY_NODE_ID)
         };
 
         respan(span,
                ast::Variant_ {
                    name: name,
                    attrs: Vec::new(),
-                   data: P(ast::VariantData { data_: data_,
-                                           id: ast::DUMMY_NODE_ID}),
+                   data: P(vdata),
                    disr_expr: None,
                })
     }
index 329ffb286eb319dbade0bfb37f1335e4fe6723e4..219a4649339dd753d9093a4dee2060f52c3febc3 100644 (file)
@@ -815,17 +815,18 @@ pub fn noop_fold_where_predicate<T: Folder>(
 }
 
 pub fn noop_fold_struct_def<T: Folder>(struct_def: P<VariantData>, fld: &mut T) -> P<VariantData> {
-    struct_def.map(|VariantData { data_, id }| VariantData {
-        data_: match data_ {
-            ast::VariantData_::Struct(fields) => {
-                ast::VariantData_::Struct(fields.move_map(|f| fld.fold_struct_field(f)))
+    struct_def.map(|vdata| {
+        match vdata {
+            ast::VariantData::Struct(fields, id) => {
+                ast::VariantData::Struct(fields.move_map(|f| fld.fold_struct_field(f)),
+                                         fld.new_id(id))
             }
-            ast::VariantData_::Tuple(fields) => {
-                ast::VariantData_::Tuple(fields.move_map(|f| fld.fold_struct_field(f)))
+            ast::VariantData::Tuple(fields, id) => {
+                ast::VariantData::Tuple(fields.move_map(|f| fld.fold_struct_field(f)),
+                                        fld.new_id(id))
             }
-            ast::VariantData_::Unit => ast::VariantData_::Unit
-        },
-        id: fld.new_id(id),
+            ast::VariantData::Unit(id) => ast::VariantData::Unit(fld.new_id(id))
+        }
     })
 }
 
index 2431c8cbe88d8094420387f93f525eeb46f800db..934e4472bdc84827083127447febb2ce696f1e4a 100644 (file)
@@ -45,7 +45,7 @@
 use ast::PatWildSingle;
 use ast::{PolyTraitRef, QSelf};
 use ast::{Return, BiShl, BiShr, Stmt, StmtDecl};
-use ast::{StmtExpr, StmtSemi, StmtMac, VariantData, StructField, VariantData_};
+use ast::{StmtExpr, StmtSemi, StmtMac, VariantData, StructField};
 use ast::{BiSub, StrStyle};
 use ast::{SelfExplicit, SelfRegion, SelfStatic, SelfValue};
 use ast::{Delimited, SequenceRepetition, TokenTree, TraitItem, TraitRef};
@@ -4640,24 +4640,25 @@ fn parse_item_struct(&mut self) -> PResult<ItemInfo> {
         // Otherwise if we look ahead and see a paren we parse a tuple-style
         // struct.
 
-        let data_ = if self.token.is_keyword(keywords::Where) {
+        let vdata = if self.token.is_keyword(keywords::Where) {
             generics.where_clause = try!(self.parse_where_clause());
             if try!(self.eat(&token::Semi)) {
                 // If we see a: `struct Foo<T> where T: Copy;` style decl.
-                VariantData_::Unit
+                VariantData::Unit(ast::DUMMY_NODE_ID)
             } else {
                 // If we see: `struct Foo<T> where T: Copy { ... }`
-                VariantData_::Struct(try!(self.parse_record_struct_body()))
+                VariantData::Struct(try!(self.parse_record_struct_body()), ast::DUMMY_NODE_ID)
             }
         // No `where` so: `struct Foo<T>;`
         } else if try!(self.eat(&token::Semi) ){
-            VariantData_::Unit
+            VariantData::Unit(ast::DUMMY_NODE_ID)
         // Record-style struct definition
         } else if self.token == token::OpenDelim(token::Brace) {
-            VariantData_::Struct(try!(self.parse_record_struct_body()))
+            VariantData::Struct(try!(self.parse_record_struct_body()), ast::DUMMY_NODE_ID)
         // Tuple-style struct definition with optional where-clause.
         } else if self.token == token::OpenDelim(token::Paren) {
-            VariantData_::Tuple(try!(self.parse_tuple_struct_body(&mut generics)))
+            VariantData::Tuple(try!(self.parse_tuple_struct_body(&mut generics)),
+                               ast::DUMMY_NODE_ID)
         } else {
             let token_str = self.this_token_to_string();
             return Err(self.fatal(&format!("expected `where`, `{{`, `(`, or `;` after struct \
@@ -4665,11 +4666,8 @@ fn parse_item_struct(&mut self) -> PResult<ItemInfo> {
         };
 
         Ok((class_name,
-         ItemStruct(P(ast::VariantData {
-             data_: data_,
-             id: ast::DUMMY_NODE_ID,
-         }), generics),
-         None))
+            ItemStruct(P(vdata), generics),
+            None))
     }
 
     pub fn parse_record_struct_body(&mut self) -> PResult<Vec<StructField>> {
@@ -5107,10 +5105,7 @@ fn parse_struct_def(&mut self) -> PResult<P<VariantData>> {
         }
         try!(self.bump());
 
-        Ok(P(VariantData {
-            data_: VariantData_::Struct(fields),
-            id: ast::DUMMY_NODE_ID,
-        }))
+        Ok(P(VariantData::Struct(fields, ast::DUMMY_NODE_ID)))
     }
 
     /// Parse the part of an "enum" decl following the '{'
@@ -5146,16 +5141,13 @@ fn parse_enum_def(&mut self, _generics: &ast::Generics) -> PResult<EnumDef> {
                         id: ast::DUMMY_NODE_ID,
                     }});
                 }
-                struct_def = P(VariantData { data_: ast::VariantData_::Tuple(fields),
-                                           id: ast::DUMMY_NODE_ID});
+                struct_def = P(ast::VariantData::Tuple(fields, ast::DUMMY_NODE_ID));
             } else if try!(self.eat(&token::Eq) ){
                 disr_expr = Some(try!(self.parse_expr_nopanic()));
                 any_disr = disr_expr.as_ref().map(|expr| expr.span);
-                struct_def = P(VariantData { data_: ast::VariantData_::Unit,
-                                           id: ast::DUMMY_NODE_ID});
+                struct_def = P(ast::VariantData::Unit(ast::DUMMY_NODE_ID));
             } else {
-                struct_def = P(VariantData { data_: ast::VariantData_::Unit,
-                                           id: ast::DUMMY_NODE_ID});
+                struct_def = P(ast::VariantData::Unit(ast::DUMMY_NODE_ID));
             }
 
             let vr = ast::Variant_ {
index 161f6243f85ccb404fc0f6debdf1684a662de704..e5a9ce216a92ab5ff1ebe8f76c7d9ab76a7c03dd 100644 (file)
@@ -3131,8 +3131,7 @@ fn test_variant_to_string() {
             name: ident,
             attrs: Vec::new(),
             // making this up as I go.... ?
-            data: P(ast::VariantData { data_: ast::VariantData_::Unit,
-                                    id: ast::DUMMY_NODE_ID}),
+            data: P(ast::VariantData::Unit(ast::DUMMY_NODE_ID)),
             disr_expr: None,
         });