@@ -816,25 +816,28 @@ fn maybe_write_generics_intern<W: std::io::Write>(w: &mut W, generics: &syn::Gen
816816 for ( idx, generic) in generics. params . iter ( ) . enumerate ( ) {
817817 match generic {
818818 syn:: GenericParam :: Type ( type_param) => {
819- write ! ( w , "{}" , if idx != 0 { ", " } else { "" } ) . unwrap ( ) ;
819+ let mut out = Vec :: new ( ) ;
820820 let type_ident = & type_param. ident ;
821821 if types. understood_c_type ( & syn:: parse_quote!( #type_ident) , Some ( & gen_types) ) {
822- types. write_c_type_in_generic_param ( w , & syn:: parse_quote!( #type_ident) , Some ( & gen_types) , false ) ;
822+ types. write_c_type_in_generic_param ( & mut out , & syn:: parse_quote!( #type_ident) , Some ( & gen_types) , false ) ;
823823 } else {
824824 if let syn:: PathArguments :: AngleBracketed ( args) = generics_impld {
825825 if let syn:: GenericArgument :: Type ( ty) = & args. args [ idx] {
826- types. write_c_type_in_generic_param ( w , & ty, Some ( & gen_types) , false ) ;
826+ types. write_c_type_in_generic_param ( & mut out , & ty, Some ( & gen_types) , false ) ;
827827 }
828828 }
829829 }
830+ if !out. is_empty ( ) {
831+ write ! ( w, "{}, " , String :: from_utf8( out) . unwrap( ) ) . unwrap ( ) ;
832+ }
830833 } ,
831834 syn:: GenericParam :: Lifetime ( lt) => {
832835 if dummy_lifetimes {
833- write ! ( w, "'_" ) . unwrap ( ) ;
836+ write ! ( w, "'_, " ) . unwrap ( ) ;
834837 } else if concrete_lifetimes {
835- write ! ( w, "'static" ) . unwrap ( ) ;
838+ write ! ( w, "'static, " ) . unwrap ( ) ;
836839 } else {
837- write ! ( w, "{} '{}" , if idx != 0 { ", " } else { "" } , lt. lifetime. ident) . unwrap ( ) ;
840+ write ! ( w, "'{}, " , lt. lifetime. ident) . unwrap ( ) ;
838841 }
839842 } ,
840843 _ => unimplemented ! ( ) ,
0 commit comments