Environment

Struct Environment 

Source
pub struct Environment {
    pub enclosing: Option<Rc<RefCell<Environment>>>,
    /* private fields */
}
Expand description

Represents an environment in which variables are stored. The environment is a hash map of variable names to their values. Each environment has a reference to its enclosing environment. This is an optional reference to implement lexical scoping and closures.

Fields§

§enclosing: Option<Rc<RefCell<Environment>>>

Using an Rc and Refcell here allows us to have multiple mutable references to the same environment.

Implementations§

Source§

impl Environment

Source

pub fn new(enclosing: Option<Rc<RefCell<Environment>>>) -> Self

Creates a new environment with the given enclosing environment.

Source

pub fn define(&mut self, name: &str, value: Object)

Defines a new variable in the environment with the given name and value.

Source

pub fn assign(&mut self, name: &Token, value: Object)

Assigns the given value to the variable with the given name. If the variable is not define in this environment but is defined in an enclosing environment, it will try to recursively assign the value to the variable in the enclosing environment. If the variable is not defined in this environment or any enclosing environment, it will throw a runtime error.

Source

pub fn assign_at(&mut self, distance: usize, name: &Token, value: Object)

Works like Environment::assign but assigns the value to the variable in the ancestor environment at the given distance.

Source

pub fn get(&self, name: &Token) -> Result<Object, RuntimeError>

Returns the value of the variable with the given name. If the variable is not defined in this environment but is defined in an enclosing environment, it will try to recursively get the value of the variable in the enclosing environment. If the variable is not defined in this environment or any enclosing environment, it will throw a runtime error.

Source

pub fn get_at( &self, distance: usize, name: &Token, ) -> Result<Object, RuntimeError>

Works like Environment::get but gets the value of the variable in the ancestor environment at the given distance.

Trait Implementations§

Source§

impl Clone for Environment

Source§

fn clone(&self) -> Environment

Returns a duplicate of the value. Read more
1.0.0 · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Debug for Environment

Source§

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

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

impl Default for Environment

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.