pub enum CallData {
Owned(Bytes),
CallerMemory(CallerRange),
}Expand description
The input of a call frame: a transaction’s data, or a range of the calling frame’s memory.
A call’s arguments are read where they are instead of being copied for each call, so a CALL-family opcode costs the same whatever the size of its argument region. This is safe because the caller’s memory cannot change while the callee runs: the caller grows its memory over the argument and return regions before the call, and only the running frame writes memory, past its own base. The callee’s growth can still move the whole buffer to a new allocation, so a range is located through the buffer on every read rather than held as a pointer.
Variants§
Owned(Bytes)
CallerMemory(CallerRange)
Implementations§
Source§impl CallData
impl CallData
pub fn len(&self) -> usize
pub fn is_empty(&self) -> bool
Sourcepub fn with_slice<R>(&self, f: impl FnOnce(&[u8]) -> R) -> Result<R, VMError>
pub fn with_slice<R>(&self, f: impl FnOnce(&[u8]) -> R) -> Result<R, VMError>
Passes the input to f as a slice. For a range of caller memory the buffer stays
borrowed while f runs, so f must not write memory.
Trait Implementations§
Auto Trait Implementations§
impl !Freeze for CallData
impl !RefUnwindSafe for CallData
impl !Send for CallData
impl !Sync for CallData
impl !UnwindSafe for CallData
impl Unpin for CallData
impl UnsafeUnpin for CallData
Blanket Implementations§
Source§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
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 moreSource§impl<T> LayoutRaw for T
impl<T> LayoutRaw for T
Source§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
Source§impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
Source§unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
Source§fn resolve_niched(out: Place<NichedOption<T, N1>>)
fn resolve_niched(out: Place<NichedOption<T, N1>>)
out indicating that a T is niched.