Trait miri::Projectable

source ·
pub trait Projectable<'tcx, Prov>: Sized + Debugwhere
    Prov: Provenance,{
    // Required methods
    fn layout(&self) -> TyAndLayout<'tcx, Ty<'tcx>>;
    fn meta<'mir, M>(
        &self,
        ecx: &InterpCx<'mir, 'tcx, M>
    ) -> Result<MemPlaceMeta<<M as Machine<'mir, 'tcx>>::Provenance>, InterpErrorInfo<'tcx>>
       where M: Machine<'mir, 'tcx, Provenance = Prov>;
    fn offset_with_meta(
        &self,
        offset: Size,
        meta: MemPlaceMeta<Prov>,
        layout: TyAndLayout<'tcx, Ty<'tcx>>,
        cx: &impl HasDataLayout
    ) -> Result<Self, InterpErrorInfo<'tcx>>;
    fn to_op<'mir, M>(
        &self,
        ecx: &InterpCx<'mir, 'tcx, M>
    ) -> Result<OpTy<'tcx, <M as Machine<'mir, 'tcx>>::Provenance>, InterpErrorInfo<'tcx>>
       where M: Machine<'mir, 'tcx, Provenance = Prov>;

    // Provided methods
    fn len<'mir, M>(
        &self,
        ecx: &InterpCx<'mir, 'tcx, M>
    ) -> Result<u64, InterpErrorInfo<'tcx>>
       where M: Machine<'mir, 'tcx, Provenance = Prov> { ... }
    fn offset(
        &self,
        offset: Size,
        layout: TyAndLayout<'tcx, Ty<'tcx>>,
        cx: &impl HasDataLayout
    ) -> Result<Self, InterpErrorInfo<'tcx>> { ... }
    fn transmute(
        &self,
        layout: TyAndLayout<'tcx, Ty<'tcx>>,
        cx: &impl HasDataLayout
    ) -> Result<Self, InterpErrorInfo<'tcx>> { ... }
}
Expand description

A thing that we can project into, and that has a layout.

Required Methods§

source

fn layout(&self) -> TyAndLayout<'tcx, Ty<'tcx>>

Get the layout.

source

fn meta<'mir, M>( &self, ecx: &InterpCx<'mir, 'tcx, M> ) -> Result<MemPlaceMeta<<M as Machine<'mir, 'tcx>>::Provenance>, InterpErrorInfo<'tcx>>where M: Machine<'mir, 'tcx, Provenance = Prov>,

Get the metadata of a wide value.

source

fn offset_with_meta( &self, offset: Size, meta: MemPlaceMeta<Prov>, layout: TyAndLayout<'tcx, Ty<'tcx>>, cx: &impl HasDataLayout ) -> Result<Self, InterpErrorInfo<'tcx>>

Offset the value by the given amount, replacing the layout and metadata.

source

fn to_op<'mir, M>( &self, ecx: &InterpCx<'mir, 'tcx, M> ) -> Result<OpTy<'tcx, <M as Machine<'mir, 'tcx>>::Provenance>, InterpErrorInfo<'tcx>>where M: Machine<'mir, 'tcx, Provenance = Prov>,

Convert this to an OpTy. This might be an irreversible transformation, but is useful for reading from this thing.

Provided Methods§

source

fn len<'mir, M>( &self, ecx: &InterpCx<'mir, 'tcx, M> ) -> Result<u64, InterpErrorInfo<'tcx>>where M: Machine<'mir, 'tcx, Provenance = Prov>,

source

fn offset( &self, offset: Size, layout: TyAndLayout<'tcx, Ty<'tcx>>, cx: &impl HasDataLayout ) -> Result<Self, InterpErrorInfo<'tcx>>

source

fn transmute( &self, layout: TyAndLayout<'tcx, Ty<'tcx>>, cx: &impl HasDataLayout ) -> Result<Self, InterpErrorInfo<'tcx>>

Implementors§