Skip to content

Commit eb125f3

Browse files
authored
Rollup merge of #69812 - Marwes:refactor, r=petrochenkov
Refactorings to method/probe.rs and CrateId A couple of refactorings done while looking into performance improvements in method resolution.
2 parents 9ea18a6 + 6095fa1 commit eb125f3

File tree

2 files changed

+47
-81
lines changed

2 files changed

+47
-81
lines changed

src/librustc_typeck/check/method/mod.rs

+8-6
Original file line numberDiff line numberDiff line change
@@ -459,12 +459,14 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
459459
ProbeScope::TraitsInScope,
460460
)?;
461461
debug!("resolve_ufcs: pick={:?}", pick);
462-
for import_id in pick.import_ids {
463-
let import_def_id = tcx.hir().local_def_id(import_id);
464-
debug!("resolve_ufcs: used_trait_import: {:?}", import_def_id);
465-
Lrc::get_mut(&mut self.tables.borrow_mut().used_trait_imports)
466-
.unwrap()
467-
.insert(import_def_id);
462+
{
463+
let mut tables = self.tables.borrow_mut();
464+
let used_trait_imports = Lrc::get_mut(&mut tables.used_trait_imports).unwrap();
465+
for import_id in pick.import_ids {
466+
let import_def_id = tcx.hir().local_def_id(import_id);
467+
debug!("resolve_ufcs: used_trait_import: {:?}", import_def_id);
468+
used_trait_imports.insert(import_def_id);
469+
}
468470
}
469471

470472
let def_kind = pick.item.def_kind();

src/librustc_typeck/check/method/probe.rs

+39-75
Original file line numberDiff line numberDiff line change
@@ -572,7 +572,7 @@ impl<'a, 'tcx> ProbeContext<'a, 'tcx> {
572572
}
573573

574574
fn assemble_inherent_candidates(&mut self) {
575-
let steps = self.steps.clone();
575+
let steps = Lrc::clone(&self.steps);
576576
for step in steps.iter() {
577577
self.assemble_probe(&step.self_ty);
578578
}
@@ -635,87 +635,51 @@ impl<'a, 'tcx> ProbeContext<'a, 'tcx> {
635635
self.assemble_inherent_impl_for_primitive(lang_def_id);
636636
}
637637
ty::Slice(_) => {
638-
let lang_def_id = lang_items.slice_impl();
639-
self.assemble_inherent_impl_for_primitive(lang_def_id);
640-
641-
let lang_def_id = lang_items.slice_u8_impl();
642-
self.assemble_inherent_impl_for_primitive(lang_def_id);
643-
644-
let lang_def_id = lang_items.slice_alloc_impl();
645-
self.assemble_inherent_impl_for_primitive(lang_def_id);
646-
647-
let lang_def_id = lang_items.slice_u8_alloc_impl();
648-
self.assemble_inherent_impl_for_primitive(lang_def_id);
649-
}
650-
ty::RawPtr(ty::TypeAndMut { ty: _, mutbl: hir::Mutability::Not }) => {
651-
let lang_def_id = lang_items.const_ptr_impl();
652-
self.assemble_inherent_impl_for_primitive(lang_def_id);
653-
}
654-
ty::RawPtr(ty::TypeAndMut { ty: _, mutbl: hir::Mutability::Mut }) => {
655-
let lang_def_id = lang_items.mut_ptr_impl();
656-
self.assemble_inherent_impl_for_primitive(lang_def_id);
657-
}
658-
ty::Int(ast::IntTy::I8) => {
659-
let lang_def_id = lang_items.i8_impl();
660-
self.assemble_inherent_impl_for_primitive(lang_def_id);
661-
}
662-
ty::Int(ast::IntTy::I16) => {
663-
let lang_def_id = lang_items.i16_impl();
664-
self.assemble_inherent_impl_for_primitive(lang_def_id);
665-
}
666-
ty::Int(ast::IntTy::I32) => {
667-
let lang_def_id = lang_items.i32_impl();
668-
self.assemble_inherent_impl_for_primitive(lang_def_id);
669-
}
670-
ty::Int(ast::IntTy::I64) => {
671-
let lang_def_id = lang_items.i64_impl();
672-
self.assemble_inherent_impl_for_primitive(lang_def_id);
673-
}
674-
ty::Int(ast::IntTy::I128) => {
675-
let lang_def_id = lang_items.i128_impl();
676-
self.assemble_inherent_impl_for_primitive(lang_def_id);
677-
}
678-
ty::Int(ast::IntTy::Isize) => {
679-
let lang_def_id = lang_items.isize_impl();
680-
self.assemble_inherent_impl_for_primitive(lang_def_id);
681-
}
682-
ty::Uint(ast::UintTy::U8) => {
683-
let lang_def_id = lang_items.u8_impl();
684-
self.assemble_inherent_impl_for_primitive(lang_def_id);
685-
}
686-
ty::Uint(ast::UintTy::U16) => {
687-
let lang_def_id = lang_items.u16_impl();
688-
self.assemble_inherent_impl_for_primitive(lang_def_id);
689-
}
690-
ty::Uint(ast::UintTy::U32) => {
691-
let lang_def_id = lang_items.u32_impl();
692-
self.assemble_inherent_impl_for_primitive(lang_def_id);
693-
}
694-
ty::Uint(ast::UintTy::U64) => {
695-
let lang_def_id = lang_items.u64_impl();
696-
self.assemble_inherent_impl_for_primitive(lang_def_id);
638+
for &lang_def_id in &[
639+
lang_items.slice_impl(),
640+
lang_items.slice_u8_impl(),
641+
lang_items.slice_alloc_impl(),
642+
lang_items.slice_u8_alloc_impl(),
643+
] {
644+
self.assemble_inherent_impl_for_primitive(lang_def_id);
645+
}
697646
}
698-
ty::Uint(ast::UintTy::U128) => {
699-
let lang_def_id = lang_items.u128_impl();
647+
ty::RawPtr(ty::TypeAndMut { ty: _, mutbl }) => {
648+
let lang_def_id = match mutbl {
649+
hir::Mutability::Not => lang_items.const_ptr_impl(),
650+
hir::Mutability::Mut => lang_items.mut_ptr_impl(),
651+
};
700652
self.assemble_inherent_impl_for_primitive(lang_def_id);
701653
}
702-
ty::Uint(ast::UintTy::Usize) => {
703-
let lang_def_id = lang_items.usize_impl();
654+
ty::Int(i) => {
655+
let lang_def_id = match i {
656+
ast::IntTy::I8 => lang_items.i8_impl(),
657+
ast::IntTy::I16 => lang_items.i16_impl(),
658+
ast::IntTy::I32 => lang_items.i32_impl(),
659+
ast::IntTy::I64 => lang_items.i64_impl(),
660+
ast::IntTy::I128 => lang_items.i128_impl(),
661+
ast::IntTy::Isize => lang_items.isize_impl(),
662+
};
704663
self.assemble_inherent_impl_for_primitive(lang_def_id);
705664
}
706-
ty::Float(ast::FloatTy::F32) => {
707-
let lang_def_id = lang_items.f32_impl();
708-
self.assemble_inherent_impl_for_primitive(lang_def_id);
709-
710-
let lang_def_id = lang_items.f32_runtime_impl();
665+
ty::Uint(i) => {
666+
let lang_def_id = match i {
667+
ast::UintTy::U8 => lang_items.u8_impl(),
668+
ast::UintTy::U16 => lang_items.u16_impl(),
669+
ast::UintTy::U32 => lang_items.u32_impl(),
670+
ast::UintTy::U64 => lang_items.u64_impl(),
671+
ast::UintTy::U128 => lang_items.u128_impl(),
672+
ast::UintTy::Usize => lang_items.usize_impl(),
673+
};
711674
self.assemble_inherent_impl_for_primitive(lang_def_id);
712675
}
713-
ty::Float(ast::FloatTy::F64) => {
714-
let lang_def_id = lang_items.f64_impl();
715-
self.assemble_inherent_impl_for_primitive(lang_def_id);
716-
717-
let lang_def_id = lang_items.f64_runtime_impl();
718-
self.assemble_inherent_impl_for_primitive(lang_def_id);
676+
ty::Float(f) => {
677+
let (lang_def_id1, lang_def_id2) = match f {
678+
ast::FloatTy::F32 => (lang_items.f32_impl(), lang_items.f32_runtime_impl()),
679+
ast::FloatTy::F64 => (lang_items.f64_impl(), lang_items.f64_runtime_impl()),
680+
};
681+
self.assemble_inherent_impl_for_primitive(lang_def_id1);
682+
self.assemble_inherent_impl_for_primitive(lang_def_id2);
719683
}
720684
_ => {}
721685
}

0 commit comments

Comments
 (0)