Skip to main content

Module writeback

Module writeback 

Source
Expand description

During type inference, partially inferred terms are represented using inference variables (ty::Infer). These don’t appear in the final ty::TypeckResults since all of the types should have been inferred once typeck is done.

When type inference is running however, having to update the typeck results every time a new type is inferred would be unreasonably slow, so instead all of the replacement happens at the end in FnCtxt::resolve_type_vars_in_body, which creates a new TypeckResults which doesn’t contain any inference variables.

Re-exportsΒ§

use std::mem; πŸ”’
use std::ops::ControlFlow; πŸ”’
use rustc_attr_ir::find_attr; πŸ”’
use rustc_data_structures::fx::FxHashSet; πŸ”’
use rustc_data_structures::fx::FxIndexMap; πŸ”’
use rustc_data_structures::unord::ExtendUnord; πŸ”’
use rustc_errors::E0720; πŸ”’
use rustc_errors::ErrorGuaranteed; πŸ”’
use rustc_hir::def_id::LocalDefId; πŸ”’
use rustc_hir::intravisit; πŸ”’
use rustc_hir::intravisit::InferKind; πŸ”’
use rustc_hir::intravisit::Visitor; πŸ”’
use rustc_hir as hir; πŸ”’
use rustc_hir::AmbigArg; πŸ”’
use rustc_hir::HirId; πŸ”’
use rustc_infer::traits::solve::Goal; πŸ”’
use rustc_middle::traits::ObligationCause; πŸ”’
use rustc_middle::ty::adjustment::Adjust; πŸ”’
use rustc_middle::ty::adjustment::Adjustment; πŸ”’
use rustc_middle::ty::adjustment::PointerCoercion; πŸ”’
use rustc_middle::ty; πŸ”’
use rustc_middle::ty::DefiningScopeKind; πŸ”’
use rustc_middle::ty::DefinitionSiteHiddenType; πŸ”’
use rustc_middle::ty::Flags; πŸ”’
use rustc_middle::ty::PredicateProxy; πŸ”’
use rustc_middle::ty::Ty; πŸ”’
use rustc_middle::ty::TyCtxt; πŸ”’
use rustc_middle::ty::TypeFoldable; πŸ”’
use rustc_middle::ty::TypeFolder; πŸ”’
use rustc_middle::ty::TypeSuperFoldable; πŸ”’
use rustc_middle::ty::TypeSuperVisitable; πŸ”’
use rustc_middle::ty::TypeVisitable; πŸ”’
use rustc_middle::ty::TypeVisitableExt; πŸ”’
use rustc_middle::ty::TypeVisitor; πŸ”’
use rustc_middle::ty::Unnormalized; πŸ”’
use rustc_middle::ty::fold_regions; πŸ”’
use rustc_span::Span; πŸ”’
use rustc_trait_selection::error_reporting::infer::need_type_info::TypeAnnotationNeeded; πŸ”’
use rustc_trait_selection::opaque_types::opaque_type_has_defining_use_args; πŸ”’
use rustc_trait_selection::solve; πŸ”’
use tracing::debug; πŸ”’
use tracing::instrument; πŸ”’
use tracing::instrument; πŸ”’
use crate::FnCtxt; πŸ”’

StructsΒ§

EagerlyNormalizeConsts πŸ”’
HasRecursiveOpaque πŸ”’
Resolver πŸ”’
WritebackCx πŸ”’
The Writeback context. This visitor walks the HIR, checking the fn-specific typeck results to find inference variables. It resolves those inference variables and writes the final result into the TypeckResults. It also applies a few ad-hoc checks that were not convenient to do elsewhere.

TraitsΒ§

Locatable πŸ”’