Struct Machine

Source
pub struct Machine<'a> {
    pub frames: StackFrames<'a>,
    pub flow: Option<FlowEvent>,
    pub engine: Engine<'a>,
    pub context: EvalContext,
    pub heap: Heap,
}

Fields§

§frames: StackFrames<'a>§flow: Option<FlowEvent>§engine: Engine<'a>§context: EvalContext§heap: Heap

Implementations§

Source§

impl<'a> Machine<'a>

Source

pub fn world(&self) -> &dyn World

Source

pub fn syntax_ctx<'w>(&self) -> SyntaxContext<'w>
where 'a: 'w,

Source§

impl<'a> Machine<'a>

Source

pub fn new(world: &'a dyn World) -> Self

Source

pub fn with_frame<T>(&mut self, f: impl FnOnce(&mut Machine<'_>) -> T) -> T

Enter a new stack frame to evaluate f. This frame does not have access to any defined variables in other frames, but does share the same heap. This means references passed into this frame can share data.

Source

pub fn maybe_gc(&mut self)

Source§

impl<'a> Machine<'a>

Source

pub fn track_tmp_root(&mut self, value: &impl Trace)

Source

pub fn debug_tracked(&self, from: &str)

Source

pub fn temp_root_marker(&mut self) -> TrackMarker

Source

pub fn pop_temp_roots(&mut self, marker: TrackMarker)

Source

pub fn temp_root_scope( &mut self, f: impl FnOnce(&mut Machine<'a>) -> SourceResult<Value>, ) -> SourceResult<Value>

Automatically forgets any tracked values during f after f is finished

Source

pub fn define( &mut self, var: Ident<'_>, value: impl IntoValue, binding_kind: BindingKind, visibility: Visibility, ) -> SourceResult<&mut Binding>

Source

pub fn try_bind( &mut self, name: EcoString, binding: Binding, ) -> SourceResult<&mut Binding>

Source

pub fn bind(&mut self, name: EcoString, binding: Binding) -> &mut Binding

Source

pub fn get(&self, name: &str) -> Result<&Binding, VariableAccessError>

Source

pub fn get_mut( &mut self, name: &str, ) -> Result<&mut Binding, VariableAccessError>

Source§

impl<'a> Machine<'a>

Source

pub fn temp_root_guard<'b>(&'b mut self) -> TempRootGuard<'a, 'b>

Source§

impl Machine<'_>

Source

pub fn with_closure_capture_errors_mode<T>( &mut self, mode: ErrorMode, f: impl FnOnce(&mut Machine<'_>) -> SourceResult<T>, ) -> SourceResult<T>

Run f with closure capture errors deferred.

This makes the caller responsible for either handling or emitting the unresolved errors.

Trait Implementations§

Source§

impl Debug for Machine<'_>

Source§

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

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

impl<'a> Vm<'a> for Machine<'a>

Source§

fn heap(&self) -> &Heap

Source§

fn heap_mut(&mut self) -> &mut Heap

Source§

fn engine(&self) -> &Engine<'a>

Source§

fn engine_mut(&mut self) -> &mut Engine<'a>

Source§

fn call_func(&mut self, func: &Func, args: Args) -> SourceResult<Value>

Auto Trait Implementations§

§

impl<'a> Freeze for Machine<'a>

§

impl<'a> !RefUnwindSafe for Machine<'a>

§

impl<'a> !Send for Machine<'a>

§

impl<'a> !Sync for Machine<'a>

§

impl<'a> Unpin for Machine<'a>

§

impl<'a> !UnwindSafe for Machine<'a>

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

Source§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. 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> Pipe for T
where T: ?Sized,

Source§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
Source§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
Source§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
Source§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
Source§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
Source§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
Source§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
Source§

impl<T> Tap for T

Source§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
Source§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
Source§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
Source§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
Source§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
Source§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
Source§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
Source§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
Source§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
Source§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
Source§

impl<T> TryConv for T

Source§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. 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.