Statement

Enum Statement 

Source
pub enum Statement {
    IntLiteral(i64),
    FloatLiteral(f64),
    BoolLiteral(bool),
    StringLiteral(String),
    WordCall(String),
    If {
        then_branch: Vec<Statement>,
        else_branch: Option<Vec<Statement>>,
    },
    Quotation {
        id: usize,
        body: Vec<Statement>,
    },
}

Variants§

§

IntLiteral(i64)

Integer literal: pushes value onto stack

§

FloatLiteral(f64)

Floating-point literal: pushes IEEE 754 double onto stack

§

BoolLiteral(bool)

Boolean literal: pushes true/false onto stack

§

StringLiteral(String)

String literal: pushes string onto stack

§

WordCall(String)

Word call: calls another word or built-in

§

If

Conditional: if/else/then

Pops an integer from the stack (0 = zero, non-zero = non-zero) and executes the appropriate branch

Fields

§then_branch: Vec<Statement>

Statements to execute when condition is non-zero (the ‘then’ clause)

§else_branch: Option<Vec<Statement>>

Optional statements to execute when condition is zero (the ‘else’ clause)

§

Quotation

Quotation: [ … ]

A block of deferred code (quotation/lambda) Quotations are first-class values that can be pushed onto the stack and executed later with combinators like call, times, or while

The id field is used by the typechecker to track the inferred type (Quotation vs Closure) for this quotation. The id is assigned during parsing.

Fields

Trait Implementations§

Source§

impl Clone for Statement

Source§

fn clone(&self) -> Statement

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 Statement

Source§

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

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

impl PartialEq for Statement

Source§

fn eq(&self, other: &Statement) -> 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.
Source§

impl StructuralPartialEq for Statement

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.