@@ -44,7 +44,7 @@ pub(super) enum RecoverQPath {
44
44
No ,
45
45
}
46
46
47
- pub ( super ) enum IsAsCast {
47
+ pub ( super ) enum RecoverQuestionMark {
48
48
Yes ,
49
49
No ,
50
50
}
@@ -105,7 +105,7 @@ impl<'a> Parser<'a> {
105
105
RecoverQPath :: Yes ,
106
106
RecoverReturnSign :: Yes ,
107
107
None ,
108
- IsAsCast :: No ,
108
+ RecoverQuestionMark :: Yes ,
109
109
)
110
110
}
111
111
@@ -119,7 +119,7 @@ impl<'a> Parser<'a> {
119
119
RecoverQPath :: Yes ,
120
120
RecoverReturnSign :: Yes ,
121
121
Some ( ty_params) ,
122
- IsAsCast :: No ,
122
+ RecoverQuestionMark :: Yes ,
123
123
)
124
124
}
125
125
@@ -133,7 +133,7 @@ impl<'a> Parser<'a> {
133
133
RecoverQPath :: Yes ,
134
134
RecoverReturnSign :: Yes ,
135
135
None ,
136
- IsAsCast :: No ,
136
+ RecoverQuestionMark :: Yes ,
137
137
)
138
138
}
139
139
@@ -150,7 +150,7 @@ impl<'a> Parser<'a> {
150
150
RecoverQPath :: Yes ,
151
151
RecoverReturnSign :: Yes ,
152
152
None ,
153
- IsAsCast :: No ,
153
+ RecoverQuestionMark :: Yes ,
154
154
)
155
155
}
156
156
@@ -163,9 +163,21 @@ impl<'a> Parser<'a> {
163
163
RecoverQPath :: Yes ,
164
164
RecoverReturnSign :: Yes ,
165
165
None ,
166
- IsAsCast :: Yes ,
166
+ RecoverQuestionMark :: No ,
167
167
)
168
168
}
169
+
170
+ pub ( super ) fn parse_no_question_mark_recover ( & mut self ) -> PResult < ' a , P < Ty > > {
171
+ self . parse_ty_common (
172
+ AllowPlus :: Yes ,
173
+ AllowCVariadic :: No ,
174
+ RecoverQPath :: Yes ,
175
+ RecoverReturnSign :: Yes ,
176
+ None ,
177
+ RecoverQuestionMark :: No ,
178
+ )
179
+ }
180
+
169
181
/// Parse a type without recovering `:` as `->` to avoid breaking code such as `where fn() : for<'a>`
170
182
pub ( super ) fn parse_ty_for_where_clause ( & mut self ) -> PResult < ' a , P < Ty > > {
171
183
self . parse_ty_common (
@@ -174,7 +186,7 @@ impl<'a> Parser<'a> {
174
186
RecoverQPath :: Yes ,
175
187
RecoverReturnSign :: OnlyFatArrow ,
176
188
None ,
177
- IsAsCast :: No ,
189
+ RecoverQuestionMark :: Yes ,
178
190
)
179
191
}
180
192
@@ -193,7 +205,7 @@ impl<'a> Parser<'a> {
193
205
recover_qpath,
194
206
recover_return_sign,
195
207
None ,
196
- IsAsCast :: No ,
208
+ RecoverQuestionMark :: Yes ,
197
209
) ?;
198
210
FnRetTy :: Ty ( ty)
199
211
} else if recover_return_sign. can_recover ( & self . token . kind ) {
@@ -214,7 +226,7 @@ impl<'a> Parser<'a> {
214
226
recover_qpath,
215
227
recover_return_sign,
216
228
None ,
217
- IsAsCast :: No ,
229
+ RecoverQuestionMark :: Yes ,
218
230
) ?;
219
231
FnRetTy :: Ty ( ty)
220
232
} else {
@@ -229,7 +241,7 @@ impl<'a> Parser<'a> {
229
241
recover_qpath : RecoverQPath ,
230
242
recover_return_sign : RecoverReturnSign ,
231
243
ty_generics : Option < & Generics > ,
232
- is_as_cast : IsAsCast ,
244
+ recover_question_mark : RecoverQuestionMark ,
233
245
) -> PResult < ' a , P < Ty > > {
234
246
let allow_qpath_recovery = recover_qpath == RecoverQPath :: Yes ;
235
247
maybe_recover_from_interpolated_ty_qpath ! ( self , allow_qpath_recovery) ;
@@ -305,7 +317,7 @@ impl<'a> Parser<'a> {
305
317
// Try to recover from use of `+` with incorrect priority.
306
318
self . maybe_report_ambiguous_plus ( allow_plus, impl_dyn_multi, & ty) ;
307
319
self . maybe_recover_from_bad_type_plus ( allow_plus, & ty) ?;
308
- let ty = self . maybe_recover_from_question_mark ( ty, is_as_cast ) ;
320
+ let ty = self . maybe_recover_from_question_mark ( ty, recover_question_mark ) ;
309
321
self . maybe_recover_from_bad_qpath ( ty, allow_qpath_recovery)
310
322
}
311
323
0 commit comments