Skip to content

Commit 8cad251

Browse files
committed
Add ecx.stmt_semi() and fix issues with the pretty-printer
1 parent 060a84d commit 8cad251

File tree

3 files changed

+18
-3
lines changed

3 files changed

+18
-3
lines changed

src/libsyntax/ext/build.rs

+5
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ pub trait AstBuilder {
8787

8888
// statements
8989
fn stmt_expr(&self, expr: P<ast::Expr>) -> ast::Stmt;
90+
fn stmt_semi(&self, expr: P<ast::Expr>) -> ast::Stmt;
9091
fn stmt_let(&self, sp: Span, mutbl: bool, ident: ast::Ident, ex: P<ast::Expr>) -> ast::Stmt;
9192
fn stmt_let_typed(&self,
9293
sp: Span,
@@ -507,6 +508,10 @@ impl<'a> AstBuilder for ExtCtxt<'a> {
507508
respan(expr.span, ast::StmtKind::Expr(expr, ast::DUMMY_NODE_ID))
508509
}
509510

511+
fn stmt_semi(&self, expr: P<ast::Expr>) -> ast::Stmt {
512+
respan(expr.span, ast::StmtKind::Semi(expr, ast::DUMMY_NODE_ID))
513+
}
514+
510515
fn stmt_let(&self, sp: Span, mutbl: bool, ident: ast::Ident,
511516
ex: P<ast::Expr>) -> ast::Stmt {
512517
let pat = if mutbl {

src/libsyntax/parse/mod.rs

-1
Original file line numberDiff line numberDiff line change
@@ -953,7 +953,6 @@ mod tests {
953953
attrs: None,}),
954954
ast::DUMMY_NODE_ID),
955955
span: sp(17,19)}),
956-
expr: None,
957956
id: ast::DUMMY_NODE_ID,
958957
rules: ast::BlockCheckMode::Default, // no idea
959958
span: sp(15,21),

src/libsyntax/print/pprust.rs

+13-2
Original file line numberDiff line numberDiff line change
@@ -1599,6 +1599,9 @@ impl<'a> State<'a> {
15991599
ast::StmtKind::Expr(ref expr, _) => {
16001600
try!(self.space_if_not_bol());
16011601
try!(self.print_expr_outer_attr_style(&expr, false));
1602+
if parse::classify::expr_requires_semi_to_be_stmt(expr) {
1603+
try!(word(&mut self.s, ";"));
1604+
}
16021605
}
16031606
ast::StmtKind::Semi(ref expr, _) => {
16041607
try!(self.space_if_not_bol());
@@ -1662,9 +1665,17 @@ impl<'a> State<'a> {
16621665

16631666
try!(self.print_inner_attributes(attrs));
16641667

1665-
for st in &blk.stmts {
1666-
try!(self.print_stmt(st));
1668+
for (i, st) in blk.stmts.iter().enumerate() {
1669+
match st.node {
1670+
ast::StmtKind::Expr(ref expr, _) if i == blk.stmts.len() - 1 => {
1671+
try!(self.space_if_not_bol());
1672+
try!(self.print_expr_outer_attr_style(&expr, false));
1673+
try!(self.maybe_print_trailing_comment(expr.span, Some(blk.span.hi)));
1674+
}
1675+
_ => try!(self.print_stmt(st)),
1676+
}
16671677
}
1678+
16681679
try!(self.bclose_maybe_open(blk.span, indented, close_box));
16691680
self.ann.post(self, NodeBlock(blk))
16701681
}

0 commit comments

Comments
 (0)