VmExecution

Struct VmExecution 

Source
pub struct VmExecution<T> { /* 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>

Source

pub fn vm(&self) -> &Vm
where T: AsRef<Vm>,

Get a reference to the current virtual machine.

Source

pub fn vm_mut(&mut self) -> &mut Vm
where T: AsMut<Vm>,

Get a mutable reference the current virtual machine.

Source§

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

Source

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

Coerce the current execution into a generator if appropriate.

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

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

let unit = rune::prepare(&mut sources).build()?;
let unit = Arc::try_new(unit)?;
let mut vm = Vm::without_runtime(unit)?;

let mut generator = vm.execute(["main"], ())?.into_generator();

let mut n = 1i64;

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

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

Coerce the current execution into a stream if appropriate.

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

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

let unit = rune::prepare(&mut sources).build()?;
let unit = Arc::try_new(unit)?;
let mut vm = Vm::without_runtime(unit)?;

let mut stream = vm.execute(["main"], ())?.into_stream();

let mut n = 1i64;

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

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

Source

pub fn complete(&mut self) -> Result<Value, VmError>

Synchronously complete the current execution.

§Errors

If anything except the completion of the execution is encountered, this will result in an error.

To handle other outcomes and more configurability see VmExecution::resume.

Source

pub async fn async_complete(&mut self) -> Result<Value, VmError>

Asynchronously complete the current execution.

§Errors

If anything except the completion of the execution is encountered, this will result in an error.

To handle other outcomes and more configurability see VmExecution::resume.

Source

pub fn resume(&mut self) -> VmResume<'_, 'static, T>

Resume the current execution.

To complete this operation synchronously, use VmResume::complete.

§Resume with a value

To resume an execution with a value, use VmResume::with_value. This requires that the execution has yielded first, otherwise an error will be produced.

§Resume with diagnostics

To associated VmDiagnostics with the execution, use VmResume::with_diagnostics.

Source§

impl VmExecution<&mut Vm>

Source

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

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

Trait Implementations§

Source§

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

Source§

fn try_clone(&self) -> Result<Self, Error>

Try to clone the current value, raising an allocation error if it’s unsuccessful.
Source§

fn try_clone_from(&mut self, source: &Self) -> Result<(), Error>

Performs copy-assignment from source. Read more

Auto Trait Implementations§

§

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

§

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

§

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> UnwindSafe for VmExecution<T>
where T: UnwindSafe,

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

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<T> TryToOwned for T
where T: TryClone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn try_to_owned(&self) -> Result<T, Error>

Creates owned data from borrowed data, usually by cloning. Read more
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,