aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPatrick Walton <[email protected]>2011-03-19 14:26:12 -0700
committerPatrick Walton <[email protected]>2011-03-19 14:26:12 -0700
commit8e597b295f05bfad803baf9354af66af2d14585c (patch)
tree7eba3b132d67d91a510bb8a76bfff1350de64ed5 /src
parentrustc: Do argument casts before loading aggregates, not after (diff)
downloadrust-8e597b295f05bfad803baf9354af66af2d14585c.tar.xz
rust-8e597b295f05bfad803baf9354af66af2d14585c.zip
rustc: Allow arguments to be captured as upvars. std.rc compiles now, except for the lack of a main fn.
Diffstat (limited to 'src')
-rw-r--r--src/comp/middle/trans.rs18
1 files changed, 15 insertions, 3 deletions
diff --git a/src/comp/middle/trans.rs b/src/comp/middle/trans.rs
index aa9c3cba..852e6d01 100644
--- a/src/comp/middle/trans.rs
+++ b/src/comp/middle/trans.rs
@@ -3002,7 +3002,12 @@ fn trans_for_each(@block_ctxt cx,
auto llbinding;
alt (cx.fcx.lllocals.find(did)) {
case (none[ValueRef]) {
- llbinding = cx.fcx.llupvars.get(did);
+ alt (cx.fcx.llupvars.find(did)) {
+ case (none[ValueRef]) {
+ llbinding = cx.fcx.llargs.get(did);
+ }
+ case (some[ValueRef](?llval)) { llbinding = llval; }
+ }
}
case (some[ValueRef](?llval)) { llbinding = llval; }
}
@@ -3384,8 +3389,15 @@ fn trans_path(@block_ctxt cx, &ast.path p, &option.t[ast.def] dopt,
case (some[ast.def](?def)) {
alt (def) {
case (ast.def_arg(?did)) {
- check (cx.fcx.llargs.contains_key(did));
- ret lval_mem(cx, cx.fcx.llargs.get(did));
+ alt (cx.fcx.llargs.find(did)) {
+ case (none[ValueRef]) {
+ check (cx.fcx.llupvars.contains_key(did));
+ ret lval_mem(cx, cx.fcx.llupvars.get(did));
+ }
+ case (some[ValueRef](?llval)) {
+ ret lval_mem(cx, llval);
+ }
+ }
}
case (ast.def_local(?did)) {
alt (cx.fcx.lllocals.find(did)) {