[][src]Struct rustc_middle::ty::instance::Instance

pub struct Instance<'tcx> {
    pub def: InstanceDef<'tcx>,
    pub substs: SubstsRef<'tcx>,
}
⚙️ This is an internal compiler API. (rustc_private)

This crate is being loaded from the sysroot, a permanently unstable location for private compiler dependencies. It is not intended for general use. Prefer using a public version of this crate from crates.io via Cargo.toml.

A monomorphized InstanceDef.

Monomorphization happens on-the-fly and no monomorphized MIR is ever created. Instead, this type simply couples a potentially generic InstanceDef with some substs, and codegen and const eval will do all required substitution as they run.

Fields

def: InstanceDef<'tcx>
⚙️ This is an internal compiler API. (rustc_private)

This crate is being loaded from the sysroot, a permanently unstable location for private compiler dependencies. It is not intended for general use. Prefer using a public version of this crate from crates.io via Cargo.toml.

substs: SubstsRef<'tcx>
⚙️ This is an internal compiler API. (rustc_private)

This crate is being loaded from the sysroot, a permanently unstable location for private compiler dependencies. It is not intended for general use. Prefer using a public version of this crate from crates.io via Cargo.toml.

Implementations

impl<'tcx> Instance<'tcx>[src]

fn fn_sig_for_fn_abi(&self, tcx: TyCtxt<'tcx>) -> PolyFnSig<'tcx>[src]

⚙️ This is an internal compiler API. (rustc_private)

This crate is being loaded from the sysroot, a permanently unstable location for private compiler dependencies. It is not intended for general use. Prefer using a public version of this crate from crates.io via Cargo.toml.

impl<'tcx> Instance<'tcx>[src]

pub fn monomorphic_ty(&self, tcx: TyCtxt<'tcx>) -> Ty<'tcx>[src]

⚙️ This is an internal compiler API. (rustc_private)

This crate is being loaded from the sysroot, a permanently unstable location for private compiler dependencies. It is not intended for general use. Prefer using a public version of this crate from crates.io via Cargo.toml.

Returns the Ty corresponding to this Instance, with generic substitutions applied and lifetimes erased.

This method can only be called when the 'substs' for this Instance are fully monomorphic (no ty::Param's are present). This is usually the case (e.g. during codegen). However, during constant evaluation, we may want to try to resolve a Instance using generic parameters (e.g. when we are attempting to to do const-propagation). In this case, Instance.ty_env should be used to provide the ParamEnv for our generic context.

pub fn ty_env(&self, tcx: TyCtxt<'tcx>, param_env: ParamEnv<'tcx>) -> Ty<'tcx>[src]

⚙️ This is an internal compiler API. (rustc_private)

This crate is being loaded from the sysroot, a permanently unstable location for private compiler dependencies. It is not intended for general use. Prefer using a public version of this crate from crates.io via Cargo.toml.

Like Instance.ty, but allows a ParamEnv to be specified for use during normalization. This method is only really useful during constant evaluation, where we are dealing with potentially generic types.

pub fn upstream_monomorphization(&self, tcx: TyCtxt<'tcx>) -> Option<CrateNum>[src]

⚙️ This is an internal compiler API. (rustc_private)

This crate is being loaded from the sysroot, a permanently unstable location for private compiler dependencies. It is not intended for general use. Prefer using a public version of this crate from crates.io via Cargo.toml.

Finds a crate that contains a monomorphization of this instance that can be linked to from the local crate. A return value of None means no upstream crate provides such an exported monomorphization.

This method already takes into account the global -Zshare-generics setting, always returning None if share-generics is off.

impl<'tcx> Instance<'tcx>[src]

pub fn new(def_id: DefId, substs: SubstsRef<'tcx>) -> Instance<'tcx>[src]

⚙️ This is an internal compiler API. (rustc_private)

This crate is being loaded from the sysroot, a permanently unstable location for private compiler dependencies. It is not intended for general use. Prefer using a public version of this crate from crates.io via Cargo.toml.

pub fn mono(tcx: TyCtxt<'tcx>, def_id: DefId) -> Instance<'tcx>[src]

⚙️ This is an internal compiler API. (rustc_private)

This crate is being loaded from the sysroot, a permanently unstable location for private compiler dependencies. It is not intended for general use. Prefer using a public version of this crate from crates.io via Cargo.toml.

pub fn def_id(&self) -> DefId[src]

⚙️ This is an internal compiler API. (rustc_private)

This crate is being loaded from the sysroot, a permanently unstable location for private compiler dependencies. It is not intended for general use. Prefer using a public version of this crate from crates.io via Cargo.toml.

pub fn resolve(
    tcx: TyCtxt<'tcx>,
    param_env: ParamEnv<'tcx>,
    def_id: DefId,
    substs: SubstsRef<'tcx>
) -> Result<Option<Instance<'tcx>>, ErrorReported>
[src]

⚙️ This is an internal compiler API. (rustc_private)

This crate is being loaded from the sysroot, a permanently unstable location for private compiler dependencies. It is not intended for general use. Prefer using a public version of this crate from crates.io via Cargo.toml.

Resolves a (def_id, substs) pair to an (optional) instance -- most commonly, this is used to find the precise code that will run for a trait method invocation, if known.

Returns Ok(None) if we cannot resolve Instance to a specific instance. For example, in a context like this,

fn foo<T: Debug>(t: T) { ... }

trying to resolve Debug::fmt applied to T will yield Ok(None), because we do not know what code ought to run. (Note that this setting is also affected by the RevealMode in the parameter environment.)

Presuming that coherence and type-check have succeeded, if this method is invoked in a monomorphic context (i.e., like during codegen), then it is guaranteed to return Ok(Some(instance)).

Returns Err(ErrorReported) when the Instance resolution process couldn't complete due to errors elsewhere - this is distinct from Ok(None) to avoid misleading diagnostics when an error has already been/will be emitted, for the original cause

pub fn resolve_for_fn_ptr(
    tcx: TyCtxt<'tcx>,
    param_env: ParamEnv<'tcx>,
    def_id: DefId,
    substs: SubstsRef<'tcx>
) -> Option<Instance<'tcx>>
[src]

⚙️ This is an internal compiler API. (rustc_private)

This crate is being loaded from the sysroot, a permanently unstable location for private compiler dependencies. It is not intended for general use. Prefer using a public version of this crate from crates.io via Cargo.toml.

pub fn resolve_for_vtable(
    tcx: TyCtxt<'tcx>,
    param_env: ParamEnv<'tcx>,
    def_id: DefId,
    substs: SubstsRef<'tcx>
) -> Option<Instance<'tcx>>
[src]

⚙️ This is an internal compiler API. (rustc_private)

This crate is being loaded from the sysroot, a permanently unstable location for private compiler dependencies. It is not intended for general use. Prefer using a public version of this crate from crates.io via Cargo.toml.

pub fn resolve_closure(
    tcx: TyCtxt<'tcx>,
    def_id: DefId,
    substs: SubstsRef<'tcx>,
    requested_kind: ClosureKind
) -> Instance<'tcx>
[src]

⚙️ This is an internal compiler API. (rustc_private)

This crate is being loaded from the sysroot, a permanently unstable location for private compiler dependencies. It is not intended for general use. Prefer using a public version of this crate from crates.io via Cargo.toml.

pub fn resolve_drop_in_place(tcx: TyCtxt<'tcx>, ty: Ty<'tcx>) -> Instance<'tcx>[src]

⚙️ This is an internal compiler API. (rustc_private)

This crate is being loaded from the sysroot, a permanently unstable location for private compiler dependencies. It is not intended for general use. Prefer using a public version of this crate from crates.io via Cargo.toml.

pub fn fn_once_adapter_instance(
    tcx: TyCtxt<'tcx>,
    closure_did: DefId,
    substs: SubstsRef<'tcx>
) -> Instance<'tcx>
[src]

⚙️ This is an internal compiler API. (rustc_private)

This crate is being loaded from the sysroot, a permanently unstable location for private compiler dependencies. It is not intended for general use. Prefer using a public version of this crate from crates.io via Cargo.toml.

pub fn substs_for_mir_body(&self) -> Option<SubstsRef<'tcx>>[src]

⚙️ This is an internal compiler API. (rustc_private)

This crate is being loaded from the sysroot, a permanently unstable location for private compiler dependencies. It is not intended for general use. Prefer using a public version of this crate from crates.io via Cargo.toml.

FIXME(#69925) Depending on the kind of InstanceDef, the MIR body associated with an instance is expressed in terms of the generic parameters of self.def_id(), and in other cases the MIR body is expressed in terms of the types found in the substitution array. In the former case, we want to substitute those generic types and replace them with the values from the substs when monomorphizing the function body. But in the latter case, we don't want to do that substitution, since it has already been done effectively.

This function returns Some(substs) in the former case and None otherwise -- i.e., if this function returns None, then the MIR body does not require substitution during monomorphization.

Trait Implementations

impl<'tcx> Clone for Instance<'tcx>[src]

impl<'tcx> Copy for Instance<'tcx>[src]

impl<'tcx> Debug for Instance<'tcx>[src]

impl<'tcx> Decodable for Instance<'tcx>[src]

impl<'tcx> Display for Instance<'tcx>[src]

impl<'tcx> Encodable for Instance<'tcx>[src]

impl<'tcx> Eq for Instance<'tcx>[src]

impl<'tcx> Hash for Instance<'tcx>[src]

impl<'tcx, '__ctx> HashStable<StableHashingContext<'__ctx>> for Instance<'tcx>[src]

impl<'tcx> Key for Instance<'tcx>[src]

type CacheSelector = DefaultCacheSelector

⚙️ This is an internal compiler API. (rustc_private)

This crate is being loaded from the sysroot, a permanently unstable location for private compiler dependencies. It is not intended for general use. Prefer using a public version of this crate from crates.io via Cargo.toml.

impl<'tcx, '__lifted> Lift<'__lifted> for Instance<'tcx>[src]

type Lifted = Instance<'__lifted>

⚙️ This is an internal compiler API. (rustc_private)

This crate is being loaded from the sysroot, a permanently unstable location for private compiler dependencies. It is not intended for general use. Prefer using a public version of this crate from crates.io via Cargo.toml.

impl<'tcx> PartialEq<Instance<'tcx>> for Instance<'tcx>[src]

impl<'tcx> StructuralEq for Instance<'tcx>[src]

impl<'tcx> StructuralPartialEq for Instance<'tcx>[src]

impl<'tcx> TypeFoldable<'tcx> for Instance<'tcx>[src]

Auto Trait Implementations

impl<'tcx> !RefUnwindSafe for Instance<'tcx>

impl<'tcx> !Send for Instance<'tcx>

impl<'tcx> !Sync for Instance<'tcx>

impl<'tcx> Unpin for Instance<'tcx>

impl<'tcx> !UnwindSafe for Instance<'tcx>

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<'tcx, T> ArenaAllocatable<'tcx, ()> for T where
    T: Copy
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<'a, T> Captures<'a> for T where
    T: ?Sized
[src]

impl<T> Cast for T

impl<T> Decodable for T where
    T: UseSpecializedDecodable
[src]

impl<Ctxt, T> DepNodeParams<Ctxt> for T where
    Ctxt: DepContext,
    T: HashStable<<Ctxt as DepContext>::StableHashingContext> + Debug
[src]

impl<T> Encodable for T where
    T: UseSpecializedEncodable + ?Sized
[src]

impl<Q, K> Equivalent<K> for Q where
    K: Borrow<Q> + ?Sized,
    Q: Eq + ?Sized
[src]

impl<T> Erased for T[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> MaybeResult<T> for T[src]

type Error = !

⚙️ This is an internal compiler API. (rustc_private)

This crate is being loaded from the sysroot, a permanently unstable location for private compiler dependencies. It is not intended for general use. Prefer using a public version of this crate from crates.io via Cargo.toml.

impl<T> Same<T> for T

type Output = T

⚙️ This is an internal compiler API. (rustc_private)

This crate is being loaded from the sysroot, a permanently unstable location for private compiler dependencies. It is not intended for general use. Prefer using a public version of this crate from crates.io via Cargo.toml.

Should always be Self

impl<E> SpecializationError for E[src]

impl<'tcx, T> Subst<'tcx> for T where
    T: TypeFoldable<'tcx>, 
[src]

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

impl<T> ToString for T where
    T: Display + ?Sized
[src]

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.

impl<T> WithConstness for T[src]