Restore fold_ident and visit_ident
This commit is contained in:
parent
2a779062d8
commit
45b445e5a3
2 changed files with 22 additions and 13 deletions
|
|
@ -151,6 +151,10 @@ pub trait Folder : Sized {
|
|||
noop_fold_name(n, self)
|
||||
}
|
||||
|
||||
fn fold_ident(&mut self, i: Ident) -> Ident {
|
||||
noop_fold_ident(i, self)
|
||||
}
|
||||
|
||||
fn fold_usize(&mut self, i: usize) -> usize {
|
||||
noop_fold_usize(i, self)
|
||||
}
|
||||
|
|
@ -284,10 +288,6 @@ pub trait Folder : Sized {
|
|||
}
|
||||
}
|
||||
|
||||
fn fold_ident<T: Folder>(f: &mut T, i: Ident) -> Ident {
|
||||
Ident { name: f.fold_name(i.name), ctxt: i.ctxt }
|
||||
}
|
||||
|
||||
pub fn noop_fold_meta_items<T: Folder>(meta_items: Vec<P<MetaItem>>, fld: &mut T)
|
||||
-> Vec<P<MetaItem>> {
|
||||
meta_items.move_map(|x| fld.fold_meta_item(x))
|
||||
|
|
@ -443,6 +443,10 @@ pub fn noop_fold_name<T: Folder>(n: Name, _: &mut T) -> Name {
|
|||
n
|
||||
}
|
||||
|
||||
pub fn noop_fold_ident<T: Folder>(i: Ident, _: &mut T) -> Ident {
|
||||
i
|
||||
}
|
||||
|
||||
pub fn noop_fold_usize<T: Folder>(i: usize, _: &mut T) -> usize {
|
||||
i
|
||||
}
|
||||
|
|
@ -451,7 +455,7 @@ pub fn noop_fold_path<T: Folder>(Path {global, segments, span}: Path, fld: &mut
|
|||
Path {
|
||||
global: global,
|
||||
segments: segments.move_map(|PathSegment {identifier, parameters}| PathSegment {
|
||||
identifier: fold_ident(fld, identifier),
|
||||
identifier: fld.fold_ident(identifier),
|
||||
parameters: fld.fold_path_parameters(parameters),
|
||||
}),
|
||||
span: fld.new_span(span)
|
||||
|
|
@ -992,7 +996,7 @@ pub fn noop_fold_pat<T: Folder>(p: P<Pat>, folder: &mut T) -> P<Pat> {
|
|||
PatIdent(binding_mode, pth1, sub) => {
|
||||
PatIdent(binding_mode,
|
||||
Spanned{span: folder.new_span(pth1.span),
|
||||
node: fold_ident(folder, pth1.node)},
|
||||
node: folder.fold_ident(pth1.node)},
|
||||
sub.map(|x| folder.fold_pat(x)))
|
||||
}
|
||||
PatLit(e) => PatLit(folder.fold_expr(e)),
|
||||
|
|
@ -1077,11 +1081,11 @@ pub fn noop_fold_expr<T: Folder>(Expr {id, node, span}: Expr, folder: &mut T) ->
|
|||
ExprWhile(cond, body, opt_ident) => {
|
||||
ExprWhile(folder.fold_expr(cond),
|
||||
folder.fold_block(body),
|
||||
opt_ident.map(|i| fold_ident(folder, i)))
|
||||
opt_ident.map(|i| folder.fold_ident(i)))
|
||||
}
|
||||
ExprLoop(body, opt_ident) => {
|
||||
ExprLoop(folder.fold_block(body),
|
||||
opt_ident.map(|i| fold_ident(folder, i)))
|
||||
opt_ident.map(|i| folder.fold_ident(i)))
|
||||
}
|
||||
ExprMatch(expr, arms, source) => {
|
||||
ExprMatch(folder.fold_expr(expr),
|
||||
|
|
@ -1130,11 +1134,11 @@ pub fn noop_fold_expr<T: Folder>(Expr {id, node, span}: Expr, folder: &mut T) ->
|
|||
}
|
||||
ExprBreak(opt_ident) => ExprBreak(opt_ident.map(|label|
|
||||
respan(folder.new_span(label.span),
|
||||
fold_ident(folder, label.node)))
|
||||
folder.fold_ident(label.node)))
|
||||
),
|
||||
ExprAgain(opt_ident) => ExprAgain(opt_ident.map(|label|
|
||||
respan(folder.new_span(label.span),
|
||||
fold_ident(folder, label.node)))
|
||||
folder.fold_ident(label.node)))
|
||||
),
|
||||
ExprRet(e) => ExprRet(e.map(|x| folder.fold_expr(x))),
|
||||
ExprInlineAsm(InlineAsm {
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@
|
|||
//! those that are created by the expansion of a macro.
|
||||
|
||||
use syntax::abi::Abi;
|
||||
use syntax::ast::{NodeId, CRATE_NODE_ID, Name, Attribute};
|
||||
use syntax::ast::{Ident, NodeId, CRATE_NODE_ID, Name, Attribute};
|
||||
use hir::*;
|
||||
use hir;
|
||||
use syntax::codemap::Span;
|
||||
|
|
@ -57,6 +57,7 @@ pub trait Visitor<'v> : Sized {
|
|||
fn visit_name(&mut self, _span: Span, _name: Name) {
|
||||
// Nothing to do.
|
||||
}
|
||||
fn visit_ident(&mut self, span: Span, ident: Ident) { walk_ident(self, span, ident) }
|
||||
fn visit_mod(&mut self, m: &'v Mod, _s: Span, _n: NodeId) { walk_mod(self, m) }
|
||||
fn visit_foreign_item(&mut self, i: &'v ForeignItem) { walk_foreign_item(self, i) }
|
||||
fn visit_item(&mut self, i: &'v Item) { walk_item(self, i) }
|
||||
|
|
@ -133,6 +134,10 @@ pub trait Visitor<'v> : Sized {
|
|||
fn visit_attribute(&mut self, _attr: &'v Attribute) {}
|
||||
}
|
||||
|
||||
pub fn walk_ident<'v, V: Visitor<'v>>(visitor: &mut V, span: Span, ident: Ident) {
|
||||
visitor.visit_name(span, ident.name);
|
||||
}
|
||||
|
||||
pub fn walk_crate<'v, V: Visitor<'v>>(visitor: &mut V, krate: &'v Crate) {
|
||||
visitor.visit_mod(&krate.module, krate.span, CRATE_NODE_ID);
|
||||
for attr in &krate.attrs {
|
||||
|
|
@ -409,7 +414,7 @@ pub fn walk_path_list_item<'v, V: Visitor<'v>>(visitor: &mut V, prefix: &'v Path
|
|||
pub fn walk_path_segment<'v, V: Visitor<'v>>(visitor: &mut V,
|
||||
path_span: Span,
|
||||
segment: &'v PathSegment) {
|
||||
visitor.visit_name(path_span, segment.identifier.name);
|
||||
visitor.visit_ident(path_span, segment.identifier);
|
||||
visitor.visit_path_parameters(path_span, &segment.parameters);
|
||||
}
|
||||
|
||||
|
|
@ -475,7 +480,7 @@ pub fn walk_pat<'v, V: Visitor<'v>>(visitor: &mut V, pattern: &'v Pat) {
|
|||
visitor.visit_pat(&**subpattern)
|
||||
}
|
||||
PatIdent(_, ref pth1, ref optional_subpattern) => {
|
||||
visitor.visit_name(pth1.span, pth1.node.name);
|
||||
visitor.visit_ident(pth1.span, pth1.node);
|
||||
match *optional_subpattern {
|
||||
None => {}
|
||||
Some(ref subpattern) => visitor.visit_pat(&**subpattern),
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue