diff options
| author | Jeffrey Seyfried <jeffrey.seyfried@gmail.com> | 2016-07-02 09:32:23 +0000 |
|---|---|---|
| committer | Jeffrey Seyfried <jeffrey.seyfried@gmail.com> | 2016-07-12 04:31:39 +0000 |
| commit | 57c56dd7e04bcd25ed578f27e65ec2379299f44b (patch) | |
| tree | 6d09ab6a92444ccb10516eae30964f183a4cc848 /src/libsyntax/ext | |
| parent | 6189e6cdba6d12ab65baafd95c5f8a6e0cc37937 (diff) | |
| download | rust-57c56dd7e04bcd25ed578f27e65ec2379299f44b.tar.gz rust-57c56dd7e04bcd25ed578f27e65ec2379299f44b.zip | |
Parse macro-expanded statements like ordinary statements.
Diffstat (limited to 'src/libsyntax/ext')
| -rw-r--r-- | src/libsyntax/ext/tt/macro_rules.rs | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/libsyntax/ext/tt/macro_rules.rs b/src/libsyntax/ext/tt/macro_rules.rs index 84572b84963..7b09a44b814 100644 --- a/src/libsyntax/ext/tt/macro_rules.rs +++ b/src/libsyntax/ext/tt/macro_rules.rs @@ -118,12 +118,18 @@ impl<'a> MacResult for ParserAnyMacro<'a> { fn make_stmts(self: Box<ParserAnyMacro<'a>>) -> Option<SmallVector<ast::Stmt>> { + let parse_stmt = |parser: &mut Parser<'a>| -> ::parse::PResult<'a, _> { + Ok(match parser.parse_stmt()? { + Some(stmt) => Some(parser.finish_parsing_statement(stmt)?), + None => None, + }) + }; let mut ret = SmallVector::zero(); loop { let mut parser = self.parser.borrow_mut(); match parser.token { token::Eof => break, - _ => match parser.parse_stmt() { + _ => match parse_stmt(&mut parser) { Ok(maybe_stmt) => match maybe_stmt { Some(stmt) => ret.push(stmt), None => (), |
