@@ -475,12 +475,7 @@ impl<'a> Parser<'a> {
475475 let ( span, e) = self . interpolated_or_expr_span ( e) ?;
476476 ( lo. to ( span) , self . mk_unary ( UnOp :: Neg , e) )
477477 }
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) ?,
484479 token:: BinOp ( token:: And ) | token:: AndAnd => self . parse_borrow_expr ( lo) ?,
485480 token:: Ident ( ..) if self . token . is_keyword ( kw:: Box ) => self . parse_box_expr ( lo) ?,
486481 token:: Ident ( ..) if self . is_mistaken_not_ident_negation ( ) => {
@@ -491,14 +486,22 @@ impl<'a> Parser<'a> {
491486 return Ok ( self . mk_expr ( lo. to ( hi) , ex, attrs) ) ;
492487 }
493488
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+
494497 /// Parse `box expr`.
495498 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 ) ?;
499502 let span = lo. to ( span) ;
500503 self . sess . gated_spans . gate ( sym:: box_syntax, span) ;
501- Ok ( ( span, ExprKind :: Box ( e ) ) )
504+ Ok ( ( span, ExprKind :: Box ( expr ) ) )
502505 }
503506
504507 fn is_mistaken_not_ident_negation ( & self ) -> bool {
0 commit comments