Struct SmirCtxt

Source
pub struct SmirCtxt<'tcx>(pub RefCell<Tables<'tcx>>);
Expand description

Provides direct access to rustc’s internal queries.

The crate::stable_mir::compiler_interface::SmirInterface must go through this context to obtain rustc-level information.

Tuple Fields§

§0: RefCell<Tables<'tcx>>

Implementations§

Source§

impl<'tcx> SmirCtxt<'tcx>

Source

pub fn target_info(&self) -> MachineInfo

Source

pub fn entry_fn(&self) -> Option<CrateItem>

Source

pub fn all_local_items(&self) -> CrateItems

Retrieve all items of the local crate that have a MIR associated with them.

Source

pub fn mir_body(&self, item: DefId) -> Body

Retrieve the body of a function. This function will panic if the body is not available.

Source

pub fn has_body(&self, def: DefId) -> bool

Check whether the body of a function is available.

Source

pub fn foreign_modules(&self, crate_num: CrateNum) -> Vec<ForeignModuleDef>

Source

pub fn crate_functions(&self, crate_num: CrateNum) -> Vec<FnDef>

Retrieve all functions defined in this crate.

Source

pub fn crate_statics(&self, crate_num: CrateNum) -> Vec<StaticDef>

Retrieve all static items defined in this crate.

Source

pub fn foreign_module(&self, mod_def: ForeignModuleDef) -> ForeignModule

Source

pub fn foreign_items(&self, mod_def: ForeignModuleDef) -> Vec<ForeignDef>

Source

pub fn all_trait_decls(&self) -> TraitDecls

Source

pub fn trait_decls(&self, crate_num: CrateNum) -> TraitDecls

Source

pub fn trait_decl(&self, trait_def: &TraitDef) -> TraitDecl

Source

pub fn all_trait_impls(&self) -> ImplTraitDecls

Source

pub fn trait_impls(&self, crate_num: CrateNum) -> ImplTraitDecls

Source

pub fn trait_impl(&self, impl_def: &ImplDef) -> ImplTrait

Source

pub fn generics_of(&self, def_id: DefId) -> Generics

Source

pub fn predicates_of(&self, def_id: DefId) -> GenericPredicates

Source

pub fn explicit_predicates_of(&self, def_id: DefId) -> GenericPredicates

Source

pub fn local_crate(&self) -> Crate

Get information about the local crate.

Source

pub fn external_crates(&self) -> Vec<Crate>

Retrieve a list of all external crates.

Source

pub fn find_crates(&self, name: &str) -> Vec<Crate>

Find a crate with the given name.

Source

pub fn def_name(&self, def_id: DefId, trimmed: bool) -> Symbol

Returns the name of given DefId.

Source

pub fn tool_attrs(&self, def_id: DefId, attr: &[Symbol]) -> Vec<Attribute>

Return registered tool attributes with the given attribute name.

FIXME(jdonszelmann): may panic on non-tool attributes. After more attribute work, non-tool attributes will simply return an empty list.

Single segmented name like #[clippy] is specified as &["clippy".to_string()]. Multi-segmented name like #[rustfmt::skip] is specified as &["rustfmt".to_string(), "skip".to_string()].

Source

pub fn all_tool_attrs(&self, def_id: DefId) -> Vec<Attribute>

Get all tool attributes of a definition.

Source

pub fn span_to_string(&self, span: Span) -> String

Returns printable, human readable form of Span.

Source

pub fn get_filename(&self, span: &Span) -> Filename

Return filename from given Span, for diagnostic purposes.

Source

pub fn get_lines(&self, span: &Span) -> LineInfo

Return lines corresponding to this Span.

Source

pub fn item_kind(&self, item: CrateItem) -> ItemKind

Returns the kind of given DefId.

Source

pub fn is_foreign_item(&self, item: DefId) -> bool

Returns whether this is a foreign item.

Source

pub fn foreign_item_kind(&self, def: ForeignDef) -> ForeignItemKind

Returns the kind of a given foreign item.

Source

pub fn adt_kind(&self, def: AdtDef) -> AdtKind

Returns the kind of a given algebraic data type.

Source

pub fn adt_is_box(&self, def: AdtDef) -> bool

Returns if the ADT is a box.

Source

pub fn adt_is_simd(&self, def: AdtDef) -> bool

Returns whether this ADT is simd.

