Struct move_stackless_bytecode::access_path::AccessPath
source · [−]pub struct AccessPath { /* private fields */ }
Expand description
A unique identifier for a memory cell: root followed by zero or more offsets
Implementations
sourceimpl AccessPath
impl AccessPath
pub fn new(root: Root, offsets: Vec<Offset>) -> Self
pub fn new_root(root: Root) -> Self
pub fn new_global(
addr: AbsAddr,
mid: &ModuleId,
sid: StructId,
types: Vec<Type>
) -> Self
pub fn new_address_constant(
addr: BigUint,
mid: &ModuleId,
sid: StructId,
types: Vec<Type>
) -> Self
pub fn new_global_constant(addr: BigUint, ty: AbsStructType) -> Self
pub fn from_index(i: TempIndex, func_env: &FunctionEnv<'_>) -> Self
pub fn root(&self) -> &Root
pub fn offsets(&self) -> &[Offset]
sourcepub fn add_offset(&mut self, o: Offset)
pub fn add_offset(&mut self, o: Offset)
extend this access path by adding offset o
to the end
sourcepub fn get_type(&self, fun: &FunctionEnv<'_>) -> Type
pub fn get_type(&self, fun: &FunctionEnv<'_>) -> Type
Return the type of this access path
sourcepub fn prepend(&mut self, prefix: Self)
pub fn prepend(&mut self, prefix: Self)
prepend prefix
to self by swapping self
’s root for prefix.root and
replacing self
’s accesses with prefix.accesses :: self.accesses
sourcepub fn prepend_addrs(&self, addrs: &AbsAddr) -> AbsAddr
pub fn prepend_addrs(&self, addrs: &AbsAddr) -> AbsAddr
Construct a new abstract address by prepending the addresses in addrs
to self
sourcepub fn substitute_footprint(
&self,
actuals: &[TempIndex],
type_actuals: &[Type],
func_env: &FunctionEnv<'_>,
sub_map: &dyn AccessPathMap<AbsAddr>
) -> AbsAddr
pub fn substitute_footprint(
&self,
actuals: &[TempIndex],
type_actuals: &[Type],
func_env: &FunctionEnv<'_>,
sub_map: &dyn AccessPathMap<AbsAddr>
) -> AbsAddr
Replace all footprint paths in self
using actuals
and sub_map
.
Bind free type variables to type_actuals
.
sourcepub fn is_statically_known(&self) -> bool
pub fn is_statically_known(&self) -> bool
Return true if self
can be converted to a compact set of concrete access paths.
Returns false if (e.g.) self
contains an global root with an unbound
address/type parameter, a global offset, or a vector index offset.
sourcepub fn all_addresses_types_bound(&self) -> bool
pub fn all_addresses_types_bound(&self) -> bool
Return true
if self
has no unbound address or type variables (i.e., the type variables
and addresses in self.root
are statically known and self
has no Global
offsets.
This function is the same as is_statically_known
except that is_statically_known
returns
false
if self
has Vector
offsets, but this function will not.
sourcepub fn display<'a>(&'a self, env: &'a FunctionEnv<'_>) -> AccessPathDisplay<'a>
pub fn display<'a>(&'a self, env: &'a FunctionEnv<'_>) -> AccessPathDisplay<'a>
Return a wrapper of self
that implements Display
using env
Trait Implementations
sourceimpl Clone for AccessPath
impl Clone for AccessPath
sourcefn clone(&self) -> AccessPath
fn clone(&self) -> AccessPath
Returns a copy of the value. Read more
1.0.0 · sourcefn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from source
. Read more
sourceimpl Debug for AccessPath
impl Debug for AccessPath
sourceimpl Ord for AccessPath
impl Ord for AccessPath
sourcefn cmp(&self, other: &AccessPath) -> Ordering
fn cmp(&self, other: &AccessPath) -> Ordering
1.21.0 · sourcefn max(self, other: Self) -> Self
fn max(self, other: Self) -> Self
Compares and returns the maximum of two values. Read more
1.21.0 · sourcefn min(self, other: Self) -> Self
fn min(self, other: Self) -> Self
Compares and returns the minimum of two values. Read more
1.50.0 · sourcefn clamp(self, min: Self, max: Self) -> Self where
Self: PartialOrd<Self>,
fn clamp(self, min: Self, max: Self) -> Self where
Self: PartialOrd<Self>,
Restrict a value to a certain interval. Read more
sourceimpl PartialEq<AccessPath> for AccessPath
impl PartialEq<AccessPath> for AccessPath
sourcefn eq(&self, other: &AccessPath) -> bool
fn eq(&self, other: &AccessPath) -> bool
This method tests for self
and other
values to be equal, and is used
by ==
. Read more
sourceimpl PartialOrd<AccessPath> for AccessPath
impl PartialOrd<AccessPath> for AccessPath
sourcefn partial_cmp(&self, other: &AccessPath) -> Option<Ordering>
fn partial_cmp(&self, other: &AccessPath) -> Option<Ordering>
This method returns an ordering between self
and other
values if one exists. Read more
1.0.0 · sourcefn lt(&self, other: &Rhs) -> bool
fn lt(&self, other: &Rhs) -> bool
This method tests less than (for self
and other
) and is used by the <
operator. Read more
1.0.0 · sourcefn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
impl Eq for AccessPath
impl StructuralEq for AccessPath
impl StructuralPartialEq for AccessPath
Auto Trait Implementations
impl RefUnwindSafe for AccessPath
impl Send for AccessPath
impl Sync for AccessPath
impl Unpin for AccessPath
impl UnwindSafe for AccessPath
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
sourceimpl<Q, K> Equivalent<K> for Q where
Q: Eq + ?Sized,
K: Borrow<Q> + ?Sized,
impl<Q, K> Equivalent<K> for Q where
Q: Eq + ?Sized,
K: Borrow<Q> + ?Sized,
sourcefn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
Compare self to key
and return true
if they are equal.