@@ -1208,15 +1208,13 @@ impl<'a> Parser<'a> {
1208
1208
} ;
1209
1209
let open_paren = self . token . span ;
1210
1210
1211
- let mut seq = self
1211
+ let seq = self
1212
1212
. parse_expr_paren_seq ( )
1213
1213
. map ( |args| self . mk_expr ( lo. to ( self . prev_token . span ) , self . mk_call ( fun, args) ) ) ;
1214
- if let Some ( expr) =
1215
- self . maybe_recover_struct_lit_bad_delims ( lo, open_paren, & mut seq, snapshot)
1216
- {
1217
- return expr;
1214
+ match self . maybe_recover_struct_lit_bad_delims ( lo, open_paren, seq, snapshot) {
1215
+ Ok ( expr) => expr,
1216
+ Err ( err) => self . recover_seq_parse_error ( Delimiter :: Parenthesis , lo, err) ,
1218
1217
}
1219
- self . recover_seq_parse_error ( Delimiter :: Parenthesis , lo, seq)
1220
1218
}
1221
1219
1222
1220
/// If we encounter a parser state that looks like the user has written a `struct` literal with
@@ -1226,10 +1224,10 @@ impl<'a> Parser<'a> {
1226
1224
& mut self ,
1227
1225
lo : Span ,
1228
1226
open_paren : Span ,
1229
- seq : & mut PResult < ' a , P < Expr > > ,
1227
+ seq : PResult < ' a , P < Expr > > ,
1230
1228
snapshot : Option < ( SnapshotParser < ' a > , ExprKind ) > ,
1231
- ) -> Option < P < Expr > > {
1232
- match ( self . may_recover ( ) , seq. as_mut ( ) , snapshot) {
1229
+ ) -> PResult < ' a , P < Expr > > {
1230
+ match ( self . may_recover ( ) , seq, snapshot) {
1233
1231
( true , Err ( err) , Some ( ( mut snapshot, ExprKind :: Path ( None , path) ) ) ) => {
1234
1232
snapshot. bump ( ) ; // `(`
1235
1233
match snapshot. parse_struct_fields ( path. clone ( ) , false , Delimiter :: Parenthesis ) {
@@ -1248,11 +1246,13 @@ impl<'a> Parser<'a> {
1248
1246
if !fields. is_empty ( ) &&
1249
1247
// `token.kind` should not be compared here.
1250
1248
// This is because the `snapshot.token.kind` is treated as the same as
1251
- // that of the open delim in `TokenTreesReader::parse_token_tree`, even if they are different.
1249
+ // that of the open delim in `TokenTreesReader::parse_token_tree`, even
1250
+ // if they are different.
1252
1251
self . span_to_snippet ( close_paren) . is_ok_and ( |snippet| snippet == ")" )
1253
1252
{
1254
- let mut replacement_err =
1255
- self . dcx ( ) . create_err ( errors:: ParenthesesWithStructFields {
1253
+ err. cancel ( ) ;
1254
+ self . dcx ( )
1255
+ . create_err ( errors:: ParenthesesWithStructFields {
1256
1256
span,
1257
1257
r#type : path,
1258
1258
braces_for_struct : errors:: BracesForStructLiteral {
@@ -1265,23 +1265,22 @@ impl<'a> Parser<'a> {
1265
1265
. map ( |field| field. span . until ( field. expr . span ) )
1266
1266
. collect ( ) ,
1267
1267
} ,
1268
- } ) ;
1269
- replacement_err. emit_without_consuming ( ) ;
1270
-
1271
- let old_err = mem:: replace ( err, replacement_err) ;
1272
- old_err. cancel ( ) ;
1268
+ } )
1269
+ . emit ( ) ;
1273
1270
} else {
1274
- err. emit_without_consuming ( ) ;
1271
+ err. emit ( ) ;
1275
1272
}
1276
- return Some ( self . mk_expr_err ( span) ) ;
1273
+ Ok ( self . mk_expr_err ( span) )
1274
+ }
1275
+ Ok ( _) => Err ( err) ,
1276
+ Err ( err2) => {
1277
+ err2. cancel ( ) ;
1278
+ Err ( err)
1277
1279
}
1278
- Ok ( _) => { }
1279
- Err ( err) => err. cancel ( ) ,
1280
1280
}
1281
1281
}
1282
- _ => { }
1282
+ ( _ , seq , _ ) => seq ,
1283
1283
}
1284
- None
1285
1284
}
1286
1285
1287
1286
/// Parse an indexing expression `expr[...]`.
@@ -1485,7 +1484,7 @@ impl<'a> Parser<'a> {
1485
1484
) {
1486
1485
Ok ( x) => x,
1487
1486
Err ( err) => {
1488
- return Ok ( self . recover_seq_parse_error ( Delimiter :: Parenthesis , lo, Err ( err) ) ) ;
1487
+ return Ok ( self . recover_seq_parse_error ( Delimiter :: Parenthesis , lo, err) ) ;
1489
1488
}
1490
1489
} ;
1491
1490
let kind = if es. len ( ) == 1 && !trailing_comma {
0 commit comments