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 }