@@ -59,7 +59,8 @@ pub(super) fn stmt(p: &mut Parser<'_>, semicolon: Semicolon) {
59
59
attributes:: outer_attrs ( p) ;
60
60
61
61
if p. at ( T ! [ let ] ) {
62
- let_stmt ( p, m, semicolon) ;
62
+ let_stmt ( p, semicolon) ;
63
+ m. complete ( p, LET_STMT ) ;
63
64
return ;
64
65
}
65
66
@@ -109,54 +110,53 @@ pub(super) fn stmt(p: &mut Parser<'_>, semicolon: Semicolon) {
109
110
m. complete ( p, EXPR_STMT ) ;
110
111
}
111
112
}
113
+ }
112
114
113
- // test let_stmt
114
- // fn f() { let x: i32 = 92; }
115
- fn let_stmt ( p : & mut Parser < ' _ > , m : Marker , with_semi : Semicolon ) {
116
- p. bump ( T ! [ let ] ) ;
117
- patterns:: pattern ( p) ;
118
- if p. at ( T ! [ : ] ) {
119
- // test let_stmt_ascription
120
- // fn f() { let x: i32; }
121
- types:: ascription ( p) ;
122
- }
115
+ // test let_stmt
116
+ // fn f() { let x: i32 = 92; }
117
+ pub ( super ) fn let_stmt ( p : & mut Parser < ' _ > , with_semi : Semicolon ) {
118
+ p. bump ( T ! [ let ] ) ;
119
+ patterns:: pattern ( p) ;
120
+ if p. at ( T ! [ : ] ) {
121
+ // test let_stmt_ascription
122
+ // fn f() { let x: i32; }
123
+ types:: ascription ( p) ;
124
+ }
123
125
124
- let mut expr_after_eq: Option < CompletedMarker > = None ;
125
- if p. eat ( T ! [ =] ) {
126
- // test let_stmt_init
127
- // fn f() { let x = 92; }
128
- expr_after_eq = expressions:: expr ( p) ;
129
- }
126
+ let mut expr_after_eq: Option < CompletedMarker > = None ;
127
+ if p. eat ( T ! [ =] ) {
128
+ // test let_stmt_init
129
+ // fn f() { let x = 92; }
130
+ expr_after_eq = expressions:: expr ( p) ;
131
+ }
130
132
131
- if p. at ( T ! [ else] ) {
132
- // test_err let_else_right_curly_brace
133
- // fn func() { let Some(_) = {Some(1)} else { panic!("h") };}
134
- if let Some ( expr) = expr_after_eq {
135
- if BlockLike :: is_blocklike ( expr. kind ( ) ) {
136
- p. error (
137
- "right curly brace `}` before `else` in a `let...else` statement not allowed" ,
138
- )
139
- }
133
+ if p. at ( T ! [ else] ) {
134
+ // test_err let_else_right_curly_brace
135
+ // fn func() { let Some(_) = {Some(1)} else { panic!("h") };}
136
+ if let Some ( expr) = expr_after_eq {
137
+ if BlockLike :: is_blocklike ( expr. kind ( ) ) {
138
+ p. error (
139
+ "right curly brace `}` before `else` in a `let...else` statement not allowed" ,
140
+ )
140
141
}
141
-
142
- // test let_else
143
- // fn f() { let Some(x) = opt else { return }; }
144
- let m = p. start ( ) ;
145
- p. bump ( T ! [ else] ) ;
146
- block_expr ( p) ;
147
- m. complete ( p, LET_ELSE ) ;
148
142
}
149
143
150
- match with_semi {
151
- Semicolon :: Forbidden => ( ) ,
152
- Semicolon :: Optional => {
153
- p. eat ( T ! [ ; ] ) ;
154
- }
155
- Semicolon :: Required => {
156
- p. expect ( T ! [ ; ] ) ;
157
- }
144
+ // test let_else
145
+ // fn f() { let Some(x) = opt else { return }; }
146
+ let m = p. start ( ) ;
147
+ p. bump ( T ! [ else] ) ;
148
+ block_expr ( p) ;
149
+ m. complete ( p, LET_ELSE ) ;
150
+ }
151
+
152
+ match with_semi {
153
+ Semicolon :: Forbidden => ( ) ,
154
+ Semicolon :: Optional => {
155
+ p. eat ( T ! [ ; ] ) ;
156
+ }
157
+ Semicolon :: Required => {
158
+ p. expect ( T ! [ ; ] ) ;
158
159
}
159
- m. complete ( p, LET_STMT ) ;
160
160
}
161
161
}
162
162
0 commit comments