execute

Function execute 

Source
pub fn execute(env: &impl Environment, ast: &Expression) -> Result<Value>
Expand description

Executes an Expression using an Environment.

§Example

use slac::{Expression, Operator, Value};
use slac::{execute, StaticEnvironment};

let env = StaticEnvironment::default();
let ast = Expression::Binary {
    left: Box::new(Expression::Literal {
        value: Value::Number(40.0),
    }),
    right: Box::new(Expression::Literal {
        value: Value::Number(2.0),
    }),
    operator: Operator::Plus,
};

assert_eq!(Ok(Value::Number(42.0)), execute(&env, &ast));

§Remarks

  • Currently uses an TreeWalkingInterpreter to evaluate the AST.
  • Will short-circuit boolean expression.
  • Invalid operations will be evaluated to an Error.
  • Comparison of empty Values (Value::empty()) against Error::UndefinedVariable is a valid operation
    • e.g: undefined_var = '' is valid

§Errors

Returns Error when encountering an error at runtime.