Skip to content

Commit 4f1c88b

Browse files
committed
Use Arena inside hir::EnumDef.
1 parent 5fec1ca commit 4f1c88b

File tree

25 files changed

+78
-74
lines changed

25 files changed

+78
-74
lines changed

src/librustc/arena.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,8 +131,10 @@ macro_rules! arena_types {
131131
[] impl_item_ref: rustc::hir::ImplItemRef,
132132
[] macro_def: rustc::hir::MacroDef<$tcx>,
133133
[] path: rustc::hir::Path,
134+
[] struct_field: rustc::hir::StructField,
134135
[] trait_item_ref: rustc::hir::TraitItemRef,
135136
[] ty: rustc::hir::Ty,
137+
[] variant: rustc::hir::Variant<$tcx>,
136138
], $tcx);
137139
)
138140
}

src/librustc/hir/check_attr.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -529,7 +529,7 @@ impl Visitor<'tcx> for CheckAttrVisitor<'tcx> {
529529

530530
fn is_c_like_enum(item: &Item<'_>) -> bool {
531531
if let ItemKind::Enum(ref def, _) = item.kind {
532-
for variant in &def.variants {
532+
for variant in def.variants {
533533
match variant.data {
534534
hir::VariantData::Unit(..) => { /* continue */ }
535535
_ => return false,

src/librustc/hir/def.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -340,7 +340,7 @@ impl CtorKind {
340340
}
341341
}
342342

343-
pub fn from_hir(vdata: &hir::VariantData) -> CtorKind {
343+
pub fn from_hir(vdata: &hir::VariantData<'_>) -> CtorKind {
344344
match *vdata {
345345
hir::VariantData::Tuple(..) => CtorKind::Fn,
346346
hir::VariantData::Unit(..) => CtorKind::Const,

src/librustc/hir/intravisit.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -317,7 +317,7 @@ pub trait Visitor<'v>: Sized {
317317
walk_poly_trait_ref(self, t, m)
318318
}
319319
fn visit_variant_data(&mut self,
320-
s: &'v VariantData,
320+
s: &'v VariantData<'v>,
321321
_: Name,
322322
_: &'v Generics,
323323
_parent_id: HirId,
@@ -328,13 +328,13 @@ pub trait Visitor<'v>: Sized {
328328
walk_struct_field(self, s)
329329
}
330330
fn visit_enum_def(&mut self,
331-
enum_definition: &'v EnumDef,
331+
enum_definition: &'v EnumDef<'v>,
332332
generics: &'v Generics,
333333
item_id: HirId,
334334
_: Span) {
335335
walk_enum_def(self, enum_definition, generics, item_id)
336336
}
337-
fn visit_variant(&mut self, v: &'v Variant, g: &'v Generics, item_id: HirId) {
337+
fn visit_variant(&mut self, v: &'v Variant<'v>, g: &'v Generics, item_id: HirId) {
338338
walk_variant(self, v, g, item_id)
339339
}
340340
fn visit_label(&mut self, label: &'v Label) {
@@ -565,19 +565,19 @@ pub fn walk_use<'v, V: Visitor<'v>>(visitor: &mut V,
565565
}
566566

567567
pub fn walk_enum_def<'v, V: Visitor<'v>>(visitor: &mut V,
568-
enum_definition: &'v EnumDef,
568+
enum_definition: &'v EnumDef<'v>,
569569
generics: &'v Generics,
570570
item_id: HirId) {
571571
visitor.visit_id(item_id);
572572
walk_list!(visitor,
573573
visit_variant,
574-
&enum_definition.variants,
574+
enum_definition.variants,
575575
generics,
576576
item_id);
577577
}
578578

579579
pub fn walk_variant<'v, V: Visitor<'v>>(visitor: &mut V,
580-
variant: &'v Variant,
580+
variant: &'v Variant<'v>,
581581
generics: &'v Generics,
582582
parent_item_id: HirId) {
583583
visitor.visit_ident(variant.ident);
@@ -588,7 +588,7 @@ pub fn walk_variant<'v, V: Visitor<'v>>(visitor: &mut V,
588588
parent_item_id,
589589
variant.span);
590590
walk_list!(visitor, visit_anon_const, &variant.disr_expr);
591-
walk_list!(visitor, visit_attribute, &variant.attrs);
591+
walk_list!(visitor, visit_attribute, variant.attrs);
592592
}
593593

594594
pub fn walk_ty<'v, V: Visitor<'v>>(visitor: &mut V, typ: &'v Ty) {
@@ -948,7 +948,7 @@ pub fn walk_impl_item_ref<'v, V: Visitor<'v>>(visitor: &mut V, impl_item_ref: &'
948948
visitor.visit_defaultness(defaultness);
949949
}
950950

951-
pub fn walk_struct_def<'v, V: Visitor<'v>>(visitor: &mut V, struct_definition: &'v VariantData) {
951+
pub fn walk_struct_def<'v, V: Visitor<'v>>(visitor: &mut V, struct_definition: &'v VariantData<'v>) {
952952
if let Some(ctor_hir_id) = struct_definition.ctor_hir_id() {
953953
visitor.visit_id(ctor_hir_id);
954954
}

src/librustc/hir/lowering/item.rs

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -363,11 +363,12 @@ impl LoweringContext<'_, 'hir> {
363363
ItemKind::Enum(ref enum_definition, ref generics) => {
364364
hir::ItemKind::Enum(
365365
hir::EnumDef {
366-
variants: enum_definition
366+
variants: self.arena.alloc_from_iter(
367+
enum_definition
367368
.variants
368369
.iter()
369370
.map(|x| self.lower_variant(x))
370-
.collect(),
371+
),
371372
},
372373
self.lower_generics(generics, ImplTraitContext::disallowed()),
373374
)
@@ -756,9 +757,9 @@ impl LoweringContext<'_, 'hir> {
756757
self.arena.alloc(hir::GlobalAsm { asm: ga.asm })
757758
}
758759

759-
fn lower_variant(&mut self, v: &Variant) -> hir::Variant {
760+
fn lower_variant(&mut self, v: &Variant) -> hir::Variant<'hir> {
760761
hir::Variant {
761-
attrs: self.lower_attrs(&v.attrs),
762+
attrs: self.lower_attrs_arena(&v.attrs),
762763
data: self.lower_variant_data(&v.data),
763764
disr_expr: v.disr_expr.as_ref().map(|e| self.lower_anon_const(e)),
764765
id: self.lower_node_id(v.id),
@@ -767,19 +768,20 @@ impl LoweringContext<'_, 'hir> {
767768
}
768769
}
769770

770-
fn lower_variant_data(&mut self, vdata: &VariantData) -> hir::VariantData {
771+
fn lower_variant_data(&mut self, vdata: &VariantData) -> hir::VariantData<'hir> {
771772
match *vdata {
772773
VariantData::Struct(ref fields, recovered) => hir::VariantData::Struct(
773-
fields.iter().enumerate().map(|f| self.lower_struct_field(f)).collect(),
774+
self.arena.alloc_from_iter(fields.iter().enumerate().map(|f| self.lower_struct_field(f))),
774775
recovered,
775776
),
776777
VariantData::Tuple(ref fields, id) => {
777778
hir::VariantData::Tuple(
778-
fields
779+
self.arena.alloc_from_iter(
780+
fields
779781
.iter()
780782
.enumerate()
781783
.map(|f| self.lower_struct_field(f))
782-
.collect(),
784+
),
783785
self.lower_node_id(id),
784786
)
785787
},

src/librustc/hir/map/collector.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -539,7 +539,7 @@ impl<'a, 'hir> Visitor<'hir> for NodeCollector<'a, 'hir> {
539539
});
540540
}
541541

542-
fn visit_variant(&mut self, v: &'hir Variant, g: &'hir Generics, item_id: HirId) {
542+
fn visit_variant(&mut self, v: &'hir Variant<'hir>, g: &'hir Generics, item_id: HirId) {
543543
self.insert(v.span, v.id, Node::Variant(v));
544544
self.with_parent(v.id, |this| {
545545
// Register the constructor of this variant.

src/librustc/hir/map/mod.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -980,7 +980,7 @@ impl<'hir> Map<'hir> {
980980
}
981981
}
982982

983-
pub fn expect_variant_data(&self, id: HirId) -> &'hir VariantData {
983+
pub fn expect_variant_data(&self, id: HirId) -> &'hir VariantData<'hir> {
984984
match self.find(id) {
985985
Some(Node::Item(i)) => {
986986
match i.kind {
@@ -995,7 +995,7 @@ impl<'hir> Map<'hir> {
995995
}
996996
}
997997

998-
pub fn expect_variant(&self, id: HirId) -> &'hir Variant {
998+
pub fn expect_variant(&self, id: HirId) -> &'hir Variant<'hir> {
999999
match self.find(id) {
10001000
Some(Node::Variant(variant)) => variant,
10011001
_ => bug!("expected variant, found {}", self.node_to_string(id)),
@@ -1250,7 +1250,7 @@ impl<T:Named> Named for Spanned<T> { fn name(&self) -> Name { self.node.name() }
12501250

12511251
impl Named for Item<'_> { fn name(&self) -> Name { self.ident.name } }
12521252
impl Named for ForeignItem<'_> { fn name(&self) -> Name { self.ident.name } }
1253-
impl Named for Variant { fn name(&self) -> Name { self.ident.name } }
1253+
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 } }
12561256
impl Named for ImplItem<'_> { fn name(&self) -> Name { self.ident.name } }

src/librustc/hir/mod.rs

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2263,21 +2263,21 @@ pub struct GlobalAsm {
22632263
}
22642264

22652265
#[derive(RustcEncodable, RustcDecodable, Debug, HashStable)]
2266-
pub struct EnumDef {
2267-
pub variants: HirVec<Variant>,
2266+
pub struct EnumDef<'hir> {
2267+
pub variants: &'hir [Variant<'hir>],
22682268
}
22692269

22702270
#[derive(RustcEncodable, RustcDecodable, Debug, HashStable)]
2271-
pub struct Variant {
2271+
pub struct Variant<'hir> {
22722272
/// Name of the variant.
22732273
#[stable_hasher(project(name))]
22742274
pub ident: Ident,
22752275
/// Attributes of the variant.
2276-
pub attrs: HirVec<Attribute>,
2276+
pub attrs: &'hir [Attribute],
22772277
/// Id of the variant (not the constructor, see `VariantData::ctor_hir_id()`).
22782278
pub id: HirId,
22792279
/// Fields and constructor id of the variant.
2280-
pub data: VariantData,
2280+
pub data: VariantData<'hir>,
22812281
/// Explicit discriminant (e.g., `Foo = 1`).
22822282
pub disr_expr: Option<AnonConst>,
22832283
/// Span
@@ -2397,24 +2397,24 @@ impl StructField {
23972397

23982398
/// Fields and constructor IDs of enum variants and structs.
23992399
#[derive(RustcEncodable, RustcDecodable, Debug, HashStable)]
2400-
pub enum VariantData {
2400+
pub enum VariantData<'hir> {
24012401
/// A struct variant.
24022402
///
24032403
/// E.g., `Bar { .. }` as in `enum Foo { Bar { .. } }`.
2404-
Struct(HirVec<StructField>, /* recovered */ bool),
2404+
Struct(&'hir [StructField], /* recovered */ bool),
24052405
/// A tuple variant.
24062406
///
24072407
/// E.g., `Bar(..)` as in `enum Foo { Bar(..) }`.
2408-
Tuple(HirVec<StructField>, HirId),
2408+
Tuple(&'hir [StructField], HirId),
24092409
/// A unit variant.
24102410
///
24112411
/// E.g., `Bar = ..` as in `enum Foo { Bar = .. }`.
24122412
Unit(HirId),
24132413
}
24142414

2415-
impl VariantData {
2415+
impl VariantData<'hir> {
24162416
/// Return the fields of this variant.
2417-
pub fn fields(&self) -> &[StructField] {
2417+
pub fn fields(&self) -> &'hir [StructField] {
24182418
match *self {
24192419
VariantData::Struct(ref fields, ..) | VariantData::Tuple(ref fields, ..) => fields,
24202420
_ => &[],
@@ -2499,11 +2499,11 @@ pub enum ItemKind<'hir> {
24992499
/// An opaque `impl Trait` type alias, e.g., `type Foo = impl Bar;`.
25002500
OpaqueTy(OpaqueTy),
25012501
/// An enum definition, e.g., `enum Foo<A, B> {C<A>, D<B>}`.
2502-
Enum(EnumDef, Generics),
2502+
Enum(EnumDef<'hir>, Generics),
25032503
/// A struct definition, e.g., `struct Foo<A> {x: A}`.
2504-
Struct(VariantData, Generics),
2504+
Struct(VariantData<'hir>, Generics),
25052505
/// A union definition, e.g., `union Foo<A, B> {x: A, y: B}`.
2506-
Union(VariantData, Generics),
2506+
Union(VariantData<'hir>, Generics),
25072507
/// A trait definition.
25082508
Trait(IsAuto, Unsafety, Generics, GenericBounds, &'hir [TraitItemRef]),
25092509
/// A trait alias.
@@ -2791,7 +2791,7 @@ pub enum Node<'hir> {
27912791
ForeignItem(&'hir ForeignItem<'hir>),
27922792
TraitItem(&'hir TraitItem<'hir>),
27932793
ImplItem(&'hir ImplItem<'hir>),
2794-
Variant(&'hir Variant),
2794+
Variant(&'hir Variant<'hir>),
27952795
Field(&'hir StructField),
27962796
AnonConst(&'hir AnonConst),
27972797
Expr(&'hir Expr),
@@ -2808,7 +2808,7 @@ pub enum Node<'hir> {
28082808

28092809
/// `Ctor` refers to the constructor of an enum variant or struct. Only tuple or unit variants
28102810
/// with synthesized constructors.
2811-
Ctor(&'hir VariantData),
2811+
Ctor(&'hir VariantData<'hir>),
28122812

28132813
Lifetime(&'hir Lifetime),
28142814
GenericParam(&'hir GenericParam),

src/librustc/hir/print.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -708,7 +708,7 @@ impl<'a> State<'a> {
708708
}
709709

710710
pub fn print_enum_def(&mut self,
711-
enum_definition: &hir::EnumDef,
711+
enum_definition: &hir::EnumDef<'_>,
712712
generics: &hir::Generics,
713713
name: ast::Name,
714714
span: syntax_pos::Span,
@@ -723,7 +723,7 @@ impl<'a> State<'a> {
723723
}
724724

725725
pub fn print_variants(&mut self,
726-
variants: &[hir::Variant],
726+
variants: &[hir::Variant<'_>],
727727
span: syntax_pos::Span)
728728
{
729729
self.bopen();
@@ -770,7 +770,7 @@ impl<'a> State<'a> {
770770
}
771771

772772
pub fn print_struct(&mut self,
773-
struct_def: &hir::VariantData,
773+
struct_def: &hir::VariantData<'_>,
774774
generics: &hir::Generics,
775775
name: ast::Name,
776776
span: syntax_pos::Span,
@@ -819,7 +819,7 @@ impl<'a> State<'a> {
819819
}
820820
}
821821

822-
pub fn print_variant(&mut self, v: &hir::Variant) {
822+
pub fn print_variant(&mut self, v: &hir::Variant<'_>) {
823823
self.head("");
824824
let generics = hir::Generics::empty();
825825
self.print_struct(&v.data, &generics, v.ident.name, v.span, false);

src/librustc/lint/context.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -990,7 +990,7 @@ for LateContextAndPass<'a, 'tcx, T> {
990990
}
991991

992992
fn visit_variant_data(&mut self,
993-
s: &'tcx hir::VariantData,
993+
s: &'tcx hir::VariantData<'tcx>,
994994
_: ast::Name,
995995
_: &'tcx hir::Generics,
996996
_: hir::HirId,
@@ -1008,7 +1008,7 @@ for LateContextAndPass<'a, 'tcx, T> {
10081008
}
10091009

10101010
fn visit_variant(&mut self,
1011-
v: &'tcx hir::Variant,
1011+
v: &'tcx hir::Variant<'tcx>,
10121012
g: &'tcx hir::Generics,
10131013
item_id: hir::HirId) {
10141014
self.with_lint_attrs(v.id, &v.attrs, |cx| {

0 commit comments

Comments
 (0)