@@ -972,10 +972,9 @@ pub fn iterate_method_candidates_dyn(
972
972
973
973
deref_chain. into_iter ( ) . try_for_each ( |( receiver_ty, adj) | {
974
974
iterate_method_candidates_with_autoref (
975
+ & mut table,
975
976
& receiver_ty,
976
977
adj,
977
- db,
978
- env. clone ( ) ,
979
978
traits_in_scope,
980
979
visible_from_module,
981
980
name,
@@ -1000,10 +999,9 @@ pub fn iterate_method_candidates_dyn(
1000
999
1001
1000
#[ tracing:: instrument( skip_all, fields( name = ?name) ) ]
1002
1001
fn iterate_method_candidates_with_autoref (
1002
+ table : & mut InferenceTable < ' _ > ,
1003
1003
receiver_ty : & Canonical < Ty > ,
1004
1004
first_adjustment : ReceiverAdjustments ,
1005
- db : & dyn HirDatabase ,
1006
- env : Arc < TraitEnvironment > ,
1007
1005
traits_in_scope : & FxHashSet < TraitId > ,
1008
1006
visible_from_module : VisibleFromModule ,
1009
1007
name : Option < & Name > ,
@@ -1016,10 +1014,9 @@ fn iterate_method_candidates_with_autoref(
1016
1014
1017
1015
let mut iterate_method_candidates_by_receiver = move |receiver_ty, first_adjustment| {
1018
1016
iterate_method_candidates_by_receiver (
1017
+ table,
1019
1018
receiver_ty,
1020
1019
first_adjustment,
1021
- db,
1022
- env. clone ( ) ,
1023
1020
traits_in_scope,
1024
1021
visible_from_module,
1025
1022
name,
@@ -1058,50 +1055,49 @@ fn iterate_method_candidates_with_autoref(
1058
1055
1059
1056
#[ tracing:: instrument( skip_all, fields( name = ?name) ) ]
1060
1057
fn iterate_method_candidates_by_receiver (
1058
+ table : & mut InferenceTable < ' _ > ,
1061
1059
receiver_ty : & Canonical < Ty > ,
1062
1060
receiver_adjustments : ReceiverAdjustments ,
1063
- db : & dyn HirDatabase ,
1064
- env : Arc < TraitEnvironment > ,
1065
1061
traits_in_scope : & FxHashSet < TraitId > ,
1066
1062
visible_from_module : VisibleFromModule ,
1067
1063
name : Option < & Name > ,
1068
1064
mut callback : & mut dyn FnMut ( ReceiverAdjustments , AssocItemId , bool ) -> ControlFlow < ( ) > ,
1069
1065
) -> ControlFlow < ( ) > {
1070
- let mut table = InferenceTable :: new ( db, env) ;
1071
- let receiver_ty = table. instantiate_canonical ( receiver_ty. clone ( ) ) ;
1072
- let snapshot = table. snapshot ( ) ;
1073
- // We're looking for methods with *receiver* type receiver_ty. These could
1074
- // be found in any of the derefs of receiver_ty, so we have to go through
1075
- // that, including raw derefs.
1076
- let mut autoderef = autoderef:: Autoderef :: new ( & mut table, receiver_ty. clone ( ) , true ) ;
1077
- while let Some ( ( self_ty, _) ) = autoderef. next ( ) {
1078
- iterate_inherent_methods (
1079
- & self_ty,
1080
- autoderef. table ,
1081
- name,
1082
- Some ( & receiver_ty) ,
1083
- Some ( receiver_adjustments. clone ( ) ) ,
1084
- visible_from_module,
1085
- & mut callback,
1086
- ) ?
1087
- }
1088
-
1089
- table. rollback_to ( snapshot) ;
1090
-
1091
- let mut autoderef = autoderef:: Autoderef :: new ( & mut table, receiver_ty. clone ( ) , true ) ;
1092
- while let Some ( ( self_ty, _) ) = autoderef. next ( ) {
1093
- iterate_trait_method_candidates (
1094
- & self_ty,
1095
- autoderef. table ,
1096
- traits_in_scope,
1097
- name,
1098
- Some ( & receiver_ty) ,
1099
- Some ( receiver_adjustments. clone ( ) ) ,
1100
- & mut callback,
1101
- ) ?
1102
- }
1066
+ table. run_in_snapshot ( |table| {
1067
+ let receiver_ty = table. instantiate_canonical ( receiver_ty. clone ( ) ) ;
1068
+ // We're looking for methods with *receiver* type receiver_ty. These could
1069
+ // be found in any of the derefs of receiver_ty, so we have to go through
1070
+ // that, including raw derefs.
1071
+ table. run_in_snapshot ( |table| {
1072
+ let mut autoderef = autoderef:: Autoderef :: new ( table, receiver_ty. clone ( ) , true ) ;
1073
+ while let Some ( ( self_ty, _) ) = autoderef. next ( ) {
1074
+ iterate_inherent_methods (
1075
+ & self_ty,
1076
+ autoderef. table ,
1077
+ name,
1078
+ Some ( & receiver_ty) ,
1079
+ Some ( receiver_adjustments. clone ( ) ) ,
1080
+ visible_from_module,
1081
+ & mut callback,
1082
+ ) ?
1083
+ }
1084
+ ControlFlow :: Continue ( ( ) )
1085
+ } ) ?;
1103
1086
1104
- ControlFlow :: Continue ( ( ) )
1087
+ let mut autoderef = autoderef:: Autoderef :: new ( table, receiver_ty. clone ( ) , true ) ;
1088
+ while let Some ( ( self_ty, _) ) = autoderef. next ( ) {
1089
+ iterate_trait_method_candidates (
1090
+ & self_ty,
1091
+ autoderef. table ,
1092
+ traits_in_scope,
1093
+ name,
1094
+ Some ( & receiver_ty) ,
1095
+ Some ( receiver_adjustments. clone ( ) ) ,
1096
+ & mut callback,
1097
+ ) ?
1098
+ }
1099
+ ControlFlow :: Continue ( ( ) )
1100
+ } )
1105
1101
}
1106
1102
1107
1103
#[ tracing:: instrument( skip_all, fields( name = ?name) ) ]
0 commit comments