Skip to content

Commit 2dc15f2

Browse files
committed
cleanup: use DummyResult to implement MacroGenerable::dummy
1 parent b968ee3 commit 2dc15f2

File tree

2 files changed

+17
-19
lines changed

2 files changed

+17
-19
lines changed

src/libsyntax/ext/base.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -443,6 +443,10 @@ impl MacResult for DummyResult {
443443
span: self.span,
444444
}))
445445
}
446+
447+
fn make_ty(self: Box<DummyResult>) -> Option<P<ast::Ty>> {
448+
Some(DummyResult::raw_ty(self.span))
449+
}
446450
}
447451

448452
/// An enum representing the different kinds of syntax extensions.

src/libsyntax/ext/expand.rs

Lines changed: 13 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -43,18 +43,19 @@ trait MacroGenerable: Sized {
4343
fn fold_with<F: Folder>(self, folder: &mut F) -> Self;
4444
fn visit_with<V: Visitor>(&self, visitor: &mut V);
4545

46-
// Return a placeholder expansion to allow compilation to continue after an erroring expansion.
47-
fn dummy(span: Span) -> Self;
48-
4946
// The user-friendly name of the node type (e.g. "expression", "item", etc.) for diagnostics.
5047
fn kind_name() -> &'static str;
48+
49+
// Return a placeholder expansion to allow compilation to continue after an erroring expansion.
50+
fn dummy(span: Span) -> Self {
51+
Self::make_with(DummyResult::any(span)).unwrap()
52+
}
5153
}
5254

5355
macro_rules! impl_macro_generable {
5456
($($ty:ty: $kind_name:expr, .$make:ident,
5557
$(.$fold:ident)* $(lift .$fold_elt:ident)*,
56-
$(.$visit:ident)* $(lift .$visit_elt:ident)*,
57-
|$span:ident| $dummy:expr;)*) => { $(
58+
$(.$visit:ident)* $(lift .$visit_elt:ident)*;)*) => { $(
5859
impl MacroGenerable for $ty {
5960
fn kind_name() -> &'static str { $kind_name }
6061
fn make_with<'a>(result: Box<MacResult + 'a>) -> Option<Self> { result.$make() }
@@ -66,31 +67,24 @@ macro_rules! impl_macro_generable {
6667
$( visitor.$visit(self) )*
6768
$( for item in self.as_slice() { visitor. $visit_elt (item) } )*
6869
}
69-
fn dummy($span: Span) -> Self { $dummy }
7070
}
7171
)* }
7272
}
7373

7474
impl_macro_generable! {
75-
P<ast::Pat>: "pattern", .make_pat, .fold_pat, .visit_pat, |span| P(DummyResult::raw_pat(span));
76-
P<ast::Ty>: "type", .make_ty, .fold_ty, .visit_ty, |span| DummyResult::raw_ty(span);
77-
P<ast::Expr>:
78-
"expression", .make_expr, .fold_expr, .visit_expr, |span| DummyResult::raw_expr(span);
79-
SmallVector<ast::Stmt>:
80-
"statement", .make_stmts, lift .fold_stmt, lift .visit_stmt, |_span| SmallVector::zero();
81-
SmallVector<P<ast::Item>>:
82-
"item", .make_items, lift .fold_item, lift .visit_item, |_span| SmallVector::zero();
75+
P<ast::Expr>: "expression", .make_expr, .fold_expr, .visit_expr;
76+
P<ast::Pat>: "pattern", .make_pat, .fold_pat, .visit_pat;
77+
P<ast::Ty>: "type", .make_ty, .fold_ty, .visit_ty;
78+
SmallVector<ast::Stmt>: "statement", .make_stmts, lift .fold_stmt, lift .visit_stmt;
79+
SmallVector<P<ast::Item>>: "item", .make_items, lift .fold_item, lift .visit_item;
8380
SmallVector<ast::TraitItem>:
84-
"trait item", .make_trait_items, lift .fold_trait_item, lift .visit_trait_item,
85-
|_span| SmallVector::zero();
81+
"trait item", .make_trait_items, lift .fold_trait_item, lift .visit_trait_item;
8682
SmallVector<ast::ImplItem>:
87-
"impl item", .make_impl_items, lift .fold_impl_item, lift .visit_impl_item,
88-
|_span| SmallVector::zero();
83+
"impl item", .make_impl_items, lift .fold_impl_item, lift .visit_impl_item;
8984
}
9085

9186
impl MacroGenerable for Option<P<ast::Expr>> {
9287
fn kind_name() -> &'static str { "expression" }
93-
fn dummy(_span: Span) -> Self { None }
9488
fn make_with<'a>(result: Box<MacResult + 'a>) -> Option<Self> {
9589
result.make_expr().map(Some)
9690
}

0 commit comments

Comments
 (0)