diff options
| author | Michael Goulet <michael@errs.io> | 2023-06-01 23:07:39 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-06-01 23:07:39 -0700 |
| commit | 22860464129e8a3454015ed0d689ff9e69db106a (patch) | |
| tree | 09a497f288fc741329ee9407cf9a7417aa065a27 | |
| parent | 71982341b4d36865f6f24fd8f0a5e58ebd359d99 (diff) | |
| parent | c625880a416ebea68c956590694cd13bbae53148 (diff) | |
| download | rust-22860464129e8a3454015ed0d689ff9e69db106a.tar.gz rust-22860464129e8a3454015ed0d689ff9e69db106a.zip | |
Rollup merge of #112190 - nnethercote:improve-comments-TyCtxt-GlobalCtxt, r=compiler-errors
Improve comments on `TyCtxt` and `GlobalCtxt`. By adding some non-obvious information that took me a little while to figure out. r? `@compiler-errors`
| -rw-r--r-- | compiler/rustc_middle/src/ty/context.rs | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/compiler/rustc_middle/src/ty/context.rs b/compiler/rustc_middle/src/ty/context.rs index b05e791211d..673d09cddf4 100644 --- a/compiler/rustc_middle/src/ty/context.rs +++ b/compiler/rustc_middle/src/ty/context.rs @@ -478,6 +478,17 @@ impl<'tcx> TyCtxtFeed<'tcx, LocalDefId> { /// [rustc dev guide] for more details. /// /// [rustc dev guide]: https://rustc-dev-guide.rust-lang.org/ty.html +/// +/// An implementation detail: `TyCtxt` is a wrapper type for [GlobalCtxt], +/// which is the struct that actually holds all the data. `TyCtxt` derefs to +/// `GlobalCtxt`, and in practice `TyCtxt` is passed around everywhere, and all +/// operations are done via `TyCtxt`. A `TyCtxt` is obtained for a `GlobalCtxt` +/// by calling `enter` with a closure `f`. That function creates both the +/// `TyCtxt`, and an `ImplicitCtxt` around it that is put into TLS. Within `f`: +/// - The `ImplicitCtxt` is available implicitly via TLS. +/// - The `TyCtxt` is available explicitly via the `tcx` parameter, and also +/// implicitly within the `ImplicitCtxt`. Explicit access is preferred when +/// possible. #[derive(Copy, Clone)] #[rustc_diagnostic_item = "TyCtxt"] #[rustc_pass_by_value] @@ -493,6 +504,7 @@ impl<'tcx> Deref for TyCtxt<'tcx> { } } +/// See [TyCtxt] for details about this type. pub struct GlobalCtxt<'tcx> { pub arena: &'tcx WorkerLocal<Arena<'tcx>>, pub hir_arena: &'tcx WorkerLocal<hir::Arena<'tcx>>, |
