diff options
| author | Jeffrey Seyfried <jeffrey.seyfried@gmail.com> | 2016-06-24 11:39:18 +0000 |
|---|---|---|
| committer | Jeffrey Seyfried <jeffrey.seyfried@gmail.com> | 2016-06-24 11:39:54 +0000 |
| commit | 8cad25199acb346bf8d6b1771f1f50dc9e59374c (patch) | |
| tree | 05c78313a622f37969dc55738a241557342dce46 /src/libsyntax | |
| parent | 060a84d1f7fee5585aa6ebc50c74b0b35f2c0283 (diff) | |
| download | rust-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.rs | 5 | ||||
| -rw-r--r-- | src/libsyntax/parse/mod.rs | 1 | ||||
| -rw-r--r-- | src/libsyntax/print/pprust.rs | 15 |
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)) } |
