diff options
| author | Michael Goulet <michael@errs.io> | 2022-03-30 19:26:35 -0700 |
|---|---|---|
| committer | Michael Goulet <michael@errs.io> | 2022-03-30 19:26:35 -0700 |
| commit | 7b2eaa3d8fb73cd1863665bf4b8c24e3b34eb41b (patch) | |
| tree | f44d3fd87db8e298f7a84c5cef0f80e5a7744c58 /compiler | |
| parent | a40c595695bff3bfb373a8a3355ae4bd4ea64608 (diff) | |
| download | rust-7b2eaa3d8fb73cd1863665bf4b8c24e3b34eb41b.tar.gz rust-7b2eaa3d8fb73cd1863665bf4b8c24e3b34eb41b.zip | |
Restore `impl Future<Output = Type>` to async blocks
Diffstat (limited to 'compiler')
| -rw-r--r-- | compiler/rustc_middle/src/ty/print/pretty.rs | 27 |
1 files changed, 20 insertions, 7 deletions
diff --git a/compiler/rustc_middle/src/ty/print/pretty.rs b/compiler/rustc_middle/src/ty/print/pretty.rs index 826000dcecf..21650fbb75d 100644 --- a/compiler/rustc_middle/src/ty/print/pretty.rs +++ b/compiler/rustc_middle/src/ty/print/pretty.rs @@ -912,12 +912,25 @@ pub trait PrettyPrinter<'tcx>: } for (assoc_item_def_id, term) in assoc_items { - // Skip printing `<[generator@] as Generator<_>>::Return` from async blocks - if let Some(ty) = term.skip_binder().ty() && - let ty::Projection(ty::ProjectionTy { item_def_id, .. }) = ty.kind() && - Some(*item_def_id) == self.tcx().lang_items().generator_return() { - continue; - } + // Skip printing `<[generator@] as Generator<_>>::Return` from async blocks, + // unless we can find out what generator return type it comes from. + let term = if let Some(ty) = term.skip_binder().ty() + && let ty::Projection(ty::ProjectionTy { item_def_id, substs }) = ty.kind() + && Some(*item_def_id) == self.tcx().lang_items().generator_return() + { + if let ty::Generator(_, substs, _) = substs.type_at(0).kind() { + let return_ty = substs.as_generator().return_ty(); + if !return_ty.is_ty_infer() { + return_ty.into() + } else { + continue; + } + } else { + continue; + } + } else { + term.skip_binder() + }; if first { p!("<"); @@ -928,7 +941,7 @@ pub trait PrettyPrinter<'tcx>: p!(write("{} = ", self.tcx().associated_item(assoc_item_def_id).name)); - match term.skip_binder() { + match term { Term::Ty(ty) => { p!(print(ty)) } |
