File tree 2 files changed +27
-20
lines changed
2 files changed +27
-20
lines changed Original file line number Diff line number Diff line change @@ -1651,16 +1651,16 @@ impl Type {
1651
1651
}
1652
1652
}
1653
1653
1654
- pub ( crate ) fn generics ( & self ) -> Option < Vec < & Type > > {
1654
+ pub ( crate ) fn generic_args ( & self ) -> Option < & GenericArgs > {
1655
1655
match self {
1656
- Type :: Path { path, .. } => path. generics ( ) ,
1656
+ Type :: Path { path, .. } => path. generic_args ( ) ,
1657
1657
_ => None ,
1658
1658
}
1659
1659
}
1660
1660
1661
- pub ( crate ) fn bindings ( & self ) -> Option < & [ TypeBinding ] > {
1661
+ pub ( crate ) fn generics ( & self ) -> Option < Vec < & Type > > {
1662
1662
match self {
1663
- Type :: Path { path, .. } => path. bindings ( ) ,
1663
+ Type :: Path { path, .. } => path. generics ( ) ,
1664
1664
_ => None ,
1665
1665
}
1666
1666
}
@@ -2198,6 +2198,10 @@ impl Path {
2198
2198
}
2199
2199
}
2200
2200
2201
+ pub ( crate ) fn generic_args ( & self ) -> Option < & GenericArgs > {
2202
+ self . segments . last ( ) . map ( |seg| & seg. args )
2203
+ }
2204
+
2201
2205
pub ( crate ) fn generics ( & self ) -> Option < Vec < & Type > > {
2202
2206
self . segments . last ( ) . and_then ( |seg| {
2203
2207
if let GenericArgs :: AngleBracketed { ref args, .. } = seg. args {
Original file line number Diff line number Diff line change @@ -806,25 +806,15 @@ fn simplify_fn_type<'tcx, 'a>(
806
806
// we will look for them but not for `T`).
807
807
let mut ty_generics = Vec :: new ( ) ;
808
808
let mut ty_bindings = Vec :: new ( ) ;
809
- for binding in arg. bindings ( ) . unwrap_or_default ( ) {
810
- simplify_fn_binding (
811
- self_,
812
- generics,
813
- binding,
814
- tcx,
815
- recurse + 1 ,
816
- & mut ty_bindings,
817
- rgen,
818
- is_return,
819
- cache,
820
- ) ;
821
- }
822
- if let Some ( arg_generics) = arg. generics ( ) {
823
- for gen in arg_generics. iter ( ) {
809
+ if let Some ( arg_generics) = arg. generic_args ( ) {
810
+ for ty in arg_generics. into_iter ( ) . filter_map ( |gen| match gen {
811
+ clean:: GenericArg :: Type ( ty) => Some ( ty) ,
812
+ _ => None ,
813
+ } ) {
824
814
simplify_fn_type (
825
815
self_,
826
816
generics,
827
- gen ,
817
+ & ty ,
828
818
tcx,
829
819
recurse + 1 ,
830
820
& mut ty_generics,
@@ -833,6 +823,19 @@ fn simplify_fn_type<'tcx, 'a>(
833
823
cache,
834
824
) ;
835
825
}
826
+ for binding in arg_generics. bindings ( ) {
827
+ simplify_fn_binding (
828
+ self_,
829
+ generics,
830
+ & binding,
831
+ tcx,
832
+ recurse + 1 ,
833
+ & mut ty_bindings,
834
+ rgen,
835
+ is_return,
836
+ cache,
837
+ ) ;
838
+ }
836
839
}
837
840
// Every trait associated type on self gets assigned to a type parameter index
838
841
// this same one is used later for any appearances of these types
You can’t perform that action at this time.
0 commit comments