module orelang.expression.ImmediateValue;
import orelang.expression.IExpression,
       orelang.Engine,
       orelang.Value;
import std..string,
       std.conv;

class ImmediateValue : IExpression {
  Value value;

  this(Value value) {
    this.value = value;
  }

  public Value eval(Engine engine) {
    return this.value;
  }

  override string toString() {
    string base = "ImmediateValue {";
    string _body;

    if (value.type == ValueType.Array) {
      string[] elems;

      foreach (elem; value.getArray) {
        elems ~= elem.toString;
      }

      _body = "[" ~ elems.join(", ") ~ "]"; 
    } else {
      _body = value.toString;
    }

    return base ~ _body ~ "}";
  }
}