Skip to content

Commit 662c70a

Browse files
committed
Auto merge of #48149 - varkor:generics-generalisation, r=petrochenkov
The Great Generics Generalisation: HIR Edition This is essentially a followup to #45930, consolidating the use of separate lifetime and type vectors into single kinds vectors wherever possible. This is intended to provide more of the groundwork for const generics (#44580). r? @eddyb cc @yodaldevoid
2 parents f790780 + daf7e35 commit 662c70a

Some content is hidden

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

76 files changed

+2565
-2484
lines changed

src/librustc/hir/intravisit.rs

+38-46
Original file line numberDiff line numberDiff line change
@@ -314,8 +314,8 @@ pub trait Visitor<'v> : Sized {
314314
fn visit_trait_ref(&mut self, t: &'v TraitRef) {
315315
walk_trait_ref(self, t)
316316
}
317-
fn visit_ty_param_bound(&mut self, bounds: &'v TyParamBound) {
318-
walk_ty_param_bound(self, bounds)
317+
fn visit_param_bound(&mut self, bounds: &'v GenericBound) {
318+
walk_param_bound(self, bounds)
319319
}
320320
fn visit_poly_trait_ref(&mut self, t: &'v PolyTraitRef, m: TraitBoundModifier) {
321321
walk_poly_trait_ref(self, t, m)
@@ -344,6 +344,12 @@ pub trait Visitor<'v> : Sized {
344344
fn visit_label(&mut self, label: &'v Label) {
345345
walk_label(self, label)
346346
}
347+
fn visit_generic_arg(&mut self, generic_arg: &'v GenericArg) {
348+
match generic_arg {
349+
GenericArg::Lifetime(lt) => self.visit_lifetime(lt),
350+
GenericArg::Type(ty) => self.visit_ty(ty),
351+
}
352+
}
347353
fn visit_lifetime(&mut self, lifetime: &'v Lifetime) {
348354
walk_lifetime(self, lifetime)
349355
}
@@ -356,8 +362,8 @@ pub trait Visitor<'v> : Sized {
356362
fn visit_path_segment(&mut self, path_span: Span, path_segment: &'v PathSegment) {
357363
walk_path_segment(self, path_span, path_segment)
358364
}
359-
fn visit_path_parameters(&mut self, path_span: Span, path_parameters: &'v PathParameters) {
360-
walk_path_parameters(self, path_span, path_parameters)
365+
fn visit_generic_args(&mut self, path_span: Span, generic_args: &'v GenericArgs) {
366+
walk_generic_args(self, path_span, generic_args)
361367
}
362368
fn visit_assoc_type_binding(&mut self, type_binding: &'v TypeBinding) {
363369
walk_assoc_type_binding(self, type_binding)
@@ -427,10 +433,10 @@ pub fn walk_label<'v, V: Visitor<'v>>(visitor: &mut V, label: &'v Label) {
427433
pub fn walk_lifetime<'v, V: Visitor<'v>>(visitor: &mut V, lifetime: &'v Lifetime) {
428434
visitor.visit_id(lifetime.id);
429435
match lifetime.name {
430-
LifetimeName::Name(name) => {
436+
LifetimeName::Param(ParamName::Plain(name)) => {
431437
visitor.visit_name(lifetime.span, name);
432438
}
433-
LifetimeName::Fresh(_) |
439+
LifetimeName::Param(ParamName::Fresh(_)) |
434440
LifetimeName::Static |
435441
LifetimeName::Implicit |
436442
LifetimeName::Underscore => {}
@@ -505,7 +511,7 @@ pub fn walk_item<'v, V: Visitor<'v>>(visitor: &mut V, item: &'v Item) {
505511
ItemExistential(ExistTy {ref generics, ref bounds, impl_trait_fn}) => {
506512
visitor.visit_id(item.id);
507513
walk_generics(visitor, generics);
508-
walk_list!(visitor, visit_ty_param_bound, bounds);
514+
walk_list!(visitor, visit_param_bound, bounds);
509515
if let Some(impl_trait_fn) = impl_trait_fn {
510516
visitor.visit_def_mention(Def::Fn(impl_trait_fn))
511517
}
@@ -531,13 +537,13 @@ pub fn walk_item<'v, V: Visitor<'v>>(visitor: &mut V, item: &'v Item) {
531537
ItemTrait(.., ref generics, ref bounds, ref trait_item_refs) => {
532538
visitor.visit_id(item.id);
533539
visitor.visit_generics(generics);
534-
walk_list!(visitor, visit_ty_param_bound, bounds);
540+
walk_list!(visitor, visit_param_bound, bounds);
535541
walk_list!(visitor, visit_trait_item_ref, trait_item_refs);
536542
}
537543
ItemTraitAlias(ref generics, ref bounds) => {
538544
visitor.visit_id(item.id);
539545
visitor.visit_generics(generics);
540-
walk_list!(visitor, visit_ty_param_bound, bounds);
546+
walk_list!(visitor, visit_param_bound, bounds);
541547
}
542548
}
543549
walk_list!(visitor, visit_attribute, &item.attrs);
@@ -642,17 +648,16 @@ pub fn walk_path_segment<'v, V: Visitor<'v>>(visitor: &mut V,
642648
path_span: Span,
643649
segment: &'v PathSegment) {
644650
visitor.visit_name(path_span, segment.name);
645-
if let Some(ref parameters) = segment.parameters {
646-
visitor.visit_path_parameters(path_span, parameters);
651+
if let Some(ref args) = segment.args {
652+
visitor.visit_generic_args(path_span, args);
647653
}
648654
}
649655

650-
pub fn walk_path_parameters<'v, V: Visitor<'v>>(visitor: &mut V,
651-
_path_span: Span,
652-
path_parameters: &'v PathParameters) {
653-
walk_list!(visitor, visit_lifetime, &path_parameters.lifetimes);
654-
walk_list!(visitor, visit_ty, &path_parameters.types);
655-
walk_list!(visitor, visit_assoc_type_binding, &path_parameters.bindings);
656+
pub fn walk_generic_args<'v, V: Visitor<'v>>(visitor: &mut V,
657+
_path_span: Span,
658+
generic_args: &'v GenericArgs) {
659+
walk_list!(visitor, visit_generic_arg, &generic_args.args);
660+
walk_list!(visitor, visit_assoc_type_binding, &generic_args.bindings);
656661
}
657662

658663
pub fn walk_assoc_type_binding<'v, V: Visitor<'v>>(visitor: &mut V,
@@ -726,40 +731,27 @@ pub fn walk_foreign_item<'v, V: Visitor<'v>>(visitor: &mut V, foreign_item: &'v
726731
walk_list!(visitor, visit_attribute, &foreign_item.attrs);
727732
}
728733

729-
pub fn walk_ty_param_bound<'v, V: Visitor<'v>>(visitor: &mut V, bound: &'v TyParamBound) {
734+
pub fn walk_param_bound<'v, V: Visitor<'v>>(visitor: &mut V, bound: &'v GenericBound) {
730735
match *bound {
731-
TraitTyParamBound(ref typ, modifier) => {
736+
GenericBound::Trait(ref typ, modifier) => {
732737
visitor.visit_poly_trait_ref(typ, modifier);
733738
}
734-
RegionTyParamBound(ref lifetime) => {
735-
visitor.visit_lifetime(lifetime);
736-
}
739+
GenericBound::Outlives(ref lifetime) => visitor.visit_lifetime(lifetime),
737740
}
738741
}
739742

740743
pub fn walk_generic_param<'v, V: Visitor<'v>>(visitor: &mut V, param: &'v GenericParam) {
741-
match *param {
742-
GenericParam::Lifetime(ref ld) => {
743-
visitor.visit_id(ld.lifetime.id);
744-
match ld.lifetime.name {
745-
LifetimeName::Name(name) => {
746-
visitor.visit_name(ld.lifetime.span, name);
747-
}
748-
LifetimeName::Fresh(_) |
749-
LifetimeName::Static |
750-
LifetimeName::Implicit |
751-
LifetimeName::Underscore => {}
752-
}
753-
walk_list!(visitor, visit_lifetime, &ld.bounds);
754-
}
755-
GenericParam::Type(ref ty_param) => {
756-
visitor.visit_id(ty_param.id);
757-
visitor.visit_name(ty_param.span, ty_param.name);
758-
walk_list!(visitor, visit_ty_param_bound, &ty_param.bounds);
759-
walk_list!(visitor, visit_ty, &ty_param.default);
760-
walk_list!(visitor, visit_attribute, ty_param.attrs.iter());
761-
}
744+
visitor.visit_id(param.id);
745+
walk_list!(visitor, visit_attribute, &param.attrs);
746+
match param.name {
747+
ParamName::Plain(name) => visitor.visit_name(param.span, name),
748+
ParamName::Fresh(_) => {}
749+
}
750+
match param.kind {
751+
GenericParamKind::Lifetime { .. } => {}
752+
GenericParamKind::Type { ref default, .. } => walk_list!(visitor, visit_ty, default),
762753
}
754+
walk_list!(visitor, visit_param_bound, &param.bounds);
763755
}
764756

765757
pub fn walk_generics<'v, V: Visitor<'v>>(visitor: &mut V, generics: &'v Generics) {
@@ -778,14 +770,14 @@ pub fn walk_where_predicate<'v, V: Visitor<'v>>(
778770
ref bound_generic_params,
779771
..}) => {
780772
visitor.visit_ty(bounded_ty);
781-
walk_list!(visitor, visit_ty_param_bound, bounds);
773+
walk_list!(visitor, visit_param_bound, bounds);
782774
walk_list!(visitor, visit_generic_param, bound_generic_params);
783775
}
784776
&WherePredicate::RegionPredicate(WhereRegionPredicate{ref lifetime,
785777
ref bounds,
786778
..}) => {
787779
visitor.visit_lifetime(lifetime);
788-
walk_list!(visitor, visit_lifetime, bounds);
780+
walk_list!(visitor, visit_param_bound, bounds);
789781
}
790782
&WherePredicate::EqPredicate(WhereEqPredicate{id,
791783
ref lhs_ty,
@@ -862,7 +854,7 @@ pub fn walk_trait_item<'v, V: Visitor<'v>>(visitor: &mut V, trait_item: &'v Trai
862854
}
863855
TraitItemKind::Type(ref bounds, ref default) => {
864856
visitor.visit_id(trait_item.id);
865-
walk_list!(visitor, visit_ty_param_bound, bounds);
857+
walk_list!(visitor, visit_param_bound, bounds);
866858
walk_list!(visitor, visit_ty, default);
867859
}
868860
}

0 commit comments

Comments
 (0)