@@ -43,18 +43,19 @@ trait MacroGenerable: Sized {
43
43
fn fold_with < F : Folder > ( self , folder : & mut F ) -> Self ;
44
44
fn visit_with < V : Visitor > ( & self , visitor : & mut V ) ;
45
45
46
- // Return a placeholder expansion to allow compilation to continue after an erroring expansion.
47
- fn dummy ( span : Span ) -> Self ;
48
-
49
46
// The user-friendly name of the node type (e.g. "expression", "item", etc.) for diagnostics.
50
47
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
+ }
51
53
}
52
54
53
55
macro_rules! impl_macro_generable {
54
56
( $( $ty: ty: $kind_name: expr, . $make: ident,
55
57
$( . $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) * ; ) * ) => { $(
58
59
impl MacroGenerable for $ty {
59
60
fn kind_name( ) -> & ' static str { $kind_name }
60
61
fn make_with<' a>( result: Box <MacResult + ' a>) -> Option <Self > { result. $make( ) }
@@ -66,31 +67,24 @@ macro_rules! impl_macro_generable {
66
67
$( visitor. $visit( self ) ) *
67
68
$( for item in self . as_slice( ) { visitor. $visit_elt ( item) } ) *
68
69
}
69
- fn dummy( $span: Span ) -> Self { $dummy }
70
70
}
71
71
) * }
72
72
}
73
73
74
74
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;
83
80
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;
86
82
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;
89
84
}
90
85
91
86
impl MacroGenerable for Option < P < ast:: Expr > > {
92
87
fn kind_name ( ) -> & ' static str { "expression" }
93
- fn dummy ( _span : Span ) -> Self { None }
94
88
fn make_with < ' a > ( result : Box < MacResult + ' a > ) -> Option < Self > {
95
89
result. make_expr ( ) . map ( Some )
96
90
}
0 commit comments