Skip to content

Commit 84f9bf1

Browse files
committed
refactor parse_address_of -> parse_borrow_expr
1 parent af5ac23 commit 84f9bf1

File tree

1 file changed

+14
-7
lines changed

1 file changed

+14
-7
lines changed

src/librustc_parse/parser/expr.rs

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -481,7 +481,7 @@ impl<'a> Parser<'a> {
481481
let (span, e) = self.interpolated_or_expr_span(e)?;
482482
(lo.to(span), self.mk_unary(UnOp::Deref, e))
483483
}
484-
token::BinOp(token::And) | token::AndAnd => self.parse_address_of(lo)?,
484+
token::BinOp(token::And) | token::AndAnd => self.parse_borrow_expr(lo)?,
485485
token::Ident(..) if self.token.is_keyword(kw::Box) => {
486486
self.bump();
487487
let e = self.parse_prefix_expr(None);
@@ -637,20 +637,27 @@ impl<'a> Parser<'a> {
637637
}
638638

639639
/// Parse `& mut? <expr>` or `& raw [ const | mut ] <expr>`.
640-
fn parse_address_of(&mut self, lo: Span) -> PResult<'a, (Span, ExprKind)> {
640+
fn parse_borrow_expr(&mut self, lo: Span) -> PResult<'a, (Span, ExprKind)> {
641641
self.expect_and()?;
642-
let (k, m) = if self.check_keyword(kw::Raw) && self.look_ahead(1, Token::is_mutability) {
642+
let (borrow_kind, mutbl) = self.parse_borrow_modifiers(lo);
643+
let expr = self.parse_prefix_expr(None);
644+
let (span, expr) = self.interpolated_or_expr_span(expr)?;
645+
Ok((lo.to(span), ExprKind::AddrOf(borrow_kind, mutbl, expr)))
646+
}
647+
648+
/// Parse `mut?` or `raw [ const | mut ]`.
649+
fn parse_borrow_modifiers(&mut self, lo: Span) -> (ast::BorrowKind, ast::Mutability) {
650+
if self.check_keyword(kw::Raw) && self.look_ahead(1, Token::is_mutability) {
651+
// `raw [ const | mut ]`.
643652
let found_raw = self.eat_keyword(kw::Raw);
644653
assert!(found_raw);
645654
let mutability = self.parse_const_or_mut().unwrap();
646655
self.sess.gated_spans.gate(sym::raw_ref_op, lo.to(self.prev_span));
647656
(ast::BorrowKind::Raw, mutability)
648657
} else {
658+
// `mut?`
649659
(ast::BorrowKind::Ref, self.parse_mutability())
650-
};
651-
let e = self.parse_prefix_expr(None);
652-
let (span, e) = self.interpolated_or_expr_span(e)?;
653-
Ok((lo.to(span), ExprKind::AddrOf(k, m, e)))
660+
}
654661
}
655662

656663
/// Parses `a.b` or `a(13)` or `a[4]` or just `a`.

0 commit comments

Comments
 (0)