From 7fbca4e31ce51ac4b7cae155780730e1ab2dccb4 Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Fri, 9 Dec 2011 19:12:03 -0800 Subject: [PATCH] sendable functions now "work", meaning pass through trans/typestate but they do not generate correct code --- src/comp/middle/resolve.rs | 5 +++++ 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 1fe94a143456..b898a73b3be6 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 { 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 0654b6da6994..8f2f79a9dc33 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|}); }