diff options
| author | Tim Chevalier <chevalier@alum.wellesley.edu> | 2011-08-26 10:14:58 -0700 |
|---|---|---|
| committer | Tim Chevalier <chevalier@alum.wellesley.edu> | 2011-08-26 10:14:58 -0700 |
| commit | c02f346e2cdc80ef476ff625b59613acf62ccf87 (patch) | |
| tree | 0672f0abe828bcb550aeda77f626d0bf15ec9812 /src/comp | |
| parent | 5472d2238ad2339869255bc8905a82b01a2b3c27 (diff) | |
| download | rust-c02f346e2cdc80ef476ff625b59613acf62ccf87.tar.gz rust-c02f346e2cdc80ef476ff625b59613acf62ccf87.zip | |
Revert "Revert "Use typestate constraints for trans_be""
This reverts commit b0db13956f4f106c4bf5a9210c7df439b34506a4. (Should work now that we have a new snapshot)
Diffstat (limited to 'src/comp')
| -rw-r--r-- | src/comp/middle/trans.rs | 15 | ||||
| -rw-r--r-- | src/comp/syntax/ast_util.rs | 4 |
2 files changed, 13 insertions, 6 deletions
diff --git a/src/comp/middle/trans.rs b/src/comp/middle/trans.rs index 974698e390d..022ad4cdded 100644 --- a/src/comp/middle/trans.rs +++ b/src/comp/middle/trans.rs @@ -4441,7 +4441,14 @@ fn trans_expr_out(cx: &@block_ctxt, e: &@ast::expr, output: out_method) -> ast::expr_cont. { ret trans_cont(e.span, cx); } ast::expr_ret(ex) { ret trans_ret(cx, ex); } ast::expr_put(ex) { ret trans_put(cx, ex); } - ast::expr_be(ex) { ret trans_be(cx, ex); } + ast::expr_be(ex) { + // Ideally, the expr_be tag would have a precondition + // that is_call_expr(ex) -- but we don't support that + // yet + // FIXME + check ast_util::is_call_expr(ex); + ret trans_be(cx, ex); + } ast::expr_anon_obj(anon_obj) { ret trans_anon_obj(cx, e.span, anon_obj, e.id); } @@ -4762,10 +4769,10 @@ fn trans_ret(cx: &@block_ctxt, e: &option::t<@ast::expr>) -> result { fn build_return(bcx: &@block_ctxt) { bld::Br(bcx, bcx_fcx(bcx).llreturn); } -fn trans_be(cx: &@block_ctxt, e: &@ast::expr) -> result { - // FIXME: This should be a typestate precondition +// fn trans_be(cx: &@block_ctxt, e: &@ast::expr) -> result { +fn trans_be(cx: &@block_ctxt, e: &@ast::expr) + : ast_util::is_call_expr(e) -> result { - assert (ast_util::is_call_expr(e)); // FIXME: Turn this into a real tail call once // calling convention issues are settled diff --git a/src/comp/syntax/ast_util.rs b/src/comp/syntax/ast_util.rs index 517e252dd9c..15f41af5cac 100644 --- a/src/comp/syntax/ast_util.rs +++ b/src/comp/syntax/ast_util.rs @@ -167,8 +167,8 @@ fn is_exported(i: ident, m: _mod) -> bool { ret count == 0u && !nonlocal; } -fn is_call_expr(e: @expr) -> bool { - alt e.node { expr_call(_, _) { ret true; } _ { ret false; } } +pure fn is_call_expr(e: @expr) -> bool { + alt e.node { expr_call(_, _) { true } _ { false } } } fn is_constraint_arg(e: @expr) -> bool { |
