about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMichael Sullivan <sully@msully.net>2011-07-20 18:15:56 -0700
committerMichael Sullivan <sully@msully.net>2011-07-20 18:15:56 -0700
commit1b9dbcc5b430cbcc97d1debc417890bf8a0b2027 (patch)
treec0c32ca2c076be6d450ffc3402daa3208a8da7bf
parent430cafbe50d1f59233f7b277f91a1e5406a65759 (diff)
downloadrust-1b9dbcc5b430cbcc97d1debc417890bf8a0b2027.tar.gz
rust-1b9dbcc5b430cbcc97d1debc417890bf8a0b2027.zip
Box the vec of freevars we store in the freevars cache.
-rw-r--r--src/comp/middle/freevars.rs8
-rw-r--r--src/comp/middle/trans.rs4
2 files changed, 6 insertions, 6 deletions
diff --git a/src/comp/middle/freevars.rs b/src/comp/middle/freevars.rs
index 4b88f2945c8..b62065520ca 100644
--- a/src/comp/middle/freevars.rs
+++ b/src/comp/middle/freevars.rs
@@ -13,7 +13,7 @@ export annotate_freevars;
 export freevar_set;
 export freevar_map;
 
-type freevar_set = ast::node_id[];
+type freevar_set = @ast::node_id[];
 type freevar_map = hashmap[ast::node_id, freevar_set];
 
 // Searches through part of the AST for all references to locals or
@@ -23,7 +23,7 @@ type freevar_map = hashmap[ast::node_id, freevar_set];
 // in order to start the search.
 fn collect_freevars(&resolve::def_map def_map, &session::session sess,
                     &fn (&walk::ast_visitor) walker,
-                    ast::node_id[] initial_decls) -> ast::node_id[] {
+                    ast::node_id[] initial_decls) -> freevar_set {
     type env =
         @rec(mutable ast::node_id[] refs,
              hashmap[ast::node_id, ()] decls,
@@ -79,12 +79,12 @@ fn collect_freevars(&resolve::def_map def_map, &session::session sess,
     walker(*visitor);
 
     // Calculate (refs - decls). This is the set of captured upvars.
-    let ast::node_id[] result = ~[];
+    auto result = ~[];
     for (ast::node_id ref_id_ in e.refs) {
         auto ref_id = ref_id_;
         if (!decls.contains_key(ref_id)) { result += ~[ref_id]; }
     }
-    ret result;
+    ret @result;
 }
 
 // Build a map from every function and for-each body to a set of the
diff --git a/src/comp/middle/trans.rs b/src/comp/middle/trans.rs
index 1eb3e86a5d0..f03ff80f74e 100644
--- a/src/comp/middle/trans.rs
+++ b/src/comp/middle/trans.rs
@@ -4285,7 +4285,7 @@ fn trans_for_each(&@block_ctxt cx, &@ast::local local, &@ast::expr seq,
     auto decl_id = local.node.id;
     auto upvars = cx.fcx.lcx.ccx.tcx.freevars.get(body.node.id);
 
-    auto environment_data = build_environment(cx, upvars);
+    auto environment_data = build_environment(cx, *upvars);
     auto llenvptr = environment_data._0;
     auto llenvptrty = environment_data._1;
 
@@ -4308,7 +4308,7 @@ fn trans_for_each(&@block_ctxt cx, &@ast::local local, &@ast::expr seq,
 
     // Generate code to load the environment out of the
     // environment pointer.
-    load_environment(cx, fcx, llenvptrty, upvars);
+    load_environment(cx, fcx, llenvptrty, *upvars);
 
     // Add an upvar for the loop variable alias.
     fcx.llupvars.insert(decl_id, llvm::LLVMGetParam(fcx.llfn, 3u));