Source

pub fn adt_is_cstr(&self, def: AdtDef) -> bool

Returns whether this definition is a C string.

Source

pub fn fn_sig(&self, def: FnDef, args: &GenericArgs) -> PolyFnSig

Retrieve the function signature for the given generic arguments.

Source

pub fn intrinsic(&self, def: DefId) -> Option<IntrinsicDef>

Retrieve the intrinsic definition if the item corresponds one.

Source

pub fn intrinsic_name(&self, def: IntrinsicDef) -> Symbol

Retrieve the plain function name of an intrinsic.

Source

pub fn closure_sig(&self, args: &GenericArgs) -> PolyFnSig

Retrieve the closure signature for the given generic arguments.

Source

pub fn adt_variants_len(&self, def: AdtDef) -> usize

The number of variants in this ADT.

Source

pub fn variant_name(&self, def: VariantDef) -> Symbol

The name of a variant.

Source

pub fn variant_fields(&self, def: VariantDef) -> Vec<FieldDef>

Source

pub fn eval_target_usize(&self, cnst: &MirConst) -> Result<u64, Error>

Evaluate constant as a target usize.

Source

pub fn eval_target_usize_ty(&self, cnst: &TyConst) -> Result<u64, Error>

Source

pub fn try_new_const_zst(&self, ty: Ty) -> Result<MirConst, Error>

Create a new zero-sized constant.

Source

pub fn new_const_str(&self, value: &str) -> MirConst

Create a new constant that represents the given string value.

Source

pub fn new_const_bool(&self, value: bool) -> MirConst

Create a new constant that represents the given boolean value.

Source

pub fn try_new_const_uint( &self, value: u128, uint_ty: UintTy, ) -> Result<MirConst, Error>

Create a new constant that represents the given value.

Source

pub fn try_new_ty_const_uint( &self, value: u128, uint_ty: UintTy, ) -> Result<TyConst, Error>

Source

pub fn new_rigid_ty(&self, kind: RigidTy) -> Ty

Create a new type from the given kind.

Source

pub fn new_box_ty(&self, ty: Ty) -> Ty

Create a new box type, Box<T>, for the given inner type T.

Source

pub fn def_ty(&self, item: DefId) -> Ty

Returns the type of given crate item.

Source

pub fn def_ty_with_args(&self, item: DefId, args: &GenericArgs) -> Ty

Returns the type of given definition instantiated with the given arguments.

Source

pub fn mir_const_pretty(&self, cnst: &MirConst) -> String

Returns literal value of a const as a string.

Source

pub fn span_of_an_item(&self, def_id: DefId) -> Span

Span of an item.

Source

pub fn ty_pretty(&self, ty: Ty) -> String

Obtain the representation of a type.

Source

pub fn ty_kind(&self, ty: Ty) -> TyKind

Obtain the representation of a type.

Source

pub fn ty_const_pretty(&self, ct: TyConstId) -> String

Source

pub fn rigid_ty_discriminant_ty(&self, ty: &RigidTy) -> Ty

Get the discriminant Ty for this Ty if there’s one.

Source

pub fn instance_body(&self, def: InstanceDef) -> Option<Body>

Get the body of an Instance which is already monomorphized.

Source

pub fn instance_ty(&self, def: InstanceDef) -> Ty

Get the instance type with generic instantiations applied and lifetimes erased.

Source

pub fn instance_args(&self, def: InstanceDef) -> GenericArgs

Get the instantiation types.

Source

pub fn instance_abi(&self, def: InstanceDef) -> Result<FnAbi, Error>

Get an instance ABI.

Source

pub fn fn_ptr_abi(&self, fn_ptr: PolyFnSig) -> Result<FnAbi, Error>

Get the ABI of a function pointer.

Source

pub fn instance_def_id(&self, def: InstanceDef) -> DefId

Get the instance.

Source

pub fn instance_mangled_name(&self, instance: InstanceDef) -> Symbol

Get the instance mangled name.

Source

pub fn is_empty_drop_shim(&self, def: InstanceDef) -> bool

Check if this is an empty DropGlue shim.

Source

pub fn mono_instance(&self, def_id: DefId) -> Instance

Convert a non-generic crate item into an instance. This function will panic if the item is generic.

Source

pub fn requires_monomorphization(&self, def_id: DefId) -> bool

