diff options
| author | Patrick Walton <[email protected]> | 2011-03-18 12:47:44 -0700 |
|---|---|---|
| committer | Patrick Walton <[email protected]> | 2011-03-18 12:49:48 -0700 |
| commit | e8938f5fb2cfa756b8186f6ed33e2d0d509a31a0 (patch) | |
| tree | d88b3f565612451d002dc19917b2c05582331e53 | |
| parent | Merge branch 'master' of git://github.com/graydon/rust (diff) | |
| download | rust-e8938f5fb2cfa756b8186f6ed33e2d0d509a31a0.tar.xz rust-e8938f5fb2cfa756b8186f6ed33e2d0d509a31a0.zip | |
rustc: Unify over alt expressions
| -rw-r--r-- | src/comp/middle/typeck.rs | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/comp/middle/typeck.rs b/src/comp/middle/typeck.rs index 14d4f714..52dc2eed 100644 --- a/src/comp/middle/typeck.rs +++ b/src/comp/middle/typeck.rs @@ -1401,6 +1401,20 @@ fn demand_expr_full(&@fn_ctxt fcx, @ty.t expected, @ast.expr e, e_1 = ast.expr_chan(es_1, ast.ann_type(t, none[vec[@ty.t]])); } + case (ast.expr_alt(?discrim, ?arms_0, ?ann)) { + auto t = expected; + let vec[ast.arm] arms_1 = vec(); + for (ast.arm arm_0 in arms_0) { + auto block_1 = demand_block(fcx, expected, arm_0.block); + t = demand(fcx, e.span, t, block_ty(block_1)); + auto arm_1 = rec(pat=arm_0.pat, block=block_1, + index=arm_0.index); + arms_1 += vec(arm_1); + } + e_1 = ast.expr_alt(discrim, arms_1, + ast.ann_type(t, none[vec[@ty.t]])); + } + case (_) { fcx.ccx.sess.span_unimpl(e.span, "type unification for expression variant"); |