Struct 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§
source§impl 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§
source§impl Clone for AccessPath
impl Clone for AccessPath
source§fn clone(&self) -> AccessPath
fn clone(&self) -> AccessPath
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moresource§impl Debug for AccessPath
impl Debug for AccessPath
source§impl Ord for AccessPath
impl Ord for AccessPath
source§fn cmp(&self, other: &AccessPath) -> Ordering
fn cmp(&self, other: &AccessPath) -> Ordering
1.21.0 · source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere Self: Sized,
source§impl PartialEq<AccessPath> for AccessPath
impl PartialEq<AccessPath> for AccessPath
source§fn eq(&self, other: &AccessPath) -> bool
fn eq(&self, other: &AccessPath) -> bool
self and other values to be equal, and is used
by ==.source§impl PartialOrd<AccessPath> for AccessPath
impl PartialOrd<AccessPath> for AccessPath
source§fn partial_cmp(&self, other: &AccessPath) -> Option<Ordering>
fn partial_cmp(&self, other: &AccessPath) -> Option<Ordering>
1.0.0 · source§fn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
self and other) and is used by the <=
operator. Read moreimpl 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§
source§impl<Q, K> Equivalent<K> for Qwhere
Q: Eq + ?Sized,
K: Borrow<Q> + ?Sized,
impl<Q, K> Equivalent<K> for Qwhere Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,
source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.