about summary refs log tree commit diff
path: root/src/comp
diff options
context:
space:
mode:
authorMarijn Haverbeke <marijnh@gmail.com>2011-09-13 17:02:36 +0200
committerMarijn Haverbeke <marijnh@gmail.com>2011-09-13 17:02:36 +0200
commite64e9792abe71fa90aee78f6e7066650214402a8 (patch)
tree0d8a62957f6208d9d0662bdb5dd02fc56e70b632 /src/comp
parentbc62b175432de660a8858274c3435feed0e85e64 (diff)
downloadrust-e64e9792abe71fa90aee78f6e7066650214402a8.tar.gz
rust-e64e9792abe71fa90aee78f6e7066650214402a8.zip
Make pretty-printer wrap fail/ret/put in parens in call/index/field pos
Closes #764
Closes #891
Diffstat (limited to 'src/comp')
-rw-r--r--src/comp/syntax/print/pprust.rs24
1 files changed, 14 insertions, 10 deletions
diff --git a/src/comp/syntax/print/pprust.rs b/src/comp/syntax/print/pprust.rs
index 6acd02798d7..6b09726ce94 100644
--- a/src/comp/syntax/print/pprust.rs
+++ b/src/comp/syntax/print/pprust.rs
@@ -802,7 +802,7 @@ fn print_expr(s: ps, expr: @ast::expr) {
         pclose(s);
       }
       ast::expr_call(func, args) {
-        print_expr_parens_if_unary(s, func);
+        print_expr_parens_if_unary_or_ret(s, func);
         popen(s);
         commasep_exprs(s, inconsistent, args);
         pclose(s);
@@ -826,18 +826,18 @@ fn print_expr(s: ps, expr: @ast::expr) {
       }
       ast::expr_binary(op, lhs, rhs) {
         let prec = operator_prec(op);
-        print_maybe_parens(s, lhs, prec);
+        print_op_maybe_parens(s, lhs, prec);
         space(s.s);
         word_space(s, ast_util::binop_to_str(op));
-        print_maybe_parens(s, rhs, prec + 1);
+        print_op_maybe_parens(s, rhs, prec + 1);
       }
       ast::expr_unary(op, expr) {
         word(s.s, ast_util::unop_to_str(op));
-        print_maybe_parens(s, expr, parse::parser::unop_prec);
+        print_op_maybe_parens(s, expr, parse::parser::unop_prec);
       }
       ast::expr_lit(lit) { print_literal(s, lit); }
       ast::expr_cast(expr, ty) {
-        print_maybe_parens(s, expr, parse::parser::as_prec);
+        print_op_maybe_parens(s, expr, parse::parser::as_prec);
         space(s.s);
         word_space(s, "as");
         print_type(s, ty);
@@ -965,12 +965,12 @@ fn print_expr(s: ps, expr: @ast::expr) {
         print_expr(s, rhs);
       }
       ast::expr_field(expr, id) {
-        print_expr_parens_if_unary(s, expr);
+        print_expr_parens_if_unary_or_ret(s, expr);
         word(s.s, ".");
         word(s.s, id);
       }
       ast::expr_index(expr, index) {
-        print_expr_parens_if_unary(s, expr);
+        print_expr_parens_if_unary_or_ret(s, expr);
         word(s.s, "[");
         print_expr(s, index);
         word(s.s, "]");
@@ -1072,8 +1072,12 @@ fn print_expr(s: ps, expr: @ast::expr) {
     end(s);
 }
 
-fn print_expr_parens_if_unary(s: ps, ex: @ast::expr) {
-    let parens = alt ex.node { ast::expr_unary(_, _) { true } _ { false } };
+fn print_expr_parens_if_unary_or_ret(s: ps, ex: @ast::expr) {
+    let parens = alt ex.node {
+      ast::expr_fail(_) | ast::expr_ret(_) | ast::expr_put(_) |
+      ast::expr_unary(_, _) { true }
+      _ { false }
+    };
     if parens { popen(s); }
     print_expr(s, ex);
     if parens { pclose(s); }
@@ -1368,7 +1372,7 @@ fn need_parens(expr: @ast::expr, outer_prec: int) -> bool {
     }
 }
 
-fn print_maybe_parens(s: ps, expr: @ast::expr, outer_prec: int) {
+fn print_op_maybe_parens(s: ps, expr: @ast::expr, outer_prec: int) {
     let add_them = need_parens(expr, outer_prec);
     if add_them { popen(s); }
     print_expr(s, expr);