diff options
| author | Niko Matsakis <niko@alum.mit.edu> | 2011-12-09 19:12:03 -0800 |
|---|---|---|
| committer | Niko Matsakis <niko@alum.mit.edu> | 2011-12-14 14:32:19 -0800 |
| commit | 7fbca4e31ce51ac4b7cae155780730e1ab2dccb4 (patch) | |
| tree | fb4f7d4f8932926723b26094dafbd530d5caf008 /src/comp/middle | |
| parent | aa1cd61c84199c8a1e44645e4af3f8c15c6dd018 (diff) | |
sendable functions now "work", meaning pass through trans/typestate
but they do not generate correct code
Diffstat (limited to 'src/comp/middle')
| -rw-r--r-- | src/comp/middle/resolve.rs | 5 | ||||
| -rw-r--r-- | src/comp/middle/trans.rs | 4 |
2 files changed, 7 insertions, 2 deletions
diff --git a/src/comp/middle/resolve.rs b/src/comp/middle/resolve.rs index 1fe94a14345..b898a73b3be 100644 --- a/src/comp/middle/resolve.rs +++ b/src/comp/middle/resolve.rs @@ -678,9 +678,14 @@ fn scope_is_fn(sc: scope) -> bool { }; } +// Returns: +// none - does not close +// some(true) - closes and permits mutation +// some(false) - closes but no mutation fn scope_closes(sc: scope) -> option::t<bool> { alt sc { scope_fn(_, ast::proto_block., _) { some(true) } + scope_fn(_, ast::proto_send., _) { some(false) } scope_fn(_, ast::proto_shared(_), _) { some(false) } _ { none } } diff --git a/src/comp/middle/trans.rs b/src/comp/middle/trans.rs index 0654b6da699..8f2f79a9dc3 100644 --- a/src/comp/middle/trans.rs +++ b/src/comp/middle/trans.rs @@ -2192,7 +2192,7 @@ fn trans_expr_fn(bcx: @block_ctxt, f: ast::_fn, sp: span, || f.proto == ast::proto_shared(ast::sugar_sexy); let env; alt f.proto { - ast::proto_block. | ast::proto_shared(_) { + ast::proto_block. | ast::proto_shared(_) | ast::proto_send. { let upvars = get_freevars(ccx.tcx, id); let env_r = build_closure(bcx, upvars, copying); env = env_r.ptr; @@ -2201,7 +2201,7 @@ fn trans_expr_fn(bcx: @block_ctxt, f: ast::_fn, sp: span, load_environment(bcx, fcx, env_r.ptrty, upvars, copying); }); } - _ { + ast::proto_bare. { env = C_null(T_opaque_closure_ptr(ccx)); trans_closure(sub_cx, sp, f, llfn, none, [], id, {|_fcx|}); } |
