From 39787ea14db33dd4265d7f6271cd2d59ccaeff37 Mon Sep 17 00:00:00 2001 From: matz Date: Wed, 5 Mar 2008 05:22:17 +0000 Subject: [PATCH] * numeric.c (fix_to_s): avoid rb_scan_args() when no argument given. * bignum.c (rb_big_to_s): ditto. * enum.c (enum_first): ditto. * eval_jump.c (rb_f_catch): ditto. * io.c (rb_obj_display): ditto. * class.c (rb_obj_singleton_methods): ditto. * object.c (rb_class_initialize): ditto. * random.c (rb_f_srand): ditto. * range.c (range_step): ditto. * re.c (rb_reg_s_last_match): ditto. * string.c (rb_str_to_i): ditto. * string.c (rb_str_each_line): ditto. * string.c (rb_str_chomp_bang): ditto. * string.c (rb_str_sum): ditto. * string.c (str_modifiable): declare inline. * string.c (str_independent): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@15691 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 21 +++++++++++++++++++++ array.c | 32 ++++++++++++++++---------------- bignum.c | 9 ++++++--- class.c | 4 +++- enum.c | 3 +-- eval_jump.c | 4 +++- gc.c | 5 ++++- io.c | 6 ++++-- numeric.c | 11 +++++++---- object.c | 3 ++- process.c | 6 +++--- random.c | 5 ++++- range.c | 17 ++++++++++------- re.c | 2 +- string.c | 32 +++++++++++++++++++++----------- 15 files changed, 106 insertions(+), 54 deletions(-) diff --git a/ChangeLog b/ChangeLog index 06d4deb9d45d66..a77d84fa4349e1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,24 @@ +Wed Mar 5 14:00:49 2008 Yukihiro Matsumoto + + * numeric.c (fix_to_s): avoid rb_scan_args() when no argument + given. + * bignum.c (rb_big_to_s): ditto. + * enum.c (enum_first): ditto. + * eval_jump.c (rb_f_catch): ditto. + * io.c (rb_obj_display): ditto. + * class.c (rb_obj_singleton_methods): ditto. + * object.c (rb_class_initialize): ditto. + * random.c (rb_f_srand): ditto. + * range.c (range_step): ditto. + * re.c (rb_reg_s_last_match): ditto. + * string.c (rb_str_to_i): ditto. + * string.c (rb_str_each_line): ditto. + * string.c (rb_str_chomp_bang): ditto. + * string.c (rb_str_sum): ditto. + + * string.c (str_modifiable): declare inline. + * string.c (str_independent): ditto. + Wed Mar 5 11:50:32 2008 Yukihiro Matsumoto * lib/debug.rb: require 'continuation' to implement "restart" diff --git a/array.c b/array.c index 5564f697a18da0..2eef3ed38791b1 100644 --- a/array.c +++ b/array.c @@ -290,7 +290,7 @@ rb_ary_initialize(int argc, VALUE *argv, VALUE ary) VALUE size, val; rb_ary_modify(ary); - if (rb_scan_args(argc, argv, "02", &size, &val) == 0) { + if (argc == 0) { if (RARRAY_PTR(ary) && !ARY_SHARED_P(ary)) { free(RARRAY(ary)->ptr); } @@ -300,7 +300,7 @@ rb_ary_initialize(int argc, VALUE *argv, VALUE ary) } return ary; } - + rb_scan_args(argc, argv, "02", &size, &val); if (argc == 1 && !FIXNUM_P(size)) { val = rb_check_array_type(size); if (!NIL_P(val)) { @@ -877,19 +877,19 @@ rb_ary_index(int argc, VALUE *argv, VALUE ary) VALUE val; long i; - if (rb_scan_args(argc, argv, "01", &val) == 0) { + if (argc == 0) { RETURN_ENUMERATOR(ary, 0, 0); for (i=0; i RARRAY_LEN(ary)) { - i = RARRAY_LEN(ary); - } + rb_scan_args(argc, argv, "01", &val); + while (i--) { + if (rb_equal(RARRAY_PTR(ary)[i], val)) + return LONG2NUM(i); + if (i > RARRAY_LEN(ary)) { + i = RARRAY_LEN(ary); } } return Qnil; diff --git a/bignum.c b/bignum.c index 649b258c53e439..3a7dbe83b08b54 100644 --- a/bignum.c +++ b/bignum.c @@ -987,12 +987,15 @@ rb_big2str(VALUE x, int base) static VALUE rb_big_to_s(int argc, VALUE *argv, VALUE x) { - VALUE b; int base; - rb_scan_args(argc, argv, "01", &b); if (argc == 0) base = 10; - else base = NUM2INT(b); + else { + VALUE b; + + rb_scan_args(argc, argv, "01", &b); + base = NUM2INT(b); + } return rb_big2str(x, base); } diff --git a/class.c b/class.c index a172ae661158ae..32a35662bb41f7 100644 --- a/class.c +++ b/class.c @@ -731,10 +731,12 @@ rb_obj_singleton_methods(int argc, VALUE *argv, VALUE obj) VALUE recur, ary, klass; st_table *list; - rb_scan_args(argc, argv, "01", &recur); if (argc == 0) { recur = Qtrue; } + else { + rb_scan_args(argc, argv, "01", &recur); + } klass = CLASS_OF(obj); list = st_init_numtable(); if (klass && FL_TEST(klass, FL_SINGLETON)) { diff --git a/enum.c b/enum.c index ee392ff73780ec..5e04acbf298e1b 100644 --- a/enum.c +++ b/enum.c @@ -573,12 +573,11 @@ enum_first(int argc, VALUE *argv, VALUE obj) { VALUE n, ary[2]; - rb_scan_args(argc, argv, "01", &n); - if (argc == 0) { ary[0] = ary[1] = Qnil; } else { + rb_scan_args(argc, argv, "01", &n); ary[0] = n; ary[1] = rb_ary_new2(NUM2LONG(n)); } diff --git a/eval_jump.c b/eval_jump.c index dbc3794a59d323..f3eb30fc56b417 100644 --- a/eval_jump.c +++ b/eval_jump.c @@ -107,10 +107,12 @@ rb_f_catch(int argc, VALUE *argv) rb_thread_t *th = GET_THREAD(); rb_control_frame_t *saved_cfp = th->cfp; - rb_scan_args(argc, argv, "01", &tag); if (argc == 0) { tag = rb_obj_alloc(rb_cObject); } + else { + rb_scan_args(argc, argv, "01", &tag); + } PUSH_TAG(); th->tag->tag = tag; diff --git a/gc.c b/gc.c index 928c312bea35d2..bd1a13cfaf1932 100644 --- a/gc.c +++ b/gc.c @@ -1837,9 +1837,12 @@ os_each_obj(int argc, VALUE *argv, VALUE os) VALUE of; rb_secure(4); - if (rb_scan_args(argc, argv, "01", &of) == 0) { + if (argc == 0) { of = 0; } + else { + rb_scan_args(argc, argv, "01", &of); + } RETURN_ENUMERATOR(os, 1, &of); return os_obj_of(of); } diff --git a/io.c b/io.c index f7aec96660c236..8d2f8e088aafb0 100644 --- a/io.c +++ b/io.c @@ -4642,10 +4642,12 @@ rb_obj_display(int argc, VALUE *argv, VALUE self) { VALUE out; - if (rb_scan_args(argc, argv, "01", &out) == 0) { + if (argc == 0) { out = rb_stdout; } - + else { + rb_scan_args(argc, argv, "01", &out); + } rb_io_write(out, self); return Qnil; diff --git a/numeric.c b/numeric.c index d1626d0842f4b1..3398c37c152f0b 100644 --- a/numeric.c +++ b/numeric.c @@ -1263,7 +1263,7 @@ flo_round(int argc, VALUE *argv, VALUE num) int ndigits = 0, i; long val; - if (rb_scan_args(argc, argv, "01", &nd) == 1) { + if (argc > 0 && rb_scan_args(argc, argv, "01", &nd) == 1) { ndigits = NUM2INT(nd); } number = RFLOAT_VALUE(num); @@ -2008,12 +2008,15 @@ rb_fix2str(VALUE x, int base) static VALUE fix_to_s(int argc, VALUE *argv, VALUE x) { - VALUE b; int base; - rb_scan_args(argc, argv, "01", &b); if (argc == 0) base = 10; - else base = NUM2INT(b); + else { + VALUE b; + + rb_scan_args(argc, argv, "01", &b); + base = NUM2INT(b); + } return rb_fix2str(x, base); } diff --git a/object.c b/object.c index 03cff7b4a392b1..f7d96e238f7848 100644 --- a/object.c +++ b/object.c @@ -1343,10 +1343,11 @@ rb_class_initialize(int argc, VALUE *argv, VALUE klass) if (RCLASS_SUPER(klass) != 0) { rb_raise(rb_eTypeError, "already initialized class"); } - if (rb_scan_args(argc, argv, "01", &super) == 0) { + if (argc == 0) { super = rb_cObject; } else { + rb_scan_args(argc, argv, "01", &super); rb_check_inheritable(super); } RCLASS_SUPER(klass) = super; diff --git a/process.c b/process.c index f3ece07dee7f4b..87db221df3b53b 100644 --- a/process.c +++ b/process.c @@ -756,11 +756,11 @@ proc_wait(int argc, VALUE *argv) rb_secure(2); flags = 0; - rb_scan_args(argc, argv, "02", &vpid, &vflags); if (argc == 0) { pid = -1; } else { + rb_scan_args(argc, argv, "02", &vpid, &vflags); pid = NUM2PIDT(vpid); if (argc == 2 && !NIL_P(vflags)) { flags = NUM2UINT(vflags); @@ -1518,7 +1518,7 @@ rb_f_exit_bang(int argc, VALUE *argv, VALUE obj) int istatus; rb_secure(4); - if (rb_scan_args(argc, argv, "01", &status) == 1) { + if (argc > 0 && rb_scan_args(argc, argv, "01", &status) == 1) { switch (status) { case Qtrue: istatus = EXIT_SUCCESS; @@ -1599,7 +1599,7 @@ rb_f_exit(int argc, VALUE *argv) int istatus; rb_secure(4); - if (rb_scan_args(argc, argv, "01", &status) == 1) { + if (argc > 0 && rb_scan_args(argc, argv, "01", &status) == 1) { switch (status) { case Qtrue: istatus = EXIT_SUCCESS; diff --git a/random.c b/random.c index 6d201904041568..8487277efb884e 100644 --- a/random.c +++ b/random.c @@ -332,9 +332,12 @@ rb_f_srand(int argc, VALUE *argv, VALUE obj) VALUE seed, old; rb_secure(4); - if (rb_scan_args(argc, argv, "01", &seed) == 0) { + if (argc == 0) { seed = random_seed(); } + else { + rb_scan_args(argc, argv, "01", &seed); + } old = rand_init(seed); return old; diff --git a/range.c b/range.c index e3dd44290a870e..94e8182a87beb1 100644 --- a/range.c +++ b/range.c @@ -300,17 +300,20 @@ range_step(int argc, VALUE *argv, VALUE range) b = RANGE_BEG(range); e = RANGE_END(range); - if (rb_scan_args(argc, argv, "01", &step) == 0) { + if (argc == 0) { step = INT2FIX(1); unit = 1; } - else if (FIXNUM_P(step)) { - unit = NUM2LONG(step); - } else { - VALUE tmp = rb_to_int(step); - unit = rb_cmpint(tmp, step, INT2FIX(0)); - step = tmp; + rb_scan_args(argc, argv, "01", &step); + if (FIXNUM_P(step)) { + unit = NUM2LONG(step); + } + else { + VALUE tmp = rb_to_int(step); + unit = rb_cmpint(tmp, step, INT2FIX(0)); + step = tmp; + } } if (unit < 0) { rb_raise(rb_eArgError, "step can't be negative"); diff --git a/re.c b/re.c index 49424eb6326b78..34eeaa543caa03 100644 --- a/re.c +++ b/re.c @@ -3141,7 +3141,7 @@ rb_reg_s_last_match(int argc, VALUE *argv) { VALUE nth; - if (rb_scan_args(argc, argv, "01", &nth) == 1) { + if (argc > 0 && rb_scan_args(argc, argv, "01", &nth) == 1) { VALUE match = rb_backref_get(); int n; if (NIL_P(match)) return Qnil; diff --git a/string.c b/string.c index b07337ca42dbd1..7add4f03611987 100644 --- a/string.c +++ b/string.c @@ -667,7 +667,7 @@ rb_str_init(int argc, VALUE *argv, VALUE str) { VALUE orig; - if (rb_scan_args(argc, argv, "01", &orig) == 1) + if (argc > 0 && rb_scan_args(argc, argv, "01", &orig) == 1) rb_str_replace(str, orig); return str; } @@ -950,7 +950,7 @@ rb_str_format_m(VALUE str, VALUE arg) return rb_str_format(1, &arg, str); } -static void +static inline void str_modifiable(VALUE str) { if (FL_TEST(str, STR_TMPLOCK)) { @@ -961,7 +961,7 @@ str_modifiable(VALUE str) rb_raise(rb_eSecurityError, "Insecure: can't modify string"); } -static int +static inline int str_independent(VALUE str) { str_modifiable(str); @@ -3620,13 +3620,15 @@ rb_str_include(VALUE str, VALUE arg) static VALUE rb_str_to_i(int argc, VALUE *argv, VALUE str) { - VALUE b; int base; - rb_scan_args(argc, argv, "01", &b); if (argc == 0) base = 10; - else base = NUM2INT(b); + else { + VALUE b; + rb_scan_args(argc, argv, "01", &b); + base = NUM2INT(b); + } if (base < 0) { rb_raise(rb_eArgError, "invalid radix %d", base); } @@ -5028,9 +5030,12 @@ rb_str_each_line(int argc, VALUE *argv, VALUE str) VALUE line; int n; - if (rb_scan_args(argc, argv, "01", &rs) == 0) { + if (argc == 0) { rs = rb_rs; } + else { + rb_scan_args(argc, argv, "01", &rs); + } RETURN_ENUMERATOR(str, argc, argv); if (NIL_P(rs)) { rb_yield(str); @@ -5281,7 +5286,7 @@ rb_str_chomp_bang(int argc, VALUE *argv, VALUE str) if (len == 0) return Qnil; p = RSTRING_PTR(str); e = p + len; - if (rb_scan_args(argc, argv, "01", &rs) == 0) { + if (argc == 0) { rs = rb_rs; if (rs == rb_default_rs) { smart_chomp: @@ -5324,6 +5329,9 @@ rb_str_chomp_bang(int argc, VALUE *argv, VALUE str) return str; } } + else { + rb_scan_args(argc, argv, "01", &rs); + } if (NIL_P(rs)) return Qnil; StringValue(rs); rslen = RSTRING_LEN(rs); @@ -5812,11 +5820,13 @@ rb_str_sum(int argc, VALUE *argv, VALUE str) char *ptr, *p, *pend; long len; - if (rb_scan_args(argc, argv, "01", &vbits) == 0) { + if (argc == 0) { bits = 16; } - else bits = NUM2INT(vbits); - + else { + rb_scan_args(argc, argv, "01", &vbits); + bits = NUM2INT(vbits); + } ptr = p = RSTRING_PTR(str); len = RSTRING_LEN(str); pend = p + len;