Ejemplo n.º 1
0
    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()));
    }
Ejemplo n.º 2
0
    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));
    }
Ejemplo n.º 3
0
    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);
        }
    }
Ejemplo n.º 4
0
    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());
    }
Ejemplo n.º 5
0
    protected override DyObject LengthOp(ExecutionContext ctx, DyObject self)
    {
        var seq = DyIterator.ToEnumerable(ctx, self);

        return(ctx.HasErrors ? Nil : DyInteger.Get(seq.Count()));
    }