about summary refs log tree commit diff
path: root/src/libsyntax
diff options
context:
space:
mode:
authorJeffrey Seyfried <jeffrey.seyfried@gmail.com>2016-06-24 11:39:18 +0000
committerJeffrey Seyfried <jeffrey.seyfried@gmail.com>2016-06-24 11:39:54 +0000
commit8cad25199acb346bf8d6b1771f1f50dc9e59374c (patch)
tree05c78313a622f37969dc55738a241557342dce46 /src/libsyntax
parent060a84d1f7fee5585aa6ebc50c74b0b35f2c0283 (diff)
downloadrust-8cad25199acb346bf8d6b1771f1f50dc9e59374c.tar.gz
rust-8cad25199acb346bf8d6b1771f1f50dc9e59374c.zip
Add `ecx.stmt_semi()` and fix issues with the pretty-printer
Diffstat (limited to 'src/libsyntax')
-rw-r--r--src/libsyntax/ext/build.rs5
-rw-r--r--src/libsyntax/parse/mod.rs1
-rw-r--r--src/libsyntax/print/pprust.rs15
3 files changed, 18 insertions, 3 deletions
diff --git a/src/libsyntax/ext/build.rs b/src/libsyntax/ext/build.rs
index 480a0894201..4bfbd37edd9 100644
--- a/src/libsyntax/ext/build.rs
+++ b/src/libsyntax/ext/build.rs
@@ -87,6 +87,7 @@ pub trait AstBuilder {
 
     // statements
     fn stmt_expr(&self, expr: P<ast::Expr>) -> ast::Stmt;
+    fn stmt_semi(&self, expr: P<ast::Expr>) -> ast::Stmt;
     fn stmt_let(&self, sp: Span, mutbl: bool, ident: ast::Ident, ex: P<ast::Expr>) -> ast::Stmt;
     fn stmt_let_typed(&self,
                       sp: Span,
@@ -507,6 +508,10 @@ impl<'a> AstBuilder for ExtCtxt<'a> {
         respan(expr.span, ast::StmtKind::Expr(expr, ast::DUMMY_NODE_ID))
     }
 
+    fn stmt_semi(&self, expr: P<ast::Expr>) -> ast::Stmt {
+        respan(expr.span, ast::StmtKind::Semi(expr, ast::DUMMY_NODE_ID))
+    }
+
     fn stmt_let(&self, sp: Span, mutbl: bool, ident: ast::Ident,
                 ex: P<ast::Expr>) -> ast::Stmt {
         let pat = if mutbl {
diff --git a/src/libsyntax/parse/mod.rs b/src/libsyntax/parse/mod.rs
index 2e4d46bc983..f79d6e8421a 100644
--- a/src/libsyntax/parse/mod.rs
+++ b/src/libsyntax/parse/mod.rs
@@ -953,7 +953,6 @@ mod tests {
                                                 attrs: None,}),
                                                 ast::DUMMY_NODE_ID),
                                             span: sp(17,19)}),
-                                        expr: None,
                                         id: ast::DUMMY_NODE_ID,
                                         rules: ast::BlockCheckMode::Default, // no idea
                                         span: sp(15,21),
diff --git a/src/libsyntax/print/pprust.rs b/src/libsyntax/print/pprust.rs
index d38d5d9b6b6..00edd5585c2 100644
--- a/src/libsyntax/print/pprust.rs
+++ b/src/libsyntax/print/pprust.rs
@@ -1599,6 +1599,9 @@ impl<'a> State<'a> {
             ast::StmtKind::Expr(ref expr, _) => {
                 try!(self.space_if_not_bol());
                 try!(self.print_expr_outer_attr_style(&expr, false));
+                if parse::classify::expr_requires_semi_to_be_stmt(expr) {
+                    try!(word(&mut self.s, ";"));
+                }
             }
             ast::StmtKind::Semi(ref expr, _) => {
                 try!(self.space_if_not_bol());
@@ -1662,9 +1665,17 @@ impl<'a> State<'a> {
 
         try!(self.print_inner_attributes(attrs));
 
-        for st in &blk.stmts {
-            try!(self.print_stmt(st));
+        for (i, st) in blk.stmts.iter().enumerate() {
+            match st.node {
+                ast::StmtKind::Expr(ref expr, _) if i == blk.stmts.len() - 1 => {
+                    try!(self.space_if_not_bol());
+                    try!(self.print_expr_outer_attr_style(&expr, false));
+                    try!(self.maybe_print_trailing_comment(expr.span, Some(blk.span.hi)));
+                }
+                _ => try!(self.print_stmt(st)),
+            }
         }
+
         try!(self.bclose_maybe_open(blk.span, indented, close_box));
         self.ann.post(self, NodeBlock(blk))
     }