@@ -171,6 +171,8 @@ fn bad_expr_word_table() -> hashmap[str, ()] {
171
171
words. insert ( "gc" , ( ) ) ;
172
172
words. insert ( "native" , ( ) ) ;
173
173
words. insert ( "fn" , ( ) ) ;
174
+ words. insert ( "block" , ( ) ) ;
175
+ words. insert ( "lambda" , ( ) ) ;
174
176
words. insert ( "pred" , ( ) ) ;
175
177
words. insert ( "iter" , ( ) ) ;
176
178
words. insert ( "block" , ( ) ) ;
@@ -300,6 +302,8 @@ fn parse_proto(&parser p) -> ast::proto {
300
302
ret ast:: proto_iter;
301
303
} else if ( eat_word ( p, "fn" ) ) {
302
304
ret ast:: proto_fn;
305
+ } else if ( eat_word ( p, "block" ) ) {
306
+ ret ast:: proto_block;
303
307
} else if ( eat_word ( p, "pred" ) ) {
304
308
ret ast:: proto_fn;
305
309
} else { unexpected ( p, p. peek ( ) ) ; }
@@ -582,6 +586,10 @@ fn parse_ty(&parser p) -> @ast::ty {
582
586
auto flo = p. get_last_lo_pos ( ) ;
583
587
t = parse_ty_fn ( ast:: proto_fn, p, flo) ;
584
588
alt ( t) { case ( ast:: ty_fn ( _, _, ?out, _, _) ) { hi = out. span . hi ; } }
589
+ } else if ( eat_word ( p, "block" ) ) {
590
+ auto flo = p. get_last_lo_pos ( ) ;
591
+ t = parse_ty_fn ( ast:: proto_block, p, flo) ;
592
+ alt ( t) { case ( ast:: ty_fn ( _, _, ?out, _, _) ) { hi = out. span . hi ; } }
585
593
} else if ( eat_word ( p, "iter" ) ) {
586
594
auto flo = p. get_last_lo_pos ( ) ;
587
595
t = parse_ty_fn ( ast:: proto_iter, p, flo) ;
@@ -830,7 +838,11 @@ fn parse_bottom_expr(&parser p) -> @ast::expr {
830
838
} else if ( eat_word ( p, "spawn" ) ) {
831
839
ret parse_spawn_expr ( p) ;
832
840
} else if ( eat_word ( p, "fn" ) ) {
833
- ret parse_fn_expr ( p) ;
841
+ ret parse_fn_expr ( p, ast:: proto_fn) ;
842
+ } else if ( eat_word ( p, "block" ) ) {
843
+ ret parse_fn_expr ( p, ast:: proto_block) ;
844
+ } else if ( eat_word ( p, "lambda" ) ) {
845
+ ret parse_fn_expr ( p, ast:: proto_closure) ;
834
846
} else if ( p. peek ( ) == token:: LBRACKET ) {
835
847
p. bump ( ) ;
836
848
auto mut = parse_mutability ( p) ;
@@ -1320,11 +1332,11 @@ fn parse_if_expr(&parser p) -> @ast::expr {
1320
1332
}
1321
1333
}
1322
1334
1323
- fn parse_fn_expr ( & parser p) -> @ast:: expr {
1335
+ fn parse_fn_expr ( & parser p, ast :: proto proto ) -> @ast:: expr {
1324
1336
auto lo = p. get_last_lo_pos ( ) ;
1325
1337
auto decl = parse_fn_decl ( p, ast:: impure_fn) ;
1326
1338
auto body = parse_block ( p) ;
1327
- auto _fn = rec ( decl=decl, proto=ast :: proto_fn , body=body) ;
1339
+ auto _fn = rec ( decl=decl, proto=proto , body=body) ;
1328
1340
ret mk_expr( p, lo, body. span . hi , ast:: expr_fn ( _fn) ) ;
1329
1341
}
1330
1342
@@ -1687,7 +1699,7 @@ fn parse_source_stmt(&parser p) -> @ast::stmt {
1687
1699
}
1688
1700
case ( fn_no_item) { // parse_item will have already skipped "fn"
1689
1701
1690
- auto e = parse_fn_expr ( p) ;
1702
+ auto e = parse_fn_expr ( p, ast :: proto_fn ) ;
1691
1703
e = parse_dot_or_call_expr_with ( p, e) ;
1692
1704
ret @spanned ( lo, e. span . hi , ast:: stmt_expr ( e, p. get_id ( ) ) ) ;
1693
1705
}
0 commit comments