From 58949cf8f3b5df1b410bc71c57b56c1c74ed9092 Mon Sep 17 00:00:00 2001 From: matz Date: Thu, 21 May 2009 22:35:43 +0000 Subject: * array.c (rb_ary_slice_bang): avoid call of rb_scan_args() unless it's really necessary. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@23525 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 5 +++++ array.c | 12 +++++++++--- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index fd54c360fe..4a93348140 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Fri May 22 05:09:43 2009 Yukihiro Matsumoto + + * array.c (rb_ary_slice_bang): avoid call of rb_scan_args() unless + it's really necessary. + Thu May 21 22:17:52 2009 Nobuyoshi Nakada * template/id.h.tmpl, id.h (enum ruby_method_ids): added some IDs. diff --git a/array.c b/array.c index 1696171051..5c3112b94f 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: -- cgit v1.2.3