Move Ty::builtin_deref

This commit is contained in:
Lukas Wirth 2021-04-07 13:06:48 +02:00
parent a8f1e41f0f
commit e3a5c15d18
2 changed files with 9 additions and 9 deletions

View File

@ -35,13 +35,21 @@ pub(crate) fn deref(
krate: CrateId,
ty: InEnvironment<&Canonical<Ty>>,
) -> Option<Canonical<Ty>> {
if let Some(derefed) = ty.goal.value.builtin_deref() {
if let Some(derefed) = builtin_deref(&ty.goal.value) {
Some(Canonical { value: derefed, binders: ty.goal.binders.clone() })
} else {
deref_by_trait(db, krate, ty)
}
}
fn builtin_deref(ty: &Ty) -> Option<Ty> {
match ty.kind(&Interner) {
TyKind::Ref(.., ty) => Some(ty.clone()),
TyKind::Raw(.., ty) => Some(ty.clone()),
_ => None,
}
}
fn deref_by_trait(
db: &dyn HirDatabase,
krate: CrateId,

View File

@ -199,14 +199,6 @@ impl Ty {
}
}
fn builtin_deref(&self) -> Option<Ty> {
match self.kind(&Interner) {
TyKind::Ref(.., ty) => Some(ty.clone()),
TyKind::Raw(.., ty) => Some(ty.clone()),
_ => None,
}
}
/// Returns the type parameters of this type if it has some (i.e. is an ADT
/// or function); so if `self` is `Option<u32>`, this returns the `u32`.
pub fn substs(&self) -> Option<&Substitution> {