File tree Expand file tree Collapse file tree 2 files changed +27
-20
lines changed Expand file tree Collapse file tree 2 files changed +27
-20
lines changed Original file line number Diff line number Diff line change @@ -1647,16 +1647,16 @@ impl Type {
16471647 }
16481648 }
16491649
1650- pub ( crate ) fn generics ( & self ) -> Option < Vec < & Type > > {
1650+ pub ( crate ) fn generic_args ( & self ) -> Option < & GenericArgs > {
16511651 match self {
1652- Type :: Path { path, .. } => path. generics ( ) ,
1652+ Type :: Path { path, .. } => path. generic_args ( ) ,
16531653 _ => None ,
16541654 }
16551655 }
16561656
1657- pub ( crate ) fn bindings ( & self ) -> Option < & [ TypeBinding ] > {
1657+ pub ( crate ) fn generics ( & self ) -> Option < Vec < & Type > > {
16581658 match self {
1659- Type :: Path { path, .. } => path. bindings ( ) ,
1659+ Type :: Path { path, .. } => path. generics ( ) ,
16601660 _ => None ,
16611661 }
16621662 }
@@ -2194,6 +2194,10 @@ impl Path {
21942194 }
21952195 }
21962196
2197+ pub ( crate ) fn generic_args ( & self ) -> Option < & GenericArgs > {
2198+ self . segments . last ( ) . map ( |seg| & seg. args )
2199+ }
2200+
21972201 pub ( crate ) fn generics ( & self ) -> Option < Vec < & Type > > {
21982202 self . segments . last ( ) . and_then ( |seg| {
21992203 if let GenericArgs :: AngleBracketed { ref args, .. } = seg. args {
Original file line number Diff line number Diff line change @@ -805,25 +805,15 @@ fn simplify_fn_type<'tcx, 'a>(
805805 // we will look for them but not for `T`).
806806 let mut ty_generics = Vec :: new ( ) ;
807807 let mut ty_bindings = Vec :: new ( ) ;
808- for binding in arg. bindings ( ) . unwrap_or_default ( ) {
809- simplify_fn_binding (
810- self_,
811- generics,
812- binding,
813- tcx,
814- recurse + 1 ,
815- & mut ty_bindings,
816- rgen,
817- is_return,
818- cache,
819- ) ;
820- }
821- if let Some ( arg_generics) = arg. generics ( ) {
822- for gen in arg_generics. iter ( ) {
808+ if let Some ( arg_generics) = arg. generic_args ( ) {
809+ for ty in arg_generics. into_iter ( ) . filter_map ( |gen| match gen {
810+ clean:: GenericArg :: Type ( ty) => Some ( ty) ,
811+ _ => None ,
812+ } ) {
823813 simplify_fn_type (
824814 self_,
825815 generics,
826- gen ,
816+ & ty ,
827817 tcx,
828818 recurse + 1 ,
829819 & mut ty_generics,
@@ -832,6 +822,19 @@ fn simplify_fn_type<'tcx, 'a>(
832822 cache,
833823 ) ;
834824 }
825+ for binding in arg_generics. bindings ( ) {
826+ simplify_fn_binding (
827+ self_,
828+ generics,
829+ & binding,
830+ tcx,
831+ recurse + 1 ,
832+ & mut ty_bindings,
833+ rgen,
834+ is_return,
835+ cache,
836+ ) ;
837+ }
835838 }
836839 // Every trait associated type on self gets assigned to a type parameter index
837840 // this same one is used later for any appearances of these types
You can’t perform that action at this time.
0 commit comments