Re-exports§
pub use at::DefineOpaqueTypes;
pub use BoundRegionConversionTime::*;
pub use RegionVariableOrigin::*;
pub use SubregionOrigin::*;
Modules§
- A nice interface for working with the infcx. The basic idea is to do
infcx.at(cause, param_env)
, which sets the “cause” of the operation as well as the surrounding parameter environment. Then you can do something like.sub(a, b)
or.eq(a, b)
to create a subtype or equality relationship respectively. The first argument is always the “expected” output from the POV of diagnostics. - Canonicalization is the key to constructing a query in the middle of type inference. Ordinarily, it is not possible to store types from type inference in query keys, because they contain references to inference variables whose lifetimes are too short and so forth. Canonicalizing a value T1 using
canonicalize_query
produces two things: - context 🔒
- This module handles the relationships between “free regions”, i.e., lifetime parameters. Ordinarily, free regions are unrelated to one another, but they can be related via implied or explicit bounds. In that case, we track the bounds using the
TransitiveRelation
type, and use that to decide when one free region outlives another, and so forth. - freshen 🔒Freshening is the process of replacing unknown variables with fresh types. The idea is that the type, after freshening, contains no inference variables but instead contains either a value for each variable or fresh “arbitrary” types wherever a variable would have been.
- Lexical region resolution.
- Various code related to computing outlives relations.
- See
README.md
. - This module contains the definitions of most
TypeRelation
s in the type system (except for some relations used for diagnostics and heuristics in the compiler). As well as the implementation ofRelate
for interned things (Ty
/Const
/etc). - snapshot 🔒
Structs§
- Used to configure inference contexts before their creation.
- This type contains all the things within
InferCtxt
that sit within aRefCell
and are involved with taking/rolling back snapshots. Snapshot operations are hot enough that we want only one call toborrow_mut
per call tostart_snapshot
androllback_to
. InferOk<'tcx, ()>
is used a lot. It may seem like a useless wrapper aroundVec<PredicateObligation<'tcx>>
, but it has one important property: becauseInferOk
is marked with#[must_use]
, if you have a methodInferCtxt::f
that returnsInferResult<'tcx, ()>
and you call it withinfcx.f()?;
you’ll get a warning about the obligations being discarded without use, which is probably unintentional and has been a source of bugs in the past.- Replace
{integer}
withi32
and{float}
withf64
. Used only for diagnostics. - See the
region_obligations
field for more information. - The trace designates the path through inference that we took to encounter an error or subtyping constraint.
Enums§
- Times when we replace bound regions with existentials:
- Reasons to create a region inference variable.
- Whether aliases should be related structurally or not. Used to adjust the behavior of generalization and combine.
- The origin of a
r1 <= r2
constraint. - Helper for InferCtxt::ty_or_const_infer_var_changed (see comment on that), currently used only for
traits::fulfill
’s list ofstalled_on
inference variables. - See the
error_reporting
module for more details.
Traits§
Functions§
- Replaces args that reference param or infer variables with suitable placeholders. This function is meant to remove these param and infer args when they’re not actually needed to evaluate a constant.
Type Aliases§
Derive Macros§
- Derives
TypeFoldable
for the annotatedstruct
orenum
(union
is not supported). - Derives
TypeVisitable
for the annotatedstruct
orenum
(union
is not supported).