diff options
| author | varkor <github@varkor.com> | 2018-05-31 15:52:17 +0100 |
|---|---|---|
| committer | varkor <github@varkor.com> | 2018-06-20 12:23:08 +0100 |
| commit | 831b5c02df7235f2df804ee62e7cd2caf02bdad1 (patch) | |
| tree | d5aabc075550779d29248e10782c7aab5e044572 /src/libsyntax | |
| parent | 6015edf9af375385ca9eb2ebbb8794c782fa7244 (diff) | |
| download | rust-831b5c02df7235f2df804ee62e7cd2caf02bdad1.tar.gz rust-831b5c02df7235f2df804ee62e7cd2caf02bdad1.zip | |
Take advantage of the lifetime refactoring
Diffstat (limited to 'src/libsyntax')
| -rw-r--r-- | src/libsyntax/ast.rs | 2 | ||||
| -rw-r--r-- | src/libsyntax/fold.rs | 60 | ||||
| -rw-r--r-- | src/libsyntax/visit.rs | 11 |
3 files changed, 33 insertions, 40 deletions
diff --git a/src/libsyntax/ast.rs b/src/libsyntax/ast.rs index 98f786628f9..389afa96ea0 100644 --- a/src/libsyntax/ast.rs +++ b/src/libsyntax/ast.rs @@ -309,8 +309,8 @@ pub enum GenericParamKind { #[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)] pub struct GenericParam { - pub ident: Ident, pub id: NodeId, + pub ident: Ident, pub attrs: ThinVec<Attribute>, pub bounds: ParamBounds, diff --git a/src/libsyntax/fold.rs b/src/libsyntax/fold.rs index a0c69d83e84..804b1410b07 100644 --- a/src/libsyntax/fold.rs +++ b/src/libsyntax/fold.rs @@ -143,6 +143,10 @@ pub trait Folder : Sized { noop_fold_ty(t, self) } + fn fold_lifetime(&mut self, l: Lifetime) -> Lifetime { + noop_fold_lifetime(l, self) + } + fn fold_ty_binding(&mut self, t: TypeBinding) -> TypeBinding { noop_fold_ty_binding(t, self) } @@ -240,10 +244,6 @@ pub trait Folder : Sized { noop_fold_variant_data(vdata, self) } - fn fold_ty_param(&mut self, tp: TyParam) -> TyParam { - noop_fold_ty_param(tp, self) - } - fn fold_generic_param(&mut self, param: GenericParam) -> GenericParam { noop_fold_generic_param(param, self) } @@ -268,17 +268,16 @@ pub trait Folder : Sized { noop_fold_interpolated(nt, self) } - fn fold_opt_bounds(&mut self, b: Option<TyParamBounds>) -> Option<TyParamBounds> { + fn fold_opt_bounds(&mut self, b: Option<ParamBounds>) -> Option<ParamBounds> { noop_fold_opt_bounds(b, self) } - fn fold_bounds(&mut self, b: ParamBounds) - -> ParamBounds { + fn fold_bounds(&mut self, b: ParamBounds) -> ParamBounds { noop_fold_bounds(b, self) } - fn fold_ty_param_bound(&mut self, tpb: ParamBound) -> ParamBound { - noop_fold_ty_param_bound(tpb, self) + fn fold_param_bound(&mut self, tpb: ParamBound) -> ParamBound { + noop_fold_param_bound(tpb, self) } fn fold_mt(&mut self, mt: MutTy) -> MutTy { @@ -391,10 +390,10 @@ pub fn noop_fold_ty<T: Folder>(t: P<Ty>, fld: &mut T) -> P<Ty> { TyKind::Typeof(fld.fold_anon_const(expr)) } TyKind::TraitObject(bounds, syntax) => { - TyKind::TraitObject(bounds.move_map(|b| fld.fold_ty_param_bound(b)), syntax) + TyKind::TraitObject(bounds.move_map(|b| fld.fold_param_bound(b)), syntax) } TyKind::ImplTrait(bounds) => { - TyKind::ImplTrait(bounds.move_map(|b| fld.fold_ty_param_bound(b))) + TyKind::ImplTrait(bounds.move_map(|b| fld.fold_param_bound(b))) } TyKind::Mac(mac) => { TyKind::Mac(fld.fold_mac(mac)) @@ -677,32 +676,31 @@ pub fn noop_fold_fn_decl<T: Folder>(decl: P<FnDecl>, fld: &mut T) -> P<FnDecl> { }) } -pub fn noop_fold_ty_param_bound<T>(tpb: ParamBound, fld: &mut T) - -> ParamBound - where T: Folder { - match tpb { - TraitTyParamBound(ty, modifier) => TraitTyParamBound(fld.fold_poly_trait_ref(ty), modifier), +pub fn noop_fold_param_bound<T>(pb: ParamBound, fld: &mut T) -> ParamBound where T: Folder { + match pb { + TraitTyParamBound(ty, modifier) => { + TraitTyParamBound(fld.fold_poly_trait_ref(ty), modifier) + } Outlives(lifetime) => Outlives(noop_fold_lifetime(lifetime, fld)), } } pub fn noop_fold_generic_param<T: Folder>(param: GenericParam, fld: &mut T) -> GenericParam { - match param.kind { - GenericParamKind::Lifetime { bounds, lifetime } => { - let attrs: Vec<_> = param.attrs.into(); - GenericParamKind::Lifetime(LifetimeDef { - attrs: attrs.into_iter() + let attrs: Vec<_> = param.attrs.into(); + GenericParam { + ident: fld.fold_ident(param.ident), + id: fld.new_id(param.id), + attrs: attrs.into_iter() .flat_map(|x| fld.fold_attribute(x).into_iter()) .collect::<Vec<_>>() .into(), - lifetime: Lifetime { - id: fld.new_id(param.id), - ident: fld.fold_ident(param.ident), - }, - bounds: bounds.move_map(|l| noop_fold_lifetime(l, fld)), - }) + bounds: param.bounds.move_map(|l| noop_fold_param_bound(l, fld)), + kind: match param.kind { + GenericParamKind::Lifetime => GenericParamKind::Lifetime, + GenericParamKind::Type { default } => GenericParamKind::Type { + default: default.map(|ty| fld.fold_ty(ty)) + } } - GenericParamKind::Type { .. } => GenericParamKind::Type(fld.fold_ty_param(param)), } } @@ -760,7 +758,7 @@ pub fn noop_fold_where_predicate<T: Folder>( ast::WherePredicate::BoundPredicate(ast::WhereBoundPredicate { bound_generic_params: fld.fold_generic_params(bound_generic_params), bounded_ty: fld.fold_ty(bounded_ty), - bounds: bounds.move_map(|x| fld.fold_ty_param_bound(x)), + bounds: bounds.move_map(|x| fld.fold_param_bound(x)), span: fld.new_span(span) }) } @@ -770,7 +768,7 @@ pub fn noop_fold_where_predicate<T: Folder>( ast::WherePredicate::RegionPredicate(ast::WhereRegionPredicate { span: fld.new_span(span), lifetime: noop_fold_lifetime(lifetime, fld), - bounds: bounds.move_map(|bound| noop_fold_lifetime(bound, fld)) + bounds: bounds.move_map(|bound| noop_fold_param_bound(bound, fld)) }) } ast::WherePredicate::EqPredicate(ast::WhereEqPredicate{id, @@ -856,7 +854,7 @@ pub fn noop_fold_opt_bounds<T: Folder>(b: Option<ParamBounds>, folder: &mut T) fn noop_fold_bounds<T: Folder>(bounds: ParamBounds, folder: &mut T) -> ParamBounds { - bounds.move_map(|bound| folder.fold_ty_param_bound(bound)) + bounds.move_map(|bound| folder.fold_param_bound(bound)) } pub fn noop_fold_block<T: Folder>(b: P<Block>, folder: &mut T) -> P<Block> { diff --git a/src/libsyntax/visit.rs b/src/libsyntax/visit.rs index 1d535ab6bf0..f63b474f450 100644 --- a/src/libsyntax/visit.rs +++ b/src/libsyntax/visit.rs @@ -492,15 +492,10 @@ pub fn walk_param_bound<'a, V: Visitor<'a>>(visitor: &mut V, bound: &'a ParamBou pub fn walk_generic_param<'a, V: Visitor<'a>>(visitor: &mut V, param: &'a GenericParam) { visitor.visit_ident(param.ident); + walk_list!(visitor, visit_param_bound, ¶m.bounds); match param.kind { - GenericParamKind::Lifetime { ref bounds, ref lifetime } => { - walk_list!(visitor, visit_lifetime, bounds); - } - GenericParamKind::Type { ref bounds, ref default } => { - visitor.visit_ident(t.ident); - walk_list!(visitor, visit_ty_param_bound, bounds); - walk_list!(visitor, visit_ty, default); - } + GenericParamKind::Lifetime => {} + GenericParamKind::Type { ref default } => walk_list!(visitor, visit_ty, default), } walk_list!(visitor, visit_attribute, param.attrs.iter()); } |
