@@ -14,31 +14,31 @@ pub fn expand(
14
14
ecx : & mut ExtCtxt < ' _ > ,
15
15
_span : Span ,
16
16
meta_item : & ast:: MetaItem ,
17
- mut item : Annotatable ,
17
+ item : Annotatable ,
18
18
) -> Vec < Annotatable > {
19
19
check_builtin_macro_attribute ( ecx, meta_item, sym:: global_allocator) ;
20
20
21
- let not_static = |item : Annotatable | {
21
+ let orig_item = item. clone ( ) ;
22
+ let not_static = || {
22
23
ecx. sess . parse_sess . span_diagnostic . span_err ( item. span ( ) , "allocators must be statics" ) ;
23
- vec ! [ item ]
24
+ vec ! [ orig_item . clone ( ) ]
24
25
} ;
25
- let orig_item = item. clone ( ) ;
26
- let mut is_stmt = false ;
27
26
28
27
// 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 {
37
30
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 ( ) ,
40
40
} ,
41
- _ => return not_static ( item ) ,
41
+ _ => return not_static ( ) ,
42
42
} ;
43
43
44
44
// Generate a bunch of new items using the AllocFnFactory
0 commit comments