static Object.Object push(List <Object.Object> args) { if (args.Count != 2) { return(evaluator.newError("wrong number of arguments. got={0}, want=2", args.Count.ToString())); } if (args[0].Type() != Object._ObjectType.ARRAY_OBJ) { return(evaluator.newError("argument to 'push' must be ARRAY. got={0}", args[0].Type())); } Object.Array arr = (Object.Array)args[0]; int length = arr.Elements.Count; List <Object.Object> newElements = new List <Object.Object>(new Object.Object[length + 1]); for (int i = 0; i < length; i++) { newElements[i] = arr.Elements[i]; } newElements[length] = args[1]; return(new Object.Array { Elements = newElements }); }
static Object.Object rest(List <Object.Object> args) { if (args.Count != 1) { return(evaluator.newError("wrong number of arguments. got={0}, want=1", args.Count.ToString())); } if (args[0].Type() != Object._ObjectType.ARRAY_OBJ) { return(evaluator.newError("argument to 'rest' must be ARRAY. got={0}", args[0].Type())); } Object.Array arr = (Object.Array)args[0]; int length = arr.Elements.Count; if (length > 0) { List <Object.Object> newElements = new List <Object.Object>(new Object.Object[length - 1]); for (int i = 1; i < length; i++) { newElements[i - 1] = arr.Elements[i]; } return(new Object.Array { Elements = newElements }); } return(evaluator.NULL); }
static Object.Object evalArrayIndexExpression(Object.Object array, Object.Object index) { Object.Array arrayObject = (Object.Array)array; long idx = ((Object.Integer)index).Value; long max = (long)(arrayObject.Elements.Count - 1); if (idx < 0 || idx > max) { return(NULL); } return(arrayObject.Elements[(int)idx]); }
static error executeArrayIndex(Object.Object array, Object.Object index) { Object.Array arrayOject = (Object.Array)array; long i = ((Object.Integer)index).Value; long max = (long)(arrayOject.Elements.Count - 1); if (i < 0 || i > max) { return(push(Null)); } return(push(arrayOject.Elements[(int)i])); }
static Object.Object first(List <Object.Object> args) { if (args.Count != 1) { return(evaluator.newError("wrong number of arguments. got={0}, want=1", args.Count.ToString())); } if (args[0].Type() != Object._ObjectType.ARRAY_OBJ) { return(evaluator.newError("argument to 'first' must be ARRAY. got={0}", args[0].Type())); } Object.Array arr = (Object.Array)args[0]; if (arr.Elements.Count > 0) { return(arr.Elements[0]); } return(evaluator.NULL); }