Struct rune::runtime::VmExecution

source ·
pub struct VmExecution<T = Vm>
where T: AsRef<Vm> + AsMut<Vm>,
{ /* private fields */ }
Expand description

The execution environment for a virtual machine.

When an execution is dropped, the stack of the stack of the head machine will be cleared.

Implementations§

source§

impl<T> VmExecution<T>
where T: AsRef<Vm> + AsMut<Vm>,

source

pub fn into_generator(self) -> Generator<T>

Coerce the current execution into a generator if appropriate.

use rune::Vm;
use std::sync::Arc;

let mut sources = rune::sources! {
    entry => {
        pub fn main() {
            yield 1;
            yield 2;
        }
    }
};

let unit = rune::prepare(&mut sources).build()?;

let mut vm = Vm::without_runtime(Arc::new(unit));
let mut generator = vm.execute(["main"], ())?.into_generator();

let mut n = 1i64;

while let Some(value) = generator.next().into_result()? {
    let value: i64 = rune::from_value(value)?;
    assert_eq!(value, n);
    n += 1;
}
source

pub fn into_stream(self) -> Stream<T>

Coerce the current execution into a stream if appropriate.

use rune::Vm;
use std::sync::Arc;

let mut sources = rune::sources! {
    entry => {
        pub async fn main() {
            yield 1;
            yield 2;
        }
    }
};

let unit = rune::prepare(&mut sources).build()?;

let mut vm = Vm::without_runtime(Arc::new(unit));
let mut stream = vm.execute(["main"], ())?.into_stream();

let mut n = 1i64;

while let Some(value) = stream.next().await.into_result()? {
    let value: i64 = rune::from_value(value)?;
    assert_eq!(value, n);
    n += 1;
}
source

pub fn vm(&self) -> &Vm

Get a reference to the current virtual machine.

source

pub fn vm_mut(&mut self) -> &mut Vm

Get a mutable reference the current virtual machine.

source

pub async fn async_complete(&mut self) -> VmResult<Value>

Complete the current execution without support for async instructions.

This will error if the execution is suspended through yielding.

source

pub fn complete(&mut self) -> VmResult<Value>

Complete the current execution without support for async instructions.

If any async instructions are encountered, this will error. This will also error if the execution is suspended through yielding.

source

pub async fn async_resume_with( &mut self, value: Value ) -> VmResult<GeneratorState>

Resume the current execution with the given value and resume asynchronous execution.

source

pub async fn async_resume(&mut self) -> VmResult<GeneratorState>

Resume the current execution with support for async instructions.

If the function being executed is a generator or stream this will resume it while returning a unit from the current yield.

source

pub fn resume_with(&mut self, value: Value) -> VmResult<GeneratorState>

Resume the current execution with the given value and resume synchronous execution.

source

pub fn resume(&mut self) -> VmResult<GeneratorState>

Resume the current execution without support for async instructions.

If the function being executed is a generator or stream this will resume it while returning a unit from the current yield.

If any async instructions are encountered, this will error.

source

pub fn step(&mut self) -> VmResult<Option<Value>>

Step the single execution for one step without support for async instructions.

If any async instructions are encountered, this will error.

source

pub async fn async_step(&mut self) -> VmResult<Option<Value>>

Step the single execution for one step with support for async instructions.

source§

impl VmExecution<&mut Vm>

source

pub fn into_owned(self) -> VmExecution<Vm>

Convert the current execution into one which owns its virtual machine.

Auto Trait Implementations§

§

impl<T = Vm> !RefUnwindSafe for VmExecution<T>

§

impl<T> Send for VmExecution<T>
where T: Send,

§

impl<T> Sync for VmExecution<T>
where T: Sync,

§

impl<T> Unpin for VmExecution<T>
where T: Unpin,

§

impl<T = Vm> !UnwindSafe for VmExecution<T>

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> Same for T

§

type Output = T

Should always be Self
source§

impl<T, U> TryFrom<U> for T
where 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 T
where 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.
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