diff --git a/ChangeLog b/ChangeLog index 06d4deb9d4..a77d84fa43 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 5564f697a1..2eef3ed387 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 649b258c53..3a7dbe83b0 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 a172ae6611..32a35662bb 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 ee392ff737..5e04acbf29 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 dbc3794a59..f3eb30fc56 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 928c312bea..bd1a13cfaf 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 f7aec96660..8d2f8e088a 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 d1626d0842..3398c37c15 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 03cff7b4a3..f7d96e238f 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 f3ece07dee..87db221df3 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 6d20190404..8487277efb 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 e3dd44290a..94e8182a87 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 49424eb632..34eeaa543c 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 b07337ca42..7add4f0361 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;