module orelang.operator.CondOperator;
import orelang.operator.IOperator,
       orelang.Engine,
       orelang.Value;

class CondOperator : IOperator {
  /**
   * call
   */
  public Value call(Engine engine, Value[] args) {
    for (size_t i; i < args.length; ++i) {
      Value[] state = args[i].getArray;
      Value pred = state[0];
      Value expr = state[1];

      Value epred = engine.eval(pred);

      if ((epred.type == ValueType.Bool && epred.getBool) || ((pred.type == ValueType.SymbolValue || pred.type == ValueType.String) && pred.getString == "else")) {
        return engine.eval(expr);
      }
    }

    return new Value(0.0);
  }
}