@@ -44,7 +44,7 @@ pub(super) enum RecoverQPath {
4444 No ,
4545}
4646
47- pub ( super ) enum IsAsCast {
47+ pub ( super ) enum RecoverQuestionMark {
4848 Yes ,
4949 No ,
5050}
@@ -105,7 +105,7 @@ impl<'a> Parser<'a> {
105105 RecoverQPath :: Yes ,
106106 RecoverReturnSign :: Yes ,
107107 None ,
108- IsAsCast :: No ,
108+ RecoverQuestionMark :: Yes ,
109109 )
110110 }
111111
@@ -119,7 +119,7 @@ impl<'a> Parser<'a> {
119119 RecoverQPath :: Yes ,
120120 RecoverReturnSign :: Yes ,
121121 Some ( ty_params) ,
122- IsAsCast :: No ,
122+ RecoverQuestionMark :: Yes ,
123123 )
124124 }
125125
@@ -133,7 +133,7 @@ impl<'a> Parser<'a> {
133133 RecoverQPath :: Yes ,
134134 RecoverReturnSign :: Yes ,
135135 None ,
136- IsAsCast :: No ,
136+ RecoverQuestionMark :: Yes ,
137137 )
138138 }
139139
@@ -150,7 +150,7 @@ impl<'a> Parser<'a> {
150150 RecoverQPath :: Yes ,
151151 RecoverReturnSign :: Yes ,
152152 None ,
153- IsAsCast :: No ,
153+ RecoverQuestionMark :: Yes ,
154154 )
155155 }
156156
@@ -163,9 +163,21 @@ impl<'a> Parser<'a> {
163163 RecoverQPath :: Yes ,
164164 RecoverReturnSign :: Yes ,
165165 None ,
166- IsAsCast :: Yes ,
166+ RecoverQuestionMark :: No ,
167167 )
168168 }
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+
169181 /// Parse a type without recovering `:` as `->` to avoid breaking code such as `where fn() : for<'a>`
170182 pub ( super ) fn parse_ty_for_where_clause ( & mut self ) -> PResult < ' a , P < Ty > > {
171183 self . parse_ty_common (
@@ -174,7 +186,7 @@ impl<'a> Parser<'a> {
174186 RecoverQPath :: Yes ,
175187 RecoverReturnSign :: OnlyFatArrow ,
176188 None ,
177- IsAsCast :: No ,
189+ RecoverQuestionMark :: Yes ,
178190 )
179191 }
180192
@@ -193,7 +205,7 @@ impl<'a> Parser<'a> {
193205 recover_qpath,
194206 recover_return_sign,
195207 None ,
196- IsAsCast :: No ,
208+ RecoverQuestionMark :: Yes ,
197209 ) ?;
198210 FnRetTy :: Ty ( ty)
199211 } else if recover_return_sign. can_recover ( & self . token . kind ) {
@@ -214,7 +226,7 @@ impl<'a> Parser<'a> {
214226 recover_qpath,
215227 recover_return_sign,
216228 None ,
217- IsAsCast :: No ,
229+ RecoverQuestionMark :: Yes ,
218230 ) ?;
219231 FnRetTy :: Ty ( ty)
220232 } else {
@@ -229,7 +241,7 @@ impl<'a> Parser<'a> {
229241 recover_qpath : RecoverQPath ,
230242 recover_return_sign : RecoverReturnSign ,
231243 ty_generics : Option < & Generics > ,
232- is_as_cast : IsAsCast ,
244+ recover_question_mark : RecoverQuestionMark ,
233245 ) -> PResult < ' a , P < Ty > > {
234246 let allow_qpath_recovery = recover_qpath == RecoverQPath :: Yes ;
235247 maybe_recover_from_interpolated_ty_qpath ! ( self , allow_qpath_recovery) ;
@@ -305,7 +317,7 @@ impl<'a> Parser<'a> {
305317 // Try to recover from use of `+` with incorrect priority.
306318 self . maybe_report_ambiguous_plus ( allow_plus, impl_dyn_multi, & ty) ;
307319 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 ) ;
309321 self . maybe_recover_from_bad_qpath ( ty, allow_qpath_recovery)
310322 }
311323
0 commit comments