mirror of
https://github.com/rust-lang/rust.git
synced 2026-05-04 18:40:57 +03:00
Make the parser handle stmt macros that might be exprs at the end of blocks.
This commit is contained in:
committed by
Graydon Hoare
parent
bd92499c5e
commit
e77491bd87
@@ -2380,6 +2380,25 @@ fn parse_block_tail_(lo: BytePos, s: blk_check_mode,
|
||||
}
|
||||
}
|
||||
|
||||
stmt_mac(m) => {
|
||||
// Statement macro; might be an expr
|
||||
match self.token {
|
||||
token::SEMI => {
|
||||
self.bump();
|
||||
stmts.push(stmt);
|
||||
}
|
||||
token::RBRACE => {
|
||||
// if a block ends in `m!(arg)` without
|
||||
// a `;`, it must be an expr
|
||||
expr = Some(
|
||||
self.mk_mac_expr(stmt.span.lo,
|
||||
stmt.span.hi,
|
||||
m.node));
|
||||
}
|
||||
_ => { stmts.push(stmt); }
|
||||
}
|
||||
}
|
||||
|
||||
_ => { // All other kinds of statements:
|
||||
stmts.push(stmt);
|
||||
|
||||
@@ -3567,6 +3586,10 @@ fn parse_item_or_view_item(+attrs: ~[attribute], items_allowed: bool,
|
||||
// item macro.
|
||||
let pth = self.parse_path_without_tps();
|
||||
self.expect(token::NOT);
|
||||
|
||||
// a 'special' identifier (like what `macro_rules!` uses)
|
||||
// is optional. We should eventually unify invoc syntax
|
||||
// and remove this.
|
||||
let id = if self.token == token::LPAREN {
|
||||
token::special_idents::invalid // no special identifier
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user