diff options
| author | Jeffrey Seyfried <jeffrey.seyfried@gmail.com> | 2016-06-26 02:19:34 +0000 |
|---|---|---|
| committer | Jeffrey Seyfried <jeffrey.seyfried@gmail.com> | 2016-06-26 02:20:14 +0000 |
| commit | 9bb3ea0febcbb8f6d7715256a5644daa985cf4e7 (patch) | |
| tree | eeed21468b6bceeed80766490852c8cee2653170 /src/libsyntax_ext/deriving/clone.rs | |
| parent | 8eddf0280014972e051856dfe949054acf53c043 (diff) | |
| parent | 8cad25199acb346bf8d6b1771f1f50dc9e59374c (diff) | |
| download | rust-9bb3ea0febcbb8f6d7715256a5644daa985cf4e7.tar.gz rust-9bb3ea0febcbb8f6d7715256a5644daa985cf4e7.zip | |
Rollup merge of #34436 - jseyfried:no_block_expr, r=eddyb
To allow these braced macro invocation, this PR removes the optional expression from `ast::Block` and instead uses a `StmtKind::Expr` at the end of the statement list.
Currently, braced macro invocations in blocks can expand into statements (and items) except when they are last in a block, in which case they can only expand into expressions.
For example,
```rust
macro_rules! make_stmt {
() => { let x = 0; }
}
fn f() {
make_stmt! {} //< This is OK...
let x = 0; //< ... unless this line is commented out.
}
```
Fixes #34418.
Diffstat (limited to 'src/libsyntax_ext/deriving/clone.rs')
| -rw-r--r-- | src/libsyntax_ext/deriving/clone.rs | 10 |
1 files changed, 4 insertions, 6 deletions
diff --git a/src/libsyntax_ext/deriving/clone.rs b/src/libsyntax_ext/deriving/clone.rs index 00714002875..1e47ebb8583 100644 --- a/src/libsyntax_ext/deriving/clone.rs +++ b/src/libsyntax_ext/deriving/clone.rs @@ -145,12 +145,10 @@ fn cs_clone( match mode { Mode::Shallow => { - cx.expr_block(cx.block(trait_span, - all_fields.iter() - .map(subcall) - .map(|e| cx.stmt_expr(e)) - .collect(), - Some(cx.expr_deref(trait_span, cx.expr_self(trait_span))))) + let mut stmts: Vec<_> = + all_fields.iter().map(subcall).map(|e| cx.stmt_expr(e)).collect(); + stmts.push(cx.stmt_expr(cx.expr_deref(trait_span, cx.expr_self(trait_span)))); + cx.expr_block(cx.block(trait_span, stmts)) } Mode::Deep => { match *vdata { |
