pulley_interpreter::decode

Struct UnsafeBytecodeStream

Source
pub struct UnsafeBytecodeStream(/* private fields */);
Available on crate feature decode only.
Expand description

An unsafe bytecode stream.

This is a wrapper over a raw pointer to bytecode somewhere in memory.

Implementations§

Source§

impl UnsafeBytecodeStream

Source

pub unsafe fn new(pc: NonNull<u8>) -> Self

Construct a new UnsafeBytecodeStream pointing at the given PC.

§Safety

The given pc must point to valid Pulley bytecode, and it is the caller’s responsibility to ensure that the resulting UnsafeBytecodeStream is only used to access the valid bytecode. For example, if the current bytecode instruction unconditionally jumps to a new PC, this stream must not be used to read just after the unconditional jump instruction because there is no guarantee that that memory is part of the bytecode stream or not.

Source

pub unsafe fn offset(&self, offset: isize) -> Self

Get a new UnsafeBytecodeStream pointing at the bytecode that is at the given relative offset from this stream’s current position.

§Safety

Same as the new constructor. May only be used when it is guaranteed that the address at self._as_ptr() + offset contains valid Pulley bytecode.

Source

pub fn as_ptr(&self) -> NonNull<u8>

Get this stream’s underlying raw pointer.

Trait Implementations§

Source§

impl BytecodeStream for UnsafeBytecodeStream

Source§

type Error = Uninhabited

The type of error that this bytecode stream produces on invalid operations.
Source§

fn read<const N: usize>(&mut self) -> Result<[u8; N], Self::Error>

Read N bytes from this bytecode stream, advancing the stream’s position at the same time.
Source§

fn unexpected_eof(&self) -> Self::Error

Create an “unexpected end-of-stream” error at the current position.
Source§

fn invalid_opcode(&self, _code: u8) -> Self::Error

Create an “invalid opcode” error at the current position.
Source§

fn invalid_extended_opcode(&self, _code: u16) -> Self::Error

Create an “invalid extended opcode” error at the current position.
Source§

fn invalid_reg(&self, _reg: u8) -> Self::Error

Create an “invalid register” error at the current position.
Source§

impl Clone for UnsafeBytecodeStream

Source§

fn clone(&self) -> UnsafeBytecodeStream

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for UnsafeBytecodeStream

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Copy for UnsafeBytecodeStream

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dst: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.