@@ -475,12 +475,7 @@ impl<'a> Parser<'a> {
475
475
let ( span, e) = self . interpolated_or_expr_span ( e) ?;
476
476
( lo. to ( span) , self . mk_unary ( UnOp :: Neg , e) )
477
477
}
478
- token:: BinOp ( token:: Star ) => {
479
- self . bump ( ) ;
480
- let e = self . parse_prefix_expr ( None ) ;
481
- let ( span, e) = self . interpolated_or_expr_span ( e) ?;
482
- ( lo. to ( span) , self . mk_unary ( UnOp :: Deref , e) )
483
- }
478
+ token:: BinOp ( token:: Star ) => self . parse_deref_expr ( lo) ?,
484
479
token:: BinOp ( token:: And ) | token:: AndAnd => self . parse_borrow_expr ( lo) ?,
485
480
token:: Ident ( ..) if self . token . is_keyword ( kw:: Box ) => self . parse_box_expr ( lo) ?,
486
481
token:: Ident ( ..) if self . is_mistaken_not_ident_negation ( ) => {
@@ -491,14 +486,22 @@ impl<'a> Parser<'a> {
491
486
return Ok ( self . mk_expr ( lo. to ( hi) , ex, attrs) ) ;
492
487
}
493
488
489
+ /// Parse `*expr`.
490
+ fn parse_deref_expr ( & mut self , lo : Span ) -> PResult < ' a , ( Span , ExprKind ) > {
491
+ self . bump ( ) ; // `*`
492
+ let expr = self . parse_prefix_expr ( None ) ;
493
+ let ( span, expr) = self . interpolated_or_expr_span ( expr) ?;
494
+ Ok ( ( lo. to ( span) , self . mk_unary ( UnOp :: Deref , expr) ) )
495
+ }
496
+
494
497
/// Parse `box expr`.
495
498
fn parse_box_expr ( & mut self , lo : Span ) -> PResult < ' a , ( Span , ExprKind ) > {
496
- self . bump ( ) ;
497
- let e = self . parse_prefix_expr ( None ) ;
498
- let ( span, e ) = self . interpolated_or_expr_span ( e ) ?;
499
+ self . bump ( ) ; // `box`
500
+ let expr = self . parse_prefix_expr ( None ) ;
501
+ let ( span, expr ) = self . interpolated_or_expr_span ( expr ) ?;
499
502
let span = lo. to ( span) ;
500
503
self . sess . gated_spans . gate ( sym:: box_syntax, span) ;
501
- Ok ( ( span, ExprKind :: Box ( e ) ) )
504
+ Ok ( ( span, ExprKind :: Box ( expr ) ) )
502
505
}
503
506
504
507
fn is_mistaken_not_ident_negation ( & self ) -> bool {
0 commit comments