diff options
| author | bors <bors@rust-lang.org> | 2016-07-13 01:37:07 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2016-07-13 01:37:07 -0700 |
| commit | 2ab18ce6f7e147a71e953b9a01ed09aff6b95972 (patch) | |
| tree | 376726d4299079f5a88cf6c54e6ed601921b11d8 /src/libsyntax/ext | |
| parent | 617039bff0decea56b6698497b589671b0371507 (diff) | |
| parent | 57fac56cb51d1a8ca0f6d76f869ccbb0a67b0f45 (diff) | |
| download | rust-2ab18ce6f7e147a71e953b9a01ed09aff6b95972.tar.gz rust-2ab18ce6f7e147a71e953b9a01ed09aff6b95972.zip | |
Auto merge of #34660 - jseyfried:fix_parse_stmt, r=nrc
Fix bugs in macro-expanded statement parsing
Fixes #34543.
This is a [breaking-change]. For example, the following would break:
```rust
macro_rules! m { () => {
println!("") println!("")
//^ Semicolons are now required on macro-expanded non-braced macro invocations
//| in statement positions.
let x = 0
//^ Semicolons are now required on macro-expanded `let` statements
//| that are followed by more statements, so this would break.
let y = 0 //< (this would still be allowed to reduce breakage in the wild)
}
fn main() { m!() }
```
r? @eddyb
Diffstat (limited to 'src/libsyntax/ext')
| -rw-r--r-- | src/libsyntax/ext/expand.rs | 9 | ||||
| -rw-r--r-- | src/libsyntax/ext/tt/macro_rules.rs | 2 |
2 files changed, 2 insertions, 9 deletions
diff --git a/src/libsyntax/ext/expand.rs b/src/libsyntax/ext/expand.rs index b2b63d0dbb4..220e0a753c3 100644 --- a/src/libsyntax/ext/expand.rs +++ b/src/libsyntax/ext/expand.rs @@ -444,14 +444,7 @@ fn expand_stmt(stmt: Stmt, fld: &mut MacroExpander) -> SmallVector<Stmt> { // semicolon to the final statement produced by expansion. if style == MacStmtStyle::Semicolon { if let Some(stmt) = fully_expanded.pop() { - fully_expanded.push(Stmt { - id: stmt.id, - node: match stmt.node { - StmtKind::Expr(expr) => StmtKind::Semi(expr), - _ => stmt.node /* might already have a semi */ - }, - span: stmt.span, - }); + fully_expanded.push(stmt.add_trailing_semicolon()); } } diff --git a/src/libsyntax/ext/tt/macro_rules.rs b/src/libsyntax/ext/tt/macro_rules.rs index 84572b84963..db12ef24f71 100644 --- a/src/libsyntax/ext/tt/macro_rules.rs +++ b/src/libsyntax/ext/tt/macro_rules.rs @@ -123,7 +123,7 @@ impl<'a> MacResult for ParserAnyMacro<'a> { let mut parser = self.parser.borrow_mut(); match parser.token { token::Eof => break, - _ => match parser.parse_stmt() { + _ => match parser.parse_full_stmt(true) { Ok(maybe_stmt) => match maybe_stmt { Some(stmt) => ret.push(stmt), None => (), |
