gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 1 | // Adapted from libsyntax. |
| 2 | |
| 3 | //! A Folder represents an AST->AST fold; it accepts an AST piece, |
David Tolnay | 70925b7 | 2017-01-29 11:20:54 -0800 | [diff] [blame] | 4 | //! and returns a piece of the same type. |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 5 | |
| 6 | use super::*; |
David Tolnay | 02a8d47 | 2017-02-19 12:59:44 -0800 | [diff] [blame] | 7 | #[cfg(not(feature = "full"))] |
David Tolnay | 7a1cda0 | 2017-01-29 11:50:31 -0800 | [diff] [blame] | 8 | use constant; |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 9 | |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 10 | use delimited::{Delimited, Element}; |
| 11 | |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 12 | /// AST->AST fold. |
| 13 | /// |
| 14 | /// Each method of the Folder trait is a hook to be potentially overridden. Each |
| 15 | /// method's default implementation recursively visits the substructure of the |
| 16 | /// input via the `noop_fold` methods, which perform an "identity fold", that |
| 17 | /// is, they return the same structure that they are given (for example the |
| 18 | /// `fold_crate` method by default calls `fold::noop_fold_crate`). |
| 19 | /// |
| 20 | /// If you want to ensure that your code handles every variant explicitly, you |
| 21 | /// need to override each method and monitor future changes to `Folder` in case |
| 22 | /// a new method with a new default implementation gets introduced. |
David Tolnay | 7848825 | 2017-01-29 11:22:59 -0800 | [diff] [blame] | 23 | pub trait Folder { |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 24 | // Any additions to this trait should happen in form |
| 25 | // of a call to a public `noop_*` function that only calls |
| 26 | // out to the folder again, not other `noop_*` functions. |
| 27 | // |
| 28 | // This is a necessary API workaround to the problem of not |
| 29 | // being able to call out to the super default method |
| 30 | // in an overridden default method. |
| 31 | |
| 32 | fn fold_ident(&mut self, _ident: Ident) -> Ident { |
| 33 | noop_fold_ident(self, _ident) |
| 34 | } |
| 35 | fn fold_derive_input(&mut self, derive_input: DeriveInput) -> DeriveInput { |
| 36 | noop_fold_derive_input(self, derive_input) |
| 37 | } |
| 38 | fn fold_ty(&mut self, ty: Ty) -> Ty { |
| 39 | noop_fold_ty(self, ty) |
| 40 | } |
| 41 | fn fold_generics(&mut self, generics: Generics) -> Generics { |
| 42 | noop_fold_generics(self, generics) |
| 43 | } |
| 44 | fn fold_ty_param_bound(&mut self, bound: TyParamBound) -> TyParamBound { |
| 45 | noop_fold_ty_param_bound(self, bound) |
| 46 | } |
| 47 | fn fold_poly_trait_ref(&mut self, trait_ref: PolyTraitRef) -> PolyTraitRef { |
| 48 | noop_fold_poly_trait_ref(self, trait_ref) |
| 49 | } |
| 50 | fn fold_variant_data(&mut self, data: VariantData) -> VariantData { |
| 51 | noop_fold_variant_data(self, data) |
| 52 | } |
| 53 | fn fold_field(&mut self, field: Field) -> Field { |
| 54 | noop_fold_field(self, field) |
| 55 | } |
| 56 | fn fold_variant(&mut self, variant: Variant) -> Variant { |
| 57 | noop_fold_variant(self, variant) |
| 58 | } |
| 59 | fn fold_lifetime(&mut self, _lifetime: Lifetime) -> Lifetime { |
| 60 | noop_fold_lifetime(self, _lifetime) |
| 61 | } |
| 62 | fn fold_lifetime_def(&mut self, lifetime: LifetimeDef) -> LifetimeDef { |
| 63 | noop_fold_lifetime_def(self, lifetime) |
| 64 | } |
| 65 | fn fold_path(&mut self, path: Path) -> Path { |
| 66 | noop_fold_path(self, path) |
| 67 | } |
| 68 | fn fold_path_segment(&mut self, path_segment: PathSegment) -> PathSegment { |
| 69 | noop_fold_path_segment(self, path_segment) |
| 70 | } |
| 71 | fn fold_path_parameters(&mut self, path_parameters: PathParameters) -> PathParameters { |
| 72 | noop_fold_path_parameters(self, path_parameters) |
| 73 | } |
| 74 | fn fold_assoc_type_binding(&mut self, type_binding: TypeBinding) -> TypeBinding { |
| 75 | noop_fold_assoc_type_binding(self, type_binding) |
| 76 | } |
| 77 | fn fold_attribute(&mut self, _attr: Attribute) -> Attribute { |
| 78 | noop_fold_attribute(self, _attr) |
| 79 | } |
| 80 | fn fold_fn_ret_ty(&mut self, ret_ty: FunctionRetTy) -> FunctionRetTy { |
| 81 | noop_fold_fn_ret_ty(self, ret_ty) |
| 82 | } |
| 83 | fn fold_const_expr(&mut self, expr: ConstExpr) -> ConstExpr { |
| 84 | noop_fold_const_expr(self, expr) |
| 85 | } |
| 86 | fn fold_lit(&mut self, _lit: Lit) -> Lit { |
| 87 | noop_fold_lit(self, _lit) |
| 88 | } |
| 89 | |
| 90 | fn fold_mac(&mut self, mac: Mac) -> Mac { |
| 91 | noop_fold_mac(self, mac) |
| 92 | } |
| 93 | |
| 94 | #[cfg(feature = "full")] |
| 95 | fn fold_crate(&mut self, _crate: Crate) -> Crate { |
| 96 | noop_fold_crate(self, _crate) |
| 97 | } |
| 98 | #[cfg(feature = "full")] |
| 99 | fn fold_item(&mut self, item: Item) -> Item { |
| 100 | noop_fold_item(self, item) |
| 101 | } |
| 102 | #[cfg(feature = "full")] |
| 103 | fn fold_expr(&mut self, expr: Expr) -> Expr { |
| 104 | noop_fold_expr(self, expr) |
| 105 | } |
| 106 | #[cfg(feature = "full")] |
| 107 | fn fold_foreign_item(&mut self, foreign_item: ForeignItem) -> ForeignItem { |
| 108 | noop_fold_foreign_item(self, foreign_item) |
| 109 | } |
| 110 | #[cfg(feature = "full")] |
| 111 | fn fold_pat(&mut self, pat: Pat) -> Pat { |
| 112 | noop_fold_pat(self, pat) |
| 113 | } |
| 114 | #[cfg(feature = "full")] |
| 115 | fn fold_fn_decl(&mut self, fn_decl: FnDecl) -> FnDecl { |
| 116 | noop_fold_fn_decl(self, fn_decl) |
| 117 | } |
| 118 | #[cfg(feature = "full")] |
| 119 | fn fold_trait_item(&mut self, trait_item: TraitItem) -> TraitItem { |
| 120 | noop_fold_trait_item(self, trait_item) |
| 121 | } |
| 122 | #[cfg(feature = "full")] |
| 123 | fn fold_impl_item(&mut self, impl_item: ImplItem) -> ImplItem { |
| 124 | noop_fold_impl_item(self, impl_item) |
| 125 | } |
| 126 | #[cfg(feature = "full")] |
| 127 | fn fold_method_sig(&mut self, method_sig: MethodSig) -> MethodSig { |
| 128 | noop_fold_method_sig(self, method_sig) |
| 129 | } |
| 130 | #[cfg(feature = "full")] |
| 131 | fn fold_stmt(&mut self, stmt: Stmt) -> Stmt { |
| 132 | noop_fold_stmt(self, stmt) |
| 133 | } |
| 134 | #[cfg(feature = "full")] |
| 135 | fn fold_block(&mut self, block: Block) -> Block { |
| 136 | noop_fold_block(self, block) |
| 137 | } |
| 138 | #[cfg(feature = "full")] |
| 139 | fn fold_local(&mut self, local: Local) -> Local { |
| 140 | noop_fold_local(self, local) |
| 141 | } |
| 142 | #[cfg(feature = "full")] |
| 143 | fn fold_view_path(&mut self, view_path: ViewPath) -> ViewPath { |
| 144 | noop_fold_view_path(self, view_path) |
| 145 | } |
| 146 | } |
| 147 | |
| 148 | trait LiftOnce<T, U> { |
| 149 | type Output; |
| 150 | fn lift<F>(self, f: F) -> Self::Output where F: FnOnce(T) -> U; |
| 151 | } |
| 152 | |
| 153 | impl<T, U> LiftOnce<T, U> for Box<T> { |
| 154 | type Output = Box<U>; |
David Tolnay | 02a8d47 | 2017-02-19 12:59:44 -0800 | [diff] [blame] | 155 | // Clippy false positive |
| 156 | // https://github.com/Manishearth/rust-clippy/issues/1478 |
| 157 | #[cfg_attr(feature = "cargo-clippy", allow(boxed_local))] |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 158 | fn lift<F>(self, f: F) -> Box<U> |
| 159 | where F: FnOnce(T) -> U |
| 160 | { |
| 161 | Box::new(f(*self)) |
| 162 | } |
| 163 | } |
| 164 | |
| 165 | trait LiftMut<T, U> { |
| 166 | type Output; |
| 167 | fn lift<F>(self, f: F) -> Self::Output where F: FnMut(T) -> U; |
| 168 | } |
| 169 | |
| 170 | impl<T, U> LiftMut<T, U> for Vec<T> { |
| 171 | type Output = Vec<U>; |
| 172 | fn lift<F>(self, f: F) -> Vec<U> |
| 173 | where F: FnMut(T) -> U |
| 174 | { |
| 175 | self.into_iter().map(f).collect() |
| 176 | } |
| 177 | } |
| 178 | |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 179 | impl<T, D, U> LiftMut<T, U> for Delimited<T, D> { |
| 180 | type Output = Delimited<U, D>; |
| 181 | fn lift<F>(self, mut f: F) -> Self::Output |
| 182 | where F: FnMut(T) -> U |
| 183 | { |
| 184 | self.into_iter().map(|e| { |
| 185 | match e { |
| 186 | Element::Delimited(t, d) => Element::Delimited(f(t), d), |
| 187 | Element::End(t) => Element::End(f(t)) |
| 188 | } |
| 189 | }).collect() |
| 190 | } |
| 191 | } |
| 192 | |
David Tolnay | 7848825 | 2017-01-29 11:22:59 -0800 | [diff] [blame] | 193 | pub fn noop_fold_ident<F: ?Sized + Folder>(_: &mut F, _ident: Ident) -> Ident { |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 194 | _ident |
| 195 | } |
| 196 | |
David Tolnay | 7848825 | 2017-01-29 11:22:59 -0800 | [diff] [blame] | 197 | pub fn noop_fold_derive_input<F: ?Sized + Folder>(folder: &mut F, |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 198 | DeriveInput{ ident, |
| 199 | vis, |
| 200 | attrs, |
| 201 | generics, |
David Tolnay | 05120ef | 2017-03-12 18:29:26 -0700 | [diff] [blame] | 202 | body }: DeriveInput) -> DeriveInput{ |
David Tolnay | 7a1cda0 | 2017-01-29 11:50:31 -0800 | [diff] [blame] | 203 | use Body::*; |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 204 | DeriveInput { |
| 205 | ident: folder.fold_ident(ident), |
| 206 | vis: noop_fold_vis(folder, vis), |
| 207 | attrs: attrs.lift(|a| folder.fold_attribute(a)), |
| 208 | generics: folder.fold_generics(generics), |
| 209 | body: match body { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 210 | Enum(data) => { |
| 211 | Enum(BodyEnum { |
| 212 | variants: data.variants.lift(move |v| folder.fold_variant(v)), |
| 213 | ..data |
| 214 | }) |
| 215 | } |
| 216 | Struct(data) => { |
| 217 | Struct(BodyStruct { |
| 218 | data: folder.fold_variant_data(data.data), |
| 219 | ..data |
| 220 | }) |
| 221 | } |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 222 | }, |
| 223 | } |
| 224 | } |
| 225 | |
David Tolnay | 7848825 | 2017-01-29 11:22:59 -0800 | [diff] [blame] | 226 | pub fn noop_fold_ty<F: ?Sized + Folder>(folder: &mut F, ty: Ty) -> Ty { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 227 | use ty::*; |
David Tolnay | 7a1cda0 | 2017-01-29 11:50:31 -0800 | [diff] [blame] | 228 | use Ty::*; |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 229 | |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 230 | match ty { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 231 | Slice(t) => { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 232 | Slice(TySlice { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 233 | ty: t.ty.lift(|v| folder.fold_ty(v)), |
| 234 | ..t |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 235 | }) |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 236 | } |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 237 | Paren(t) => { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 238 | Paren(TyParen { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 239 | ty: t.ty.lift(|v| folder.fold_ty(v)), |
| 240 | ..t |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 241 | }) |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 242 | } |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 243 | Ptr(t) => { |
| 244 | let ty = *t.ty; |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 245 | let MutTy { ty, mutability } = ty; |
| 246 | Ptr(TyPtr { |
| 247 | ty: Box::new(MutTy { |
| 248 | ty: folder.fold_ty(ty), |
| 249 | mutability: mutability, |
| 250 | }), |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 251 | ..t |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 252 | }) |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 253 | } |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 254 | Rptr(t) => { |
| 255 | let ty = *t.ty; |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 256 | let MutTy { ty, mutability } = ty; |
| 257 | Rptr(TyRptr { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 258 | lifetime: t.lifetime.map(|l| folder.fold_lifetime(l)), |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 259 | ty: Box::new(MutTy { |
| 260 | ty: folder.fold_ty(ty), |
| 261 | mutability: mutability, |
| 262 | }), |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 263 | ..t |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 264 | }) |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 265 | } |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 266 | Never(t) => Never(t), |
| 267 | Infer(t) => Infer(t), |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 268 | Tup(t) => { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 269 | Tup(TyTup { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 270 | tys: t.tys.lift(|x| folder.fold_ty(x)), |
| 271 | ..t |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 272 | }) |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 273 | } |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 274 | BareFn(t) => { |
| 275 | let ty = *t.ty; |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 276 | BareFn(TyBareFn { |
| 277 | ty: Box::new(BareFnTy { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 278 | lifetimes: ty.lifetimes.map(|l| { |
| 279 | noop_fold_bound_lifetimes(folder, l) |
| 280 | }), |
| 281 | inputs: ty.inputs.lift(|v| { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 282 | BareFnArg { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 283 | name: v.name.map(|n| (folder.fold_ident(n.0), n.1)), |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 284 | ty: folder.fold_ty(v.ty), |
| 285 | } |
| 286 | }), |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 287 | output: folder.fold_fn_ret_ty(ty.output), |
| 288 | ..ty |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 289 | }), |
| 290 | }) |
| 291 | } |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 292 | Path(t) => { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 293 | Path(TyPath { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 294 | qself: t.qself.map(|v| noop_fold_qself(folder, v)), |
| 295 | path: folder.fold_path(t.path), |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 296 | }) |
| 297 | } |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 298 | Array(t) => { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 299 | Array(TyArray { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 300 | ty: t.ty.lift(|v| folder.fold_ty(v)), |
| 301 | amt: folder.fold_const_expr(t.amt), |
| 302 | ..t |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 303 | }) |
| 304 | } |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 305 | TraitObject(t) => { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 306 | TraitObject(TyTraitObject { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 307 | bounds: t.bounds.lift(|v| folder.fold_ty_param_bound(v)), |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 308 | }) |
| 309 | } |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 310 | ImplTrait(t) => { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 311 | ImplTrait(TyImplTrait { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 312 | bounds: t.bounds.lift(|v| folder.fold_ty_param_bound(v)), |
| 313 | ..t |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 314 | }) |
| 315 | } |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 316 | Mac(mac) => Mac(folder.fold_mac(mac)), |
| 317 | } |
| 318 | } |
| 319 | |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 320 | #[cfg_attr(feature = "cargo-clippy", allow(needless_pass_by_value))] // clippy lies |
| 321 | fn noop_fold_qself<F: ?Sized + Folder>(folder: &mut F, qself: QSelf) -> QSelf { |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 322 | QSelf { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 323 | ty: Box::new(folder.fold_ty(*(qself.ty))), |
| 324 | ..qself |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 325 | } |
| 326 | } |
| 327 | |
David Tolnay | 7848825 | 2017-01-29 11:22:59 -0800 | [diff] [blame] | 328 | pub fn noop_fold_generics<F: ?Sized + Folder>(folder: &mut F, |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 329 | generics: Generics) |
David Tolnay | 05120ef | 2017-03-12 18:29:26 -0700 | [diff] [blame] | 330 | -> Generics{ |
David Tolnay | 7a1cda0 | 2017-01-29 11:50:31 -0800 | [diff] [blame] | 331 | use WherePredicate::*; |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 332 | Generics { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 333 | lifetimes: generics.lifetimes.lift(|l| folder.fold_lifetime_def(l)), |
| 334 | ty_params: generics.ty_params.lift(|ty| { |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 335 | TyParam { |
| 336 | attrs: ty.attrs.lift(|a| folder.fold_attribute(a)), |
| 337 | ident: folder.fold_ident(ty.ident), |
David Tolnay | 05120ef | 2017-03-12 18:29:26 -0700 | [diff] [blame] | 338 | bounds: ty.bounds.lift(|ty_pb| folder.fold_ty_param_bound(ty_pb)), |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 339 | default: ty.default.map(|v| folder.fold_ty(v)), |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 340 | ..ty |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 341 | } |
| 342 | }), |
| 343 | where_clause: WhereClause { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 344 | predicates: generics.where_clause.predicates.lift(|p| { |
| 345 | match p { |
| 346 | BoundPredicate(bound_predicate) => { |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 347 | BoundPredicate(WhereBoundPredicate { |
| 348 | bound_lifetimes: bound_predicate.bound_lifetimes |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 349 | .map(|l| noop_fold_bound_lifetimes(folder, l)), |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 350 | bounded_ty: folder.fold_ty(bound_predicate.bounded_ty), |
| 351 | bounds: bound_predicate.bounds |
| 352 | .lift(|ty_pb| folder.fold_ty_param_bound(ty_pb)), |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 353 | ..bound_predicate |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 354 | }) |
| 355 | } |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 356 | RegionPredicate(region_predicate) => { |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 357 | RegionPredicate(WhereRegionPredicate { |
| 358 | lifetime: folder.fold_lifetime(region_predicate.lifetime), |
| 359 | bounds: region_predicate.bounds |
| 360 | .lift(|b| folder.fold_lifetime(b)), |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 361 | ..region_predicate |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 362 | }) |
| 363 | } |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 364 | EqPredicate(eq_predicate) => { |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 365 | EqPredicate(WhereEqPredicate { |
| 366 | lhs_ty: folder.fold_ty(eq_predicate.lhs_ty), |
| 367 | rhs_ty: folder.fold_ty(eq_predicate.rhs_ty), |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 368 | ..eq_predicate |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 369 | }) |
| 370 | } |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 371 | } |
| 372 | }), |
| 373 | ..generics.where_clause |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 374 | }, |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 375 | ..generics |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 376 | } |
| 377 | } |
| 378 | |
David Tolnay | 660b03e | 2017-01-29 11:26:30 -0800 | [diff] [blame] | 379 | pub fn noop_fold_ty_param_bound<F: ?Sized + Folder>(folder: &mut F, |
| 380 | bound: TyParamBound) |
| 381 | -> TyParamBound { |
David Tolnay | 7a1cda0 | 2017-01-29 11:50:31 -0800 | [diff] [blame] | 382 | use TyParamBound::*; |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 383 | match bound { |
| 384 | Trait(ty, modifier) => Trait(folder.fold_poly_trait_ref(ty), modifier), |
| 385 | Region(lifetime) => Region(folder.fold_lifetime(lifetime)), |
| 386 | } |
| 387 | } |
| 388 | |
David Tolnay | 660b03e | 2017-01-29 11:26:30 -0800 | [diff] [blame] | 389 | pub fn noop_fold_poly_trait_ref<F: ?Sized + Folder>(folder: &mut F, |
| 390 | trait_ref: PolyTraitRef) |
| 391 | -> PolyTraitRef { |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 392 | PolyTraitRef { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 393 | bound_lifetimes: trait_ref.bound_lifetimes.map(|bl| { |
| 394 | noop_fold_bound_lifetimes(folder, bl) |
| 395 | }), |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 396 | trait_ref: folder.fold_path(trait_ref.trait_ref), |
| 397 | } |
| 398 | } |
| 399 | |
David Tolnay | 7848825 | 2017-01-29 11:22:59 -0800 | [diff] [blame] | 400 | pub fn noop_fold_variant_data<F: ?Sized + Folder>(folder: &mut F, |
David Tolnay | 660b03e | 2017-01-29 11:26:30 -0800 | [diff] [blame] | 401 | data: VariantData) |
| 402 | -> VariantData { |
David Tolnay | 7a1cda0 | 2017-01-29 11:50:31 -0800 | [diff] [blame] | 403 | use VariantData::*; |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 404 | match data { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 405 | Struct(fields, t) => Struct(fields.lift(|f| folder.fold_field(f)), t), |
| 406 | Tuple(fields, t) => Tuple(fields.lift(|f| folder.fold_field(f)), t), |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 407 | Unit => Unit, |
| 408 | } |
| 409 | } |
| 410 | |
David Tolnay | 7848825 | 2017-01-29 11:22:59 -0800 | [diff] [blame] | 411 | pub fn noop_fold_field<F: ?Sized + Folder>(folder: &mut F, field: Field) -> Field { |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 412 | Field { |
| 413 | ident: field.ident.map(|i| folder.fold_ident(i)), |
| 414 | vis: noop_fold_vis(folder, field.vis), |
| 415 | attrs: field.attrs.lift(|a| folder.fold_attribute(a)), |
| 416 | ty: folder.fold_ty(field.ty), |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 417 | ..field |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 418 | } |
| 419 | } |
| 420 | |
David Tolnay | 7848825 | 2017-01-29 11:22:59 -0800 | [diff] [blame] | 421 | pub fn noop_fold_variant<F: ?Sized + Folder>(folder: &mut F, |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 422 | variant: Variant) |
| 423 | -> Variant |
| 424 | { |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 425 | Variant { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 426 | ident: folder.fold_ident(variant.ident), |
| 427 | attrs: variant.attrs.lift(|v| folder.fold_attribute(v)), |
| 428 | data: folder.fold_variant_data(variant.data), |
| 429 | discriminant: variant.discriminant.map(|ce| folder.fold_const_expr(ce)), |
| 430 | ..variant |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 431 | } |
| 432 | } |
| 433 | |
David Tolnay | 7848825 | 2017-01-29 11:22:59 -0800 | [diff] [blame] | 434 | pub fn noop_fold_lifetime<F: ?Sized + Folder>(folder: &mut F, _lifetime: Lifetime) -> Lifetime { |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 435 | Lifetime { ident: folder.fold_ident(_lifetime.ident) } |
| 436 | } |
| 437 | |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 438 | pub fn noop_fold_bound_lifetimes<F: ?Sized + Folder>(folder: &mut F, |
| 439 | b: BoundLifetimes) |
| 440 | -> BoundLifetimes |
| 441 | { |
| 442 | BoundLifetimes { |
| 443 | lifetimes: b.lifetimes.lift(|l| folder.fold_lifetime_def(l)), |
| 444 | ..b |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 445 | } |
| 446 | } |
| 447 | |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 448 | pub fn noop_fold_lifetime_def<F: ?Sized + Folder>(folder: &mut F, |
| 449 | def: LifetimeDef) |
| 450 | -> LifetimeDef |
| 451 | { |
| 452 | LifetimeDef { |
| 453 | attrs: def.attrs.lift(|x| folder.fold_attribute(x)), |
| 454 | lifetime: folder.fold_lifetime(def.lifetime), |
| 455 | bounds: def.bounds.lift(|l| folder.fold_lifetime(l)), |
| 456 | ..def |
| 457 | } |
| 458 | } |
| 459 | |
| 460 | pub fn noop_fold_path<F: ?Sized + Folder>(folder: &mut F, path: Path) -> Path { |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 461 | Path { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 462 | segments: path.segments.lift(|s| folder.fold_path_segment(s)), |
| 463 | ..path |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 464 | } |
| 465 | } |
| 466 | |
David Tolnay | 7848825 | 2017-01-29 11:22:59 -0800 | [diff] [blame] | 467 | pub fn noop_fold_path_segment<F: ?Sized + Folder>(folder: &mut F, |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 468 | seg: PathSegment) |
David Tolnay | 660b03e | 2017-01-29 11:26:30 -0800 | [diff] [blame] | 469 | -> PathSegment { |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 470 | PathSegment { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 471 | ident: folder.fold_ident(seg.ident), |
| 472 | parameters: folder.fold_path_parameters(seg.parameters), |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 473 | } |
| 474 | } |
| 475 | |
David Tolnay | 7848825 | 2017-01-29 11:22:59 -0800 | [diff] [blame] | 476 | pub fn noop_fold_path_parameters<F: ?Sized + Folder>(folder: &mut F, |
David Tolnay | 660b03e | 2017-01-29 11:26:30 -0800 | [diff] [blame] | 477 | path_parameters: PathParameters) |
| 478 | -> PathParameters { |
David Tolnay | 7a1cda0 | 2017-01-29 11:50:31 -0800 | [diff] [blame] | 479 | use PathParameters::*; |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 480 | match path_parameters { |
| 481 | AngleBracketed(d) => { |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 482 | AngleBracketed(AngleBracketedParameterData { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 483 | lifetimes: d.lifetimes.lift(|l| folder.fold_lifetime(l)), |
| 484 | types: d.types.lift(|ty| folder.fold_ty(ty)), |
| 485 | bindings: d.bindings.lift(|tb| folder.fold_assoc_type_binding(tb)), |
| 486 | ..d |
| 487 | }) |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 488 | } |
| 489 | Parenthesized(d) => { |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 490 | Parenthesized(ParenthesizedParameterData { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 491 | inputs: d.inputs.lift(|i| folder.fold_ty(i)), |
| 492 | output: folder.fold_fn_ret_ty(d.output), |
| 493 | ..d |
| 494 | }) |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 495 | } |
| 496 | } |
| 497 | } |
| 498 | |
David Tolnay | 7848825 | 2017-01-29 11:22:59 -0800 | [diff] [blame] | 499 | pub fn noop_fold_assoc_type_binding<F: ?Sized + Folder>(folder: &mut F, |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 500 | binding: TypeBinding) |
| 501 | -> TypeBinding |
| 502 | { |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 503 | TypeBinding { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 504 | ident: folder.fold_ident(binding.ident), |
| 505 | ty: folder.fold_ty(binding.ty), |
| 506 | ..binding |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 507 | } |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 508 | } |
| 509 | |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 510 | pub fn noop_fold_attribute<F: ?Sized + Folder>(_: &mut F, attr: Attribute) -> Attribute { |
| 511 | attr |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 512 | } |
| 513 | |
David Tolnay | 660b03e | 2017-01-29 11:26:30 -0800 | [diff] [blame] | 514 | pub fn noop_fold_fn_ret_ty<F: ?Sized + Folder>(folder: &mut F, |
| 515 | ret_ty: FunctionRetTy) |
| 516 | -> FunctionRetTy { |
David Tolnay | 7a1cda0 | 2017-01-29 11:50:31 -0800 | [diff] [blame] | 517 | use FunctionRetTy::*; |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 518 | match ret_ty { |
| 519 | Default => Default, |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 520 | Ty(ty, t) => Ty(folder.fold_ty(ty), t), |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 521 | } |
| 522 | } |
| 523 | |
David Tolnay | 7848825 | 2017-01-29 11:22:59 -0800 | [diff] [blame] | 524 | pub fn noop_fold_const_expr<F: ?Sized + Folder>(folder: &mut F, expr: ConstExpr) -> ConstExpr { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 525 | use constant::*; |
| 526 | use constant::ConstExpr::*; |
| 527 | |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 528 | match expr { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 529 | Call(c) => { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 530 | Call(ConstCall { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 531 | func: c.func.lift(|e| folder.fold_const_expr(e)), |
| 532 | args: c.args.lift(|v| folder.fold_const_expr(v)), |
| 533 | ..c |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 534 | }) |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 535 | } |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 536 | Binary(c) => { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 537 | Binary(ConstBinary { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 538 | left: c.left.lift(|e| folder.fold_const_expr(e)), |
| 539 | right: c.right.lift(|e| folder.fold_const_expr(e)), |
| 540 | ..c |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 541 | }) |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 542 | } |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 543 | Unary(c) => { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 544 | Unary(ConstUnary { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 545 | expr: c.expr.lift(|e| folder.fold_const_expr(e)), |
| 546 | ..c |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 547 | }) |
| 548 | } |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 549 | Lit(l) => Lit(folder.fold_lit(l)), |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 550 | Cast(c) => { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 551 | Cast(ConstCast { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 552 | expr: c.expr.lift(|e| folder.fold_const_expr(e)), |
| 553 | ty: c.ty.lift(|v| folder.fold_ty(v)), |
| 554 | ..c |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 555 | }) |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 556 | } |
| 557 | Path(p) => Path(folder.fold_path(p)), |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 558 | Index(c) => { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 559 | Index(ConstIndex { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 560 | expr: c.expr.lift(|e| folder.fold_const_expr(e)), |
| 561 | index: c.index.lift(|e| folder.fold_const_expr(e)), |
| 562 | ..c |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 563 | }) |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 564 | } |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 565 | Paren(c) => { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 566 | Paren(ConstParen { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 567 | expr: c.expr.lift(|e| folder.fold_const_expr(e)), |
| 568 | ..c |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 569 | }) |
| 570 | } |
David Tolnay | 4a25fc2 | 2017-01-29 11:32:20 -0800 | [diff] [blame] | 571 | Other(e) => Other(noop_fold_other_const_expr(folder, e)), |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 572 | } |
| 573 | } |
David Tolnay | 4a25fc2 | 2017-01-29 11:32:20 -0800 | [diff] [blame] | 574 | |
| 575 | #[cfg(feature = "full")] |
| 576 | fn noop_fold_other_const_expr<F: ?Sized + Folder>(folder: &mut F, e: Expr) -> Expr { |
| 577 | folder.fold_expr(e) |
| 578 | } |
| 579 | |
| 580 | #[cfg(not(feature = "full"))] |
David Tolnay | 05120ef | 2017-03-12 18:29:26 -0700 | [diff] [blame] | 581 | fn noop_fold_other_const_expr<F: ?Sized + Folder>(_: &mut F, |
| 582 | e: constant::Other) |
| 583 | -> constant::Other { |
David Tolnay | 4a25fc2 | 2017-01-29 11:32:20 -0800 | [diff] [blame] | 584 | e |
| 585 | } |
| 586 | |
David Tolnay | 7848825 | 2017-01-29 11:22:59 -0800 | [diff] [blame] | 587 | pub fn noop_fold_lit<F: ?Sized + Folder>(_: &mut F, _lit: Lit) -> Lit { |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 588 | _lit |
| 589 | } |
| 590 | |
David Tolnay | 7848825 | 2017-01-29 11:22:59 -0800 | [diff] [blame] | 591 | pub fn noop_fold_tt<F: ?Sized + Folder>(folder: &mut F, tt: TokenTree) -> TokenTree { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 592 | use proc_macro2::{TokenKind, TokenTree as TokenTree2}; |
| 593 | match tt.0.kind { |
| 594 | TokenKind::Word(sym) => { |
| 595 | let sym = folder.fold_ident(Ident::new(sym, Span(tt.0.span))); |
| 596 | TokenTree(TokenTree2 { |
| 597 | span: sym.span.0, |
| 598 | kind: TokenKind::Word(sym.sym), |
| 599 | }) |
David Tolnay | 660b03e | 2017-01-29 11:26:30 -0800 | [diff] [blame] | 600 | } |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 601 | TokenKind::Op(..) => tt, |
| 602 | TokenKind::Literal(lit) => { |
| 603 | folder.fold_lit(Lit { |
| 604 | value: LitKind::Other(lit), |
| 605 | span: Span(tt.0.span), |
| 606 | }).into_token_tree() |
| 607 | } |
| 608 | TokenKind::Sequence(delim, stream) => { |
| 609 | let stream = stream.into_iter().map(|tt| { |
| 610 | noop_fold_tt(folder, TokenTree(tt)).0 |
| 611 | }).collect(); |
| 612 | TokenTree(TokenTree2 { |
| 613 | span: tt.0.span, |
| 614 | kind: TokenKind::Sequence(delim, stream), |
| 615 | }) |
David Tolnay | 660b03e | 2017-01-29 11:26:30 -0800 | [diff] [blame] | 616 | } |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 617 | } |
| 618 | } |
| 619 | |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 620 | pub fn noop_fold_mac<F: ?Sized + Folder>(folder: &mut F, mac: Mac) -> Mac { |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 621 | Mac { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 622 | path: folder.fold_path(mac.path), |
| 623 | tokens: mac.tokens.lift(|tt| noop_fold_tt(folder, tt)), |
| 624 | ..mac |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 625 | } |
| 626 | } |
| 627 | |
| 628 | #[cfg(feature = "full")] |
David Tolnay | 660b03e | 2017-01-29 11:26:30 -0800 | [diff] [blame] | 629 | pub fn noop_fold_crate<F: ?Sized + Folder>(folder: &mut F, |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 630 | krate: Crate) |
David Tolnay | 660b03e | 2017-01-29 11:26:30 -0800 | [diff] [blame] | 631 | -> Crate { |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 632 | Crate { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 633 | attrs: krate.attrs.lift(|a| folder.fold_attribute(a)), |
| 634 | items: krate.items.lift(|i| folder.fold_item(i)), |
| 635 | ..krate |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 636 | } |
| 637 | |
| 638 | } |
| 639 | |
| 640 | #[cfg(feature = "full")] |
David Tolnay | 7848825 | 2017-01-29 11:22:59 -0800 | [diff] [blame] | 641 | pub fn noop_fold_block<F: ?Sized + Folder>(folder: &mut F, block: Block) -> Block { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 642 | Block { |
| 643 | stmts: block.stmts.lift(|s| folder.fold_stmt(s)), |
| 644 | ..block |
| 645 | } |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 646 | } |
| 647 | |
David Tolnay | 7848825 | 2017-01-29 11:22:59 -0800 | [diff] [blame] | 648 | fn noop_fold_vis<F: ?Sized + Folder>(folder: &mut F, vis: Visibility) -> Visibility { |
David Tolnay | 7a1cda0 | 2017-01-29 11:50:31 -0800 | [diff] [blame] | 649 | use Visibility::*; |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 650 | match vis { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 651 | Crate(t) => Crate(t), |
| 652 | Inherited(i) => Inherited(i), |
| 653 | Public(p) => Public(p), |
| 654 | Restricted(data) => { |
| 655 | Restricted(VisRestricted { |
| 656 | path: data.path.lift(|p| folder.fold_path(p)), |
| 657 | ..data |
| 658 | }) |
| 659 | } |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 660 | } |
| 661 | } |
| 662 | |
| 663 | #[cfg(feature = "full")] |
David Tolnay | 660b03e | 2017-01-29 11:26:30 -0800 | [diff] [blame] | 664 | pub fn noop_fold_item<F: ?Sized + Folder>(folder: &mut F, |
| 665 | Item { ident, vis, attrs, node }: Item) |
| 666 | -> Item { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 667 | use item::*; |
David Tolnay | 7a1cda0 | 2017-01-29 11:50:31 -0800 | [diff] [blame] | 668 | use ItemKind::*; |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 669 | Item { |
| 670 | ident: folder.fold_ident(ident.clone()), |
| 671 | vis: noop_fold_vis(folder, vis), |
| 672 | attrs: attrs.lift(|a| folder.fold_attribute(a)), |
| 673 | node: match node { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 674 | ExternCrate(i) => { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 675 | ExternCrate(ItemExternCrate { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 676 | original: i.original.map(|i| folder.fold_ident(i)), |
| 677 | ..i |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 678 | }) |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 679 | } |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 680 | Use(i) => { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 681 | Use(ItemUse { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 682 | path: Box::new(folder.fold_view_path(*i.path)), |
| 683 | ..i |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 684 | }) |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 685 | } |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 686 | Static(i) => { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 687 | Static(ItemStatic { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 688 | ty: Box::new(folder.fold_ty(*i.ty)), |
| 689 | mutbl: i.mutbl, |
| 690 | expr: i.expr.lift(|e| folder.fold_expr(e)), |
| 691 | ..i |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 692 | }) |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 693 | } |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 694 | Const(i) => { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 695 | Const(ItemConst { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 696 | ty: i.ty.lift(|ty| folder.fold_ty(ty)), |
| 697 | expr: i.expr.lift(|e| folder.fold_expr(e)), |
| 698 | ..i |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 699 | }) |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 700 | } |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 701 | Fn(i) => { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 702 | Fn(ItemFn { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 703 | decl: i.decl.lift(|v| folder.fold_fn_decl(v)), |
| 704 | block: i.block.lift(|v| folder.fold_block(v)), |
| 705 | ..i |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 706 | }) |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 707 | } |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 708 | Mod(i) => { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 709 | Mod(ItemMod { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 710 | items: i.items.map(|items| { |
| 711 | (items.0.lift(|i| folder.fold_item(i)), items.1) |
| 712 | }), |
| 713 | ..i |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 714 | }) |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 715 | } |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 716 | ForeignMod(i) => { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 717 | ForeignMod(ItemForeignMod { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 718 | items: i.items.lift(|foreign_item| { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 719 | folder.fold_foreign_item(foreign_item) |
| 720 | }), |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 721 | ..i |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 722 | }) |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 723 | } |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 724 | Ty(i) => { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 725 | Ty(ItemTy { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 726 | ty: i.ty.lift(|ty| folder.fold_ty(ty)), |
| 727 | generics: folder.fold_generics(i.generics), |
| 728 | ..i |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 729 | }) |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 730 | } |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 731 | Enum(i) => { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 732 | Enum(ItemEnum { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 733 | variants: i.variants.lift(|v| folder.fold_variant(v)), |
| 734 | generics: folder.fold_generics(i.generics), |
| 735 | ..i |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 736 | }) |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 737 | } |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 738 | Struct(i) => { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 739 | Struct(ItemStruct { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 740 | data: folder.fold_variant_data(i.data), |
| 741 | generics: folder.fold_generics(i.generics), |
| 742 | ..i |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 743 | }) |
| 744 | } |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 745 | Union(i) => { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 746 | Union(ItemUnion { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 747 | data: folder.fold_variant_data(i.data), |
| 748 | generics: folder.fold_generics(i.generics), |
| 749 | ..i |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 750 | }) |
| 751 | } |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 752 | Trait(i) => { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 753 | Trait(ItemTrait { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 754 | generics: folder.fold_generics(i.generics), |
| 755 | supertraits: i.supertraits.lift(|typb| folder.fold_ty_param_bound(typb)), |
| 756 | items: i.items.lift(|ti| folder.fold_trait_item(ti)), |
| 757 | ..i |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 758 | }) |
| 759 | } |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 760 | DefaultImpl(i) => { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 761 | DefaultImpl(ItemDefaultImpl { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 762 | path: folder.fold_path(i.path), |
| 763 | ..i |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 764 | }) |
| 765 | } |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 766 | Impl(i) => { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 767 | Impl(ItemImpl { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 768 | generics: folder.fold_generics(i.generics), |
| 769 | trait_: i.trait_.map(|p| folder.fold_path(p)), |
| 770 | self_ty: i.self_ty.lift(|ty| folder.fold_ty(ty)), |
| 771 | items: i.items.lift(|i| folder.fold_impl_item(i)), |
| 772 | ..i |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 773 | }) |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 774 | } |
| 775 | Mac(mac) => Mac(folder.fold_mac(mac)), |
| 776 | }, |
| 777 | } |
| 778 | } |
| 779 | |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 780 | #[cfg(feature = "full")] |
David Tolnay | 7848825 | 2017-01-29 11:22:59 -0800 | [diff] [blame] | 781 | pub fn noop_fold_expr<F: ?Sized + Folder>(folder: &mut F, Expr { node, attrs }: Expr) -> Expr { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 782 | use expr::*; |
| 783 | use expr::ExprKind::*; |
| 784 | |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 785 | Expr { |
| 786 | node: match node { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 787 | Box(e) => { |
| 788 | Box(ExprBox { |
| 789 | expr: e.expr.lift(|e| folder.fold_expr(e)), |
| 790 | ..e |
| 791 | }) |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 792 | } |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 793 | InPlace(e) => { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 794 | InPlace(ExprInPlace { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 795 | place: e.place.lift(|e| folder.fold_expr(e)), |
| 796 | value: e.value.lift(|e| folder.fold_expr(e)), |
| 797 | ..e |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 798 | }) |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 799 | } |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 800 | Array(e) => { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 801 | Array(ExprArray { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 802 | exprs: e.exprs.lift(|e| folder.fold_expr(e)), |
| 803 | ..e |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 804 | }) |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 805 | } |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 806 | Call(e) => { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 807 | Call(ExprCall { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 808 | func: e.func.lift(|e| folder.fold_expr(e)), |
| 809 | args: e.args.lift(|e| folder.fold_expr(e)), |
| 810 | ..e |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 811 | }) |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 812 | } |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 813 | MethodCall(e) => { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 814 | MethodCall(ExprMethodCall { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 815 | method: folder.fold_ident(e.method), |
| 816 | typarams: e.typarams.lift(|t| folder.fold_ty(t)), |
| 817 | args: e.args.lift(|e| folder.fold_expr(e)), |
| 818 | ..e |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 819 | }) |
| 820 | } |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 821 | Tup(e) => { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 822 | Tup(ExprTup { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 823 | args: e.args.lift(|e| folder.fold_expr(e)), |
| 824 | ..e |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 825 | }) |
| 826 | } |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 827 | Binary(e) => { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 828 | Binary(ExprBinary { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 829 | left: e.left.lift(|e| folder.fold_expr(e)), |
| 830 | right: e.right.lift(|e| folder.fold_expr(e)), |
| 831 | ..e |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 832 | }) |
| 833 | } |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 834 | Unary(e) => { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 835 | Unary(ExprUnary { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 836 | expr: e.expr.lift(|e| folder.fold_expr(e)), |
| 837 | ..e |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 838 | }) |
| 839 | } |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 840 | Lit(lit) => Lit(folder.fold_lit(lit)), |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 841 | Cast(e) => { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 842 | Cast(ExprCast { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 843 | expr: e.expr.lift(|e| folder.fold_expr(e)), |
| 844 | ty: e.ty.lift(|t| folder.fold_ty(t)), |
| 845 | ..e |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 846 | }) |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 847 | } |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 848 | Type(e) => { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 849 | Type(ExprType { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 850 | expr: e.expr.lift(|e| folder.fold_expr(e)), |
| 851 | ty: e.ty.lift(|t| folder.fold_ty(t)), |
| 852 | ..e |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 853 | }) |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 854 | } |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 855 | If(e) => { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 856 | If(ExprIf { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 857 | cond: e.cond.lift(|e| folder.fold_expr(e)), |
| 858 | if_true: folder.fold_block(e.if_true), |
| 859 | if_false: e.if_false.map(|v| v.lift(|e| folder.fold_expr(e))), |
| 860 | ..e |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 861 | }) |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 862 | } |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 863 | IfLet(e) => { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 864 | IfLet(ExprIfLet { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 865 | pat: e.pat.lift(|p| folder.fold_pat(p)), |
| 866 | expr: e.expr.lift(|e| folder.fold_expr(e)), |
| 867 | if_true: folder.fold_block(e.if_true), |
| 868 | if_false: e.if_false.map(|v| v.lift(|e| folder.fold_expr(e))), |
| 869 | ..e |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 870 | }) |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 871 | } |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 872 | While(e) => { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 873 | While(ExprWhile { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 874 | cond: e.cond.lift(|e| folder.fold_expr(e)), |
| 875 | body: folder.fold_block(e.body), |
| 876 | label: e.label.map(|i| folder.fold_ident(i)), |
| 877 | ..e |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 878 | }) |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 879 | } |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 880 | WhileLet(e) => { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 881 | WhileLet(ExprWhileLet { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 882 | pat: e.pat.lift(|p| folder.fold_pat(p)), |
| 883 | expr: e.expr.lift(|e| folder.fold_expr(e)), |
| 884 | body: folder.fold_block(e.body), |
| 885 | label: e.label.map(|i| folder.fold_ident(i)), |
| 886 | ..e |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 887 | }) |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 888 | } |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 889 | ForLoop(e) => { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 890 | ForLoop(ExprForLoop { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 891 | pat: e.pat.lift(|p| folder.fold_pat(p)), |
| 892 | expr: e.expr.lift(|e| folder.fold_expr(e)), |
| 893 | body: folder.fold_block(e.body), |
| 894 | label: e.label.map(|i| folder.fold_ident(i)), |
| 895 | ..e |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 896 | }) |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 897 | } |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 898 | Loop(e) => { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 899 | Loop(ExprLoop { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 900 | body: folder.fold_block(e.body), |
| 901 | label: e.label.map(|i| folder.fold_ident(i)), |
| 902 | ..e |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 903 | }) |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 904 | } |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 905 | Match(e) => { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 906 | Match(ExprMatch { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 907 | expr: e.expr.lift(|e| folder.fold_expr(e)), |
| 908 | arms: e.arms.lift(|a: Arm| { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 909 | Arm { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 910 | attrs: a.attrs.lift(|a| folder.fold_attribute(a)), |
| 911 | pats: a.pats.lift(|p| folder.fold_pat(p)), |
| 912 | guard: a.guard.map(|v| v.lift(|e| folder.fold_expr(e))), |
| 913 | body: a.body.lift(|e| folder.fold_expr(e)), |
| 914 | ..a |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 915 | } |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 916 | }), |
| 917 | ..e |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 918 | }) |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 919 | } |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 920 | Catch(e) => { |
| 921 | Catch(ExprCatch { |
| 922 | block: folder.fold_block(e.block), |
| 923 | ..e |
| 924 | }) |
Arnavion | 02ef13f | 2017-04-25 00:54:31 -0700 | [diff] [blame] | 925 | } |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 926 | Closure(e) => { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 927 | Closure(ExprClosure { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 928 | decl: e.decl.lift(|v| folder.fold_fn_decl(v)), |
| 929 | body: e.body.lift(|e| folder.fold_expr(e)), |
| 930 | ..e |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 931 | }) |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 932 | } |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 933 | Block(e) => { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 934 | Block(ExprBlock { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 935 | block: folder.fold_block(e.block), |
| 936 | ..e |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 937 | }) |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 938 | } |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 939 | Assign(e) => { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 940 | Assign(ExprAssign { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 941 | left: e.left.lift(|e| folder.fold_expr(e)), |
| 942 | right: e.right.lift(|e| folder.fold_expr(e)), |
| 943 | ..e |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 944 | }) |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 945 | } |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 946 | AssignOp(e) => { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 947 | AssignOp(ExprAssignOp { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 948 | left: e.left.lift(|e| folder.fold_expr(e)), |
| 949 | right: e.right.lift(|e| folder.fold_expr(e)), |
| 950 | ..e |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 951 | }) |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 952 | } |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 953 | Field(e) => { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 954 | Field(ExprField { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 955 | expr: e.expr.lift(|e| folder.fold_expr(e)), |
| 956 | field: folder.fold_ident(e.field), |
| 957 | ..e |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 958 | }) |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 959 | } |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 960 | TupField(e) => { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 961 | TupField(ExprTupField { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 962 | expr: e.expr.lift(|e| folder.fold_expr(e)), |
| 963 | ..e |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 964 | }) |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 965 | } |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 966 | Index(e) => { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 967 | Index(ExprIndex { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 968 | expr: e.expr.lift(|e| folder.fold_expr(e)), |
| 969 | index: e.index.lift(|e| folder.fold_expr(e)), |
| 970 | ..e |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 971 | }) |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 972 | } |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 973 | Range(e) => { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 974 | Range(ExprRange { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 975 | from: e.from.map(|v| v.lift(|e| folder.fold_expr(e))), |
| 976 | to: e.to.map(|v| v.lift(|e| folder.fold_expr(e))), |
| 977 | ..e |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 978 | }) |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 979 | } |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 980 | Path(e) => { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 981 | Path(ExprPath { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 982 | qself: e.qself.map(|v| noop_fold_qself(folder, v)), |
| 983 | path: folder.fold_path(e.path), |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 984 | }) |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 985 | } |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 986 | AddrOf(e) => { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 987 | AddrOf(ExprAddrOf { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 988 | expr: e.expr.lift(|e| folder.fold_expr(e)), |
| 989 | ..e |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 990 | }) |
| 991 | } |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 992 | Break(e) => { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 993 | Break(ExprBreak { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 994 | label: e.label.map(|i| folder.fold_ident(i)), |
| 995 | expr: e.expr.map(|v| v.lift(|e| folder.fold_expr(e))), |
| 996 | ..e |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 997 | }) |
| 998 | } |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 999 | Continue(e) => { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 1000 | Continue(ExprContinue { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 1001 | label: e.label.map(|i| folder.fold_ident(i)), |
| 1002 | ..e |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 1003 | }) |
| 1004 | } |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 1005 | Ret(e) => { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 1006 | Ret(ExprRet { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 1007 | expr: e.expr.map(|v| v.lift(|e| folder.fold_expr(e))), |
| 1008 | ..e |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 1009 | }) |
| 1010 | } |
| 1011 | Mac(mac) => Mac(folder.fold_mac(mac)), |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 1012 | Struct(e) => { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 1013 | Struct(ExprStruct { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 1014 | path: folder.fold_path(e.path), |
| 1015 | fields: e.fields.lift(|field: FieldValue| { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 1016 | FieldValue { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 1017 | ident: folder.fold_ident(field.ident), |
| 1018 | expr: folder.fold_expr(field.expr), |
| 1019 | attrs: field.attrs.lift(|v| folder.fold_attribute(v)), |
| 1020 | ..field |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 1021 | } |
| 1022 | }), |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 1023 | rest: e.rest.map(|v| v.lift(|e| folder.fold_expr(e))), |
| 1024 | ..e |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 1025 | }) |
| 1026 | } |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 1027 | Repeat(e) => { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 1028 | Repeat(ExprRepeat { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 1029 | expr: e.expr.lift(|e| folder.fold_expr(e)), |
| 1030 | amt: e.amt.lift(|e| folder.fold_expr(e)), |
| 1031 | ..e |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 1032 | }) |
| 1033 | } |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 1034 | Paren(e) => { |
| 1035 | Paren(ExprParen { |
| 1036 | expr: e.expr.lift(|e| folder.fold_expr(e)), |
| 1037 | ..e |
| 1038 | }) |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 1039 | } |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 1040 | Try(e) => { |
| 1041 | Try(ExprTry { |
| 1042 | expr: e.expr.lift(|e| folder.fold_expr(e)), |
| 1043 | ..e |
| 1044 | }) |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 1045 | } |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 1046 | }, |
| 1047 | attrs: attrs.into_iter().map(|a| folder.fold_attribute(a)).collect(), |
| 1048 | } |
| 1049 | } |
| 1050 | |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 1051 | #[cfg(feature = "full")] |
David Tolnay | 7848825 | 2017-01-29 11:22:59 -0800 | [diff] [blame] | 1052 | pub fn noop_fold_foreign_item<F: ?Sized + Folder>(folder: &mut F, |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 1053 | item: ForeignItem) |
David Tolnay | 05120ef | 2017-03-12 18:29:26 -0700 | [diff] [blame] | 1054 | -> ForeignItem{ |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 1055 | use item::*; |
| 1056 | |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 1057 | ForeignItem { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 1058 | ident: folder.fold_ident(item.ident), |
| 1059 | attrs: item.attrs.into_iter().map(|a| folder.fold_attribute(a)).collect(), |
| 1060 | node: match item.node { |
| 1061 | ForeignItemKind::Fn(item) => { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 1062 | ForeignItemKind::Fn(ForeignItemFn { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 1063 | decl: item.decl.lift(|v| folder.fold_fn_decl(v)), |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 1064 | }) |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 1065 | } |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 1066 | ForeignItemKind::Static(item) => { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 1067 | ForeignItemKind::Static(ForeignItemStatic { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 1068 | ty: item.ty.lift(|v| folder.fold_ty(v)), |
| 1069 | ..item |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 1070 | }) |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 1071 | } |
| 1072 | }, |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 1073 | vis: noop_fold_vis(folder, item.vis), |
| 1074 | ..item |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 1075 | } |
| 1076 | } |
| 1077 | |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 1078 | #[cfg(feature = "full")] |
David Tolnay | 7848825 | 2017-01-29 11:22:59 -0800 | [diff] [blame] | 1079 | pub fn noop_fold_pat<F: ?Sized + Folder>(folder: &mut F, pat: Pat) -> Pat { |
David Tolnay | 7a1cda0 | 2017-01-29 11:50:31 -0800 | [diff] [blame] | 1080 | use Pat::*; |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 1081 | match pat { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 1082 | Wild(b) => Wild(b), |
| 1083 | Ident(p) => { |
| 1084 | Ident(PatIdent { |
| 1085 | ident: folder.fold_ident(p.ident), |
| 1086 | subpat: p.subpat.map(|p| p.lift(|p| folder.fold_pat(p))), |
| 1087 | ..p |
| 1088 | }) |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 1089 | } |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 1090 | Struct(p) => { |
| 1091 | Struct(PatStruct { |
| 1092 | path: folder.fold_path(p.path), |
| 1093 | fields: p.fields.lift(|field: FieldPat| { |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 1094 | FieldPat { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 1095 | ident: folder.fold_ident(field.ident), |
| 1096 | pat: field.pat.lift(|p| folder.fold_pat(p)), |
| 1097 | attrs: field.attrs.lift(|a| folder.fold_attribute(a)), |
| 1098 | ..field |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 1099 | } |
| 1100 | }), |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 1101 | ..p |
| 1102 | }) |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 1103 | } |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 1104 | TupleStruct(p) => { |
| 1105 | TupleStruct(PatTupleStruct { |
| 1106 | path: folder.fold_path(p.path), |
| 1107 | pat: PatTuple { |
| 1108 | pats: p.pat.pats.lift(|p| folder.fold_pat(p)), |
| 1109 | ..p.pat |
| 1110 | }, |
| 1111 | }) |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 1112 | } |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 1113 | Path(p) => { |
| 1114 | Path(PatPath { |
| 1115 | qself: p.qself.map(|v| noop_fold_qself(folder, v)), |
| 1116 | path: folder.fold_path(p.path), |
| 1117 | }) |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 1118 | } |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 1119 | Tuple(p) => { |
| 1120 | Tuple(PatTuple { |
| 1121 | pats: p.pats.lift(|p| folder.fold_pat(p)), |
| 1122 | ..p |
| 1123 | }) |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 1124 | } |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 1125 | Box(p) => { |
| 1126 | Box(PatBox { |
| 1127 | pat: p.pat.lift(|p| folder.fold_pat(p)), |
| 1128 | ..p |
| 1129 | }) |
| 1130 | } |
| 1131 | Ref(p) => { |
| 1132 | Ref(PatRef { |
| 1133 | pat: p.pat.lift(|p| folder.fold_pat(p)), |
| 1134 | ..p |
| 1135 | }) |
| 1136 | } |
| 1137 | Lit(p) => { |
| 1138 | Lit(PatLit { |
| 1139 | expr: p.expr.lift(|e| folder.fold_expr(e)), |
| 1140 | }) |
| 1141 | } |
| 1142 | Range(p) => { |
| 1143 | Range(PatRange { |
| 1144 | hi: p.hi.lift(|e| folder.fold_expr(e)), |
| 1145 | lo: p.lo.lift(|e| folder.fold_expr(e)), |
| 1146 | ..p |
| 1147 | }) |
| 1148 | } |
| 1149 | Slice(p) => { |
| 1150 | Slice(PatSlice { |
| 1151 | front: p.front.lift(|p| folder.fold_pat(p)), |
| 1152 | middle: p.middle.map(|v| v.lift(|p| folder.fold_pat(p))), |
| 1153 | back: p.back.lift(|p| folder.fold_pat(p)), |
| 1154 | ..p |
| 1155 | }) |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 1156 | } |
| 1157 | Mac(mac) => Mac(folder.fold_mac(mac)), |
| 1158 | } |
| 1159 | } |
| 1160 | |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 1161 | #[cfg(feature = "full")] |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 1162 | pub fn noop_fold_fn_decl<F: ?Sized + Folder>(folder: &mut F, decl: FnDecl) |
| 1163 | -> FnDecl |
| 1164 | { |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 1165 | FnDecl { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 1166 | inputs: decl.inputs.lift(|a| { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 1167 | use item::*; |
David Tolnay | 7a1cda0 | 2017-01-29 11:50:31 -0800 | [diff] [blame] | 1168 | use FnArg::*; |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 1169 | match a { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 1170 | SelfRef(a) => { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 1171 | SelfRef(ArgSelfRef { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 1172 | lifetime: a.lifetime.map(|v| folder.fold_lifetime(v)), |
| 1173 | ..a |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 1174 | }) |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 1175 | } |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 1176 | SelfValue(a) => SelfValue(a), |
| 1177 | Captured(a) => { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 1178 | Captured(ArgCaptured { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 1179 | pat: folder.fold_pat(a.pat), |
| 1180 | ty: folder.fold_ty(a.ty), |
| 1181 | ..a |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 1182 | }) |
| 1183 | } |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 1184 | Ignored(ty) => Ignored(folder.fold_ty(ty)), |
| 1185 | } |
| 1186 | }), |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 1187 | output: folder.fold_fn_ret_ty(decl.output), |
| 1188 | generics: folder.fold_generics(decl.generics), |
| 1189 | ..decl |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 1190 | } |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 1191 | } |
| 1192 | |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 1193 | #[cfg(feature = "full")] |
David Tolnay | 7848825 | 2017-01-29 11:22:59 -0800 | [diff] [blame] | 1194 | pub fn noop_fold_trait_item<F: ?Sized + Folder>(folder: &mut F, |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 1195 | item: TraitItem) |
David Tolnay | 660b03e | 2017-01-29 11:26:30 -0800 | [diff] [blame] | 1196 | -> TraitItem { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 1197 | use item::*; |
David Tolnay | 7a1cda0 | 2017-01-29 11:50:31 -0800 | [diff] [blame] | 1198 | use TraitItemKind::*; |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 1199 | TraitItem { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 1200 | ident: folder.fold_ident(item.ident), |
| 1201 | attrs: item.attrs.lift(|v| folder.fold_attribute(v)), |
| 1202 | node: match item.node { |
| 1203 | Const(i) => { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 1204 | Const(TraitItemConst { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 1205 | ty: folder.fold_ty(i.ty), |
| 1206 | default: i.default.map(|v| folder.fold_expr(v)), |
| 1207 | ..i |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 1208 | }) |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 1209 | } |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 1210 | Method(i) => { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 1211 | Method(TraitItemMethod { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 1212 | sig: folder.fold_method_sig(i.sig), |
| 1213 | default: i.default.map(|v| folder.fold_block(v)), |
| 1214 | ..i |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 1215 | }) |
| 1216 | } |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 1217 | Type(i) => { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 1218 | Type(TraitItemType { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 1219 | bounds: i.bounds.lift(|v| folder.fold_ty_param_bound(v)), |
| 1220 | default: i.default.map(|v| folder.fold_ty(v)), |
| 1221 | ..i |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 1222 | }) |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 1223 | } |
David Tolnay | 70925b7 | 2017-01-29 11:20:54 -0800 | [diff] [blame] | 1224 | Macro(mac) => Macro(folder.fold_mac(mac)), |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 1225 | }, |
| 1226 | } |
| 1227 | } |
| 1228 | |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 1229 | #[cfg(feature = "full")] |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 1230 | pub fn noop_fold_impl_item<F: ?Sized + Folder>(folder: &mut F, item: ImplItem) |
| 1231 | -> ImplItem |
| 1232 | { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 1233 | use item::*; |
David Tolnay | 7a1cda0 | 2017-01-29 11:50:31 -0800 | [diff] [blame] | 1234 | use ImplItemKind::*; |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 1235 | |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 1236 | ImplItem { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 1237 | ident: folder.fold_ident(item.ident), |
| 1238 | vis: noop_fold_vis(folder, item.vis), |
| 1239 | attrs: item.attrs.lift(|v| folder.fold_attribute(v)), |
| 1240 | node: match item.node { |
| 1241 | Const(i) => { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 1242 | Const(ImplItemConst { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 1243 | ty: folder.fold_ty(i.ty), |
| 1244 | expr: folder.fold_expr(i.expr), |
| 1245 | ..i |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 1246 | }) |
| 1247 | } |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 1248 | Method(i) => { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 1249 | Method(ImplItemMethod { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 1250 | sig: folder.fold_method_sig(i.sig), |
| 1251 | block: folder.fold_block(i.block), |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 1252 | }) |
| 1253 | } |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 1254 | Type(i) => { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 1255 | Type(ImplItemType { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 1256 | ty: folder.fold_ty(i.ty), |
| 1257 | ..i |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 1258 | }) |
| 1259 | } |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 1260 | Macro(mac) => Macro(folder.fold_mac(mac)), |
| 1261 | }, |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 1262 | ..item |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 1263 | } |
| 1264 | } |
| 1265 | |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 1266 | #[cfg(feature = "full")] |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 1267 | pub fn noop_fold_method_sig<F: ?Sized + Folder>(folder: &mut F, sig: MethodSig) |
| 1268 | -> MethodSig |
| 1269 | { |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 1270 | MethodSig { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 1271 | decl: folder.fold_fn_decl(sig.decl), |
| 1272 | ..sig |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 1273 | } |
| 1274 | |
| 1275 | } |
| 1276 | |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 1277 | #[cfg(feature = "full")] |
David Tolnay | 7848825 | 2017-01-29 11:22:59 -0800 | [diff] [blame] | 1278 | pub fn noop_fold_stmt<F: ?Sized + Folder>(folder: &mut F, stmt: Stmt) -> Stmt { |
David Tolnay | 7a1cda0 | 2017-01-29 11:50:31 -0800 | [diff] [blame] | 1279 | use Stmt::*; |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 1280 | match stmt { |
| 1281 | Local(local) => Local(local.lift(|l| folder.fold_local(l))), |
| 1282 | Item(item) => Item(item.lift(|v| folder.fold_item(v))), |
| 1283 | Expr(expr) => Expr(expr.lift(|v| folder.fold_expr(v))), |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 1284 | Semi(expr, t) => Semi(expr.lift(|v| folder.fold_expr(v)), t), |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 1285 | Mac(mac_stmt) => { |
| 1286 | Mac(mac_stmt.lift(|(mac, style, attrs)| { |
David Tolnay | 05120ef | 2017-03-12 18:29:26 -0700 | [diff] [blame] | 1287 | (folder.fold_mac(mac), |
| 1288 | style, |
| 1289 | attrs.lift(|a| folder.fold_attribute(a))) |
| 1290 | })) |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 1291 | } |
| 1292 | } |
| 1293 | |
| 1294 | } |
| 1295 | |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 1296 | #[cfg(feature = "full")] |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 1297 | pub fn noop_fold_local<F: ?Sized + Folder>(folder: &mut F, local: Local) |
| 1298 | -> Local |
| 1299 | { |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 1300 | Local { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 1301 | pat: local.pat.lift(|v| folder.fold_pat(v)), |
| 1302 | ty: local.ty.map(|v| v.lift(|t| folder.fold_ty(t))), |
| 1303 | init: local.init.map(|v| v.lift(|e| folder.fold_expr(e))), |
| 1304 | attrs: local.attrs.lift(|a| folder.fold_attribute(a)), |
| 1305 | ..local |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 1306 | } |
| 1307 | } |
| 1308 | |
| 1309 | #[cfg(feature = "full")] |
David Tolnay | 7848825 | 2017-01-29 11:22:59 -0800 | [diff] [blame] | 1310 | pub fn noop_fold_view_path<F: ?Sized + Folder>(folder: &mut F, view_path: ViewPath) -> ViewPath { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 1311 | use item::*; |
David Tolnay | 7a1cda0 | 2017-01-29 11:50:31 -0800 | [diff] [blame] | 1312 | use ViewPath::*; |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 1313 | match view_path { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 1314 | Simple(p) => { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 1315 | Simple(PathSimple { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 1316 | path: folder.fold_path(p.path), |
| 1317 | rename: p.rename.map(|i| folder.fold_ident(i)), |
| 1318 | ..p |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 1319 | }) |
| 1320 | } |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 1321 | Glob(p) => { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 1322 | Glob(PathGlob { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 1323 | path: folder.fold_path(p.path), |
| 1324 | ..p |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 1325 | }) |
| 1326 | } |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 1327 | List(p) => { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 1328 | List(PathList { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 1329 | path: folder.fold_path(p.path), |
| 1330 | items: p.items.lift(|item: PathListItem| { |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 1331 | PathListItem { |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 1332 | name: folder.fold_ident(item.name), |
| 1333 | rename: item.rename.map(|i| folder.fold_ident(i)), |
| 1334 | ..item |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 1335 | } |
| 1336 | }), |
Alex Crichton | ccbb45d | 2017-05-23 10:58:24 -0700 | [diff] [blame^] | 1337 | ..p |
Alex Crichton | 62a0a59 | 2017-05-22 13:58:53 -0700 | [diff] [blame] | 1338 | }) |
gnzlbg | 9ae88d8 | 2017-01-26 20:45:17 +0100 | [diff] [blame] | 1339 | } |
| 1340 | } |
| 1341 | } |