pub struct Process<'gc, C: CustomTypes<S>, S: System<C>> { /* private fields */ }
Expand description

A ByteCode execution primitive.

A Process is a self-contained thread of execution. It maintains its own state machine for executing instructions step by step.

Implementations§

source§

impl<'gc, C: CustomTypes<S>, S: System<C>> Process<'gc, C, S>

source

pub fn new( global_context: Gc<'gc, RefLock<GlobalContext<'gc, C, S>>>, entity: Gc<'gc, RefLock<Entity<'gc, C, S>>>, start_pos: usize ) -> Self

Creates a new Process that is tied to a given start_pos (entry point) in the ByteCode and associated with the specified entity and system. The created process is initialized to an idle (non-running) state; use Process::initialize to begin execution.

source

pub fn is_running(&self) -> bool

Checks if the process is currently running. Note that the process will not run on its own (see Process::step).

source

pub fn get_global_context(&self) -> Gc<'gc, RefLock<GlobalContext<'gc, C, S>>>

Gets the global context that this process is tied to (see Process::new).

source

pub fn get_call_stack(&self) -> &[CallStackEntry<'gc, C, S>]

Gets a reference to the current call stack. This gives access to stack trace information including all local scopes in the call chain. Note that the call stack is never empty, and that the always-present first element (denoting the initial execution request) is a special entry which has an invalid value for CallStackEntry::called_from, namely usize::MAX.

source

pub fn initialize(&mut self, context: ProcContext<'gc, C, S>)

Prepares the process to execute starting at the main entry point (see Process::new) with the provided input local variables. A Barrier may also be set, which will be destroyed upon termination, either due to completion or an error.

Any previous process state is wiped when performing this action.

source

pub fn step( &mut self, mc: &Mutation<'gc> ) -> Result<ProcessStep<'gc, C, S>, ExecError<C, S>>

Executes a single bytecode instruction. The return value can be used to determine what additional effects the script has requested, as well as to retrieve the return value or execution error in the event that the process terminates.

The process transitions to the idle state (see Process::is_running) upon failing with Err or succeeding with ProcessStep::Terminate.

Trait Implementations§

source§

impl<'gc, C: CustomTypes<S>, S: System<C>> Collect for Process<'gc, C, S>where usize: 'static, bool: 'static, Option<Barrier>: 'static, Option<S::InternReplyKey>: 'static, Vec<Handler>: 'static, Vec<String>: 'static, Option<Defer<C, S>>: 'static,

source§

fn needs_trace() -> bool

As an optimization, if this type can never hold a Gc pointer and trace is unnecessary to call, you may implement this method and return false. The default implementation returns true, signaling that Collect::trace must be called.
source§

fn trace(&self, cc: &Collection)

Must call Collect::trace on all held Gc pointers. If this type holds inner types that implement Collect, a valid implementation would simply call Collect::trace on all the held values to ensure this.

Auto Trait Implementations§

§

impl<'gc, C, S> !RefUnwindSafe for Process<'gc, C, S>

§

impl<'gc, C, S> !Send for Process<'gc, C, S>

§

impl<'gc, C, S> !Sync for Process<'gc, C, S>

§

impl<'gc, C, S> Unpin for Process<'gc, C, S>where <S as System<C>>::CommandKey: Unpin, <S as System<C>>::ExternReplyKey: Unpin, <S as System<C>>::InternReplyKey: Unpin, <S as System<C>>::RequestKey: Unpin,

§

impl<'gc, C, S> !UnwindSafe for Process<'gc, C, S>

Blanket Implementations§

source§

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

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

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

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

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

source§

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

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere 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> Same<T> for T

§

type Output = T

Should always be Self
source§

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

§

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 Twhere U: TryFrom<T>,

§

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.
§

impl<V, T> VZip<V> for Twhere V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more