Make resolve recognize upvars
Upvars are now marked with def_upvar throughout, not just when going through freevars::lookup_def. This makes things less error-prone. One thing to watch out for is that def_upvar is used in `for each` bodies too, when they refer to a local outside the body.
This commit is contained in:
parent
2d1dec78e7
commit
6ba4eacddf
16 changed files with 223 additions and 257 deletions
|
|
@ -155,7 +155,7 @@ fn compile_input(sess: session::session, cfg: ast::crate_cfg, input: &istr,
|
|||
bind resolve::resolve_crate(sess, ast_map, crate));
|
||||
let freevars =
|
||||
time(time_passes, ~"freevar finding",
|
||||
bind freevars::annotate_freevars(sess, def_map, crate));
|
||||
bind freevars::annotate_freevars(def_map, crate));
|
||||
let ty_cx = ty::mk_ctxt(sess, def_map, ext_map, ast_map, freevars);
|
||||
time(time_passes, ~"typechecking",
|
||||
bind typeck::check_crate(ty_cx, crate));
|
||||
|
|
@ -240,7 +240,7 @@ fn pretty_print_input(sess: session::session, cfg: ast::crate_cfg,
|
|||
let amap = middle::ast_map::map_crate(*crate);
|
||||
let {def_map: def_map, ext_map: ext_map} =
|
||||
resolve::resolve_crate(sess, amap, crate);
|
||||
let freevars = freevars::annotate_freevars(sess, def_map, crate);
|
||||
let freevars = freevars::annotate_freevars(def_map, crate);
|
||||
let ty_cx = ty::mk_ctxt(sess, def_map, ext_map, amap, freevars);
|
||||
typeck::check_crate(ty_cx, crate);
|
||||
ann = {pre: ann_paren_for_expr, post: bind ann_typed_post(ty_cx, _)};
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue