Beispiel #1
0
        public override object Calln(Class last_class, object recv, Frame caller, ArgList args)
        {
            object idx, rest = null;

            Array argv = args.ToRubyArray();

            if (Class.rb_scan_args(caller, argv, 1, 1, false) == 2)
                rest = args[1];
            idx = args[0];

            if (rest != null || !(idx is int) || ((int)idx) < 0)
            {
                return rb_ary_aref.singleton.Call(last_class, match_to_a.singleton.Call0(last_class, recv, caller, null), caller, null, argv);
            }

            return Regexp.rb_reg_nth_match((int)idx, (Match)recv);
        }
Beispiel #2
0
        public override object Calln(Class last_class, object recv, Frame caller, ArgList args)
        {
            object str;
            int flags;

            if (Class.rb_scan_args(caller, args.ToRubyArray(), 1, 1, false) == 2)
                flags = Numeric.rb_num2long(args[1], caller);
            else
                flags = 0;
            str = args[0];

            return Dir.rb_push_glob(caller, args.block, str, flags);
        }
Beispiel #3
0
        public override object Calln(Class last_class, object recv, Frame caller, ArgList args)
        {
            int flags;
            if (Class.rb_scan_args(caller, args.ToRubyArray(), 2, 1, false) == 3)
                flags = Numeric.rb_num2long(args[2], caller);
            else
                flags = 0;

            string pattern = String.StringValue(args[0], caller);
            string path = String.StringValue(args[1], caller);

            return (File.fnmatch(pattern, path, flags) == 0);
        }
Beispiel #4
0
        public override object Calln(Class last_class, object recv, Frame caller, ArgList args)
        {
            string fname;

            int argc = Class.rb_scan_args(caller, args.ToRubyArray(), 1, 1, false);
            fname = String.StringValue(args[0], caller);

            IO io = IO.rb_io_open(fname, "r", caller);
            if (io == null)
                return null;

            object result = null;
            try
            {
                if (argc == 2)
                    result = rb_io_readlines.singleton.Call1(last_class, io, caller, args.block, args[1]);
                else
                    result = rb_io_readlines.singleton.Call0(last_class, io, caller, args.block);
            }
            finally
            {
                IO.rb_io_close(io);
            }

            return result;
        }
Beispiel #5
0
        public override object Calln(Class last_class, object recv, Frame caller, ArgList args)
        {
            string fname;
            int offset = -1;
            object sep = null;

            Class.rb_scan_args(caller, args.ToRubyArray(), 1, 2, false);

            if (args.Length > 1)
                sep = args[1];
            if (args.Length > 2)
                offset = Numeric.rb_num2long(args[2], caller);
            fname = String.StringValue(args[0], caller);

            IO io = IO.rb_io_open(fname, "r", caller);
            if (io == null)
                return null;

            if (offset > -1)
            {
                IO.rb_io_seek(caller, io, offset, IO.SEEK_SET);
            }

            object result = null;
            try
            {
                result = io_read.singleton.Call(last_class, io, caller, args.block, new Array(new object[] { null, sep }));
            }
            finally
            {
                IO.rb_io_close(io);
            }

            return result;
        }
Beispiel #6
0
        public override object Calln(Class last_class, object recv, Frame caller, ArgList args)
        {
            string fname;
            foreach_arg arg = new foreach_arg();

            if (Class.rb_scan_args(caller, args.ToRubyArray(), 1, 1, false) == 2)
                arg.sep = String.StringValue(args[1], caller);
            fname = String.StringValue(args[0], caller);

            if (args.Length == 1)
            {
                arg.sep = String.StringValue(IO.rb_default_rs.value, caller);
            }
            
            arg.io = IO.rb_io_open(fname, "r", caller);
            if (arg.io == null)
                return null;

            object result = null;
            try
            {
                result = io_s_foreach(caller, args.block, arg);
            }
            finally
            {
                IO.rb_io_close(arg.io);
            }

            return result;
        }
Beispiel #7
0
        public override object Calln(Class last_class, object recv, Frame caller, ArgList args)
        {
            string mode, pname;
            object port;

            if (Class.rb_scan_args(caller, args.ToRubyArray(), 1, 1, false) == 1)
                mode = "r";
            else
            {
                if (args[1] is int)
                    mode = IO.rb_io_modenum_mode(caller, (int)args[1]);
                else
                    mode = IO.rb_io_flags_mode(caller, IO.rb_io_mode_flags(caller, String.StringValue(args[1], caller)));
            }
            pname = String.StringValue(args[0], caller);

            port = IO.pipe_open(null, pname, mode, caller);
            if (port == null)
            {
                /* child */
                if (args.block != null)
                {
                    Proc.rb_yield(args.block, caller, new object[] { null });
                    ((System.IO.Stream)IO.rb_stdout.value).Flush();
                    ((System.IO.Stream)IO.rb_stderr.value).Flush();

                    try
                    {
                        System.Diagnostics.Process.GetCurrentProcess().Kill();
                    }
                    catch { }
                }
                return null;
            }

            ((Basic)port).my_class = ((Basic)recv).my_class;
            if (args.block != null)
            {
                object result;
                try
                {
                    result = Proc.rb_yield(args.block, caller, new object[] { port });
                }
                finally
                {
                    IO.io_close(port, caller);
                }

                return result;
            }
            return port;
        }
Beispiel #8
0
        public override object Calln(Class last_class, object recv, Frame caller, ArgList args)
        {
            object str;
            object rs;

            if (args.Length == 0)
            {
                rs = IO.rb_rs.value;
            }
            else
            {
                Class.rb_scan_args(caller, args.ToRubyArray(), 1, 0, false);
                rs = args[0];
            }

            while ((str = IO.rb_io_getline(rs, recv, caller)) != null)
            {
                Proc.rb_yield(args.block, caller, new object[] { str });
            }

            return recv;
        }
Beispiel #9
0
        public override object Calln(Class last_class, object recv, Frame caller, ArgList args)
        {
            IO file = (IO)recv;

            string fname, nmode = null;
            string mode;
            IO fptr;

            Eval.rb_secure(4, caller);
            if (Class.rb_scan_args(caller, args.ToRubyArray(), 1, 1, false) == 1)
            {
                object tmp = IO.rb_io_check_io(args[0], caller);
                if (tmp != null)
                {
                    return IO.io_reopen(recv, tmp, caller);
                }
            }

            fname = String.StringValue(args[0], caller);
            IO.rb_io_taint_check(caller, recv);
            fptr = file;

            if (nmode != null)
            {
                fptr.mode = IO.rb_io_mode_flags(caller, nmode);
            }

            if (fptr._path != null)
            {
                fptr._path = null;
            }

            fptr._path = fname;
            mode = IO.rb_io_flags_mode(caller, fptr.mode);
            if (fptr.f == null)
            {
                fptr.f = new FileStream(fptr._path, IO.modenumToFileMode(fptr.mode), IO.modenumToFileAccess(fptr.mode));
                if (fptr.f2 != null)
                {
                    fptr.f2.Close();
                }
                return recv;
            }

            try
            {
                fptr.f.Close();
                fptr.f = new FileStream(fptr._path, IO.modenumToFileMode(fptr.mode), IO.modenumToFileAccess(fptr.mode));
            }
            catch (System.IO.IOException ioe)
            {
                throw SystemCallError.rb_sys_fail(fptr._path, ioe, caller).raise(caller);
            }

            if (fptr.f2 != null)
            {
                try
                {
                    fptr.f2.Close();
                    fptr.f2 = new FileStream(fptr._path, IO.modenumToFileMode(fptr.mode), FileAccess.Write);
                }
                catch (System.IO.IOException ioe)
                {
                    throw SystemCallError.rb_sys_fail(fptr._path, ioe, caller).raise(caller);
                }
            }

            return recv;
        }
Beispiel #10
0
        public override object Calln(Class last_class, object recv, Frame caller, ArgList args)
        {
            Class.rb_scan_args(caller, args.ToRubyArray(), 1, 1, false);

            Class klass0 = (Class)recv;
            bool write = false;

            if (args.Length == 2)
                write = Eval.Test(args[1]);

            klass0.attr(Symbol.rb_to_id(caller, args[0]), true, write, caller);
            return null;
        }