about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorPatrick Walton <pcwalton@mimiga.net>2011-03-18 12:47:44 -0700
committerPatrick Walton <pcwalton@mimiga.net>2011-03-18 12:49:48 -0700
commite8938f5fb2cfa756b8186f6ed33e2d0d509a31a0 (patch)
treed88b3f565612451d002dc19917b2c05582331e53 /src
parent6dee1ac161a22a4bc1e49c5dac3c7bbba1ff97f0 (diff)
rustc: Unify over alt expressions
Diffstat (limited to 'src')
-rw-r--r--src/comp/middle/typeck.rs14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/comp/middle/typeck.rs b/src/comp/middle/typeck.rs
index 14d4f714b0b..52dc2eede14 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");