diff options
| author | Brian Anderson <[email protected]> | 2011-02-09 22:36:37 -0500 |
|---|---|---|
| committer | Graydon Hoare <[email protected]> | 2011-02-10 12:12:10 -0800 |
| commit | f17a3421e01399bcc1a6f8540273d7b4440397a1 (patch) | |
| tree | dc17d7b517a90121f09f400014e6c38d94f52b0a /src/comp/middle | |
| parent | Add compile-fail tests for tail calls (diff) | |
| download | rust-f17a3421e01399bcc1a6f8540273d7b4440397a1.tar.xz rust-f17a3421e01399bcc1a6f8540273d7b4440397a1.zip | |
Cleanup for 'be' statement and comments about future typestate
Diffstat (limited to 'src/comp/middle')
| -rw-r--r-- | src/comp/middle/trans.rs | 5 | ||||
| -rw-r--r-- | src/comp/middle/typeck.rs | 18 |
2 files changed, 10 insertions, 13 deletions
diff --git a/src/comp/middle/trans.rs b/src/comp/middle/trans.rs index 499ab027..45d54e6a 100644 --- a/src/comp/middle/trans.rs +++ b/src/comp/middle/trans.rs @@ -3129,7 +3129,10 @@ fn trans_ret(@block_ctxt cx, &option.t[@ast.expr] e) -> result { } fn trans_be(@block_ctxt cx, @ast.expr e) -> result { - // FIXME: So this isn't actually a tail call + // FIXME: This should be a typestate precondition + check ast.is_call_expr(e); + // FIXME: Turn this into a real tail call once + // calling convention issues are settled ret trans_ret(cx, some(e)); } diff --git a/src/comp/middle/typeck.rs b/src/comp/middle/typeck.rs index 7a2b0616..4c3903a7 100644 --- a/src/comp/middle/typeck.rs +++ b/src/comp/middle/typeck.rs @@ -1720,18 +1720,12 @@ fn check_stmt(&@fn_ctxt fcx, &@ast.stmt stmt) -> @ast.stmt { } case (ast.stmt_be(?expr)) { - alt (expr.node) { - case (ast.expr_call(_, _, _)) { - auto expr_0 = check_expr(fcx, expr); - auto expr_1 = demand_expr(fcx, fcx.ret_ty, expr_0); - ret @fold.respan[ast.stmt_](stmt.span, - ast.stmt_be(expr_1)); - } - case (_) { - fcx.ccx.sess.err("Non-call expression in tail call"); - fail; - } - } + /* FIXME: prove instead of check */ + check ast.is_call_expr(expr); + auto expr_0 = check_expr(fcx, expr); + auto expr_1 = demand_expr(fcx, fcx.ret_ty, expr_0); + ret @fold.respan[ast.stmt_](stmt.span, + ast.stmt_be(expr_1)); } case (ast.stmt_log(?expr)) { |