@@ -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
5355macro_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
7474impl_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
9186impl 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