Skip to content

Commit 0f7d773

Browse files
committed
Use Arena inside hir::TraitItem.
1 parent acf33f2 commit 0f7d773

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

56 files changed

+96
-92
lines changed

src/librustc/hir/check_attr.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ impl Target {
107107
}
108108
}
109109

110-
fn from_trait_item(trait_item: &TraitItem) -> Target {
110+
fn from_trait_item(trait_item: &TraitItem<'_>) -> Target {
111111
match trait_item.kind {
112112
TraitItemKind::Const(..) => Target::AssocConst,
113113
TraitItemKind::Method(_, hir::TraitMethod::Required(_)) => {
@@ -498,7 +498,7 @@ impl Visitor<'tcx> for CheckAttrVisitor<'tcx> {
498498
intravisit::walk_item(self, item)
499499
}
500500

501-
fn visit_trait_item(&mut self, trait_item: &'tcx TraitItem) {
501+
fn visit_trait_item(&mut self, trait_item: &'tcx TraitItem<'tcx>) {
502502
let target = Target::from_trait_item(trait_item);
503503
self.check_attributes(trait_item.hir_id, &trait_item.attrs, &trait_item.span, target, None);
504504
intravisit::walk_trait_item(self, trait_item)

src/librustc/hir/intravisit.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -295,7 +295,7 @@ pub trait Visitor<'v>: Sized {
295295
fn visit_use(&mut self, path: &'v Path, hir_id: HirId) {
296296
walk_use(self, path, hir_id)
297297
}
298-
fn visit_trait_item(&mut self, ti: &'v TraitItem) {
298+
fn visit_trait_item(&mut self, ti: &'v TraitItem<'v>) {
299299
walk_trait_item(self, ti)
300300
}
301301
fn visit_trait_item_ref(&mut self, ii: &'v TraitItemRef) {
@@ -849,9 +849,9 @@ pub fn walk_fn<'v, V: Visitor<'v>>(visitor: &mut V,
849849
visitor.visit_nested_body(body_id)
850850
}
851851

852-
pub fn walk_trait_item<'v, V: Visitor<'v>>(visitor: &mut V, trait_item: &'v TraitItem) {
852+
pub fn walk_trait_item<'v, V: Visitor<'v>>(visitor: &mut V, trait_item: &'v TraitItem<'v>) {
853853
visitor.visit_ident(trait_item.ident);
854-
walk_list!(visitor, visit_attribute, &trait_item.attrs);
854+
walk_list!(visitor, visit_attribute, trait_item.attrs);
855855
visitor.visit_generics(&trait_item.generics);
856856
match trait_item.kind {
857857
TraitItemKind::Const(ref ty, default) => {

src/librustc/hir/itemlikevisit.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ use super::intravisit::Visitor;
4646
/// needed.
4747
pub trait ItemLikeVisitor<'hir> {
4848
fn visit_item(&mut self, item: &'hir Item<'hir>);
49-
fn visit_trait_item(&mut self, trait_item: &'hir TraitItem);
49+
fn visit_trait_item(&mut self, trait_item: &'hir TraitItem<'hir>);
5050
fn visit_impl_item(&mut self, impl_item: &'hir ImplItem);
5151
}
5252

@@ -69,7 +69,7 @@ impl<'v, 'hir, V> ItemLikeVisitor<'hir> for DeepVisitor<'v, V>
6969
self.visitor.visit_item(item);
7070
}
7171

72-
fn visit_trait_item(&mut self, trait_item: &'hir TraitItem) {
72+
fn visit_trait_item(&mut self, trait_item: &'hir TraitItem<'hir>) {
7373
self.visitor.visit_trait_item(trait_item);
7474
}
7575

@@ -81,7 +81,7 @@ impl<'v, 'hir, V> ItemLikeVisitor<'hir> for DeepVisitor<'v, V>
8181
/// A parallel variant of `ItemLikeVisitor`.
8282
pub trait ParItemLikeVisitor<'hir> {
8383
fn visit_item(&self, item: &'hir Item<'hir>);
84-
fn visit_trait_item(&self, trait_item: &'hir TraitItem);
84+
fn visit_trait_item(&self, trait_item: &'hir TraitItem<'hir>);
8585
fn visit_impl_item(&self, impl_item: &'hir ImplItem);
8686
}
8787

@@ -99,7 +99,7 @@ impl<'hir, V> ParItemLikeVisitor<'hir> for ParDeepVisitor<V>
9999
self.0.into_visitor().visit_item(item);
100100
}
101101

102-
fn visit_trait_item(&self, trait_item: &'hir TraitItem) {
102+
fn visit_trait_item(&self, trait_item: &'hir TraitItem<'hir>) {
103103
self.0.into_visitor().visit_trait_item(trait_item);
104104
}
105105

src/librustc/hir/lowering.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ pub struct LoweringContext<'a, 'hir: 'a> {
9797
/// The items being lowered are collected here.
9898
items: BTreeMap<hir::HirId, hir::Item<'hir>>,
9999

100-
trait_items: BTreeMap<hir::TraitItemId, hir::TraitItem>,
100+
trait_items: BTreeMap<hir::TraitItemId, hir::TraitItem<'hir>>,
101101
impl_items: BTreeMap<hir::ImplItemId, hir::ImplItem>,
102102
bodies: BTreeMap<hir::BodyId, hir::Body>,
103103
exported_macros: Vec<hir::MacroDef<'hir>>,

src/librustc/hir/lowering/item.rs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -816,14 +816,14 @@ impl LoweringContext<'_, 'hir> {
816816
}
817817
}
818818

819-
fn lower_trait_item(&mut self, i: &AssocItem) -> hir::TraitItem {
819+
fn lower_trait_item(&mut self, i: &AssocItem) -> hir::TraitItem<'hir> {
820820
let trait_item_def_id = self.resolver.definitions().local_def_id(i.id);
821821

822822
let (generics, kind) = match i.kind {
823823
AssocItemKind::Const(ref ty, ref default) => (
824824
self.lower_generics(&i.generics, ImplTraitContext::disallowed()),
825825
hir::TraitItemKind::Const(
826-
self.lower_ty(ty, ImplTraitContext::disallowed()),
826+
self.arena.alloc(self.lower_ty(ty, ImplTraitContext::disallowed()).into_inner()),
827827
default
828828
.as_ref()
829829
.map(|x| self.lower_const_body(i.span, Some(x))),
@@ -852,12 +852,13 @@ impl LoweringContext<'_, 'hir> {
852852
(generics, hir::TraitItemKind::Method(sig, hir::TraitMethod::Provided(body_id)))
853853
}
854854
AssocItemKind::TyAlias(ref bounds, ref default) => {
855+
let ty = default.as_ref().map(|x| -> &'hir hir::Ty { self.arena.alloc(
856+
self.lower_ty(x, ImplTraitContext::disallowed()).into_inner())
857+
});
855858
let generics = self.lower_generics(&i.generics, ImplTraitContext::disallowed());
856859
let kind = hir::TraitItemKind::Type(
857860
self.lower_param_bounds(bounds, ImplTraitContext::disallowed()),
858-
default
859-
.as_ref()
860-
.map(|x| self.lower_ty(x, ImplTraitContext::disallowed())),
861+
ty,
861862
);
862863

863864
(generics, kind)
@@ -868,7 +869,7 @@ impl LoweringContext<'_, 'hir> {
868869
hir::TraitItem {
869870
hir_id: self.lower_node_id(i.id),
870871
ident: i.ident,
871-
attrs: self.lower_attrs(&i.attrs),
872+
attrs: self.lower_attrs_arena(&i.attrs),
872873
generics,
873874
kind,
874875
span: i.span,

src/librustc/hir/map/blocks.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ impl MaybeFnLike for ast::ImplItem {
5353
}
5454
}
5555

56-
impl MaybeFnLike for ast::TraitItem {
56+
impl MaybeFnLike for ast::TraitItem<'_> {
5757
fn is_fn_like(&self) -> bool {
5858
match self.kind {
5959
ast::TraitItemKind::Method(_, ast::TraitMethod::Provided(_)) => true,

src/librustc/hir/map/collector.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -398,7 +398,7 @@ impl<'a, 'hir> Visitor<'hir> for NodeCollector<'a, 'hir> {
398398
intravisit::walk_generic_param(self, param);
399399
}
400400

401-
fn visit_trait_item(&mut self, ti: &'hir TraitItem) {
401+
fn visit_trait_item(&mut self, ti: &'hir TraitItem<'hir>) {
402402
debug_assert_eq!(ti.hir_id.owner,
403403
self.definitions.opt_def_index(self.hir_to_node_id[&ti.hir_id]).unwrap());
404404
self.with_dep_node_owner(ti.hir_id.owner, ti, |this| {

src/librustc/hir/map/hir_id_validator.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ impl<'a, 'hir> ItemLikeVisitor<'hir> for OuterVisitor<'a, 'hir> {
5858
inner_visitor.check(i.hir_id, |this| intravisit::walk_item(this, i));
5959
}
6060

61-
fn visit_trait_item(&mut self, i: &'hir hir::TraitItem) {
61+
fn visit_trait_item(&mut self, i: &'hir hir::TraitItem<'hir>) {
6262
let mut inner_visitor = self.new_inner_visitor(self.hir_map);
6363
inner_visitor.check(i.hir_id, |this| intravisit::walk_trait_item(this, i));
6464
}

src/librustc/hir/map/mod.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -443,7 +443,7 @@ impl<'hir> Map<'hir> {
443443
self.forest.krate()
444444
}
445445

446-
pub fn trait_item(&self, id: TraitItemId) -> &'hir TraitItem {
446+
pub fn trait_item(&self, id: TraitItemId) -> &'hir TraitItem<'hir> {
447447
self.read(id.hir_id);
448448

449449
// N.B., intentionally bypass `self.forest.krate()` so that we
@@ -973,7 +973,7 @@ impl<'hir> Map<'hir> {
973973
}
974974
}
975975

976-
pub fn expect_trait_item(&self, id: HirId) -> &'hir TraitItem {
976+
pub fn expect_trait_item(&self, id: HirId) -> &'hir TraitItem<'hir> {
977977
match self.find(id) {
978978
Some(Node::TraitItem(item)) => item,
979979
_ => bug!("expected trait item, found {}", self.node_to_string(id))
@@ -1252,7 +1252,7 @@ impl Named for Item<'_> { fn name(&self) -> Name { self.ident.name } }
12521252
impl Named for ForeignItem<'_> { fn name(&self) -> Name { self.ident.name } }
12531253
impl Named for Variant { fn name(&self) -> Name { self.ident.name } }
12541254
impl Named for StructField { fn name(&self) -> Name { self.ident.name } }
1255-
impl Named for TraitItem { fn name(&self) -> Name { self.ident.name } }
1255+
impl Named for TraitItem<'_> { fn name(&self) -> Name { self.ident.name } }
12561256
impl Named for ImplItem { fn name(&self) -> Name { self.ident.name } }
12571257

12581258
pub fn map_crate<'hir>(sess: &crate::session::Session,

src/librustc/hir/mod.rs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -758,7 +758,7 @@ pub struct Crate<'hir> {
758758
// slightly different results.
759759
pub items: BTreeMap<HirId, Item<'hir>>,
760760

761-
pub trait_items: BTreeMap<TraitItemId, TraitItem>,
761+
pub trait_items: BTreeMap<TraitItemId, TraitItem<'hir>>,
762762
pub impl_items: BTreeMap<ImplItemId, ImplItem>,
763763
pub bodies: BTreeMap<BodyId, Body>,
764764
pub trait_impls: BTreeMap<DefId, Vec<HirId>>,
@@ -779,7 +779,7 @@ impl Crate<'hir> {
779779
&self.items[&id]
780780
}
781781

782-
pub fn trait_item(&self, id: TraitItemId) -> &TraitItem {
782+
pub fn trait_item(&self, id: TraitItemId) -> &TraitItem<'hir> {
783783
&self.trait_items[&id]
784784
}
785785

@@ -1897,12 +1897,12 @@ pub struct TraitItemId {
18971897
/// either required (meaning it doesn't have an implementation, just a
18981898
/// signature) or provided (meaning it has a default implementation).
18991899
#[derive(RustcEncodable, RustcDecodable, Debug)]
1900-
pub struct TraitItem {
1900+
pub struct TraitItem<'hir> {
19011901
pub ident: Ident,
19021902
pub hir_id: HirId,
1903-
pub attrs: HirVec<Attribute>,
1903+
pub attrs: &'hir [Attribute],
19041904
pub generics: Generics,
1905-
pub kind: TraitItemKind,
1905+
pub kind: TraitItemKind<'hir>,
19061906
pub span: Span,
19071907
}
19081908

@@ -1918,14 +1918,14 @@ pub enum TraitMethod {
19181918

19191919
/// Represents a trait method or associated constant or type
19201920
#[derive(RustcEncodable, RustcDecodable, Debug, HashStable)]
1921-
pub enum TraitItemKind {
1921+
pub enum TraitItemKind<'hir> {
19221922
/// An associated constant with an optional value (otherwise `impl`s must contain a value).
1923-
Const(P<Ty>, Option<BodyId>),
1923+
Const(&'hir Ty, Option<BodyId>),
19241924
/// A method with an optional body.
19251925
Method(FnSig, TraitMethod),
19261926
/// An associated type with (possibly empty) bounds and optional concrete
19271927
/// type.
1928-
Type(GenericBounds, Option<P<Ty>>),
1928+
Type(GenericBounds, Option<&'hir Ty>),
19291929
}
19301930

19311931
// The bodies for items are stored "out of line", in a separate
@@ -2789,7 +2789,7 @@ pub enum Node<'hir> {
27892789
Param(&'hir Param),
27902790
Item(&'hir Item<'hir>),
27912791
ForeignItem(&'hir ForeignItem<'hir>),
2792-
TraitItem(&'hir TraitItem),
2792+
TraitItem(&'hir TraitItem<'hir>),
27932793
ImplItem(&'hir ImplItem),
27942794
Variant(&'hir Variant),
27952795
Field(&'hir StructField),

0 commit comments

Comments
 (0)