Skip to content

Commit da88f69

Browse files
committed
Port middle/stack_check.rs from oldvisit to <V:Visitor> trait API.
1 parent 6af6b08 commit da88f69

File tree

1 file changed

+37
-20
lines changed

1 file changed

+37
-20
lines changed

src/librustc/middle/stack_check.rs

Lines changed: 37 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ use syntax::ast;
2222
use syntax::ast_map;
2323
use syntax::attr;
2424
use syntax::codemap::span;
25-
use visit = syntax::oldvisit;
25+
use syntax::visit;
26+
use syntax::visit::Visitor;
2627
use util::ppaux::Repr;
2728

2829
#[deriving(Clone)]
@@ -31,44 +32,56 @@ struct Context {
3132
safe_stack: bool
3233
}
3334

35+
struct StackCheckVisitor;
36+
37+
impl Visitor<Context> for StackCheckVisitor {
38+
fn visit_item(&mut self, i:@ast::item, e:Context) {
39+
stack_check_item(*self, i, e);
40+
}
41+
fn visit_fn(&mut self, fk:&visit::fn_kind, fd:&ast::fn_decl,
42+
b:&ast::Block, s:span, n:ast::NodeId, e:Context) {
43+
stack_check_fn(*self, fk, fd, b, s, n, e);
44+
}
45+
fn visit_expr(&mut self, ex:@ast::expr, e:Context) {
46+
stack_check_expr(*self, ex, e);
47+
}
48+
}
49+
3450
pub fn stack_check_crate(tcx: ty::ctxt,
3551
crate: &ast::Crate) {
3652
let new_cx = Context {
3753
tcx: tcx,
3854
safe_stack: false
3955
};
40-
let visitor = visit::mk_vt(@visit::Visitor {
41-
visit_item: stack_check_item,
42-
visit_fn: stack_check_fn,
43-
visit_expr: stack_check_expr,
44-
..*visit::default_visitor()
45-
});
46-
visit::visit_crate(crate, (new_cx, visitor));
56+
let mut visitor = StackCheckVisitor;
57+
visit::walk_crate(&mut visitor, crate, new_cx);
4758
}
4859

49-
fn stack_check_item(item: @ast::item,
50-
(in_cx, v): (Context, visit::vt<Context>)) {
60+
fn stack_check_item(v: StackCheckVisitor,
61+
item: @ast::item,
62+
in_cx: Context) {
63+
let mut v = v;
5164
match item.node {
5265
ast::item_fn(_, ast::extern_fn, _, _, _) => {
5366
// an extern fn is already being called from C code...
5467
let new_cx = Context {safe_stack: true, ..in_cx};
55-
visit::visit_item(item, (new_cx, v));
68+
visit::walk_item(&mut v, item, new_cx);
5669
}
5770
ast::item_fn(*) => {
5871
let safe_stack = fixed_stack_segment(item.attrs);
5972
let new_cx = Context {safe_stack: safe_stack, ..in_cx};
60-
visit::visit_item(item, (new_cx, v));
73+
visit::walk_item(&mut v, item, new_cx);
6174
}
6275
ast::item_impl(_, _, _, ref methods) => {
6376
// visit_method() would make this nicer
6477
for &method in methods.iter() {
6578
let safe_stack = fixed_stack_segment(method.attrs);
6679
let new_cx = Context {safe_stack: safe_stack, ..in_cx};
67-
visit::visit_method_helper(method, (new_cx, v));
80+
visit::walk_method_helper(&mut v, method, new_cx);
6881
}
6982
}
7083
_ => {
71-
visit::visit_item(item, (in_cx, v));
84+
visit::walk_item(&mut v, item, in_cx);
7285
}
7386
}
7487

@@ -77,12 +90,13 @@ fn stack_check_item(item: @ast::item,
7790
}
7891
}
7992

80-
fn stack_check_fn<'a>(fk: &visit::fn_kind,
93+
fn stack_check_fn<'a>(v: StackCheckVisitor,
94+
fk: &visit::fn_kind,
8195
decl: &ast::fn_decl,
8296
body: &ast::Block,
8397
sp: span,
8498
id: ast::NodeId,
85-
(in_cx, v): (Context, visit::vt<Context>)) {
99+
in_cx: Context) {
86100
let safe_stack = match *fk {
87101
visit::fk_method(*) | visit::fk_item_fn(*) => {
88102
in_cx.safe_stack // see stack_check_item above
@@ -102,11 +116,13 @@ fn stack_check_fn<'a>(fk: &visit::fn_kind,
102116
};
103117
let new_cx = Context {safe_stack: safe_stack, ..in_cx};
104118
debug!("stack_check_fn(safe_stack=%b, id=%?)", safe_stack, id);
105-
visit::visit_fn(fk, decl, body, sp, id, (new_cx, v));
119+
let mut v = v;
120+
visit::walk_fn(&mut v, fk, decl, body, sp, id, new_cx);
106121
}
107122

108-
fn stack_check_expr<'a>(expr: @ast::expr,
109-
(cx, v): (Context, visit::vt<Context>)) {
123+
fn stack_check_expr<'a>(v: StackCheckVisitor,
124+
expr: @ast::expr,
125+
cx: Context) {
110126
debug!("stack_check_expr(safe_stack=%b, expr=%s)",
111127
cx.safe_stack, expr.repr(cx.tcx));
112128
if !cx.safe_stack {
@@ -126,7 +142,8 @@ fn stack_check_expr<'a>(expr: @ast::expr,
126142
_ => {}
127143
}
128144
}
129-
visit::visit_expr(expr, (cx, v));
145+
let mut v = v;
146+
visit::walk_expr(&mut v, expr, cx);
130147
}
131148

132149
fn call_to_extern_fn(cx: Context, callee: @ast::expr) {

0 commit comments

Comments
 (0)