Stop using a special inner body for the coroutine by-move body for async closures
This commit is contained in:
parent
515395af0e
commit
4609841c07
40 changed files with 295 additions and 315 deletions
|
@ -326,6 +326,7 @@ rustc_queries! {
|
|||
query predicates_of(key: DefId) -> ty::GenericPredicates<'tcx> {
|
||||
desc { |tcx| "computing predicates of `{}`", tcx.def_path_str(key) }
|
||||
cache_on_disk_if { key.is_local() }
|
||||
feedable
|
||||
}
|
||||
|
||||
query opaque_types_defined_by(
|
||||
|
@ -498,6 +499,7 @@ rustc_queries! {
|
|||
/// [rustc dev guide]: https://rustc-dev-guide.rust-lang.org/mir/construction.html
|
||||
query mir_built(key: LocalDefId) -> &'tcx Steal<mir::Body<'tcx>> {
|
||||
desc { |tcx| "building MIR for `{}`", tcx.def_path_str(key) }
|
||||
feedable
|
||||
}
|
||||
|
||||
/// Try to build an abstract representation of the given constant.
|
||||
|
@ -742,6 +744,7 @@ rustc_queries! {
|
|||
query constness(key: DefId) -> hir::Constness {
|
||||
desc { |tcx| "checking if item is const: `{}`", tcx.def_path_str(key) }
|
||||
separate_provide_extern
|
||||
feedable
|
||||
}
|
||||
|
||||
query asyncness(key: DefId) -> ty::Asyncness {
|
||||
|
@ -760,10 +763,22 @@ rustc_queries! {
|
|||
desc { |tcx| "checking if item is promotable: `{}`", tcx.def_path_str(key) }
|
||||
}
|
||||
|
||||
/// The body of the coroutine, modified to take its upvars by move rather than by ref.
|
||||
///
|
||||
/// This is used by coroutine-closures, which must return a different flavor of coroutine
|
||||
/// when called using `AsyncFnOnce::call_once`. It is produced by the `ByMoveBody` pass which
|
||||
/// is run right after building the initial MIR, and will only be populated for coroutines
|
||||
/// which come out of the async closure desugaring.
|
||||
query coroutine_by_move_body_def_id(def_id: DefId) -> DefId {
|
||||
desc { |tcx| "looking up the coroutine by-move body for `{}`", tcx.def_path_str(def_id) }
|
||||
separate_provide_extern
|
||||
}
|
||||
|
||||
/// Returns `Some(coroutine_kind)` if the node pointed to by `def_id` is a coroutine.
|
||||
query coroutine_kind(def_id: DefId) -> Option<hir::CoroutineKind> {
|
||||
desc { |tcx| "looking up coroutine kind of `{}`", tcx.def_path_str(def_id) }
|
||||
separate_provide_extern
|
||||
feedable
|
||||
}
|
||||
|
||||
query coroutine_for_closure(def_id: DefId) -> DefId {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue