diff options
| author | Steven Fackler <sfackler@gmail.com> | 2013-11-24 23:08:53 -0800 |
|---|---|---|
| committer | Steven Fackler <sfackler@palantir.com> | 2013-11-26 13:56:02 -0800 |
| commit | c144752a2de4ffe3a2a22da9a8309ca2ecd85c58 (patch) | |
| tree | 66ab1d0cce647d2f0863a94bdb127a511ad8fe62 /src/libsyntax/ext/tt | |
| parent | 09f84aa8f4298489828720c048ec7f769338c0e2 (diff) | |
| download | rust-c144752a2de4ffe3a2a22da9a8309ca2ecd85c58.tar.gz rust-c144752a2de4ffe3a2a22da9a8309ca2ecd85c58.zip | |
Support multiple item macros
Closes #4375
Diffstat (limited to 'src/libsyntax/ext/tt')
| -rw-r--r-- | src/libsyntax/ext/tt/macro_rules.rs | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/src/libsyntax/ext/tt/macro_rules.rs b/src/libsyntax/ext/tt/macro_rules.rs index 343116df642..3cc00ef8199 100644 --- a/src/libsyntax/ext/tt/macro_rules.rs +++ b/src/libsyntax/ext/tt/macro_rules.rs @@ -24,6 +24,7 @@ use parse::attr::parser_attr; use parse::token::{get_ident_interner, special_idents, gensym_ident, ident_to_str}; use parse::token::{FAT_ARROW, SEMI, nt_matchers, nt_tt, EOF}; use print; +use util::small_vector::SmallVector; struct ParserAnyMacro { parser: @Parser, @@ -54,9 +55,15 @@ impl AnyMacro for ParserAnyMacro { self.ensure_complete_parse(true); ret } - fn make_item(&self) -> Option<@ast::item> { - let attrs = self.parser.parse_outer_attributes(); - let ret = self.parser.parse_item(attrs); + fn make_items(&self) -> SmallVector<@ast::item> { + let mut ret = SmallVector::zero(); + loop { + let attrs = self.parser.parse_outer_attributes(); + match self.parser.parse_item(attrs) { + Some(item) => ret.push(item), + None => break + } + } self.ensure_complete_parse(false); ret } |
