module orelang.expression.CallOperator;
import orelang.expression.IExpression,
       orelang.operator.IOperator,
       orelang.Closure,
       orelang.Engine,
       orelang.Value;

class CallOperator : IExpression {
  private {
    IOperator operator;
    Value[] args;
  }

  this(IOperator operator, Value[] args) {
    this.operator = operator;
    this.args     = args;
  }

  /**
   * eval
   */
  public Value eval(Engine engine) {
    Closure closure = engine.eval(new Value(this.operator)).getClosure;

    return closure.eval(this.args);
  }
}