From b7da35a5aa7603c3010e1aa9e5ff6de5660058fb Mon Sep 17 00:00:00 2001 From: Jeffrey Seyfried Date: Thu, 23 Jun 2016 09:51:18 +0000 Subject: Remove field `expr` of `ast::Block` --- src/libsyntax/print/pprust.rs | 29 +++++++++-------------------- 1 file changed, 9 insertions(+), 20 deletions(-) (limited to 'src/libsyntax/print/pprust.rs') diff --git a/src/libsyntax/print/pprust.rs b/src/libsyntax/print/pprust.rs index a2ee5bf6090..d38d5d9b6b6 100644 --- a/src/libsyntax/print/pprust.rs +++ b/src/libsyntax/print/pprust.rs @@ -1619,9 +1619,6 @@ impl<'a> State<'a> { } } } - if parse::classify::stmt_ends_with_semi(&st.node) { - try!(word(&mut self.s, ";")); - } self.maybe_print_trailing_comment(st.span, None) } @@ -1668,14 +1665,6 @@ impl<'a> State<'a> { for st in &blk.stmts { try!(self.print_stmt(st)); } - match blk.expr { - Some(ref expr) => { - 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.bclose_maybe_open(blk.span, indented, close_box)); self.ann.post(self, NodeBlock(blk)) } @@ -2084,24 +2073,23 @@ impl<'a> State<'a> { _ => false }; - if !default_return || !body.stmts.is_empty() || body.expr.is_none() { - try!(self.print_block_unclosed(&body)); - } else { - // we extract the block, so as not to create another set of boxes - let i_expr = body.expr.as_ref().unwrap(); - match i_expr.node { - ast::ExprKind::Block(ref blk) => { + match body.stmts.last().map(|stmt| &stmt.node) { + Some(&ast::StmtKind::Expr(ref i_expr, _)) if default_return && + body.stmts.len() == 1 => { + // we extract the block, so as not to create another set of boxes + if let ast::ExprKind::Block(ref blk) = i_expr.node { try!(self.print_block_unclosed_with_attrs( &blk, i_expr.attrs.as_attr_slice())); - } - _ => { + } else { // this is a bare expression try!(self.print_expr(&i_expr)); try!(self.end()); // need to close a box } } + _ => try!(self.print_block_unclosed(&body)), } + // a box will be closed by print_expr, but we didn't want an overall // wrapper so we closed the corresponding opening. so create an // empty box to satisfy the close. @@ -2295,6 +2283,7 @@ impl<'a> State<'a> { try!(self.word_space("=")); try!(self.print_expr(&init)); } + try!(word(&mut self.s, ";")); self.end() } ast::DeclKind::Item(ref item) => self.print_item(&item) -- cgit 1.4.1-3-g733a5 From 8cad25199acb346bf8d6b1771f1f50dc9e59374c Mon Sep 17 00:00:00 2001 From: Jeffrey Seyfried Date: Fri, 24 Jun 2016 11:39:18 +0000 Subject: Add `ecx.stmt_semi()` and fix issues with the pretty-printer --- src/libsyntax/ext/build.rs | 5 +++++ src/libsyntax/parse/mod.rs | 1 - src/libsyntax/print/pprust.rs | 15 +++++++++++++-- 3 files changed, 18 insertions(+), 3 deletions(-) (limited to 'src/libsyntax/print/pprust.rs') 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::Stmt; + fn stmt_semi(&self, expr: P) -> ast::Stmt; fn stmt_let(&self, sp: Span, mutbl: bool, ident: ast::Ident, ex: P) -> 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::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::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)) } -- cgit 1.4.1-3-g733a5