Skip to main content

LexicalEnv

Struct LexicalEnv 

Source
pub struct LexicalEnv { /* private fields */ }
Expand description

A lexical scope: a frame of name-to-value slots chained to its parent.

Cloning shares the same frame; child opens a nested scope. Slots support deferred initialization so letrec can predefine names before computing their values.

Implementations§

Source§

impl LexicalEnv

Source

pub fn new() -> Self

Creates a fresh root scope with no parent and no bindings.

Source

pub fn child(&self) -> Self

Opens a nested scope whose lookups fall through to this one.

Source

pub fn define(&self, name: Symbol, value: Value) -> Result<()>

Binds name to value in this frame.

Errors if name is already bound in the same frame (shadowing requires a child scope).

Source

pub fn lookup(&self, name: &Symbol) -> Result<Value>

Resolves name through this frame and its parents.

Errors if the name is undefined or was predefined but never initialized.

Source

pub fn capture_cell(&self, name: &Symbol) -> Result<BindingCell>

Captures name as a shared cell for closure formation.

Mutating the returned cell updates the lexical slot itself, so every closure that captures the same binding observes the same value.

Trait Implementations§

Source§

impl Clone for LexicalEnv

Source§

fn clone(&self) -> LexicalEnv

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for LexicalEnv

Source§

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

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

impl Default for LexicalEnv

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. 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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. 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.