diff options
| author | Patrick Walton <[email protected]> | 2011-03-19 14:26:12 -0700 |
|---|---|---|
| committer | Patrick Walton <[email protected]> | 2011-03-19 14:26:12 -0700 |
| commit | 8e597b295f05bfad803baf9354af66af2d14585c (patch) | |
| tree | 7eba3b132d67d91a510bb8a76bfff1350de64ed5 /src | |
| parent | rustc: Do argument casts before loading aggregates, not after (diff) | |
| download | rust-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.rs | 18 |
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)) { |