Skip to content

Commit 57a57b8

Browse files
committed
---
yaml --- r: 4060 b: refs/heads/master c: 4170390 h: refs/heads/master v: v3
1 parent 0474a12 commit 57a57b8

File tree

3 files changed

+26
-3
lines changed

3 files changed

+26
-3
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
---
2-
refs/heads/master: 4b59ae0aa9051e6a5fbec43d0c9bb8a12c0711e0
2+
refs/heads/master: 4170390cb6cd26e7491968b4383b0e93317ec112

trunk/src/comp/middle/freevars.rs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@
33

44
import std::map;
55
import std::map::*;
6+
import std::ivec;
7+
import std::option;
8+
import std::int;
9+
import std::option::*;
610
import syntax::ast;
711
import syntax::walk;
812
import driver::session;
@@ -12,6 +16,10 @@ import syntax::codemap::span;
1216
export annotate_freevars;
1317
export freevar_set;
1418
export freevar_map;
19+
export get_freevars;
20+
export has_freevars;
21+
export is_freevarof;
22+
1523

1624
type freevar_set = @ast::node_id[];
1725
type freevar_map = hashmap[ast::node_id, freevar_set];
@@ -128,6 +136,21 @@ fn annotate_freevars(&session::session sess, &resolve::def_map def_map,
128136
ret e.freevars;
129137
}
130138

139+
fn get_freevars(&ty::ctxt tcx, ast::node_id fid) -> freevar_set {
140+
alt (tcx.freevars.find(fid)) {
141+
case (none) {
142+
fail "get_freevars: " + int::str(fid) + " has no freevars";
143+
}
144+
case (some(?d)) { ret d; }
145+
}
146+
}
147+
fn has_freevars(&ty::ctxt tcx, ast::node_id fid) -> bool {
148+
ret ivec::len(*get_freevars(tcx, fid)) != 0u;
149+
}
150+
fn is_freevar_of(&ty::ctxt tcx, ast::node_id var, ast::node_id f) -> bool {
151+
ret ivec::member(var, *get_freevars(tcx, f));
152+
}
153+
131154
// Local Variables:
132155
// mode: rust
133156
// fill-column: 78;

trunk/src/comp/middle/trans.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ import syntax::ast;
2727
import syntax::walk;
2828
import driver::session;
2929
import middle::ty;
30-
import middle::freevars;
30+
import middle::freevars::*;
3131
import back::link;
3232
import back::x86;
3333
import back::abi;
@@ -3941,7 +3941,7 @@ fn trans_for_each(&@block_ctxt cx, &@ast::local local, &@ast::expr seq,
39413941
// FIXME: possibly support alias-mode here?
39423942
auto decl_ty = node_id_type(lcx.ccx, local.node.id);
39433943
auto decl_id = local.node.id;
3944-
auto upvars = cx.fcx.lcx.ccx.tcx.freevars.get(body.node.id);
3944+
auto upvars = get_freevars(lcx.ccx.tcx, body.node.id);
39453945

39463946
auto environment_data = build_environment(cx, *upvars);
39473947
auto llenvptr = environment_data._0;

0 commit comments

Comments
 (0)