[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]