Item requires monomorphization.

Source

pub fn resolve_instance( &self, def: FnDef, args: &GenericArgs, ) -> Option<Instance>

Resolve an instance from the given function definition and generic arguments.

Source

pub fn resolve_drop_in_place(&self, ty: Ty) -> Instance

Resolve an instance for drop_in_place for the given type.

Source

pub fn resolve_for_fn_ptr( &self, def: FnDef, args: &GenericArgs, ) -> Option<Instance>

Resolve instance for a function pointer.

Source

pub fn resolve_closure( &self, def: ClosureDef, args: &GenericArgs, kind: ClosureKind, ) -> Option<Instance>

Resolve instance for a closure with the requested type.

Source

pub fn eval_instance( &self, def: InstanceDef, const_ty: Ty, ) -> Result<Allocation, Error>

Try to evaluate an instance into a constant.

Source

pub fn eval_static_initializer( &self, def: StaticDef, ) -> Result<Allocation, Error>

Evaluate a static’s initializer.

Source

pub fn global_alloc(&self, alloc: AllocId) -> GlobalAlloc

Retrieve global allocation for the given allocation ID.

Source

pub fn vtable_allocation(&self, global_alloc: &GlobalAlloc) -> Option<AllocId>

Retrieve the id for the virtual table.

Source

pub fn krate(&self, def_id: DefId) -> Crate

Source

pub fn instance_name(&self, def: InstanceDef, trimmed: bool) -> Symbol

Retrieve the instance name for diagnostic messages.

This will return the specialized name, e.g., Vec<char>::new.

Source

pub fn ty_layout(&self, ty: Ty) -> Result<Layout, Error>

Get the layout of a type.

Source

pub fn layout_shape(&self, id: Layout) -> LayoutShape

Get the layout shape.

Source

pub fn place_pretty(&self, place: &Place) -> String

Get a debug string representation of a place.

Source

pub fn binop_ty(&self, bin_op: BinOp, rhs: Ty, lhs: Ty) -> Ty

Get the resulting type of binary operation.

Source

pub fn unop_ty(&self, un_op: UnOp, arg: Ty) -> Ty

Get the resulting type of unary operation.

Source

pub fn associated_items(&self, def_id: DefId) -> AssocItems

Get all associated items of a definition.

Auto Trait Implementations§

§

impl<'tcx> DynSend for SmirCtxt<'tcx>

§

impl<'tcx> !DynSync for SmirCtxt<'tcx>

§

impl<'tcx> !Freeze for SmirCtxt<'tcx>

§

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

§

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

§

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

§

impl<'tcx> Unpin for SmirCtxt<'tcx>

§

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

Blanket Implementations§

Source§

impl<T> Aligned for T

Source§

const ALIGN: Alignment

Alignment of Self.
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, R> CollectAndApply<T, R> for T

Source§

fn collect_and_apply<I, F>(iter: I, f: F) -> R
where I: Iterator<Item = T>, F: FnOnce(&[T]) -> R,

Equivalent to f(&iter.collect::<Vec<_>>()).

Source§

type Output = R

Source§

impl<T> Filterable for T

Source§

fn filterable( self, filter_name: &'static str, ) -> RequestFilterDataProvider<T, fn(DataRequest<'_>) -> bool>

Creates a filterable data provider with the given name for debugging. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

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

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

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> IntoQueryParam<P> for P

Source§

impl<T> MaybeResult<T> for T

Source§

type Error = !

Source§

fn from(_: Result<T, <T as MaybeResult<T>>::Error>) -> T

Source§

fn to_result(self) -> Result<T, <T as MaybeResult<T>>::Error>

Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
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.
Source§

impl<I, T, U> Upcast<I, U> for T
where U: UpcastFrom<I, T>,

Source§

fn upcast(self, interner: I) -> U

Source§

impl<I, T> UpcastFrom<I, T> for T

Source§

fn upcast_from(from: T, _tcx: I) -> T

Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<Tcx, T> Value<Tcx> for T
where Tcx: DepContext,

Source§

default fn from_cycle_error( tcx: Tcx, cycle_error: &CycleError, _guar: ErrorGuaranteed, ) -> T

Source§

impl<T> WithSubscriber for T

Source§

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
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

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

impl<T> ErasedDestructor for T
where T: 'static,

Layout§

Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...) attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.

Size: 464 bytes