Struct Process

Source
pub struct Process<'gc, C: CustomTypes<S>, S: System<C>> {
    pub global_context: Gc<'gc, RefLock<GlobalContext<'gc, C, S>>>,
    pub state: C::ProcessState,
    /* 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.

Fields§

§global_context: Gc<'gc, RefLock<GlobalContext<'gc, C, S>>>§state: C::ProcessState

Implementations§

Source§

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

Source

pub fn new(context: ProcContext<'gc, C, S>) -> Self

Creates a new Process with the given starting context.

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_call_stack(&self) -> &[CallFrame<'gc, C, S>]

Gets a reference to the current call stack. This is a sequence of every call frame, including the current context entity, local variables in scope, and other hidden state information. Due to the delicate state involved, a mutable option is not supported.

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.

This function is not re-entrant, so recursively calling it from the mutable handle of, e.g., Config will likely lead to panics.

Trait Implementations§

Source§

impl<'gc, C: CustomTypes<S>, S: System<C>> Collect for Process<'gc, C, S>
where C::ProcessState: 'static, usize: 'static, Option<Barrier>: 'static, Option<InternReplyKey>: 'static, Vec<Handler<C, S>>: '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> Freeze for Process<'gc, C, S>
where <C as CustomTypes<S>>::ProcessState: Freeze, <S as System<C>>::RequestKey: Freeze, <S as System<C>>::CommandKey: Freeze,

§

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>

§

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

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> 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 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> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
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.
Source§

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

Source§

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

impl<T> ErasedDestructor for T
where T: 'static,