Extend visit to use visit_fn to visit fn expressions.
This commit is contained in:
parent
bc47804473
commit
1d05718c2d
@ -1,6 +1,7 @@
|
||||
|
||||
import front::ast;
|
||||
import front::ast::ident;
|
||||
import front::ast::fn_ident;
|
||||
import front::ast::node_id;
|
||||
import front::ast::def_id;
|
||||
import util::common::span;
|
||||
@ -53,7 +54,7 @@ fn check_crate(@ty::ctxt tcx, &@ast::crate crate) {
|
||||
}
|
||||
|
||||
fn visit_fn(@ctx cx, &ast::_fn f, &vec[ast::ty_param] tp, &span sp,
|
||||
&ident name, ast::node_id id, &scope sc, &vt[scope] v) {
|
||||
&fn_ident name, ast::node_id id, &scope sc, &vt[scope] v) {
|
||||
visit::visit_fn_decl(f.decl, sc, v);
|
||||
for (ast::arg arg_ in f.decl.inputs) {
|
||||
cx.local_map.insert(arg_.id, arg(arg_.mode));
|
||||
|
@ -1,6 +1,7 @@
|
||||
|
||||
import front::ast;
|
||||
import front::ast::ident;
|
||||
import front::ast::fn_ident;
|
||||
import front::ast::def;
|
||||
import front::ast::def_id;
|
||||
import front::ast::node_id;
|
||||
@ -344,7 +345,7 @@ fn visit_native_item_with_scope(&@ast::native_item ni, &scopes sc,
|
||||
}
|
||||
|
||||
fn visit_fn_with_scope(&@env e, &ast::_fn f, &vec[ast::ty_param] tp, &span sp,
|
||||
&ident name, node_id id, &scopes sc,
|
||||
&fn_ident name, node_id id, &scopes sc,
|
||||
&vt[scopes] v) {
|
||||
// here's where we need to set up the mapping
|
||||
// for f's constrs in the table.
|
||||
|
@ -34,7 +34,7 @@ type visitor[E] =
|
||||
fn(&@expr, &E, &vt[E]) visit_expr,
|
||||
fn(&@ty, &E, &vt[E]) visit_ty,
|
||||
fn(&@constr, &E, &vt[E]) visit_constr,
|
||||
fn(&_fn, &vec[ty_param], &span, &ident, node_id, &E, &vt[E])
|
||||
fn(&_fn, &vec[ty_param], &span, &fn_ident, node_id, &E, &vt[E])
|
||||
visit_fn);
|
||||
|
||||
fn default_visitor[E]() -> visitor[E] {
|
||||
@ -103,7 +103,7 @@ fn visit_item[E](&@item i, &E e, &vt[E] v) {
|
||||
vt(v).visit_expr(ex, e, v);
|
||||
}
|
||||
case (item_fn(?f, ?tp)) {
|
||||
vt(v).visit_fn(f, tp, i.span, i.ident, i.id, e, v);
|
||||
vt(v).visit_fn(f, tp, i.span, some(i.ident), i.id, e, v);
|
||||
}
|
||||
case (item_mod(?m)) { vt(v).visit_mod(m, i.span, e, v); }
|
||||
case (item_native_mod(?nm)) {
|
||||
@ -116,7 +116,7 @@ fn visit_item[E](&@item i, &E e, &vt[E] v) {
|
||||
}
|
||||
case (item_ty(?t, _)) { vt(v).visit_ty(t, e, v); }
|
||||
case (item_res(?f, ?dtor_id, ?tps, _)) {
|
||||
vt(v).visit_fn(f, tps, i.span, i.ident, dtor_id, e, v);
|
||||
vt(v).visit_fn(f, tps, i.span, some(i.ident), dtor_id, e, v);
|
||||
}
|
||||
case (item_tag(?variants, _)) {
|
||||
for (variant vr in variants) {
|
||||
@ -128,13 +128,13 @@ fn visit_item[E](&@item i, &E e, &vt[E] v) {
|
||||
case (item_obj(?ob, _, _)) {
|
||||
for (obj_field f in ob.fields) { vt(v).visit_ty(f.ty, e, v); }
|
||||
for (@method m in ob.methods) {
|
||||
vt(v).visit_fn(m.node.meth, [], m.span, m.node.ident,
|
||||
vt(v).visit_fn(m.node.meth, [], m.span, some(m.node.ident),
|
||||
m.node.id, e, v);
|
||||
}
|
||||
alt (ob.dtor) {
|
||||
case (none) { }
|
||||
case (some(?m)) {
|
||||
vt(v).visit_fn(m.node.meth, [], m.span, m.node.ident,
|
||||
vt(v).visit_fn(m.node.meth, [], m.span, some(m.node.ident),
|
||||
m.node.id, e, v);
|
||||
}
|
||||
}
|
||||
@ -216,7 +216,7 @@ fn visit_fn_decl[E](&fn_decl fd, &E e, &vt[E] v) {
|
||||
vt(v).visit_ty(fd.output, e, v);
|
||||
}
|
||||
|
||||
fn visit_fn[E](&_fn f, &vec[ty_param] tp, &span sp, &ident i,
|
||||
fn visit_fn[E](&_fn f, &vec[ty_param] tp, &span sp, &fn_ident i,
|
||||
node_id id, &E e, &vt[E] v) {
|
||||
visit_fn_decl(f.decl, e, v);
|
||||
vt(v).visit_block(f.body, e, v);
|
||||
@ -326,8 +326,7 @@ fn visit_expr[E](&@expr ex, &E e, &vt[E] v) {
|
||||
for (arm a in arms) { vt(v).visit_arm(a, e, v); }
|
||||
}
|
||||
case (expr_fn(?f)) {
|
||||
visit_fn_decl(f.decl, e, v);
|
||||
vt(v).visit_block(f.body, e, v);
|
||||
vt(v).visit_fn(f, [], ex.span, none, ex.id, e, v);
|
||||
}
|
||||
case (expr_block(?b)) { vt(v).visit_block(b, e, v); }
|
||||
case (expr_assign(?a, ?b)) {
|
||||
@ -391,7 +390,7 @@ fn visit_expr[E](&@expr ex, &E e, &vt[E] v) {
|
||||
case (some(?ex)) { vt(v).visit_expr(ex, e, v); }
|
||||
}
|
||||
for (@method m in anon_obj.methods) {
|
||||
vt(v).visit_fn(m.node.meth, [], m.span, m.node.ident,
|
||||
vt(v).visit_fn(m.node.meth, [], m.span, some(m.node.ident),
|
||||
m.node.id, e, v);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user