about summary refs log tree commit diff
path: root/src/comp/driver
diff options
context:
space:
mode:
authorMichael Sullivan <sully@msully.net>2011-07-18 19:14:01 -0700
committerBrian Anderson <banderson@mozilla.com>2011-07-19 12:01:14 -0700
commitf8c6d282f8438fd2e3229d1d7a428df462f52076 (patch)
tree66b333a31d8ce21b670b0f9d642bd258cffd441a /src/comp/driver
parentc4bcd0a44d64d43a5c1dfde73d4e3f94e2419da7 (diff)
downloadrust-f8c6d282f8438fd2e3229d1d7a428df462f52076.tar.gz
rust-f8c6d282f8438fd2e3229d1d7a428df462f52076.zip
Add a pass that finds all of the free variables.
Diffstat (limited to 'src/comp/driver')
-rw-r--r--src/comp/driver/rustc.rs9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/comp/driver/rustc.rs b/src/comp/driver/rustc.rs
index b810fbecc72..b24dedffdd0 100644
--- a/src/comp/driver/rustc.rs
+++ b/src/comp/driver/rustc.rs
@@ -10,6 +10,7 @@ import syntax::codemap;
 import front::attr;
 import middle::trans;
 import middle::resolve;
+import middle::freevars;
 import middle::ty;
 import middle::typeck;
 import middle::tstate::ck;
@@ -131,7 +132,10 @@ fn compile_input(session::session sess, ast::crate_cfg cfg, str input,
     auto d =
         time(time_passes, "resolution",
              bind resolve::resolve_crate(sess, ast_map, crate));
-    auto ty_cx = ty::mk_ctxt(sess, d._0, d._1, ast_map);
+    auto freevars =
+        time(time_passes, "freevar finding",
+             bind freevars::annotate_freevars(sess, d._0, crate));
+    auto ty_cx = ty::mk_ctxt(sess, d._0, d._1, ast_map, freevars);
     time[()](time_passes, "typechecking",
              bind typeck::check_crate(ty_cx, crate));
     if (sess.get_opts().run_typestate) {
@@ -196,7 +200,8 @@ fn pretty_print_input(session::session sess, ast::crate_cfg cfg,
         case (ppm_typed) {
             auto amap = middle::ast_map::map_crate(*crate);
             auto d = resolve::resolve_crate(sess, amap, crate);
-            auto ty_cx = ty::mk_ctxt(sess, d._0, d._1, amap);
+            auto freevars = freevars::annotate_freevars(sess, d._0, crate);
+            auto ty_cx = ty::mk_ctxt(sess, d._0, d._1, amap, freevars);
             typeck::check_crate(ty_cx, crate);
             ann = rec(pre=ann_paren_for_expr,
                       post=bind ann_typed_post(ty_cx, _));