mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-27 01:04:03 +00:00
Remove ty::ClosureKind::from_def_id
…in favour of `TyCtxt::fn_trait_kind_from_def_id`
This commit is contained in:
parent
881862ecb7
commit
d0c7ed3bea
@ -2089,7 +2089,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
|||||||
&& let maybe_trait_item_def_id = assoc_item.trait_item_def_id.unwrap_or(def_id)
|
&& let maybe_trait_item_def_id = assoc_item.trait_item_def_id.unwrap_or(def_id)
|
||||||
&& let maybe_trait_def_id = self.tcx.parent(maybe_trait_item_def_id)
|
&& let maybe_trait_def_id = self.tcx.parent(maybe_trait_item_def_id)
|
||||||
// Just an easy way to check "trait_def_id == Fn/FnMut/FnOnce"
|
// Just an easy way to check "trait_def_id == Fn/FnMut/FnOnce"
|
||||||
&& let Some(call_kind) = ty::ClosureKind::from_def_id(self.tcx, maybe_trait_def_id)
|
&& let Some(call_kind) = self.tcx.fn_trait_kind_from_def_id(maybe_trait_def_id)
|
||||||
&& let Some(callee_ty) = callee_ty
|
&& let Some(callee_ty) = callee_ty
|
||||||
{
|
{
|
||||||
let callee_ty = callee_ty.peel_refs();
|
let callee_ty = callee_ty.peel_refs();
|
||||||
@ -2115,7 +2115,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
|||||||
{
|
{
|
||||||
if let ty::PredicateKind::Clause(ty::Clause::Trait(pred)) = predicate.kind().skip_binder()
|
if let ty::PredicateKind::Clause(ty::Clause::Trait(pred)) = predicate.kind().skip_binder()
|
||||||
&& pred.self_ty().peel_refs() == callee_ty
|
&& pred.self_ty().peel_refs() == callee_ty
|
||||||
&& ty::ClosureKind::from_def_id(self.tcx, pred.def_id()).is_some()
|
&& self.tcx.fn_trait_kind_from_def_id(pred.def_id()).is_some()
|
||||||
{
|
{
|
||||||
err.span_note(span, "callable defined here");
|
err.span_note(span, "callable defined here");
|
||||||
return;
|
return;
|
||||||
|
@ -118,18 +118,9 @@ impl<'tcx> ClosureKind {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn from_def_id(tcx: TyCtxt<'_>, def_id: DefId) -> Option<ClosureKind> {
|
/// Converts `self` to a [`DefId`] of the corresponding trait.
|
||||||
if Some(def_id) == tcx.lang_items().fn_once_trait() {
|
///
|
||||||
Some(ClosureKind::FnOnce)
|
/// Note: the inverse of this function is [`TyCtxt::fn_trait_kind_from_def_id`]
|
||||||
} else if Some(def_id) == tcx.lang_items().fn_mut_trait() {
|
|
||||||
Some(ClosureKind::FnMut)
|
|
||||||
} else if Some(def_id) == tcx.lang_items().fn_trait() {
|
|
||||||
Some(ClosureKind::Fn)
|
|
||||||
} else {
|
|
||||||
None
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn to_def_id(&self, tcx: TyCtxt<'_>) -> DefId {
|
pub fn to_def_id(&self, tcx: TyCtxt<'_>) -> DefId {
|
||||||
tcx.require_lang_item(
|
tcx.require_lang_item(
|
||||||
match self {
|
match self {
|
||||||
|
@ -357,7 +357,8 @@ impl<'tcx> InferCtxtExt<'tcx> for InferCtxt<'tcx> {
|
|||||||
ocx.register_obligation(obligation);
|
ocx.register_obligation(obligation);
|
||||||
if ocx.select_all_or_error().is_empty() {
|
if ocx.select_all_or_error().is_empty() {
|
||||||
return Ok((
|
return Ok((
|
||||||
ty::ClosureKind::from_def_id(self.tcx, trait_def_id)
|
self.tcx
|
||||||
|
.fn_trait_kind_from_def_id(trait_def_id)
|
||||||
.expect("expected to map DefId to ClosureKind"),
|
.expect("expected to map DefId to ClosureKind"),
|
||||||
ty.rebind(self.resolve_vars_if_possible(var)),
|
ty.rebind(self.resolve_vars_if_possible(var)),
|
||||||
));
|
));
|
||||||
@ -686,7 +687,7 @@ impl<'tcx> TypeErrCtxtExt<'tcx> for TypeErrCtxt<'_, 'tcx> {
|
|||||||
}
|
}
|
||||||
ObligationCauseCode::BindingObligation(def_id, _)
|
ObligationCauseCode::BindingObligation(def_id, _)
|
||||||
| ObligationCauseCode::ItemObligation(def_id)
|
| ObligationCauseCode::ItemObligation(def_id)
|
||||||
if ty::ClosureKind::from_def_id(tcx, *def_id).is_some() =>
|
if tcx.fn_trait_kind_from_def_id(*def_id).is_some() =>
|
||||||
{
|
{
|
||||||
err.code(rustc_errors::error_code!(E0059));
|
err.code(rustc_errors::error_code!(E0059));
|
||||||
err.set_primary_message(format!(
|
err.set_primary_message(format!(
|
||||||
@ -847,7 +848,7 @@ impl<'tcx> TypeErrCtxtExt<'tcx> for TypeErrCtxt<'_, 'tcx> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let is_fn_trait =
|
let is_fn_trait =
|
||||||
ty::ClosureKind::from_def_id(tcx, trait_ref.def_id()).is_some();
|
tcx.fn_trait_kind_from_def_id(trait_ref.def_id()).is_some();
|
||||||
let is_target_feature_fn = if let ty::FnDef(def_id, _) =
|
let is_target_feature_fn = if let ty::FnDef(def_id, _) =
|
||||||
*trait_ref.skip_binder().self_ty().kind()
|
*trait_ref.skip_binder().self_ty().kind()
|
||||||
{
|
{
|
||||||
@ -877,7 +878,7 @@ impl<'tcx> TypeErrCtxtExt<'tcx> for TypeErrCtxt<'_, 'tcx> {
|
|||||||
// Note if the `FnMut` or `FnOnce` is less general than the trait we're trying
|
// Note if the `FnMut` or `FnOnce` is less general than the trait we're trying
|
||||||
// to implement.
|
// to implement.
|
||||||
let selected_kind =
|
let selected_kind =
|
||||||
ty::ClosureKind::from_def_id(self.tcx, trait_ref.def_id())
|
self.tcx.fn_trait_kind_from_def_id(trait_ref.def_id())
|
||||||
.expect("expected to map DefId to ClosureKind");
|
.expect("expected to map DefId to ClosureKind");
|
||||||
if !implemented_kind.extends(selected_kind) {
|
if !implemented_kind.extends(selected_kind) {
|
||||||
err.note(
|
err.note(
|
||||||
|
@ -1752,7 +1752,7 @@ impl<'tcx> TypeErrCtxtExt<'tcx> for TypeErrCtxt<'_, 'tcx> {
|
|||||||
&& let predicates = self.tcx.predicates_of(def_id).instantiate_identity(self.tcx)
|
&& let predicates = self.tcx.predicates_of(def_id).instantiate_identity(self.tcx)
|
||||||
&& let Some(pred) = predicates.predicates.get(*idx)
|
&& let Some(pred) = predicates.predicates.get(*idx)
|
||||||
&& let ty::PredicateKind::Clause(ty::Clause::Trait(trait_pred)) = pred.kind().skip_binder()
|
&& let ty::PredicateKind::Clause(ty::Clause::Trait(trait_pred)) = pred.kind().skip_binder()
|
||||||
&& ty::ClosureKind::from_def_id(self.tcx, trait_pred.def_id()).is_some()
|
&& self.tcx.fn_trait_kind_from_def_id(trait_pred.def_id()).is_some()
|
||||||
{
|
{
|
||||||
let expected_self =
|
let expected_self =
|
||||||
self.tcx.anonymize_late_bound_regions(pred.kind().rebind(trait_pred.self_ty()));
|
self.tcx.anonymize_late_bound_regions(pred.kind().rebind(trait_pred.self_ty()));
|
||||||
@ -1766,7 +1766,7 @@ impl<'tcx> TypeErrCtxtExt<'tcx> for TypeErrCtxt<'_, 'tcx> {
|
|||||||
.enumerate()
|
.enumerate()
|
||||||
.find(|(other_idx, (pred, _))| match pred.kind().skip_binder() {
|
.find(|(other_idx, (pred, _))| match pred.kind().skip_binder() {
|
||||||
ty::PredicateKind::Clause(ty::Clause::Trait(trait_pred))
|
ty::PredicateKind::Clause(ty::Clause::Trait(trait_pred))
|
||||||
if ty::ClosureKind::from_def_id(self.tcx, trait_pred.def_id())
|
if self.tcx.fn_trait_kind_from_def_id(trait_pred.def_id())
|
||||||
.is_some()
|
.is_some()
|
||||||
&& other_idx != idx
|
&& other_idx != idx
|
||||||
// Make sure that the self type matches
|
// Make sure that the self type matches
|
||||||
|
Loading…
Reference in New Issue
Block a user