@@ -1437,9 +1437,28 @@ mod Pushdown {
1437
1437
e_1 = ast. expr_alt( discrim, arms_1, triv_ann( t) ) ;
1438
1438
}
1439
1439
1440
+ case ( ast. expr_recv( ?lval_0, ?expr_0, ?ann) ) {
1441
+ auto lval_1 = pushdown_expr( fcx, next_ty_var( fcx. ccx) ,
1442
+ lval_0) ;
1443
+ auto t = expr_ty( lval_1) ;
1444
+ auto expr_1 = pushdown_expr( fcx, plain_ty( ty. ty_port( t) ) ,
1445
+ expr_0) ;
1446
+ e_1 = ast. expr_recv( lval_1, expr_1, ann) ;
1447
+ }
1448
+
1449
+ case ( ast. expr_send( ?lval_0, ?expr_0, ?ann) ) {
1450
+ auto expr_1 = pushdown_expr( fcx, next_ty_var( fcx. ccx) ,
1451
+ expr_0) ;
1452
+ auto t = expr_ty( expr_1) ;
1453
+ auto lval_1 = pushdown_expr( fcx, plain_ty( ty. ty_chan( t) ) ,
1454
+ lval_0) ;
1455
+ e_1 = ast. expr_send( lval_1, expr_1, ann) ;
1456
+ }
1457
+
1440
1458
case ( _) {
1441
1459
fcx. ccx. sess. span_unimpl( e. span,
1442
- "type unification for expression variant" ) ;
1460
+ #fmt( "type unification for expression variant: %s" ,
1461
+ pretty. pprust. expr_to_str( e) ) ) ;
1443
1462
fail;
1444
1463
}
1445
1464
}
@@ -2591,6 +2610,7 @@ fn check_stmt(&@fn_ctxt fcx, &@ast.stmt stmt) -> @ast.stmt {
2591
2610
2592
2611
case ( ast. stmt_expr ( ?expr, ?a) ) {
2593
2612
auto expr_t = check_expr ( fcx, expr) ;
2613
+ expr_t = Pushdown . pushdown_expr ( fcx, expr_ty ( expr_t) , expr_t) ;
2594
2614
ret @fold. respan [ ast. stmt_ ] ( stmt. span , ast. stmt_expr ( expr_t, a) ) ;
2595
2615
}
2596
2616
}
@@ -2608,7 +2628,9 @@ fn check_block(&@fn_ctxt fcx, &ast.block block) -> ast.block {
2608
2628
alt ( block. node . expr ) {
2609
2629
case ( none[ @ast. expr ] ) { /* empty */ }
2610
2630
case ( some[ @ast. expr ] ( ?e) ) {
2611
- expr = some[ @ast. expr ] ( check_expr ( fcx, e) ) ;
2631
+ auto expr_t = check_expr ( fcx, e) ;
2632
+ expr_t = Pushdown . pushdown_expr ( fcx, expr_ty ( expr_t) , expr_t) ;
2633
+ expr = some[ @ast. expr ] ( expr_t) ;
2612
2634
}
2613
2635
}
2614
2636
0 commit comments