1 module orelang.operator.SetIdxOperator;
2 import orelang.expression.ImmediateValue,
3        orelang.operator.IOperator,
4        orelang.Engine,
5        orelang.Value;
6 import std.conv;
7 
8 class SetIdxOperator : IOperator {
9   /**
10    * call
11    */
12   public Value call(Engine engine, Value[] args) {
13     Value[] arr;
14     if (args[0].type == ValueType.ImmediateValue) {
15       arr = args[0].getImmediateValue.value.getArray;
16     } else {
17       arr = engine.eval(args[0]).getArray;
18     }
19     long  idx   = args[1].getNumeric.to!long;
20     Value value = args[2];
21 
22     if (0 < idx && idx < arr.length) {
23       arr[idx] = value;
24 
25       return new Value(arr);
26     } else {
27       throw new Exception("Invalid");
28     }
29   }
30 }