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.