File tree Expand file tree Collapse file tree 4 files changed +75
-21
lines changed
ra_parser/src/grammar/expressions
ra_syntax/test_data/parser Expand file tree Collapse file tree 4 files changed +75
-21
lines changed Original file line number Diff line number Diff line change @@ -230,14 +230,20 @@ fn lambda_expr(p: &mut Parser) -> CompletedMarker {
230
230
p. eat ( T ! [ async ] ) ;
231
231
p. eat ( T ! [ move] ) ;
232
232
params:: param_list_closure ( p) ;
233
- if opt_fn_ret_type ( p) && !p. at ( T ! [ '{' ] ) {
234
- p. error ( "expected `{`" ) ;
235
- }
236
-
237
- if p. at_ts ( EXPR_FIRST ) {
238
- expr ( p) ;
233
+ if opt_fn_ret_type ( p) {
234
+ if p. at ( T ! [ '{' ] ) {
235
+ // test lambda_ret_block
236
+ // fn main() { || -> i32 { 92 }(); }
237
+ block_expr ( p, None ) ;
238
+ } else {
239
+ p. error ( "expected `{`" ) ;
240
+ }
239
241
} else {
240
- p. error ( "expected expression" ) ;
242
+ if p. at_ts ( EXPR_FIRST ) {
243
+ expr ( p) ;
244
+ } else {
245
+ p. error ( "expected expression" ) ;
246
+ }
241
247
}
242
248
m. complete ( p, LAMBDA_EXPR )
243
249
}
Original file line number Diff line number Diff line change @@ -12,8 +12,8 @@ SOURCE_FILE@[0; 42)
12
12
BLOCK@[10; 41)
13
13
L_CURLY@[10; 11) "{"
14
14
WHITESPACE@[11; 16) "\n "
15
- EXPR_STMT@[16; 39 )
16
- LAMBDA_EXPR@[16; 38 )
15
+ EXPR_STMT@[16; 24 )
16
+ LAMBDA_EXPR@[16; 24 )
17
17
PARAM_LIST@[16; 18)
18
18
PIPE@[16; 17) "|"
19
19
PIPE@[17; 18) "|"
@@ -24,20 +24,22 @@ SOURCE_FILE@[0; 42)
24
24
TUPLE_TYPE@[22; 24)
25
25
L_PAREN@[22; 23) "("
26
26
R_PAREN@[23; 24) ")"
27
- WHITESPACE@[24; 25) " "
28
- BLOCK_EXPR@[25; 38)
29
- UNSAFE_KW@[25; 31) "unsafe"
30
- WHITESPACE@[31; 32) " "
31
- BLOCK@[32; 38)
32
- L_CURLY@[32; 33) "{"
33
- WHITESPACE@[33; 34) " "
34
- TUPLE_EXPR@[34; 36)
35
- L_PAREN@[34; 35) "("
36
- R_PAREN@[35; 36) ")"
37
- WHITESPACE@[36; 37) " "
38
- R_CURLY@[37; 38) "}"
27
+ WHITESPACE@[24; 25) " "
28
+ EXPR_STMT@[25; 39)
29
+ BLOCK_EXPR@[25; 38)
30
+ UNSAFE_KW@[25; 31) "unsafe"
31
+ WHITESPACE@[31; 32) " "
32
+ BLOCK@[32; 38)
33
+ L_CURLY@[32; 33) "{"
34
+ WHITESPACE@[33; 34) " "
35
+ TUPLE_EXPR@[34; 36)
36
+ L_PAREN@[34; 35) "("
37
+ R_PAREN@[35; 36) ")"
38
+ WHITESPACE@[36; 37) " "
39
+ R_CURLY@[37; 38) "}"
39
40
SEMI@[38; 39) ";"
40
41
WHITESPACE@[39; 40) "\n"
41
42
R_CURLY@[40; 41) "}"
42
43
WHITESPACE@[41; 42) "\n"
43
44
error [24; 24): expected `{`
45
+ error [24; 24): expected SEMI
Original file line number Diff line number Diff line change
1
+ fn main ( ) { || -> i32 { 92 } ( ) ; }
Original file line number Diff line number Diff line change
1
+ SOURCE_FILE@[0; 34)
2
+ FN_DEF@[0; 33)
3
+ FN_KW@[0; 2) "fn"
4
+ WHITESPACE@[2; 3) " "
5
+ NAME@[3; 7)
6
+ IDENT@[3; 7) "main"
7
+ PARAM_LIST@[7; 9)
8
+ L_PAREN@[7; 8) "("
9
+ R_PAREN@[8; 9) ")"
10
+ WHITESPACE@[9; 10) " "
11
+ BLOCK_EXPR@[10; 33)
12
+ BLOCK@[10; 33)
13
+ L_CURLY@[10; 11) "{"
14
+ WHITESPACE@[11; 12) " "
15
+ EXPR_STMT@[12; 31)
16
+ CALL_EXPR@[12; 30)
17
+ LAMBDA_EXPR@[12; 28)
18
+ PARAM_LIST@[12; 14)
19
+ PIPE@[12; 13) "|"
20
+ PIPE@[13; 14) "|"
21
+ WHITESPACE@[14; 15) " "
22
+ RET_TYPE@[15; 21)
23
+ THIN_ARROW@[15; 17) "->"
24
+ WHITESPACE@[17; 18) " "
25
+ PATH_TYPE@[18; 21)
26
+ PATH@[18; 21)
27
+ PATH_SEGMENT@[18; 21)
28
+ NAME_REF@[18; 21)
29
+ IDENT@[18; 21) "i32"
30
+ WHITESPACE@[21; 22) " "
31
+ BLOCK_EXPR@[22; 28)
32
+ BLOCK@[22; 28)
33
+ L_CURLY@[22; 23) "{"
34
+ WHITESPACE@[23; 24) " "
35
+ LITERAL@[24; 26)
36
+ INT_NUMBER@[24; 26) "92"
37
+ WHITESPACE@[26; 27) " "
38
+ R_CURLY@[27; 28) "}"
39
+ ARG_LIST@[28; 30)
40
+ L_PAREN@[28; 29) "("
41
+ R_PAREN@[29; 30) ")"
42
+ SEMI@[30; 31) ";"
43
+ WHITESPACE@[31; 32) " "
44
+ R_CURLY@[32; 33) "}"
45
+ WHITESPACE@[33; 34) "\n"
You can’t perform that action at this time.
0 commit comments