]> git.lizzy.rs Git - rust.git/commitdiff
Use Arena inside hir::StructField.
authorCamille GILLOT <gillot.camille@gmail.com>
Fri, 29 Nov 2019 08:40:33 +0000 (09:40 +0100)
committerCamille GILLOT <gillot.camille@gmail.com>
Sat, 21 Dec 2019 22:33:42 +0000 (23:33 +0100)
18 files changed:
src/librustc/arena.rs
src/librustc/hir/intravisit.rs
src/librustc/hir/lowering/item.rs
src/librustc/hir/map/collector.rs
src/librustc/hir/map/mod.rs
src/librustc/hir/mod.rs
src/librustc/lint/context.rs
src/librustc/lint/mod.rs
src/librustc/middle/stability.rs
src/librustc_incremental/assert_dep_graph.rs
src/librustc_lint/builtin.rs
src/librustc_metadata/rmeta/encoder.rs
src/librustc_passes/dead.rs
src/librustc_passes/hir_stats.rs
src/librustc_privacy/lib.rs
src/librustc_traits/lowering/mod.rs
src/librustdoc/clean/mod.rs
src/librustdoc/doctree.rs

index a892a7a25baedce74cbf91c8e7ef6340e19dbeb0..494b8ca8f4f76df18bf9590d35f2ed2fa90c0a85 100644 (file)
@@ -131,7 +131,7 @@ macro_rules! arena_types {
             [] impl_item_ref: rustc::hir::ImplItemRef,
             [] macro_def: rustc::hir::MacroDef<$tcx>,
             [] path: rustc::hir::Path,
-            [] struct_field: rustc::hir::StructField,
+            [] struct_field: rustc::hir::StructField<$tcx>,
             [] trait_item_ref: rustc::hir::TraitItemRef,
             [] ty: rustc::hir::Ty,
             [] variant: rustc::hir::Variant<$tcx>,
index 094d390f82658ffaff776ed60ee6af9be43aed4a..37ee672291eca38047162940bb4658f1d4bd7529 100644 (file)
@@ -324,7 +324,7 @@ fn visit_variant_data(&mut self,
                           _: Span) {
         walk_struct_def(self, s)
     }
-    fn visit_struct_field(&mut self, s: &'v StructField) {
+    fn visit_struct_field(&mut self, s: &'v StructField<'v>) {
         walk_struct_field(self, s)
     }
     fn visit_enum_def(&mut self,
@@ -955,12 +955,12 @@ pub fn walk_struct_def<'v, V: Visitor<'v>>(visitor: &mut V, struct_definition: &
     walk_list!(visitor, visit_struct_field, struct_definition.fields());
 }
 
-pub fn walk_struct_field<'v, V: Visitor<'v>>(visitor: &mut V, struct_field: &'v StructField) {
+pub fn walk_struct_field<'v, V: Visitor<'v>>(visitor: &mut V, struct_field: &'v StructField<'v>) {
     visitor.visit_id(struct_field.hir_id);
     visitor.visit_vis(&struct_field.vis);
     visitor.visit_ident(struct_field.ident);
     visitor.visit_ty(&struct_field.ty);
-    walk_list!(visitor, visit_attribute, &struct_field.attrs);
+    walk_list!(visitor, visit_attribute, struct_field.attrs);
 }
 
 pub fn walk_block<'v, V: Visitor<'v>>(visitor: &mut V, block: &'v Block) {
index 158957b4ada57f9dc975db92f7345a00cfce95ec..d79f1bfa6809457d7461b0759e04024d393c4b6f 100644 (file)
@@ -791,7 +791,7 @@ fn lower_variant_data(&mut self, vdata: &VariantData) -> hir::VariantData<'hir>
         }
     }
 
-    fn lower_struct_field(&mut self, (index, f): (usize, &StructField)) -> hir::StructField {
+    fn lower_struct_field(&mut self, (index, f): (usize, &StructField)) -> hir::StructField<'hir> {
         let ty = if let TyKind::Path(ref qself, ref path) = f.ty.kind {
             let t = self.lower_path_ty(
                 &f.ty,
@@ -800,9 +800,10 @@ fn lower_struct_field(&mut self, (index, f): (usize, &StructField)) -> hir::Stru
                 ParamMode::ExplicitNamed, // no `'_` in declarations (Issue #61124)
                 ImplTraitContext::disallowed()
             );
-            P(t)
+            self.arena.alloc(t)
         } else {
-            self.lower_ty(&f.ty, ImplTraitContext::disallowed())
+            let t = self.lower_ty(&f.ty, ImplTraitContext::disallowed());
+            self.arena.alloc(t.into_inner())
         };
         hir::StructField {
             span: f.span,
@@ -814,7 +815,7 @@ fn lower_struct_field(&mut self, (index, f): (usize, &StructField)) -> hir::Stru
             },
             vis: self.lower_visibility(&f.vis, None),
             ty,
-            attrs: self.lower_attrs(&f.attrs),
+            attrs: self.lower_attrs_arena(&f.attrs),
         }
     }
 
index 00d61fb2fb084219b15e79ee4b965bf7a0703dca..faf2a0c7010e725d480b37537c4c4c87683f66cf 100644 (file)
@@ -550,7 +550,7 @@ fn visit_variant(&mut self, v: &'hir Variant<'hir>, g: &'hir Generics, item_id:
         });
     }
 
