From 197f360e30538f34398854e35366d8909b131057 Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Thu, 15 Sep 2011 11:15:14 +0200 Subject: [PATCH] Ensure parens are wrapped around composite exprs in call/index/field pos This is needed to fix the second example in issue #919 --- src/comp/syntax/print/pprust.rs | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/comp/syntax/print/pprust.rs b/src/comp/syntax/print/pprust.rs index 8ac8ccbdba2..c550531e386 100644 --- a/src/comp/syntax/print/pprust.rs +++ b/src/comp/syntax/print/pprust.rs @@ -718,7 +718,7 @@ fn print_expr(s: ps, expr: @ast::expr) { pclose(s); } ast::expr_call(func, args) { - print_expr_parens_if_unary_or_ret(s, func); + print_expr_parens_if_not_bot(s, func); popen(s); commasep_exprs(s, inconsistent, args); pclose(s); @@ -885,13 +885,13 @@ fn print_expr(s: ps, expr: @ast::expr) { if ends_in_lit_int(expr) { popen(s); print_expr(s, expr); pclose(s); } else { - print_expr_parens_if_unary_or_ret(s, expr); + print_expr_parens_if_not_bot(s, expr); } word(s.s, "."); word(s.s, id); } ast::expr_index(expr, index) { - print_expr_parens_if_unary_or_ret(s, expr); + print_expr_parens_if_not_bot(s, expr); word(s.s, "["); print_expr(s, index); word(s.s, "]"); @@ -993,10 +993,15 @@ fn print_expr(s: ps, expr: @ast::expr) { end(s); } -fn print_expr_parens_if_unary_or_ret(s: ps, ex: @ast::expr) { +fn print_expr_parens_if_not_bot(s: ps, ex: @ast::expr) { let parens = alt ex.node { ast::expr_fail(_) | ast::expr_ret(_) | ast::expr_put(_) | - ast::expr_unary(_, _) { true } + ast::expr_binary(_, _, _) | ast::expr_unary(_, _) | + ast::expr_ternary(_, _, _) | ast::expr_move(_, _) | + ast::expr_copy(_) | ast::expr_assign(_, _) | ast::expr_be(_) | + ast::expr_assign_op(_, _, _) | ast::expr_swap(_, _) | + ast::expr_log(_, _) | ast::expr_assert(_) | ast::expr_uniq(_) | + ast::expr_check(_, _) { true } _ { false } }; if parens { popen(s); }