# Functions
NewExpression accept a node and try to "compile"/ "specialise" it in order to achieve better runtime performance.
Return set of built-in Funcs.
Initialize a new Scope object.
NewScopePool - creates new ScopePool for the given Node.
# Structs
ErrSide wraps the error in the evaluation, we use this error to indicate the origin of the error left side or right side.
ErrTypeGuardFailed is returned when a speicifc value type is requested thorugh NodeEvaluator (for example: "Float64Value") when the node doesn't support the given type, for example "Float64Value" is called on BoolNode.
EvalBinaryNode is stateful expression which
is evaluated using "expression trees" instead of stack based interpreter.
ExecutionState is auxiliary struct for data/context that needs to be passed to evaluation functions.
Contains a set of variables references and their values.
# Interfaces
Expression is interface that describe expression with state and it's evaluation.
A callable function from within the expression.
NodeEvaluator provides a generic way for trying to fetch node value, if a speicifc type is requested (so Value isn't called, the *Value is called) ErrTypeGuardFailed must be returned.
ScopePool - pooling mechanism for Scope The idea behind scope pool is to pool scopes and to put them only the needed variables for execution.