summary refs log tree commit diff
path: root/src/libsyntax/ext
diff options
context:
space:
mode:
authorFlorian Hahn <flo@fhahn.com>2014-09-13 12:55:00 +0200
committerFlorian Hahn <flo@fhahn.com>2014-09-19 11:10:54 +0200
commit89b09440d87a8346c2e6206855ab4f0b90febe25 (patch)
tree409f4efc49ca0d40a8e58abaf1483765a4dbd19a /src/libsyntax/ext
parentaf3889f6979647b9bd2dc5f5132d80e3e5b405a5 (diff)
downloadrust-89b09440d87a8346c2e6206855ab4f0b90febe25.tar.gz
rust-89b09440d87a8346c2e6206855ab4f0b90febe25.zip
Allow syntax extensions to return multiple items, closes #16723.
This patch replaces `MacItem` with `MacItems`.
Diffstat (limited to 'src/libsyntax/ext')
-rw-r--r--src/libsyntax/ext/base.rs27
1 files changed, 11 insertions, 16 deletions
diff --git a/src/libsyntax/ext/base.rs b/src/libsyntax/ext/base.rs
index 773daa4a4c5..fbbbea541a6 100644
--- a/src/libsyntax/ext/base.rs
+++ b/src/libsyntax/ext/base.rs
@@ -203,25 +203,20 @@ impl MacResult for MacPat {
         Some(self.p)
     }
 }
-/// A convenience type for macros that return a single item.
-pub struct MacItem {
-    i: P<ast::Item>
+/// A type for macros that return multiple items.
+pub struct MacItems {
+    items: SmallVector<P<ast::Item>>
 }
-impl MacItem {
-    pub fn new(i: P<ast::Item>) -> Box<MacResult+'static> {
-        box MacItem { i: i } as Box<MacResult+'static>
+
+impl MacItems {
+    pub fn new<I: Iterator<P<ast::Item>>>(mut it: I) -> Box<MacResult+'static> {
+        box MacItems { items: it.collect() } as Box<MacResult+'static>
     }
 }
-impl MacResult for MacItem {
-    fn make_items(self: Box<MacItem>) -> Option<SmallVector<P<ast::Item>>> {
-        Some(SmallVector::one(self.i))
-    }
-    fn make_stmt(self: Box<MacItem>) -> Option<P<ast::Stmt>> {
-        Some(P(codemap::respan(
-            self.i.span,
-            ast::StmtDecl(
-                P(codemap::respan(self.i.span, ast::DeclItem(self.i))),
-                ast::DUMMY_NODE_ID))))
+
+impl MacResult for MacItems {
+    fn make_items(self: Box<MacItems>) -> Option<SmallVector<P<ast::Item>>> {
+        Some(self.items)
     }
 }