diff options
Diffstat (limited to 'src/libsyntax/fold.rs')
| -rw-r--r-- | src/libsyntax/fold.rs | 43 |
1 files changed, 24 insertions, 19 deletions
diff --git a/src/libsyntax/fold.rs b/src/libsyntax/fold.rs index c304e3a9f50..b94e8f5389b 100644 --- a/src/libsyntax/fold.rs +++ b/src/libsyntax/fold.rs @@ -193,6 +193,10 @@ pub trait Folder : Sized { noop_fold_macro_def(def, self) } + fn fold_label(&mut self, label: Label) -> Label { + noop_fold_label(label, self) + } + fn fold_lifetime(&mut self, l: Lifetime) -> Lifetime { noop_fold_lifetime(l, self) } @@ -696,6 +700,13 @@ pub fn noop_fold_generic_params<T: Folder>( params.move_map(|p| fld.fold_generic_param(p)) } +pub fn noop_fold_label<T: Folder>(label: Label, fld: &mut T) -> Label { + Label { + ident: fld.fold_ident(label.ident), + span: fld.new_span(label.span), + } +} + pub fn noop_fold_lifetime<T: Folder>(l: Lifetime, fld: &mut T) -> Lifetime { Lifetime { id: fld.new_id(l.id), @@ -1206,30 +1217,26 @@ pub fn noop_fold_expr<T: Folder>(Expr {id, node, span, attrs}: Expr, folder: &mu folder.fold_block(tr), fl.map(|x| folder.fold_expr(x))) } - ExprKind::While(cond, body, opt_ident) => { + ExprKind::While(cond, body, opt_label) => { ExprKind::While(folder.fold_expr(cond), folder.fold_block(body), - opt_ident.map(|label| respan(folder.new_span(label.span), - folder.fold_ident(label.node)))) + opt_label.map(|label| folder.fold_label(label))) } - ExprKind::WhileLet(pat, expr, body, opt_ident) => { + ExprKind::WhileLet(pat, expr, body, opt_label) => { ExprKind::WhileLet(folder.fold_pat(pat), folder.fold_expr(expr), folder.fold_block(body), - opt_ident.map(|label| respan(folder.new_span(label.span), - folder.fold_ident(label.node)))) + opt_label.map(|label| folder.fold_label(label))) } - ExprKind::ForLoop(pat, iter, body, opt_ident) => { + ExprKind::ForLoop(pat, iter, body, opt_label) => { ExprKind::ForLoop(folder.fold_pat(pat), folder.fold_expr(iter), folder.fold_block(body), - opt_ident.map(|label| respan(folder.new_span(label.span), - folder.fold_ident(label.node)))) + opt_label.map(|label| folder.fold_label(label))) } - ExprKind::Loop(body, opt_ident) => { + ExprKind::Loop(body, opt_label) => { ExprKind::Loop(folder.fold_block(body), - opt_ident.map(|label| respan(folder.new_span(label.span), - folder.fold_ident(label.node)))) + opt_label.map(|label| folder.fold_label(label))) } ExprKind::Match(expr, arms) => { ExprKind::Match(folder.fold_expr(expr), @@ -1277,15 +1284,13 @@ pub fn noop_fold_expr<T: Folder>(Expr {id, node, span, attrs}: Expr, folder: &mu }); ExprKind::Path(qself, folder.fold_path(path)) } - ExprKind::Break(opt_ident, opt_expr) => { - ExprKind::Break(opt_ident.map(|label| respan(folder.new_span(label.span), - folder.fold_ident(label.node))), + ExprKind::Break(opt_label, opt_expr) => { + ExprKind::Break(opt_label.map(|label| folder.fold_label(label)), opt_expr.map(|e| folder.fold_expr(e))) } - ExprKind::Continue(opt_ident) => ExprKind::Continue(opt_ident.map(|label| - respan(folder.new_span(label.span), - folder.fold_ident(label.node))) - ), + ExprKind::Continue(opt_label) => { + ExprKind::Continue(opt_label.map(|label| folder.fold_label(label))) + } ExprKind::Ret(e) => ExprKind::Ret(e.map(|x| folder.fold_expr(x))), ExprKind::InlineAsm(asm) => ExprKind::InlineAsm(asm.map(|asm| { InlineAsm { |