-    fn visit_struct_field(&mut self, field: &'hir StructField) {
+    fn visit_struct_field(&mut self, field: &'hir StructField<'hir>) {
         self.insert(field.span, field.hir_id, Node::Field(field));
         self.with_parent(field.hir_id, |this| {
             intravisit::walk_struct_field(this, field);
index 8865157a3194d9557949a3d65f1eee2dc09466bb..c6409f8d4651a90740aea73d1e054f15a301f361 100644 (file)
@@ -1251,7 +1251,7 @@ impl<T:Named> Named for Spanned<T> { fn name(&self) -> Name { self.node.name() }
 impl Named for Item<'_> { fn name(&self) -> Name { self.ident.name } }
 impl Named for ForeignItem<'_> { fn name(&self) -> Name { self.ident.name } }
 impl Named for Variant<'_> { fn name(&self) -> Name { self.ident.name } }
-impl Named for StructField { fn name(&self) -> Name { self.ident.name } }
+impl Named for StructField<'_> { fn name(&self) -> Name { self.ident.name } }
 impl Named for TraitItem<'_> { fn name(&self) -> Name { self.ident.name } }
 impl Named for ImplItem<'_> { fn name(&self) -> Name { self.ident.name } }
 
index 813cbe503e22024bcb625d050cf0e2bec7fceb6c..25fc365b4ec096c6cedde9c4dfe50bc06198985d 100644 (file)
@@ -2377,17 +2377,17 @@ pub fn descr(&self) -> &'static str {
 }
 
 #[derive(RustcEncodable, RustcDecodable, Debug, HashStable)]
-pub struct StructField {
+pub struct StructField<'hir> {
     pub span: Span,
     #[stable_hasher(project(name))]
     pub ident: Ident,
     pub vis: Visibility,
     pub hir_id: HirId,
-    pub ty: P<Ty>,
-    pub attrs: HirVec<Attribute>,
+    pub ty: &'hir Ty,
+    pub attrs: &'hir [Attribute],
 }
 
-impl StructField {
+impl StructField<'_> {
     // Still necessary in couple of places
     pub fn is_positional(&self) -> bool {
         let first = self.ident.as_str().as_bytes()[0];
@@ -2401,11 +2401,11 @@ pub enum VariantData<'hir> {
     /// A struct variant.
     ///
     /// E.g., `Bar { .. }` as in `enum Foo { Bar { .. } }`.
-    Struct(&'hir [StructField], /* recovered */ bool),
+    Struct(&'hir [StructField<'hir>], /* recovered */ bool),
     /// A tuple variant.
     ///
     /// E.g., `Bar(..)` as in `enum Foo { Bar(..) }`.
-    Tuple(&'hir [StructField], HirId),
+    Tuple(&'hir [StructField<'hir>], HirId),
     /// A unit variant.
     ///
     /// E.g., `Bar = ..` as in `enum Foo { Bar = .. }`.
@@ -2414,7 +2414,7 @@ pub enum VariantData<'hir> {
 
 impl VariantData<'hir> {
     /// Return the fields of this variant.
-    pub fn fields(&self) -> &'hir [StructField] {
+    pub fn fields(&self) -> &'hir [StructField<'hir>] {
         match *self {
             VariantData::Struct(ref fields, ..) | VariantData::Tuple(ref fields, ..) => fields,
             _ => &[],
@@ -2792,7 +2792,7 @@ pub enum Node<'hir> {
     TraitItem(&'hir TraitItem<'hir>),
     ImplItem(&'hir ImplItem<'hir>),
     Variant(&'hir Variant<'hir>),
-    Field(&'hir StructField),
+    Field(&'hir StructField<'hir>),
     AnonConst(&'hir AnonConst),
     Expr(&'hir Expr),
     Stmt(&'hir Stmt),
index 6ca85f8da9003495468a3624ccf9644d05719669..7f19ec60f53641dbdeaa2f9d4d194576f4379a52 100644 (file)
@@ -1000,7 +1000,7 @@ fn visit_variant_data(&mut self,
         lint_callback!(self, check_struct_def_post, s);
     }
 
-    fn visit_struct_field(&mut self, s: &'tcx hir::StructField) {
+    fn visit_struct_field(&mut self, s: &'tcx hir::StructField<'tcx>) {
         self.with_lint_attrs(s.hir_id, &s.attrs, |cx| {
             lint_callback!(cx, check_struct_field, s);
             hir_visit::walk_struct_field(cx, s);
index fc05b0bd5a9d150f12ab3474da8857b12bad7f02..86c7d55156075d1a51ebaada9a41907fb7860294 100644 (file)
@@ -130,7 +130,7 @@ fn check_fn_post(
             fn check_impl_item_post(a: &$hir hir::ImplItem<$hir>);
             fn check_struct_def(a: &$hir hir::VariantData<$hir>);
             fn check_struct_def_post(a: &$hir hir::VariantData<$hir>);
-            fn check_struct_field(a: &$hir hir::StructField);
+            fn check_struct_field(a: &$hir hir::StructField<$hir>);
             fn check_variant(a: &$hir hir::Variant<$hir>);
             fn check_variant_post(a: &$hir hir::Variant<$hir>);
             fn check_lifetime(a: &$hir hir::Lifetime);
@@ -622,7 +622,7 @@ fn visit_expr(&mut self, e: &'tcx hir::Expr) {
         })
     }
 
-    fn visit_struct_field(&mut self, s: &'tcx hir::StructField) {
+    fn visit_struct_field(&mut self, s: &'tcx hir::StructField<'tcx>) {
         self.with_lint_attrs(s.hir_id, &s.attrs, |builder| {
             intravisit::walk_struct_field(builder, s);
         })
index 8eb1ce14d1fc5ca045dcc7090b18fe2a75a51bc3..e1838b13fefb908e0a246847e33da23b522ab343 100644 (file)
@@ -312,7 +312,7 @@ fn visit_variant(&mut self, var: &'tcx Variant<'tcx>, g: &'tcx Generics, item_id
             })
     }
 
-    fn visit_struct_field(&mut self, s: &'tcx StructField) {
+    fn visit_struct_field(&mut self, s: &'tcx StructField<'tcx>) {
         self.annotate(s.hir_id, &s.attrs, s.span, AnnotationKind::Required, |v| {
             intravisit::walk_struct_field(v, s);
         });
@@ -387,7 +387,7 @@ fn visit_variant(&mut self, var: &'tcx Variant<'tcx>, g: &'tcx Generics, item_id
         intravisit::walk_variant(self, var, g, item_id);
     }
 
-    fn visit_struct_field(&mut self, s: &'tcx StructField) {
+    fn visit_struct_field(&mut self, s: &'tcx StructField<'tcx>) {
         self.check_missing_stability(s.hir_id, s.span, "field");
         intravisit::walk_struct_field(self, s);
     }
index feab4ca0a31afad92e46f67085a18dc1a1a64157..44b610e487bee28e5326f0281993f8d9b9314c8e 100644 (file)
@@ -177,7 +177,7 @@ fn visit_impl_item(&mut self, impl_item: &'tcx hir::ImplItem<'tcx>) {
         intravisit::walk_impl_item(self, impl_item);
     }
 
-    fn visit_struct_field(&mut self, s: &'tcx hir::StructField) {
+    fn visit_struct_field(&mut self, s: &'tcx hir::StructField<'tcx>) {
         self.process_attrs(s.hir_id, &s.attrs);
         intravisit::walk_struct_field(self, s);
     }
index 156307e31bc7e19c262cad2baf14d5acc5c79bd6..b83bfedc82421a8002e8e973817ab4e69909dd72 100644 (file)
@@ -473,7 +473,7 @@ fn check_impl_item(&mut self, cx: &LateContext<'_, '_>, impl_item: &hir::ImplIte
                                       desc);
     }
 
-    fn check_struct_field(&mut self, cx: &LateContext<'_, '_>, sf: &hir::StructField) {
+    fn check_struct_field(&mut self, cx: &LateContext<'_, '_>, sf: &hir::StructField<'_>) {
         if !sf.is_positional() {
             self.check_missing_docs_attrs(cx,
                                           Some(sf.hir_id),
@@ -1001,7 +1001,7 @@ fn check_foreign_item(&mut self, cx: &LateContext<'_, '_>, foreign_item: &hir::F
                           foreign_item.span, true);
     }
 
-    fn check_struct_field(&mut self, cx: &LateContext<'_, '_>, field: &hir::StructField) {
+    fn check_struct_field(&mut self, cx: &LateContext<'_, '_>, field: &hir::StructField<'_>) {
         self.perform_lint(cx, "field", field.hir_id, &field.vis, field.span, false);
     }
 
index 6a80399746822a206775a2cd43e9daf90ae4103f..e9c5f90d9dcff15d4d921786e6ab43ff3a2e02cb 100644 (file)
@@ -727,7 +727,7 @@ fn encode_field(
         record!(self.per_def.kind[def_id] <- EntryKind::Field);
         record!(self.per_def.visibility[def_id] <- field.vis);
         record!(self.per_def.span[def_id] <- self.tcx.def_span(def_id));
-        record!(self.per_def.attributes[def_id] <- &variant_data.fields()[field_index].attrs);
+        record!(self.per_def.attributes[def_id] <- variant_data.fields()[field_index].attrs);
         self.encode_stability(def_id);
         self.encode_deprecation(def_id);
         self.encode_item_type(def_id);
index 7c3cc80e5d26dd1780a7bee524963fe6857dc344..3edd010f3115c7e53c77bcd281b9e19a940e09a1 100644 (file)
@@ -495,7 +495,7 @@ fn should_warn_about_item(&mut self, item: &hir::Item<'_>) -> bool {
         should_warn && !self.symbol_is_live(item.hir_id)
     }
 
-    fn should_warn_about_field(&mut self, field: &hir::StructField) -> bool {
+    fn should_warn_about_field(&mut self, field: &hir::StructField<'_>) -> bool {
         let field_type = self.tcx.type_of(self.tcx.hir().local_def_id(field.hir_id));
         !field.is_positional()
             && !self.symbol_is_live(field.hir_id)
@@ -629,7 +629,7 @@ fn visit_foreign_item(&mut self, fi: &'tcx hir::ForeignItem<'tcx>) {
         intravisit::walk_foreign_item(self, fi);
     }
 
-    fn visit_struct_field(&mut self, field: &'tcx hir::StructField) {
+    fn visit_struct_field(&mut self, field: &'tcx hir::StructField<'tcx>) {
         if self.should_warn_about_field(&field) {
             self.warn_dead_code(field.hir_id, field.span, field.ident.name, "field", "read");
         }
index 0e80f93234c83aafcf2e7c75941851e268a3a2b0..9ea7423540141a57c8bde7678994242ffcbcd851 100644 (file)
@@ -203,7 +203,7 @@ fn visit_param_bound(&mut self, bounds: &'v hir::GenericBound) {
         hir_visit::walk_param_bound(self, bounds)
     }
 
-    fn visit_struct_field(&mut self, s: &'v hir::StructField) {
+    fn visit_struct_field(&mut self, s: &'v hir::StructField<'v>) {
         self.record("StructField", Id::Node(s.hir_id), s);
         hir_visit::walk_struct_field(self, s)
     }
index 239c75b1f1b69f5c43c0ef628f070ed05d172489..d8d554bad2ca967427ac7b853c341df79d145536 100644 (file)
@@ -1647,7 +1647,7 @@ fn visit_variant(&mut self,
         }
     }
 
-    fn visit_struct_field(&mut self, s: &'tcx hir::StructField) {
+    fn visit_struct_field(&mut self, s: &'tcx hir::StructField<'tcx>) {
         if s.vis.node.is_pub() || self.in_variant {
             intravisit::walk_struct_field(self, s);
         }
index e6de2b279fca278973c6e6cc38258b10d5a938d1..9e2860946425cf0e2ea77cf3a4c02a5f03bed4e1 100644 (file)
@@ -684,7 +684,7 @@ fn visit_impl_item(&mut self, impl_item: &'tcx hir::ImplItem<'tcx>) {
         intravisit::walk_impl_item(self, impl_item);
     }
 
-    fn visit_struct_field(&mut self, s: &'tcx hir::StructField) {
+    fn visit_struct_field(&mut self, s: &'tcx hir::StructField<'tcx>) {
         self.process_attrs(s.hir_id, &s.attrs);
         intravisit::walk_struct_field(self, s);
     }
index d882a362266300b94da52bfd559b04919e38ae00..4825eb1ebd57cac7ca249f559bc897a55737114f 100644 (file)
@@ -1743,7 +1743,7 @@ fn clean(&self, cx: &DocContext<'_>) -> Constant {
     }
 }
 
-impl Clean<Item> for hir::StructField {
+impl Clean<Item> for hir::StructField<'_> {
     fn clean(&self, cx: &DocContext<'_>) -> Item {
         let local_did = cx.tcx.hir().local_def_id(self.hir_id);
 
index 852cc0fb3267f2c8bdd7b516f65f23e9f6d6e1ac..ae62b743f9d8cdd37234e5123b5d64d105f83d88 100644 (file)
@@ -89,7 +89,7 @@ pub struct Struct<'hir> {
     pub name: Name,
     pub generics: &'hir hir::Generics,
     pub attrs: &'hir [ast::Attribute],
-    pub fields: &'hir [hir::StructField],
+    pub fields: &'hir [hir::StructField<'hir>],
     pub whence: Span,
 }
 
@@ -100,7 +100,7 @@ pub struct Union<'hir> {
     pub name: Name,
     pub generics: &'hir hir::Generics,
     pub attrs: &'hir [ast::Attribute],
-    pub fields: &'hir [hir::StructField],
+    pub fields: &'hir [hir::StructField<'hir>],
     pub whence: Span,
 }