summaryrefslogtreecommitdiffstats
path: root/array.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-05-21 22:35:43 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-05-21 22:35:43 +0000
commit2be56d8bb832ce5963c3cd735d159e41d944e1c6 (patch)
tree140469c550385ed68641750f5724568b5937a7e2 /array.c
parent64bd694def013cae8daa6db58fff738b5cfdcc41 (diff)
downloadruby-2be56d8bb832ce5963c3cd735d159e41d944e1c6.tar.gz
ruby-2be56d8bb832ce5963c3cd735d159e41d944e1c6.tar.xz
ruby-2be56d8bb832ce5963c3cd735d159e41d944e1c6.zip
* array.c (rb_ary_slice_bang): avoid call of rb_scan_args() unless
it's really necessary. git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@23525 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'array.c')
-rw-r--r--array.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/array.c b/array.c
index 169617105..5c3112b94 100644
--- a/array.c
+++ b/array.c
@@ -2175,9 +2175,9 @@ rb_ary_slice_bang(int argc, VALUE *argv, VALUE ary)
long pos, len, orig_len;
rb_ary_modify_check(ary);
- if (rb_scan_args(argc, argv, "11", &arg1, &arg2) == 2) {
- pos = NUM2LONG(arg1);
- len = NUM2LONG(arg2);
+ if (argc == 2) {
+ pos = NUM2LONG(argv[0]);
+ len = NUM2LONG(argv[1]);
delete_pos_len:
if (len < 0) return Qnil;
orig_len = RARRAY_LEN(ary);
@@ -2196,6 +2196,12 @@ rb_ary_slice_bang(int argc, VALUE *argv, VALUE ary)
return arg2;
}
+ if (argc != 1) {
+ /* error report */
+ rb_scan_args(argc, argv, "11", NULL, NULL);
+ }
+ arg1 = argv[0];
+
if (!FIXNUM_P(arg1)) {
switch (rb_range_beg_len(arg1, &pos, &len, RARRAY_LEN(ary), 0)) {
case Qtrue: