|
2 | 2 |
|
3 | 3 |
|
4 | 4 |
|
5 |
| -use syntax::ext::base::ExtCtxt; |
| 5 | +use syntax::ext::base::{Annotatable, ExtCtxt}; |
6 | 6 | use syntax::codemap::Span;
|
7 |
| -use syntax::ptr::P; |
8 |
| -use syntax::ast::{Item, MetaItem}; |
| 7 | +use syntax::ast::MetaItem; |
9 | 8 | use syntax::ast;
|
10 | 9 | use utils::match_ty_unwrap;
|
11 | 10 |
|
12 | 11 |
|
13 |
| -pub fn expand_reflector(cx: &mut ExtCtxt, span: Span, _: &MetaItem, item: &Item, push: &mut FnMut(P<Item>) -> ()) { |
14 |
| - if let ast::ItemStruct(ref def, _) = item.node { |
15 |
| - let struct_name = item.ident; |
16 |
| - |
17 |
| - match def.fields.iter().find(|f| match_ty_unwrap(&*f.node.ty, &["dom", "bindings", "utils", "Reflector"]).is_some()) { |
| 12 | +pub fn expand_reflector(cx: &mut ExtCtxt, span: Span, _: &MetaItem, annotatable: Annotatable, push: &mut FnMut(Annotatable)) { |
| 13 | + if let Annotatable::Item(item) = annotatable { |
| 14 | + if let ast::ItemStruct(ref def, _) = item.node { |
| 15 | + let struct_name = item.ident; |
18 | 16 |
|
19 |
| - Some(f) => { |
20 |
| - let field_name = f.node.ident(); |
21 |
| - let impl_item = quote_item!(cx, |
22 |
| - impl ::dom::bindings::utils::Reflectable for $struct_name { |
23 |
| - fn reflector<'a>(&'a self) -> &'a ::dom::bindings::utils::Reflector { |
24 |
| - &self.$field_name |
| 17 | + match def.fields.iter().find(|f| match_ty_unwrap(&*f.node.ty, &["dom", "bindings", "utils", "Reflector"]).is_some()) { |
| 18 | + |
| 19 | + Some(f) => { |
| 20 | + let field_name = f.node.ident(); |
| 21 | + let impl_item = quote_item!(cx, |
| 22 | + impl ::dom::bindings::utils::Reflectable for $struct_name { |
| 23 | + fn reflector<'a>(&'a self) -> &'a ::dom::bindings::utils::Reflector { |
| 24 | + &self.$field_name |
| 25 | + } |
25 | 26 | }
|
26 |
| - } |
27 |
| - ); |
28 |
| - impl_item.map(|it| push(it)) |
29 |
| - }, |
30 |
| - |
31 |
| - None => { |
32 |
| - let field_name = def.fields[0].node.ident(); |
33 |
| - let impl_item = quote_item!(cx, |
34 |
| - impl ::dom::bindings::utils::Reflectable for $struct_name { |
35 |
| - fn reflector<'a>(&'a self) -> &'a ::dom::bindings::utils::Reflector { |
36 |
| - self.$field_name.reflector() |
| 27 | + ); |
| 28 | + impl_item.map(|it| push(Annotatable::Item(it))) |
| 29 | + }, |
| 30 | + |
| 31 | + None => { |
| 32 | + let field_name = def.fields[0].node.ident(); |
| 33 | + let impl_item = quote_item!(cx, |
| 34 | + impl ::dom::bindings::utils::Reflectable for $struct_name { |
| 35 | + fn reflector<'a>(&'a self) -> &'a ::dom::bindings::utils::Reflector { |
| 36 | + self.$field_name.reflector() |
| 37 | + } |
37 | 38 | }
|
38 |
| - } |
39 |
| - ); |
40 |
| - impl_item.map(|it| push(it)) |
41 |
| - } |
42 |
| - }; |
43 |
| - } else { |
44 |
| - cx.span_err(span, "#[dom_struct] seems to have been applied to a non-struct"); |
| 39 | + ); |
| 40 | + impl_item.map(|it| push(Annotatable::Item(it))) |
| 41 | + } |
| 42 | + }; |
| 43 | + } else { |
| 44 | + cx.span_err(span, "#[dom_struct] seems to have been applied to a non-struct"); |
| 45 | + } |
45 | 46 | }
|
46 | 47 | }
|
0 commit comments