diff options
-rw-r--r-- | src/lib.rs | 18 |
1 files changed, 9 insertions, 9 deletions
@@ -95,15 +95,6 @@ pub fn dynamize(_attr: TokenStream, input: TokenStream) -> TokenStream { let mut original_trait = parse_macro_input!(input as ItemTrait); assert!(original_trait.auto_token.is_none()); - let original_trait_name = original_trait.ident.clone(); - - let mut objectifiable_methods: Vec<(Signature, SignatureChanges)> = Vec::new(); - - let mut type_converter = TypeConverter::default(); - - let mut blanket_impl_attrs = Vec::new(); - let mut dyn_trait_attrs = Vec::new(); - // just to provide a better error message for bound in trait_bounds(&original_trait.supertraits) { if let Some(assoc_type) = iter_path(&bound.path) @@ -117,6 +108,11 @@ pub fn dynamize(_attr: TokenStream, input: TokenStream) -> TokenStream { } } + let mut type_converter = TypeConverter::default(); + + let mut blanket_impl_attrs = Vec::new(); + let mut dyn_trait_attrs = Vec::new(); + // FUTURE: use Vec::drain_filter once it's stable let mut i = 0; while i < original_trait.attrs.len() { @@ -186,6 +182,8 @@ pub fn dynamize(_attr: TokenStream, input: TokenStream) -> TokenStream { } } + let mut objectifiable_methods: Vec<(Signature, SignatureChanges)> = Vec::new(); + for item in &original_trait.items { if let TraitItem::Method(method) = item { let mut signature = method.sig.clone(); @@ -280,6 +278,8 @@ pub fn dynamize(_attr: TokenStream, input: TokenStream) -> TokenStream { } } + let original_trait_name = original_trait.ident.clone(); + for (signature, parsed_method) in objectifiable_methods { let mut new_method = TraitItemMethod { attrs: Vec::new(), |