@@ -7,9 +7,8 @@ use std::{ops::ControlFlow, sync::Arc};
7
7
use base_db:: { CrateId , Edition } ;
8
8
use chalk_ir:: { cast:: Cast , Mutability , TyKind , UniverseIndex , WhereClause } ;
9
9
use hir_def:: {
10
- data:: ImplData , item_scope:: ItemScope , lang_item:: LangItem , nameres:: DefMap , AssocItemId ,
11
- BlockId , ConstId , FunctionId , HasModule , ImplId , ItemContainerId , Lookup , ModuleDefId ,
12
- ModuleId , TraitId ,
10
+ data:: ImplData , item_scope:: ItemScope , nameres:: DefMap , AssocItemId , BlockId , ConstId ,
11
+ FunctionId , HasModule , ImplId , ItemContainerId , Lookup , ModuleDefId , ModuleId , TraitId ,
13
12
} ;
14
13
use hir_expand:: name:: Name ;
15
14
use rustc_hash:: { FxHashMap , FxHashSet } ;
@@ -451,55 +450,6 @@ pub fn def_crates(
451
450
}
452
451
}
453
452
454
- pub fn lang_items_for_bin_op ( op : syntax:: ast:: BinaryOp ) -> Option < ( Name , LangItem ) > {
455
- use hir_expand:: name;
456
- use syntax:: ast:: { ArithOp , BinaryOp , CmpOp , Ordering } ;
457
- Some ( match op {
458
- BinaryOp :: LogicOp ( _) => return None ,
459
- BinaryOp :: ArithOp ( aop) => match aop {
460
- ArithOp :: Add => ( name ! [ add] , LangItem :: Add ) ,
461
- ArithOp :: Mul => ( name ! [ mul] , LangItem :: Mul ) ,
462
- ArithOp :: Sub => ( name ! [ sub] , LangItem :: Sub ) ,
463
- ArithOp :: Div => ( name ! [ div] , LangItem :: Div ) ,
464
- ArithOp :: Rem => ( name ! [ rem] , LangItem :: Rem ) ,
465
- ArithOp :: Shl => ( name ! [ shl] , LangItem :: Shl ) ,
466
- ArithOp :: Shr => ( name ! [ shr] , LangItem :: Shr ) ,
467
- ArithOp :: BitXor => ( name ! [ bitxor] , LangItem :: BitXor ) ,
468
- ArithOp :: BitOr => ( name ! [ bitor] , LangItem :: BitOr ) ,
469
- ArithOp :: BitAnd => ( name ! [ bitand] , LangItem :: BitAnd ) ,
470
- } ,
471
- BinaryOp :: Assignment { op : Some ( aop) } => match aop {
472
- ArithOp :: Add => ( name ! [ add_assign] , LangItem :: AddAssign ) ,
473
- ArithOp :: Mul => ( name ! [ mul_assign] , LangItem :: MulAssign ) ,
474
- ArithOp :: Sub => ( name ! [ sub_assign] , LangItem :: SubAssign ) ,
475
- ArithOp :: Div => ( name ! [ div_assign] , LangItem :: DivAssign ) ,
476
- ArithOp :: Rem => ( name ! [ rem_assign] , LangItem :: RemAssign ) ,
477
- ArithOp :: Shl => ( name ! [ shl_assign] , LangItem :: ShlAssign ) ,
478
- ArithOp :: Shr => ( name ! [ shr_assign] , LangItem :: ShrAssign ) ,
479
- ArithOp :: BitXor => ( name ! [ bitxor_assign] , LangItem :: BitXorAssign ) ,
480
- ArithOp :: BitOr => ( name ! [ bitor_assign] , LangItem :: BitOrAssign ) ,
481
- ArithOp :: BitAnd => ( name ! [ bitand_assign] , LangItem :: BitAndAssign ) ,
482
- } ,
483
- BinaryOp :: CmpOp ( cop) => match cop {
484
- CmpOp :: Eq { negated : false } => ( name ! [ eq] , LangItem :: PartialEq ) ,
485
- CmpOp :: Eq { negated : true } => ( name ! [ ne] , LangItem :: PartialEq ) ,
486
- CmpOp :: Ord { ordering : Ordering :: Less , strict : false } => {
487
- ( name ! [ le] , LangItem :: PartialOrd )
488
- }
489
- CmpOp :: Ord { ordering : Ordering :: Less , strict : true } => {
490
- ( name ! [ lt] , LangItem :: PartialOrd )
491
- }
492
- CmpOp :: Ord { ordering : Ordering :: Greater , strict : false } => {
493
- ( name ! [ ge] , LangItem :: PartialOrd )
494
- }
495
- CmpOp :: Ord { ordering : Ordering :: Greater , strict : true } => {
496
- ( name ! [ gt] , LangItem :: PartialOrd )
497
- }
498
- } ,
499
- BinaryOp :: Assignment { op : None } => return None ,
500
- } )
501
- }
502
-
503
453
/// Look up the method with the given name.
504
454
pub ( crate ) fn lookup_method (
505
455
db : & dyn HirDatabase ,
@@ -1310,16 +1260,18 @@ fn iterate_inherent_methods(
1310
1260
/// Returns the receiver type for the index trait call.
1311
1261
pub fn resolve_indexing_op (
1312
1262
db : & dyn HirDatabase ,
1313
- env : Arc < TraitEnvironment > ,
1263
+ table : & mut InferenceTable < ' _ > ,
1314
1264
ty : Canonical < Ty > ,
1315
1265
index_trait : TraitId ,
1316
1266
) -> Option < ReceiverAdjustments > {
1317
- let mut table = InferenceTable :: new ( db, env. clone ( ) ) ;
1318
1267
let ty = table. instantiate_canonical ( ty) ;
1319
- let deref_chain = autoderef_method_receiver ( & mut table, ty) ;
1268
+ let deref_chain = autoderef_method_receiver ( table, ty) ;
1320
1269
for ( ty, adj) in deref_chain {
1321
- let goal = generic_implements_goal ( db, env. clone ( ) , index_trait, & ty) ;
1322
- if db. trait_solve ( env. krate , env. block , goal. cast ( Interner ) ) . is_some ( ) {
1270
+ let goal = generic_implements_goal ( db, table. trait_env . clone ( ) , index_trait, & ty) ;
1271
+ if db
1272
+ . trait_solve ( table. trait_env . krate , table. trait_env . block , goal. cast ( Interner ) )
1273
+ . is_some ( )
1274
+ {
1323
1275
return Some ( adj) ;
1324
1276
}
1325
1277
}
0 commit comments