Skip to content

Commit c86abb3

Browse files
committed
transpile: parenthesize subexpression of reference expressions if necessary
1 parent b9339f4 commit c86abb3

File tree

1 file changed

+6
-3
lines changed

1 file changed

+6
-3
lines changed

c2rust-ast-builder/src/builder.rs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -985,13 +985,13 @@ impl Builder {
985985
}
986986

987987
pub fn addr_of_expr(self, e: Box<Expr>) -> Box<Expr> {
988-
Box::new(Expr::Reference(ExprReference {
988+
Box::new(parenthesize_if_necessary(Expr::Reference(ExprReference {
989989
attrs: self.attrs,
990990
and_token: Token![&](self.span),
991991
raw: Default::default(),
992992
mutability: self.mutbl.to_token(),
993993
expr: e,
994-
}))
994+
})))
995995
}
996996

997997
pub fn mac_expr(self, mac: Macro) -> Box<Expr> {
@@ -2280,7 +2280,7 @@ fn expr_precedence(e: &Expr) -> u8 {
22802280
Expr::Field(_ef) => 16,
22812281
Expr::Call(_) | Expr::Index(_) => 15,
22822282
Expr::Try(_et) => 14,
2283-
Expr::Unary(_eu) => 13,
2283+
Expr::Unary(_) | Expr::Reference(_) => 13,
22842284
Expr::Cast(_ec) => 12,
22852285
Expr::Binary(eb) => 2 + binop_precedence(&eb.op),
22862286
Expr::Assign(_) | Expr::AssignOp(_) => 1,
@@ -2376,6 +2376,9 @@ fn parenthesize_if_necessary(mut outer: Expr) -> Expr {
23762376
Expr::Unary(ref mut eu) => {
23772377
parenthesize_if_gt(&mut eu.expr);
23782378
}
2379+
Expr::Reference(ref mut er) => {
2380+
parenthesize_if_gt(&mut er.expr);
2381+
}
23792382
Expr::Binary(ref mut eb) => {
23802383
parenthesize_if_gt(&mut eb.left);
23812384
// Because binops associate right, parenthesize same-precedence RHS

0 commit comments

Comments
 (0)