From c144752a2de4ffe3a2a22da9a8309ca2ecd85c58 Mon Sep 17 00:00:00 2001 From: Steven Fackler Date: Sun, 24 Nov 2013 23:08:53 -0800 Subject: Support multiple item macros Closes #4375 --- src/libsyntax/ext/tt/macro_rules.rs | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) (limited to 'src/libsyntax/ext/tt') 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 } -- cgit 1.4.1-3-g733a5