Val

Enum Val 

Source
pub enum Val {
    Cst(i64),
    Sym(SmolStr),
    Tup(RcVal, RcVal),
    Clo(Env, RcExp),
    Nil,
    Code(RcExp),
    Cell(usize),
}
Expand description

A runtime value.

Values and expressions are distinct types, unlike base.scm where both are s-expressions. Staged code crosses the divide as Val::Code — an expression tree held as a value — and Exp::Proc carries a value back into an expression.

Variants§

§

Cst(i64)

Integer constant (also the boolean encoding: 0 false, 1 true).

§

Sym(SmolStr)

Symbol. SmolStr is O(1) clone for strings ≤22 bytes.

§

Tup(RcVal, RcVal)

Cons cell. Rc<Val> makes car/cdr O(1) — Pink source lists are traversed many times during staging.

§

Clo(Env, RcExp)

Closure: environment + body. Both are Rc for O(1) clone and ptr_eq in find_fun.

§

Nil

The empty list, terminating every Val::Tup chain. Note that if does not accept it as a condition — conditions are numbers (or code); test for nil with null?.

§

Code(RcExp)

Staged code value. Rc<Exp> — shared through the staging machinery.

§

Cell(usize)

First-class mutable cell — an index into EvalCtx.cells (the per-instance, in-process store: each evaluator owns its own heap, so instances snapshot and compose freely). Identity is the index: eq? compares indices, cell-set! through one alias is visible through all. Cells never fold under staging: lift of a Cell errors, and staged cell ops residualize as operations.

Implementations§

Source§

impl Val

Source

pub fn short_desc(&self) -> String

Compact description suitable for error messages. Avoids dumping large Val::Code trees — instead reports node count.

This is the form to use in NarjuError::TypeError.actual and similar diagnostic strings. Use display(v) (in eval/mod.rs) or format!("{v}") (via fmt::Display) for user-facing output where the full structure matters.

Trait Implementations§

Source§

impl Clone for Val

Source§

fn clone(&self) -> Val

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 Val

Source§

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

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

impl Display for Val

Source§

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

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

impl PartialEq for Val

Source§

fn eq(&self, other: &Self) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.

Auto Trait Implementations§

§

impl Freeze for Val

§

impl RefUnwindSafe for Val

§

impl !Send for Val

§

impl !Sync for Val

§

impl Unpin for Val

§

impl UnwindSafe for Val

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
§

impl<T> ToSmolStr for T
where T: Display + ?Sized,

§

fn to_smolstr(&self) -> SmolStr

Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. 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.