@@ -870,10 +870,10 @@ fn demand_expr_full(&@fn_ctxt fcx, @ty.t expected, @ast.expr e,
870870 auto then_1 = demand_block( fcx, expected, then_0) ;
871871 auto else_1;
872872 alt ( else_0) {
873- case ( none[ ast. block ] ) { else_1 = none[ ast. block ] ; }
874- case ( some[ ast. block ] ( ?b_0 ) ) {
875- auto b_1 = demand_block ( fcx, expected, b_0 ) ;
876- else_1 = some[ ast. block ] ( b_1 ) ;
873+ case ( none[ @ ast. expr ] ) { else_1 = none[ @ ast. expr ] ; }
874+ case ( some[ @ ast. expr ] ( ?e_0 ) ) {
875+ auto e_1 = demand_expr ( fcx, expected, e_0 ) ;
876+ else_1 = some[ @ ast. expr ] ( e_1 ) ;
877877 }
878878 }
879879 e_1 = ast. expr_if( cond, then_1, else_1, ast. ann_type( t) ) ;
@@ -1205,14 +1205,14 @@ fn check_expr(&@fn_ctxt fcx, @ast.expr expr) -> @ast.expr {
12051205 auto elsopt_1;
12061206 auto elsopt_t;
12071207 alt ( elsopt) {
1208- case ( some[ ast. block ] ( ?els) ) {
1209- auto els_0 = check_block ( fcx, els) ;
1210- auto els_1 = demand_block ( fcx, thn_t, els_0) ;
1211- elsopt_1 = some[ ast. block ] ( els_1) ;
1212- elsopt_t = block_ty ( els_1) ;
1208+ case ( some[ @ ast. expr ] ( ?els) ) {
1209+ auto els_0 = check_expr ( fcx, els) ;
1210+ auto els_1 = demand_expr ( fcx, thn_t, els_0) ;
1211+ elsopt_1 = some[ @ ast. expr ] ( els_1) ;
1212+ elsopt_t = expr_ty ( els_1) ;
12131213 }
1214- case ( none[ ast. block ] ) {
1215- elsopt_1 = none[ ast. block ] ;
1214+ case ( none[ @ ast. expr ] ) {
1215+ elsopt_1 = none[ @ ast. expr ] ;
12161216 elsopt_t = plain_ty( ty. ty_nil) ;
12171217 }
12181218 }
@@ -1308,6 +1308,21 @@ fn check_expr(&@fn_ctxt fcx, @ast.expr expr) -> @ast.expr {
13081308 ast. expr_alt( expr_1, arms_1, ann) ) ;
13091309 }
13101310
1311+ case ( ast. expr_block( ?b, _) ) {
1312+ auto b_0 = check_block( fcx, b) ;
1313+ auto ann;
1314+ alt ( b_0. node. expr) {
1315+ case ( some[ @ast. expr] ( ?expr) ) {
1316+ ann = ast. ann_type( expr_ty( expr) ) ;
1317+ }
1318+ case ( none[ @ast. expr] ) {
1319+ ann = ast. ann_type( plain_ty( ty. ty_nil) ) ;
1320+ }
1321+ }
1322+ ret @fold. respan[ ast. expr_] ( expr. span,
1323+ ast. expr_block( b_0, ann) ) ;
1324+ }
1325+
13111326 case ( ast. expr_bind( ?f, ?args, _) ) {
13121327 auto f_0 = check_expr( fcx, f) ;
13131328 auto t_0 = expr_ty( f_0) ;
0 commit comments