Skip to main content

ItemRef

Struct ItemRef 

Source
pub struct ItemRef {
    pub(crate) contents: HashConsed<ItemRefContents>,
}
Expand description

Reference to an item, with generics. Basically any mention of an item (function, type, etc) uses this.

This can refer to a top-level item or to a trait associated item. Example:

trait MyTrait<TraitType, const TraitConst: usize> {
  fn meth<MethType>(...) {...}
}
fn example_call<TraitType, SelfType: MyTrait<TraitType, 12>>(x: SelfType) {
  x.meth::<String>(...)
}

Here, in the call x.meth::<String>(...) we will build an ItemRef that looks like:

ItemRef {
    def_id = MyTrait::meth,
    generic_args = [String],
    trait_proofs = [<proof of `String: Sized`>],
    in_trait = Some(<proof of `SelfType: MyTrait<TraitType, 12>`>,
}

The in_trait TraitProof will have in its trait field a representation of the SelfType: MyTrait<TraitType, 12> predicate, which looks like:

ItemRef {
    def_id = MyTrait,
    generic_args = [SelfType, TraitType, 12],
    trait_proofs = [],
    in_trait = None,
}

Fields§

§contents: HashConsed<ItemRefContents>

Implementations§

Source§

impl ItemRef

Source

pub fn instantiated_full_def<'tcx, S>(&self, s: &S) -> Arc<FullDef<'tcx>>
where S: BaseState<'tcx>,

Get the full definition of the item, instantiated with the provided generics.

Source

pub fn drop_glue_shim<'tcx, S>(&self, s: &S) -> Body<'tcx>
where S: BaseState<'tcx>,

Get the drop glue shim for this. Panics if the DefKind isn’t appropriate.

Source

pub fn closure_once_shim<'tcx, S>(&self, s: &S) -> Option<Body<'tcx>>
where S: BaseState<'tcx>,

For FnMut&Fn closures: the MIR for the call_once method; it simply calls call_mut.

Source§

impl ItemRef

Source

pub fn translate<'tcx, S: UnderOwnerState<'tcx>>( s: &S, def_id: RDefId, generics: GenericArgsRef<'tcx>, ) -> ItemRef

The main way to obtain an ItemRef: from a def_id and generics.

Source

pub fn translate_from_hax_def_id<'tcx, S: UnderOwnerState<'tcx>>( s: &S, hax_def_id: DefId, generics: GenericArgsRef<'tcx>, ) -> ItemRef

Makes a ItemRef from a def_id and generics.

If (def_id, generics) points to a trait item that can be resolved to a specific impl, translate rewrites def_id to the concrete associated item from that impl and re-bases the generics.

For instance, <u32 as From<u8>>::from produces a ItemRef with a DefId looking like core::convert::num::Impl#42::from when resolve_impl is true, core::convert::From::from otherwise.

Source

pub fn translate_projection<'tcx, S: UnderOwnerState<'tcx>>( s: &S, def_id: RDefId, generics: GenericArgsRef<'tcx>, ) -> ItemRef

Source

pub fn translate_from_hax_def_id_maybe_resolve<'tcx, S: UnderOwnerState<'tcx>>( s: &S, hax_def_id: DefId, generics: GenericArgsRef<'tcx>, assoc_item_resolution: AssocItemResolution, ) -> ItemRef

Source

pub fn dummy_without_generics<'tcx, S: BaseState<'tcx>>( s: &S, def_id: DefId, ) -> ItemRef

Construct an ItemRef for items that can’t have generics (e.g. modules).

Source

pub fn trait_associated_types<'tcx, S: UnderOwnerState<'tcx>>( &self, s: &S, ) -> Vec<Ty>

For an ItemRef that refers to a trait, this returns values for each of the non-gat associated types of this trait and its parents, in a fixed order.

Source

pub fn erase<'tcx, S: UnderOwnerState<'tcx>>(&self, s: &S) -> Self

Erase lifetimes from the generic arguments of this item.

Source

pub fn contents(&self) -> &ItemRefContents

Source

pub fn rustc_args<'tcx, S: BaseState<'tcx>>( &self, s: &S, ) -> GenericArgsRef<'tcx>

Recover the original rustc args that generated this ItemRef. Will panic if the ItemRef was built by hand instead of using translate_item_ref.

Source

pub fn mutate_def_id<'tcx, S: BaseState<'tcx>>( &self, s: &S, f: impl FnOnce(&mut DefId), ) -> Self

Mutate the DefId, keeping the same generic args.

Source

pub fn with_def_id<'tcx, S: BaseState<'tcx>>( &self, s: &S, def_id: &DefId, ) -> Self

Set the DefId, keeping the same generic args.

Source§

impl ItemRef

Source

pub fn translate_synthetic<'tcx, S: UnderOwnerState<'tcx>>( s: &S, synthetic: SyntheticItem, generics: GenericArgsRef<'tcx>, ) -> ItemRef

Trait Implementations§

Source§

impl Clone for ItemRef

Source§

fn clone(&self) -> ItemRef

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ItemRef

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Deref for ItemRef

Source§

type Target = ItemRefContents

The resulting type after dereferencing.
Source§

fn deref(&self) -> &Self::Target

Dereferences the value.
Source§

impl Hash for ItemRef

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl PartialEq for ItemRef

Source§

fn eq(&self, other: &ItemRef) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<'tcx, S: UnderOwnerState<'tcx>> SInto<S, ItemRef> for ItemRef<'tcx, DefId>

Source§

fn sinto(&self, s: &S) -> ItemRef

Source§

impl<'tcx, S: UnderOwnerState<'tcx>> SInto<S, ItemRef> for TraitRef<'tcx>

Source§

fn sinto(&self, s: &S) -> TraitRef

Source§

impl Eq for ItemRef

Source§

impl StructuralPartialEq for ItemRef

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
§

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

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

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

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
§

impl<I, T> ExtractContext<I, ()> for T

§

fn extract_context(self, _original_input: I)

Given the context attached to a nom error, and given the original input to the nom parser, extract more the useful context information. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
§

impl<I> RecreateContext<I> for I

§

fn recreate_context(_original_input: I, tail: I) -> I

Given the original input, as well as the context reported by nom, recreate a context in the original string where the error occurred. Read more
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

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

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
Source§

impl<T> HashConsable for T
where T: Hash + PartialEq + Eq + Clone + Mappable,

Source§

impl<T> Mappable for T
where T: Any + Send + Sync,