@@ -96,9 +96,9 @@ impl<'a> TyLoweringContext<'a> {
96
96
debruijn : DebruijnIndex ,
97
97
f : impl FnOnce ( & TyLoweringContext ) -> T ,
98
98
) -> T {
99
- let opaque_ty_data_vec = self . opaque_type_data . replace ( Vec :: new ( ) ) ;
100
- let expander = self . expander . replace ( None ) ;
101
- let unsized_types = self . unsized_types . replace ( Default :: default ( ) ) ;
99
+ let opaque_ty_data_vec = self . opaque_type_data . take ( ) ;
100
+ let expander = self . expander . take ( ) ;
101
+ let unsized_types = self . unsized_types . take ( ) ;
102
102
let new_ctx = Self {
103
103
in_binders : debruijn,
104
104
impl_trait_counter : Cell :: new ( self . impl_trait_counter . get ( ) ) ,
@@ -615,7 +615,7 @@ impl<'a> TyLoweringContext<'a> {
615
615
// `Option::None::<T>` are both allowed (though the former is
616
616
// preferred). See also `def_ids_for_path_segments` in rustc.
617
617
let len = path. segments ( ) . len ( ) ;
618
- let penultimate = if len >= 2 { path. segments ( ) . get ( len - 2 ) } else { None } ;
618
+ let penultimate = len. checked_sub ( 2 ) . and_then ( |idx| path. segments ( ) . get ( idx ) ) ;
619
619
let segment = match penultimate {
620
620
Some ( segment) if segment. args_and_bindings . is_some ( ) => segment,
621
621
_ => last,
@@ -841,23 +841,23 @@ impl<'a> TyLoweringContext<'a> {
841
841
} ;
842
842
last_segment
843
843
. into_iter ( )
844
- . flat_map ( |segment| segment. args_and_bindings . into_iter ( ) )
845
- . flat_map ( |args_and_bindings| args_and_bindings. bindings . iter ( ) )
844
+ . filter_map ( |segment| segment. args_and_bindings )
845
+ . flat_map ( |args_and_bindings| & args_and_bindings. bindings )
846
846
. flat_map ( move |binding| {
847
847
let found = associated_type_by_name_including_super_traits (
848
848
self . db ,
849
849
trait_ref. clone ( ) ,
850
850
& binding. name ,
851
851
) ;
852
852
let ( super_trait_ref, associated_ty) = match found {
853
- None => return SmallVec :: < [ QuantifiedWhereClause ; 1 ] > :: new ( ) ,
853
+ None => return SmallVec :: new ( ) ,
854
854
Some ( t) => t,
855
855
} ;
856
856
let projection_ty = ProjectionTy {
857
857
associated_ty_id : to_assoc_type_id ( associated_ty) ,
858
858
substitution : super_trait_ref. substitution ,
859
859
} ;
860
- let mut preds = SmallVec :: with_capacity (
860
+ let mut preds: SmallVec < [ _ ; 1 ] > = SmallVec :: with_capacity (
861
861
binding. type_ref . as_ref ( ) . map_or ( 0 , |_| 1 ) + binding. bounds . len ( ) ,
862
862
) ;
863
863
if let Some ( type_ref) = & binding. type_ref {
0 commit comments