@@ -781,6 +781,10 @@ fn mk_mac_expr(p: parser, lo: uint, hi: uint, m: ast::mac_) -> @ast::expr {
781
781
span: ast_util:: mk_sp ( lo, hi) } ;
782
782
}
783
783
784
+ fn is_bar ( t : token:: token ) -> bool {
785
+ alt t { token : : BINOP ( token:: OR . ) | token:: OROR . { true } _ { false } }
786
+ }
787
+
784
788
fn parse_bottom_expr ( p : parser ) -> @ast:: expr {
785
789
let lo = p. get_lo_pos ( ) ;
786
790
let hi = p. get_hi_pos ( ) ;
@@ -815,8 +819,7 @@ fn parse_bottom_expr(p: parser) -> @ast::expr {
815
819
hi = p. get_hi_pos ( ) ;
816
820
expect ( p, token:: RBRACE ) ;
817
821
ex = ast:: expr_rec ( fields, base) ;
818
- } else if p. peek ( ) == token:: BINOP ( token:: OR ) ||
819
- p. peek ( ) == token:: OROR {
822
+ } else if is_bar ( p. peek ( ) ) {
820
823
ret parse_fn_block_expr ( p) ;
821
824
} else {
822
825
let blk = parse_block_tail ( p, lo, ast:: default_blk) ;
@@ -1061,10 +1064,8 @@ fn parse_dot_or_call_expr_with(p: parser, e: @ast::expr) -> @ast::expr {
1061
1064
ret e;
1062
1065
} else {
1063
1066
// Call expr.
1064
-
1065
- let es =
1066
- parse_seq ( token:: LPAREN , token:: RPAREN ,
1067
- some ( token:: COMMA ) , parse_expr, p) ;
1067
+ let es = parse_seq ( token:: LPAREN , token:: RPAREN ,
1068
+ some ( token:: COMMA ) , parse_expr, p) ;
1068
1069
hi = es. span . hi ;
1069
1070
let nd = ast:: expr_call ( e, es. node ) ;
1070
1071
e = mk_expr ( p, lo, hi, nd) ;
@@ -1088,6 +1089,19 @@ fn parse_dot_or_call_expr_with(p: parser, e: @ast::expr) -> @ast::expr {
1088
1089
t { unexpected( p, t) ; }
1089
1090
}
1090
1091
}
1092
+ token:: LBRACE . when is_bar ( p. look_ahead ( 1 u) ) {
1093
+ p. bump ( ) ;
1094
+ let blk = parse_fn_block_expr ( p) ;
1095
+ alt e. node {
1096
+ ast:: expr_call ( f, args) {
1097
+ e = @{ node: ast:: expr_call ( f, args + [ blk] ) with * e} ;
1098
+ }
1099
+ _ {
1100
+ e = mk_expr ( p, lo, p. get_last_hi_pos ( ) ,
1101
+ ast:: expr_call ( e, [ blk] ) ) ;
1102
+ }
1103
+ }
1104
+ }
1091
1105
_ { ret e; }
1092
1106
}
1093
1107
}
@@ -1394,11 +1408,6 @@ fn parse_initializer(p: parser) -> option::t<ast::initializer> {
1394
1408
p . bump ( ) ;
1395
1409
ret some( { op: ast:: init_move, expr: parse_expr ( p) } ) ;
1396
1410
}
1397
-
1398
-
1399
-
1400
-
1401
-
1402
1411
// Now that the the channel is the first argument to receive,
1403
1412
// combining it with an initializer doesn't really make sense.
1404
1413
// case (token::RECV) {
@@ -1792,7 +1801,7 @@ fn parse_fn_decl(p: parser, purity: ast::purity, il: ast::inlineness) ->
1792
1801
fn parse_fn_block_decl ( p : parser ) -> ast:: fn_decl {
1793
1802
let inputs =
1794
1803
if p. peek ( ) == token:: OROR {
1795
- p. bump ( ) ; ;
1804
+ p. bump ( ) ;
1796
1805
[ ]
1797
1806
} else {
1798
1807
parse_seq ( token:: BINOP ( token:: OR ) , token:: BINOP ( token:: OR ) ,
0 commit comments