Skip to content

Commit 5fec1ca

Browse files
committed
Use Arena inside hir::ImplItem.
1 parent 0f7d773 commit 5fec1ca

Some content is hidden

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

57 files changed

+91
-95
lines changed

src/librustc/hir/check_attr.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ impl Target {
128128
}
129129
}
130130

131-
fn from_impl_item<'tcx>(tcx: TyCtxt<'tcx>, impl_item: &hir::ImplItem) -> Target {
131+
fn from_impl_item<'tcx>(tcx: TyCtxt<'tcx>, impl_item: &hir::ImplItem<'_>) -> Target {
132132
match impl_item.kind {
133133
hir::ImplItemKind::Const(..) => Target::AssocConst,
134134
hir::ImplItemKind::Method(..) => {
@@ -510,7 +510,7 @@ impl Visitor<'tcx> for CheckAttrVisitor<'tcx> {
510510
intravisit::walk_foreign_item(self, f_item)
511511
}
512512

513-
fn visit_impl_item(&mut self, impl_item: &'tcx hir::ImplItem) {
513+
fn visit_impl_item(&mut self, impl_item: &'tcx hir::ImplItem<'tcx>) {
514514
let target = Target::from_impl_item(self.tcx, impl_item);
515515
self.check_attributes(impl_item.hir_id, &impl_item.attrs, &impl_item.span, target, None);
516516
intravisit::walk_impl_item(self, impl_item)

src/librustc/hir/intravisit.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -301,7 +301,7 @@ pub trait Visitor<'v>: Sized {
301301
fn visit_trait_item_ref(&mut self, ii: &'v TraitItemRef) {
302302
walk_trait_item_ref(self, ii)
303303
}
304-
fn visit_impl_item(&mut self, ii: &'v ImplItem) {
304+
fn visit_impl_item(&mut self, ii: &'v ImplItem<'v>) {
305305
walk_impl_item(self, ii)
306306
}
307307
fn visit_impl_item_ref(&mut self, ii: &'v ImplItemRef) {
@@ -893,14 +893,14 @@ pub fn walk_trait_item_ref<'v, V: Visitor<'v>>(visitor: &mut V, trait_item_ref:
893893
visitor.visit_defaultness(defaultness);
894894
}
895895

896-
pub fn walk_impl_item<'v, V: Visitor<'v>>(visitor: &mut V, impl_item: &'v ImplItem) {
896+
pub fn walk_impl_item<'v, V: Visitor<'v>>(visitor: &mut V, impl_item: &'v ImplItem<'v>) {
897897
// N.B., deliberately force a compilation error if/when new fields are added.
898898
let ImplItem {
899899
hir_id: _,
900900
ident,
901901
ref vis,
902902
ref defaultness,
903-
ref attrs,
903+
attrs,
904904
ref generics,
905905
ref kind,
906906
span: _,

src/librustc/hir/itemlikevisit.rs

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

5353
pub struct DeepVisitor<'v, V> {
@@ -73,7 +73,7 @@ impl<'v, 'hir, V> ItemLikeVisitor<'hir> for DeepVisitor<'v, V>
7373
self.visitor.visit_trait_item(trait_item);
7474
}
7575

76-
fn visit_impl_item(&mut self, impl_item: &'hir ImplItem) {
76+
fn visit_impl_item(&mut self, impl_item: &'hir ImplItem<'hir>) {
7777
self.visitor.visit_impl_item(impl_item);
7878
}
7979
}
@@ -82,7 +82,7 @@ impl<'v, 'hir, V> ItemLikeVisitor<'hir> for DeepVisitor<'v, V>
8282
pub trait ParItemLikeVisitor<'hir> {
8383
fn visit_item(&self, item: &'hir Item<'hir>);
8484
fn visit_trait_item(&self, trait_item: &'hir TraitItem<'hir>);
85-
fn visit_impl_item(&self, impl_item: &'hir ImplItem);
85+
fn visit_impl_item(&self, impl_item: &'hir ImplItem<'hir>);
8686
}
8787

8888
pub trait IntoVisitor<'hir> {
@@ -103,7 +103,7 @@ impl<'hir, V> ParItemLikeVisitor<'hir> for ParDeepVisitor<V>
103103
self.0.into_visitor().visit_trait_item(trait_item);
104104
}
105105

106-
fn visit_impl_item(&self, impl_item: &'hir ImplItem) {
106+
fn visit_impl_item(&self, impl_item: &'hir ImplItem<'hir>) {
107107
self.0.into_visitor().visit_impl_item(impl_item);
108108
}
109109
}

src/librustc/hir/lowering.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ pub struct LoweringContext<'a, 'hir: 'a> {
9898
items: BTreeMap<hir::HirId, hir::Item<'hir>>,
9999

100100
trait_items: BTreeMap<hir::TraitItemId, hir::TraitItem<'hir>>,
101-
impl_items: BTreeMap<hir::ImplItemId, hir::ImplItem>,
101+
impl_items: BTreeMap<hir::ImplItemId, hir::ImplItem<'hir>>,
102102
bodies: BTreeMap<hir::BodyId, hir::Body>,
103103
exported_macros: Vec<hir::MacroDef<'hir>>,
104104
non_exported_macro_attrs: Vec<ast::Attribute>,

src/librustc/hir/lowering/item.rs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -906,14 +906,14 @@ impl LoweringContext<'_, 'hir> {
906906
self.expr(span, hir::ExprKind::Err, AttrVec::new())
907907
}
908908

909-
fn lower_impl_item(&mut self, i: &AssocItem) -> hir::ImplItem {
909+
fn lower_impl_item(&mut self, i: &AssocItem) -> hir::ImplItem<'hir> {
910910
let impl_item_def_id = self.resolver.definitions().local_def_id(i.id);
911911

912912
let (generics, kind) = match i.kind {
913913
AssocItemKind::Const(ref ty, ref expr) => (
914914
self.lower_generics(&i.generics, ImplTraitContext::disallowed()),
915915
hir::ImplItemKind::Const(
916-
self.lower_ty(ty, ImplTraitContext::disallowed()),
916+
self.arena.alloc(self.lower_ty(ty, ImplTraitContext::disallowed()).into_inner()),
917917
self.lower_const_body(i.span, expr.as_deref()),
918918
),
919919
),
@@ -940,11 +940,13 @@ impl LoweringContext<'_, 'hir> {
940940
let generics = self.lower_generics(&i.generics, ImplTraitContext::disallowed());
941941
let kind = match ty {
942942
None => {
943-
hir::ImplItemKind::TyAlias(P(self.ty(i.span, hir::TyKind::Err)))
943+
let ty = self.arena.alloc(self.ty(i.span, hir::TyKind::Err));
944+
hir::ImplItemKind::TyAlias(ty)
944945
}
945946
Some(ty) => match ty.kind.opaque_top_hack() {
946947
None => {
947948
let ty = self.lower_ty(ty, ImplTraitContext::disallowed());
949+
let ty = self.arena.alloc(ty.into_inner());
948950
hir::ImplItemKind::TyAlias(ty)
949951
}
950952
Some(bs) => {
@@ -961,7 +963,7 @@ impl LoweringContext<'_, 'hir> {
961963
hir::ImplItem {
962964
hir_id: self.lower_node_id(i.id),
963965
ident: i.ident,
964-
attrs: self.lower_attrs(&i.attrs),
966+
attrs: self.lower_attrs_arena(&i.attrs),
965967
generics,
966968
vis: self.lower_visibility(&i.vis, None),
967969
defaultness: self.lower_defaultness(i.defaultness, true /* [1] */),

src/librustc/hir/map/blocks.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ impl MaybeFnLike for ast::Item<'_> {
4444
}
4545
}
4646

47-
impl MaybeFnLike for ast::ImplItem {
47+
impl MaybeFnLike for ast::ImplItem<'_> {
4848
fn is_fn_like(&self) -> bool {
4949
match self.kind {
5050
ast::ImplItemKind::Method(..) => true,

src/librustc/hir/map/collector.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -410,7 +410,7 @@ impl<'a, 'hir> Visitor<'hir> for NodeCollector<'a, 'hir> {
410410
});
411411
}
412412

413-
fn visit_impl_item(&mut self, ii: &'hir ImplItem) {
413+
fn visit_impl_item(&mut self, ii: &'hir ImplItem<'hir>) {
414414
debug_assert_eq!(ii.hir_id.owner,
415415
self.definitions.opt_def_index(self.hir_to_node_id[&ii.hir_id]).unwrap());
416416
self.with_dep_node_owner(ii.hir_id.owner, ii, |this| {

src/librustc/hir/map/hir_id_validator.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ impl<'a, 'hir> ItemLikeVisitor<'hir> for OuterVisitor<'a, 'hir> {
6363
inner_visitor.check(i.hir_id, |this| intravisit::walk_trait_item(this, i));
6464
}
6565

66-
fn visit_impl_item(&mut self, i: &'hir hir::ImplItem) {
66+
fn visit_impl_item(&mut self, i: &'hir hir::ImplItem<'hir>) {
6767
let mut inner_visitor = self.new_inner_visitor(self.hir_map);
6868
inner_visitor.check(i.hir_id, |this| intravisit::walk_impl_item(this, i));
6969
}

src/librustc/hir/map/mod.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -451,7 +451,7 @@ impl<'hir> Map<'hir> {
451451
self.forest.krate.trait_item(id)
452452
}
453453

454-
pub fn impl_item(&self, id: ImplItemId) -> &'hir ImplItem {
454+
pub fn impl_item(&self, id: ImplItemId) -> &'hir ImplItem<'hir> {
455455
self.read(id.hir_id);
456456

457457
// N.B., intentionally bypass `self.forest.krate()` so that we
@@ -966,7 +966,7 @@ impl<'hir> Map<'hir> {
966966
}
967967
}
968968

969-
pub fn expect_impl_item(&self, id: HirId) -> &'hir ImplItem {
969+
pub fn expect_impl_item(&self, id: HirId) -> &'hir ImplItem<'hir> {
970970
match self.find(id) {
971971
Some(Node::ImplItem(item)) => item,
972972
_ => bug!("expected impl item, found {}", self.node_to_string(id))
@@ -1253,7 +1253,7 @@ 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 } }
12551255
impl Named for TraitItem<'_> { fn name(&self) -> Name { self.ident.name } }
1256-
impl Named for ImplItem { fn name(&self) -> Name { self.ident.name } }
1256+
impl Named for ImplItem<'_> { fn name(&self) -> Name { self.ident.name } }
12571257

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

src/librustc/hir/mod.rs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -759,7 +759,7 @@ pub struct Crate<'hir> {
759759
pub items: BTreeMap<HirId, Item<'hir>>,
760760

761761
pub trait_items: BTreeMap<TraitItemId, TraitItem<'hir>>,
762-
pub impl_items: BTreeMap<ImplItemId, ImplItem>,
762+
pub impl_items: BTreeMap<ImplItemId, ImplItem<'hir>>,
763763
pub bodies: BTreeMap<BodyId, Body>,
764764
pub trait_impls: BTreeMap<DefId, Vec<HirId>>,
765765

@@ -783,7 +783,7 @@ impl Crate<'hir> {
783783
&self.trait_items[&id]
784784
}
785785

786-
pub fn impl_item(&self, id: ImplItemId) -> &ImplItem {
786+
pub fn impl_item(&self, id: ImplItemId) -> &ImplItem<'hir> {
787787
&self.impl_items[&id]
788788
}
789789

@@ -1938,27 +1938,27 @@ pub struct ImplItemId {
19381938

19391939
/// Represents anything within an `impl` block.
19401940
#[derive(RustcEncodable, RustcDecodable, Debug)]
1941-
pub struct ImplItem {
1941+
pub struct ImplItem<'hir> {
19421942
pub ident: Ident,
19431943
pub hir_id: HirId,
19441944
pub vis: Visibility,
19451945
pub defaultness: Defaultness,
1946-
pub attrs: HirVec<Attribute>,
1946+
pub attrs: &'hir [Attribute],
19471947
pub generics: Generics,
1948-
pub kind: ImplItemKind,
1948+
pub kind: ImplItemKind<'hir>,
19491949
pub span: Span,
19501950
}
19511951

19521952
/// Represents various kinds of content within an `impl`.
19531953
#[derive(RustcEncodable, RustcDecodable, Debug, HashStable)]
1954-
pub enum ImplItemKind {
1954+
pub enum ImplItemKind<'hir> {
19551955
/// An associated constant of the given type, set to the constant result
19561956
/// of the expression.
1957-
Const(P<Ty>, BodyId),
1957+
Const(&'hir Ty, BodyId),
19581958
/// A method implementation with the given signature and body.
19591959
Method(FnSig, BodyId),
19601960
/// An associated type.
1961-
TyAlias(P<Ty>),
1961+
TyAlias(&'hir Ty),
19621962
/// An associated `type = impl Trait`.
19631963
OpaqueTy(GenericBounds),
19641964
}
@@ -2790,7 +2790,7 @@ pub enum Node<'hir> {
27902790
Item(&'hir Item<'hir>),
27912791
ForeignItem(&'hir ForeignItem<'hir>),
27922792
TraitItem(&'hir TraitItem<'hir>),
2793-
ImplItem(&'hir ImplItem),
2793+
ImplItem(&'hir ImplItem<'hir>),
27942794
Variant(&'hir Variant),
27952795
Field(&'hir StructField),
27962796
AnonConst(&'hir AnonConst),

0 commit comments

Comments
 (0)