提交 e77491bd 编写于 作者: P Paul Stansifer 提交者: Graydon Hoare

Make the parser handle stmt macros that might be exprs at the end of blocks.

上级 bd92499c
......@@ -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 {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册