mirror of
https://github.com/rust-lang/rust.git
synced 2024-10-30 14:01:51 +00:00
Address review comments
This commit is contained in:
parent
1f75142c8c
commit
31a051870b
@ -26,8 +26,17 @@ use rustc_trait_selection::traits::{ObligationCause, ObligationCauseCode};
|
||||
use std::cell::{Cell, RefCell};
|
||||
use std::ops::Deref;
|
||||
|
||||
/// The `FnCtxt` stores type-checking context needed to type-check function bodies,
|
||||
/// in contrast to [`ItemCtxt`], which is used to type-check item *signatures*.
|
||||
/// The `FnCtxt` stores type-checking context needed to type-check bodies of
|
||||
/// functions, closures, and `const`s, including performing type inference
|
||||
/// with [`InferCtxt`].
|
||||
///
|
||||
/// This is in contrast to [`ItemCtxt`], which is used to type-check item *signatures*
|
||||
/// and thus does not perform type inference.
|
||||
///
|
||||
/// See [`ItemCtxt`]'s docs for more.
|
||||
///
|
||||
/// [`ItemCtxt`]: crate::collect::ItemCtxt
|
||||
/// [`InferCtxt`]: infer::InferCtxt
|
||||
pub struct FnCtxt<'a, 'tcx> {
|
||||
pub(super) body_id: hir::HirId,
|
||||
|
||||
|
@ -94,12 +94,27 @@ pub fn provide(providers: &mut Providers) {
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/// Context specific to some particular item. This is what implements
|
||||
/// `AstConv`.
|
||||
/// [`AstConv`].
|
||||
///
|
||||
/// `ItemCtxt` is primarily used to type-check item signatures, in contrast to [`FnCtxt`],
|
||||
/// which is used to type-check function bodies.
|
||||
/// # `ItemCtxt` vs `FnCtxt`
|
||||
///
|
||||
/// It has information about the predicates that are defined
|
||||
/// `ItemCtxt` is primarily used to type-check item signatures and lower them
|
||||
/// from HIR to their [`ty::Ty`] representation, which is exposed using [`AstConv`].
|
||||
/// It's also used for the bodies of items like structs where the body (the fields)
|
||||
/// are just signatures.
|
||||
///
|
||||
/// This is in contrast to [`FnCtxt`], which is used to type-check bodies of
|
||||
/// functions, closures, and `const`s -- anywhere that expressions and statements show up.
|
||||
///
|
||||
/// An important thing to note is that `ItemCtxt` does no inference -- it has no [`InferCtxt`] --
|
||||
/// while `FnCtxt` does do inference.
|
||||
///
|
||||
/// [`FnCtxt`]: crate::check::FnCtxt
|
||||
/// [`InferCtxt`]: rustc_infer::infer::InferCtxt
|
||||
///
|
||||
/// # Trait predicates
|
||||
///
|
||||
/// `ItemCtxt` has information about the predicates that are defined
|
||||
/// on the trait. Unfortunately, this predicate information is
|
||||
/// available in various different forms at various points in the
|
||||
/// process. So we can't just store a pointer to e.g., the AST or the
|
||||
|
Loading…
Reference in New Issue
Block a user