summary refs log tree commit diff
path: root/src/libsyntax/print
diff options
context:
space:
mode:
authorBrian Anderson <banderson@mozilla.com>2012-08-01 16:16:53 -0700
committerBrian Anderson <banderson@mozilla.com>2012-08-01 17:57:03 -0700
commit507fba57d1bb82589b22f23ae9dbe8abcee18286 (patch)
tree64dbe2936c18e17469cd1cb85488c8d392ba501b /src/libsyntax/print
parentfd17d347b08e2a42a62069e3474832f615036130 (diff)
downloadrust-507fba57d1bb82589b22f23ae9dbe8abcee18286.tar.gz
rust-507fba57d1bb82589b22f23ae9dbe8abcee18286.zip
syntax: Allow any block-like expr to be used as alt arm w/o comma separator
Diffstat (limited to 'src/libsyntax/print')
-rw-r--r--src/libsyntax/print/pprust.rs18
1 files changed, 11 insertions, 7 deletions
diff --git a/src/libsyntax/print/pprust.rs b/src/libsyntax/print/pprust.rs
index b0ef87a8cca..b02bebf58b7 100644
--- a/src/libsyntax/print/pprust.rs
+++ b/src/libsyntax/print/pprust.rs
@@ -6,7 +6,7 @@ import pp::{break_offset, word, printer,
             inconsistent, eof};
 import diagnostic;
 import ast::{required, provided};
-import ast_util::{operator_prec, lone_block_expr};
+import ast_util::{operator_prec};
 import dvec::{dvec, extensions};
 import parse::classify::*;
 import util::interner;
@@ -1052,17 +1052,21 @@ fn print_expr(s: ps, &&expr: @ast::expr) {
               none { }
             }
             word_space(s, ~"=>");
-            alt lone_block_expr(arm.body) {
+            // Extract the expression from the extra block the parser adds
+            assert arm.body.node.view_items.is_empty();
+            assert arm.body.node.stmts.is_empty();
+            assert arm.body.node.rules == ast::default_blk;
+            alt arm.body.node.expr {
               some(expr) => {
                 end(s); // close the ibox for the pattern
                 print_expr(s, expr);
-                if i < len - 1 { word(s.s, ~","); }
+                if expr_requires_semi_to_be_stmt(expr)
+                    && i < len - 1 {
+                    word(s.s, ~",");
+                }
                 end(s); // close enclosing cbox
               }
-              none => {
-                print_possibly_embedded_block(s, arm.body, block_normal,
-                                              alt_indent_unit);
-              }
+              none => fail
             }
         }
         bclose_(s, expr.span, alt_indent_unit);