summaryrefslogtreecommitdiffstats
path: root/compiler/rustc_ty_utils/src/instance.rs
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-06-07 05:48:48 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-06-07 05:48:48 +0000
commitef24de24a82fe681581cc130f342363c47c0969a (patch)
tree0d494f7e1a38b95c92426f58fe6eaa877303a86c /compiler/rustc_ty_utils/src/instance.rs
parentReleasing progress-linux version 1.74.1+dfsg1-1~progress7.99u1. (diff)
downloadrustc-ef24de24a82fe681581cc130f342363c47c0969a.tar.xz
rustc-ef24de24a82fe681581cc130f342363c47c0969a.zip
Merging upstream version 1.75.0+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'compiler/rustc_ty_utils/src/instance.rs')
-rw-r--r--compiler/rustc_ty_utils/src/instance.rs40
1 files changed, 25 insertions, 15 deletions
diff --git a/compiler/rustc_ty_utils/src/instance.rs b/compiler/rustc_ty_utils/src/instance.rs
index 91f1c2131..1487f40fd 100644
--- a/compiler/rustc_ty_utils/src/instance.rs
+++ b/compiler/rustc_ty_utils/src/instance.rs
@@ -38,7 +38,7 @@ fn resolve_instance<'tcx>(
debug!(" => nontrivial drop glue");
match *ty.kind() {
ty::Closure(..)
- | ty::Generator(..)
+ | ty::Coroutine(..)
| ty::Tuple(..)
| ty::Adt(..)
| ty::Dynamic(..)
@@ -188,10 +188,7 @@ fn resolve_associated_item<'tcx>(
&& trait_item_id != leaf_def.item.def_id
&& let Some(leaf_def_item) = leaf_def.item.def_id.as_local()
{
- tcx.compare_impl_const((
- leaf_def_item,
- trait_item_id,
- ))?;
+ tcx.compare_impl_const((leaf_def_item, trait_item_id))?;
}
Some(ty::Instance::new(leaf_def.item.def_id, args))
@@ -215,8 +212,8 @@ fn resolve_associated_item<'tcx>(
let is_copy = self_ty.is_copy_modulo_regions(tcx, param_env);
match self_ty.kind() {
_ if is_copy => (),
- ty::Generator(..)
- | ty::GeneratorWitness(..)
+ ty::Coroutine(..)
+ | ty::CoroutineWitness(..)
| ty::Closure(..)
| ty::Tuple(..) => {}
_ => return Ok(None),
@@ -249,34 +246,47 @@ fn resolve_associated_item<'tcx>(
})
}
} else if Some(trait_ref.def_id) == lang_items.future_trait() {
- let ty::Generator(generator_def_id, args, _) = *rcvr_args.type_at(0).kind() else {
+ let ty::Coroutine(coroutine_def_id, args, _) = *rcvr_args.type_at(0).kind() else {
bug!()
};
if Some(trait_item_id) == tcx.lang_items().future_poll_fn() {
// `Future::poll` is generated by the compiler.
- Some(Instance { def: ty::InstanceDef::Item(generator_def_id), args: args })
+ Some(Instance { def: ty::InstanceDef::Item(coroutine_def_id), args: args })
} else {
// All other methods are default methods of the `Future` trait.
// (this assumes that `ImplSource::Builtin` is only used for methods on `Future`)
debug_assert!(tcx.defaultness(trait_item_id).has_value());
Some(Instance::new(trait_item_id, rcvr_args))
}
- } else if Some(trait_ref.def_id) == lang_items.gen_trait() {
- let ty::Generator(generator_def_id, args, _) = *rcvr_args.type_at(0).kind() else {
+ } else if Some(trait_ref.def_id) == lang_items.iterator_trait() {
+ let ty::Coroutine(coroutine_def_id, args, _) = *rcvr_args.type_at(0).kind() else {
+ bug!()
+ };
+ if Some(trait_item_id) == tcx.lang_items().next_fn() {
+ // `Iterator::next` is generated by the compiler.
+ Some(Instance { def: ty::InstanceDef::Item(coroutine_def_id), args })
+ } else {
+ // All other methods are default methods of the `Iterator` trait.
+ // (this assumes that `ImplSource::Builtin` is only used for methods on `Iterator`)
+ debug_assert!(tcx.defaultness(trait_item_id).has_value());
+ Some(Instance::new(trait_item_id, rcvr_args))
+ }
+ } else if Some(trait_ref.def_id) == lang_items.coroutine_trait() {
+ let ty::Coroutine(coroutine_def_id, args, _) = *rcvr_args.type_at(0).kind() else {
bug!()
};
if cfg!(debug_assertions) && tcx.item_name(trait_item_id) != sym::resume {
- // For compiler developers who'd like to add new items to `Generator`,
+ // For compiler developers who'd like to add new items to `Coroutine`,
// you either need to generate a shim body, or perhaps return
// `InstanceDef::Item` pointing to a trait default method body if
// it is given a default implementation by the trait.
span_bug!(
- tcx.def_span(generator_def_id),
- "no definition for `{trait_ref}::{}` for built-in generator type",
+ tcx.def_span(coroutine_def_id),
+ "no definition for `{trait_ref}::{}` for built-in coroutine type",
tcx.item_name(trait_item_id)
)
}
- Some(Instance { def: ty::InstanceDef::Item(generator_def_id), args })
+ Some(Instance { def: ty::InstanceDef::Item(coroutine_def_id), args })
} else if tcx.fn_trait_kind_from_def_id(trait_ref.def_id).is_some() {
// FIXME: This doesn't check for malformed libcore that defines, e.g.,
// `trait Fn { fn call_once(&self) { .. } }`. This is mostly for extension