From 09e21fe2b93e926b77f105939f6d7f2fb6f7dcc9 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Thu, 18 Aug 2011 23:28:49 -0700 Subject: [PATCH] Pretty-print parens around more things that need disambiguation Ridiculous stuff like (ret 0) == (log "error") --- src/comp/syntax/print/pprust.rs | 22 ++++++++++++++++------ src/test/run-pass/wierd-exprs.rs | 1 - 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/src/comp/syntax/print/pprust.rs b/src/comp/syntax/print/pprust.rs index e9c1dee1f544..21d446c9c5c0 100644 --- a/src/comp/syntax/print/pprust.rs +++ b/src/comp/syntax/print/pprust.rs @@ -1377,18 +1377,28 @@ fn operator_prec(op: ast::binop) -> int { } fn need_parens(expr: &@ast::expr, outer_prec: int) -> bool { - let add_them; alt expr.node { ast::expr_binary(op, _, _) { - add_them = operator_prec(op) < outer_prec; + operator_prec(op) < outer_prec } - ast::expr_cast(_, _) { add_them = parse::parser::as_prec < outer_prec; } + ast::expr_cast(_, _) { parse::parser::as_prec < outer_prec } ast::expr_ternary(_, _, _) { - add_them = parse::parser::ternary_prec < outer_prec; + parse::parser::ternary_prec < outer_prec } - _ { add_them = false; } + + // This may be too conservative in some cases + ast::expr_assign(_, _) { true } + ast::expr_move(_, _) { true } + ast::expr_swap(_, _) { true } + ast::expr_assign_op(_, _, _) { true } + ast::expr_ret(_) { true } + ast::expr_put(_) { true } + ast::expr_be(_) { true } + ast::expr_assert(_) { true } + ast::expr_check(_, _) { true } + ast::expr_log(_, _) { true } + _ { false } } - ret add_them; } fn print_maybe_parens(s: &ps, expr: &@ast::expr, outer_prec: int) { diff --git a/src/test/run-pass/wierd-exprs.rs b/src/test/run-pass/wierd-exprs.rs index 4496d6f15560..a8276c92bb6d 100644 --- a/src/test/run-pass/wierd-exprs.rs +++ b/src/test/run-pass/wierd-exprs.rs @@ -1,4 +1,3 @@ -// xfail-pretty // Just a grab bug of stuff that you wouldn't want to actualy write fn strange() -> bool {