Files
@ 85419b0950c7
Branch filter:
Location: CSY/reowolf/src/protocol/eval/mod.rs - annotation
85419b0950c7
1.3 KiB
application/rls-services+xml
Rewrote typing to use indices.
Currently it is slower than before, because we do a HashMap lookup
followed up by actually using the index. But it serves as the basis
for a faster type inferencer.
The main goal, however, is to fix the manner in which polymorph
types are determined. The typing queue of functions still needs to
correctly write this data to the type table.
Currently it is slower than before, because we do a HashMap lookup
followed up by actually using the index. But it serves as the basis
for a faster type inferencer.
The main goal, however, is to fix the manner in which polymorph
types are determined. The typing queue of functions still needs to
correctly write this data to the type table.
6810fd00a570 6810fd00a570 6810fd00a570 6810fd00a570 6810fd00a570 6810fd00a570 6810fd00a570 6810fd00a570 6810fd00a570 6810fd00a570 6810fd00a570 6810fd00a570 6810fd00a570 6810fd00a570 6810fd00a570 6810fd00a570 6810fd00a570 6810fd00a570 3845071002b0 6810fd00a570 6810fd00a570 6810fd00a570 d36ad4f5458b d36ad4f5458b d36ad4f5458b b69f417a9972 6810fd00a570 b69f417a9972 3845071002b0 9b32fa307ceb 3845071002b0 6810fd00a570 | /// 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};
|