Extend visit to use visit_fn to visit fn expressions.

This commit is contained in:
Michael Sullivan 2011-06-28 17:49:15 -07:00 committed by Graydon Hoare
parent bc47804473
commit 1d05718c2d
3 changed files with 12 additions and 11 deletions

View File

@ -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));

View File

@ -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.

View File

@ -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);
}
}