internal object ASet(object[] argv) { if (argv.Length == 3) { Replace((int)argv[0], (int)argv[1], argv[2]); return(argv[2]); } if (argv.Length != 2) { throw new ArgumentException("wrong # of argments(" + argv.Length.ToString() + " for 2)"); } // Range object check CheckModify(); int idx = RInteger.ToInt(ruby, argv[0]); if (idx < 0) { idx += ptr.Count; if (idx < 0) { throw new eIndexError(String.Format("index {0} out of array", idx - ptr.Count)); } } if (idx >= ptr.Count) { ptr.Insert(idx, argv[1]); } else { ptr[idx] = argv[1]; } return(argv[1]); }
static internal object match_end(RBasic r, params object[] args) { NetRuby ruby = r.ruby; int i = RInteger.ToInt(r.ruby, args[0]); return(((RMatchData)r).End(i)); }
static internal object match_aref(RBasic r, params object[] args) { object[] argv = new object[2]; NetRuby rb = r.ruby; rb.ScanArgs(args, "11", argv); if (argv[1] != null) { return(((RMatchData)r).ToArray().ARef(args)); } return(((RMatchData)r)[RInteger.ToInt(rb, args[0])]); }
internal object ARef(object[] argv) { int beg, len; object[] args = new object[2]; if (ruby.ScanArgs(argv, "11", args) == 2) { beg = RInteger.ToInt(ruby, args[0]); len = RInteger.ToInt(ruby, args[1]); if (beg < 0) { beg += ptr.Count; } return(Subseq(beg, len)); } int offset; if (args[0] is int) { offset = (int)args[0]; } else if (args[0] is RBignum) { throw new eIndexError("index too big"); } else { // Range object check offset = RInteger.ToInt(ruby, args[0]); } if (offset < 0) { offset = ptr.Count + offset; } if (offset < 0 || ptr.Count <= offset) { return(null); } return(ptr[offset]); }