diff options
| author | bors <bors@rust-lang.org> | 2015-08-06 19:11:17 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2015-08-06 19:11:17 +0000 |
| commit | 11deb083f5bc3e57e73fc82de4bef7b1d4dad7b1 (patch) | |
| tree | 0f575e98b114fe6b854a1fd53ff1f7749ba3621c /src/libsyntax/ext/base.rs | |
| parent | fb92de75c1c4b7eaaf5d425fb2587407c00701fc (diff) | |
| parent | 83e43bb728b95d52039824d63b1ba5bbde5c5d7b (diff) | |
| download | rust-11deb083f5bc3e57e73fc82de4bef7b1d4dad7b1.tar.gz rust-11deb083f5bc3e57e73fc82de4bef7b1d4dad7b1.zip | |
Auto merge of #27296 - jroesch:type-macros, r=huonw
This pull request implements the functionality for [RFC 873](https://github.com/rust-lang/rfcs/blob/master/text/0873-type-macros.md). This is currently just an update of @freebroccolo's branch from January, the corresponding commits are linked in each commit message. @nikomatsakis and I had talked about updating the macro language to support a lifetime fragment specifier, and it is possible to do that work on this branch as well. If so we can (collectively) talk about it next week during the pre-RustCamp work week.
Diffstat (limited to 'src/libsyntax/ext/base.rs')
| -rw-r--r-- | src/libsyntax/ext/base.rs | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/libsyntax/ext/base.rs b/src/libsyntax/ext/base.rs index b2cff3ed53c..d4b5e67eeb4 100644 --- a/src/libsyntax/ext/base.rs +++ b/src/libsyntax/ext/base.rs @@ -290,6 +290,10 @@ pub trait MacResult { fn make_stmts(self: Box<Self>) -> Option<SmallVector<P<ast::Stmt>>> { make_stmts_default!(self) } + + fn make_ty(self: Box<Self>) -> Option<P<ast::Ty>> { + None + } } macro_rules! make_MacEager { @@ -322,6 +326,7 @@ make_MacEager! { items: SmallVector<P<ast::Item>>, impl_items: SmallVector<P<ast::ImplItem>>, stmts: SmallVector<P<ast::Stmt>>, + ty: P<ast::Ty>, } impl MacResult for MacEager { @@ -359,6 +364,10 @@ impl MacResult for MacEager { } None } + + fn make_ty(self: Box<Self>) -> Option<P<ast::Ty>> { + self.ty + } } /// Fill-in macro expansion result, to allow compilation to continue @@ -405,15 +414,24 @@ impl DummyResult { } } + pub fn raw_ty(sp: Span) -> P<ast::Ty> { + P(ast::Ty { + id: ast::DUMMY_NODE_ID, + node: ast::TyInfer, + span: sp + }) + } } impl MacResult for DummyResult { fn make_expr(self: Box<DummyResult>) -> Option<P<ast::Expr>> { Some(DummyResult::raw_expr(self.span)) } + fn make_pat(self: Box<DummyResult>) -> Option<P<ast::Pat>> { Some(P(DummyResult::raw_pat(self.span))) } + fn make_items(self: Box<DummyResult>) -> Option<SmallVector<P<ast::Item>>> { // this code needs a comment... why not always just return the Some() ? if self.expr_only { @@ -422,6 +440,7 @@ impl MacResult for DummyResult { Some(SmallVector::zero()) } } + fn make_impl_items(self: Box<DummyResult>) -> Option<SmallVector<P<ast::ImplItem>>> { if self.expr_only { None @@ -429,6 +448,7 @@ impl MacResult for DummyResult { Some(SmallVector::zero()) } } + fn make_stmts(self: Box<DummyResult>) -> Option<SmallVector<P<ast::Stmt>>> { Some(SmallVector::one(P( codemap::respan(self.span, |
