@@ -14,31 +14,31 @@ pub fn expand(
1414 ecx : & mut ExtCtxt < ' _ > ,
1515 _span : Span ,
1616 meta_item : & ast:: MetaItem ,
17- mut item : Annotatable ,
17+ item : Annotatable ,
1818) -> Vec < Annotatable > {
1919 check_builtin_macro_attribute ( ecx, meta_item, sym:: global_allocator) ;
2020
21- let not_static = |item : Annotatable | {
21+ let orig_item = item. clone ( ) ;
22+ let not_static = || {
2223 ecx. sess . parse_sess . span_diagnostic . span_err ( item. span ( ) , "allocators must be statics" ) ;
23- vec ! [ item ]
24+ vec ! [ orig_item . clone ( ) ]
2425 } ;
25- let orig_item = item. clone ( ) ;
26- let mut is_stmt = false ;
2726
2827 // Allow using `#[global_allocator]` on an item statement
29- if let Annotatable :: Stmt ( stmt) = & item {
30- if let StmtKind :: Item ( item_) = & stmt. kind {
31- item = Annotatable :: Item ( item_. clone ( ) ) ;
32- is_stmt = true ;
33- }
34- }
35-
36- let item = match item {
28+ // FIXME - if we get deref patterns, use them to reduce duplication here
29+ let ( item, is_stmt) = match & item {
3730 Annotatable :: Item ( item) => match item. kind {
38- ItemKind :: Static ( ..) => item,
39- _ => return not_static ( Annotatable :: Item ( item) ) ,
31+ ItemKind :: Static ( ..) => ( item, false ) ,
32+ _ => return not_static ( ) ,
33+ } ,
34+ Annotatable :: Stmt ( stmt) => match & stmt. kind {
35+ StmtKind :: Item ( item_) => match item_. kind {
36+ ItemKind :: Static ( ..) => ( item_, true ) ,
37+ _ => return not_static ( ) ,
38+ } ,
39+ _ => return not_static ( ) ,
4040 } ,
41- _ => return not_static ( item ) ,
41+ _ => return not_static ( ) ,
4242 } ;
4343
4444 // Generate a bunch of new items using the AllocFnFactory
0 commit comments