From 2b710f79ec7da7c9c7fc7514d0e85a6b2e106bec Mon Sep 17 00:00:00 2001 From: Azriel Hoh Date: Wed, 17 Oct 2018 14:08:25 +1300 Subject: [PATCH] Corrected type generics computation. Issue #25 --- src/clone.rs | 10 ++++------ src/cmp.rs | 10 ++++------ src/debug.rs | 5 ++--- src/default.rs | 5 ++--- src/hash.rs | 5 ++--- 5 files changed, 14 insertions(+), 21 deletions(-) diff --git a/src/clone.rs b/src/clone.rs index 570cd11..8840bf6 100644 --- a/src/clone.rs +++ b/src/clone.rs @@ -13,15 +13,14 @@ pub fn derive_copy(input: &ast::Input) -> Result proc_macro2::TokenStream { let name = &input.ident; let clone_trait_path = clone_trait_path(); - let (_impl_generics, ty_generics, _where_clause) = input.generics.split_for_impl(); - let impl_generics = utils::build_impl_generics( + let generics = utils::build_impl_generics( input, &clone_trait_path, needs_clone_bound, |field| field.clone_bound(), |input| input.clone_bound(), ); - let where_clause = &impl_generics.where_clause; + let (impl_generics, ty_generics, where_clause) = generics.split_for_impl(); let is_copy = input.attrs.rustc_copy_clone_marker() || input.attrs.copy.is_some(); if is_copy && input.generics.type_params().count() == 0 { diff --git a/src/cmp.rs b/src/cmp.rs index 5fc7fd8..e578a96 100644 --- a/src/cmp.rs +++ b/src/cmp.rs @@ -10,15 +10,14 @@ pub fn derive_eq(input: &ast::Input) -> proc_macro2::TokenStream { let name = &input.ident; let eq_trait_path = eq_trait_path(); - let (_impl_generics, ty_generics, _where_clause) = input.generics.split_for_impl(); - let impl_generics = utils::build_impl_generics( + let generics = utils::build_impl_generics( input, &eq_trait_path, |attrs| attrs.eq_bound().is_none(), |field| field.eq_bound(), |input| input.eq_bound(), ); - let where_clause = &impl_generics.where_clause; + let (impl_generics, ty_generics, where_clause) = generics.split_for_impl(); quote! { #[allow(unused_qualifications)] @@ -75,15 +74,14 @@ pub fn derive_partial_eq(input: &ast::Input) -> Result proc_macro2::TokenStream { let name = &input.ident; let debug_trait_path = debug_trait_path(); - let (_impl_generics, ty_generics, _where_clause) = input.generics.split_for_impl(); - let impl_generics = utils::build_impl_generics( + let generics = utils::build_impl_generics( input, &debug_trait_path, needs_debug_bound, |field| field.debug_bound(), |input| input.debug_bound(), ); - let where_clause = &impl_generics.where_clause; + let (impl_generics, ty_generics, where_clause) = generics.split_for_impl(); quote! { #[allow(unused_qualifications)] diff --git a/src/default.rs b/src/default.rs index af1b7da..9ef1e99 100644 --- a/src/default.rs +++ b/src/default.rs @@ -49,15 +49,14 @@ pub fn derive(input: &ast::Input, default: &attr::InputDefault) -> proc_macro2:: let name = &input.ident; let default_trait_path = default_trait_path(); - let (_impl_generics, ty_generics, _where_clause) = input.generics.split_for_impl(); - let impl_generics = utils::build_impl_generics( + let generics = utils::build_impl_generics( input, &default_trait_path, |attrs| attrs.default_bound().is_none(), |field| field.default_bound(), |input| input.default_bound(), ); - let where_clause = &impl_generics.where_clause; + let (impl_generics, ty_generics, where_clause) = generics.split_for_impl(); let body = match input.body { ast::Body::Enum(ref data) => { diff --git a/src/hash.rs b/src/hash.rs index d4f9f0a..a9457dd 100644 --- a/src/hash.rs +++ b/src/hash.rs @@ -45,15 +45,14 @@ pub fn derive(input: &ast::Input) -> proc_macro2::TokenStream { ); let name = &input.ident; - let (_impl_generics, ty_generics, _where_clause) = input.generics.split_for_impl(); - let impl_generics = utils::build_impl_generics( + let generics = utils::build_impl_generics( input, &hash_trait_path, needs_hash_bound, |field| field.hash_bound(), |input| input.hash_bound(), ); - let where_clause = &impl_generics.where_clause; + let (impl_generics, ty_generics, where_clause) = generics.split_for_impl(); let hasher_ty_parameter = utils::hygienic_type_parameter(input, "__H"); quote! {