Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir-ty/src/mir/lower/as_place.rs')
-rw-r--r--crates/hir-ty/src/mir/lower/as_place.rs25
1 files changed, 8 insertions, 17 deletions
diff --git a/crates/hir-ty/src/mir/lower/as_place.rs b/crates/hir-ty/src/mir/lower/as_place.rs
index bceafae0f1..40c6c5de79 100644
--- a/crates/hir-ty/src/mir/lower/as_place.rs
+++ b/crates/hir-ty/src/mir/lower/as_place.rs
@@ -2,7 +2,7 @@
use hir_def::FunctionId;
use intern::sym;
-use rustc_type_ir::inherent::{AdtDef, Region as _, Ty as _};
+use rustc_type_ir::inherent::{Region as _, Ty as _};
use super::*;
use crate::{
@@ -177,13 +177,7 @@ impl<'db> MirLowerCtx<'_, 'db> {
Expr::UnaryOp { expr, op: hir_def::hir::UnaryOp::Deref } => {
let is_builtin = match self.expr_ty_without_adjust(*expr).kind() {
TyKind::Ref(..) | TyKind::RawPtr(..) => true,
- TyKind::Adt(id, _) => {
- if let Some(lang_item) = self.db.lang_attr(id.def_id().0.into()) {
- lang_item == LangItem::OwnedBox
- } else {
- false
- }
- }
+ TyKind::Adt(id, _) => id.is_box(),
_ => false,
};
if !is_builtin {
@@ -198,8 +192,7 @@ impl<'db> MirLowerCtx<'_, 'db> {
expr_id.into(),
'b: {
if let Some((f, _)) = self.infer.method_resolution(expr_id)
- && let Some(deref_trait) =
- self.resolve_lang_item(LangItem::DerefMut)?.as_trait()
+ && let Some(deref_trait) = self.lang_items().DerefMut
&& let Some(deref_fn) = deref_trait
.trait_items(self.db)
.method_by_name(&Name::new_symbol_root(sym::deref_mut))
@@ -330,17 +323,18 @@ impl<'db> MirLowerCtx<'_, 'db> {
span: MirSpan,
mutability: bool,
) -> Result<'db, Option<(Place<'db>, BasicBlockId<'db>)>> {
+ let lang_items = self.lang_items();
let (mutability, trait_lang_item, trait_method_name, borrow_kind) = if !mutability {
(
Mutability::Not,
- LangItem::Deref,
+ lang_items.Deref,
Name::new_symbol_root(sym::deref),
BorrowKind::Shared,
)
} else {
(
Mutability::Mut,
- LangItem::DerefMut,
+ lang_items.DerefMut,
Name::new_symbol_root(sym::deref_mut),
BorrowKind::Mut { kind: MutBorrowKind::Default },
)
@@ -350,14 +344,11 @@ impl<'db> MirLowerCtx<'_, 'db> {
let target_ty_ref = Ty::new_ref(self.interner(), error_region, target_ty, mutability);
let ref_place: Place<'db> = self.temp(ty_ref, current, span)?.into();
self.push_assignment(current, ref_place, Rvalue::Ref(borrow_kind, place), span);
- let deref_trait = self
- .resolve_lang_item(trait_lang_item)?
- .as_trait()
- .ok_or(MirLowerError::LangItemNotFound(trait_lang_item))?;
+ let deref_trait = trait_lang_item.ok_or(MirLowerError::LangItemNotFound)?;
let deref_fn = deref_trait
.trait_items(self.db)
.method_by_name(&trait_method_name)
- .ok_or(MirLowerError::LangItemNotFound(trait_lang_item))?;
+ .ok_or(MirLowerError::LangItemNotFound)?;
let deref_fn_op = Operand::const_zst(Ty::new_fn_def(
self.interner(),
CallableDefId::FunctionId(deref_fn).into(),