Files @ 031c9d14adaa
Branch filter:

Location: CSY/reowolf/src/protocol/eval/mod.rs - annotation

031c9d14adaa 1.3 KiB application/rls-services+xml Show Source Show as Raw Download as Raw
MH
Merge branch 'feat-bytecode'

Adds size/alignment/offset computations to the type system and detects
potentially infinite types. If the type is potentially infinite but
contains a union that can break that type loop, then all other variants
of that union are supposed to be allocated on the heap. If the type
is potentially infinite but cannot be broken up, then we throw the
appropriate error.

The size/alignment/offset computations are not yet employed in the
runtime. But prepares Reowolf for a proper bytecode/IR implementation.
/// eval
///
/// Evaluator of the generated AST. Note that we use some misappropriated terms
/// to describe where values live and what they do. This is a temporary
/// implementation of an evaluator until some kind of appropriate bytecode or
/// machine code is generated.
///
/// Code is always executed within a "frame". For Reowolf the first frame is
/// usually an executed component. All subsequent frames are function calls.
/// Simple values live on the "stack". Each variable/parameter has a place on
/// the stack where its values are stored. If the value is not a primitive, then
/// its value will be stored in the "heap". Expressions are treated differently
/// and use a separate "stack" for their evaluation.
///
/// Since this is a value-based language, most values are copied. One has to be
/// careful with values that reside in the "heap" and make sure that copies are
/// properly removed from the heap..
///
/// Just to reiterate: this is a temporary wasteful implementation. A proper
/// implementation would fully fill out the type table with alignment/size/
/// offset information and lay out bytecode.

pub(crate) mod value;
pub(crate) mod store;
pub(crate) mod executor;
pub(crate) mod error;

pub use error::EvalError;
pub use value::{Value, ValueGroup};
pub(crate) use store::{Store};
pub use executor::{EvalContinuation, Prompt};