protected override DyObject AddOp(ExecutionContext ctx, DyObject left, DyObject right) { var arr = new List <DyObject>(); arr.AddRange(DyIterator.ToEnumerable(ctx, left)); if (ctx.HasErrors) { return(Nil); } arr.AddRange(DyIterator.ToEnumerable(ctx, right)); if (ctx.HasErrors) { return(Nil); } return(new DyTuple(arr.ToArray())); }
internal static void WriteAllLines(ExecutionContext ctx, string path, DyObject value, int?encoding = null) { var enc = GetEncoding(ctx, encoding); var seq = DyIterator.ToEnumerable(ctx, value).ToArray(); if (ctx.HasErrors) { return; } var strings = seq.Select(s => s.ToString(ctx).Value).ToArray(); if (ctx.HasErrors) { return; } ctx.Handle(() => File.WriteAllLines(path, strings, enc)); }
protected override DyObject GetOp(ExecutionContext ctx, DyObject self, DyObject index) { if (index is not DyInteger ix) { return(ctx.IndexOutOfRange(index)); } var i = (int)ix.Value; try { var iter = DyIterator.ToEnumerable(ctx, self); return(i < 0 ? iter.ElementAt(^ -i) : iter.ElementAt(i)); } catch (ArgumentOutOfRangeException) { ctx.Error = new(DyError.IndexOutOfRange, index); return(Nil); } }
internal static DyObject[] ConcatValues(ExecutionContext ctx, params DyObject[] values) { if (values is null) { return(Array.Empty <DyObject>()); } var arr = new List <DyObject>(); for (var i = 0; i < values.Length; i++) { var seq = DyIterator.ToEnumerable(ctx, values[i]); if (ctx.HasErrors) { break; } arr.AddRange(seq); } return(arr.ToArray()); }
protected override DyObject LengthOp(ExecutionContext ctx, DyObject self) { var seq = DyIterator.ToEnumerable(ctx, self); return(ctx.HasErrors ? Nil : DyInteger.Get(seq.Count())); }