ruby-changes:4201
From: ko1@a...
Date: Wed, 5 Mar 2008 14:22:45 +0900 (JST)
Subject: [ruby-changes:4201] matz - Ruby:r15691 (trunk): * numeric.c (fix_to_s): avoid rb_scan_args() when no argument
matz 2008-03-05 14:22:17 +0900 (Wed, 05 Mar 2008) New Revision: 15691 Modified files: trunk/ChangeLog trunk/array.c trunk/bignum.c trunk/class.c trunk/enum.c trunk/eval_jump.c trunk/gc.c trunk/io.c trunk/numeric.c trunk/object.c trunk/process.c trunk/random.c trunk/range.c trunk/re.c trunk/string.c Log: * 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. http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/numeric.c?r1=15691&r2=15690&diff_format=u http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/class.c?r1=15691&r2=15690&diff_format=u http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/string.c?r1=15691&r2=15690&diff_format=u http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/array.c?r1=15691&r2=15690&diff_format=u http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=15691&r2=15690&diff_format=u http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/io.c?r1=15691&r2=15690&diff_format=u http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/eval_jump.c?r1=15691&r2=15690&diff_format=u http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/bignum.c?r1=15691&r2=15690&diff_format=u http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/range.c?r1=15691&r2=15690&diff_format=u http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/gc.c?r1=15691&r2=15690&diff_format=u http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/enum.c?r1=15691&r2=15690&diff_format=u http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/re.c?r1=15691&r2=15690&diff_format=u http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/random.c?r1=15691&r2=15690&diff_format=u http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/object.c?r1=15691&r2=15690&diff_format=u http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/process.c?r1=15691&r2=15690&diff_format=u Index: array.c =================================================================== --- array.c (revision 15690) +++ array.c (revision 15691) @@ -290,7 +290,7 @@ 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 @@ } 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 @@ 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++) { if (RTEST(rb_yield(RARRAY_PTR(ary)[i]))) { return LONG2NUM(i); } } + return Qnil; } - else { - for (i=0; i<RARRAY_LEN(ary); i++) { - if (rb_equal(RARRAY_PTR(ary)[i], val)) - return LONG2NUM(i); - } + rb_scan_args(argc, argv, "01", &val); + for (i=0; i<RARRAY_LEN(ary); i++) { + if (rb_equal(RARRAY_PTR(ary)[i], val)) + return LONG2NUM(i); } return Qnil; } @@ -915,7 +915,7 @@ VALUE val; long i = RARRAY_LEN(ary); - if (rb_scan_args(argc, argv, "01", &val) == 0) { + if (argc == 0) { RETURN_ENUMERATOR(ary, 0, 0); while (i--) { if (RTEST(rb_yield(RARRAY_PTR(ary)[i]))) @@ -924,14 +924,14 @@ i = RARRAY_LEN(ary); } } + return Qnil; } - else { - while (i--) { - if (rb_equal(RARRAY_PTR(ary)[i], val)) - return LONG2NUM(i); - if (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; Index: re.c =================================================================== --- re.c (revision 15690) +++ re.c (revision 15691) @@ -3141,7 +3141,7 @@ { 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; Index: ChangeLog =================================================================== --- ChangeLog (revision 15690) +++ ChangeLog (revision 15691) @@ -1,3 +1,24 @@ +Wed Mar 5 14:00:49 2008 Yukihiro Matsumoto <matz@r...> + + * 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 <matz@r...> * lib/debug.rb: require 'continuation' to implement "restart" Index: enum.c =================================================================== --- enum.c (revision 15690) +++ enum.c (revision 15691) @@ -573,12 +573,11 @@ { 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)); } Index: string.c =================================================================== --- string.c (revision 15690) +++ string.c (revision 15691) @@ -667,7 +667,7 @@ { 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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; Index: object.c =================================================================== --- object.c (revision 15690) +++ object.c (revision 15691) @@ -1343,10 +1343,11 @@ 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; Index: io.c =================================================================== --- io.c (revision 15690) +++ io.c (revision 15691) @@ -4642,10 +4642,12 @@ { 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; Index: range.c =================================================================== --- range.c (revision 15690) +++ range.c (revision 15691) @@ -300,17 +300,20 @@ 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"); Index: eval_jump.c =================================================================== --- eval_jump.c (revision 15690) +++ eval_jump.c (revision 15691) @@ -107,10 +107,12 @@ 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; Index: gc.c =================================================================== --- gc.c (revision 15690) +++ gc.c (revision 15691) @@ -1837,9 +1837,12 @@ 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); } Index: class.c =================================================================== --- class.c (revision 15690) +++ class.c (revision 15691) @@ -731,10 +731,12 @@ 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)) { Index: process.c =================================================================== --- process.c (revision 15690) +++ process.c (revision 15691) @@ -756,11 +756,11 @@ 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 @@ 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 @@ 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; Index: numeric.c =================================================================== --- numeric.c (revision 15690) +++ numeric.c (revision 15691) @@ -1263,7 +1263,7 @@ 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,13 +2008,16 @@ 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); } Index: bignum.c =================================================================== --- bignum.c (revision 15690) +++ bignum.c (revision 15691) @@ -987,12 +987,15 @@ 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); } Index: random.c =================================================================== --- random.c (revision 15690) +++ random.c (revision 15691) @@ -332,9 +332,12 @@ 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; -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/