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

ruby-changes:22975

From: marcandre <ko1@a...>
Date: Thu, 15 Mar 2012 06:10:52 +0900 (JST)
Subject: [ruby-changes:22975] marcandRe: r35024 (trunk): * include/ruby/intern.h: Add rb_check_arity, rb_error_arity [#6085]

marcandre	2012-03-15 06:10:34 +0900 (Thu, 15 Mar 2012)

  New Revision: 35024

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=35024

  Log:
    * include/ruby/intern.h: Add rb_check_arity, rb_error_arity [#6085]
    
    * array.c: Use rb_check_arity / rb_error_arity
    
    * class.c: ditto
    
    * enumerator.c: ditto
    
    * eval.c: ditto
    
    * file.c: ditto
    
    * hash.c: ditto
    
    * numeric.c: ditto
    
    * proc.c: ditto
    
    * process.c: ditto
    
    * random.c: ditto
    
    * re.c: ditto
    
    * signal.c: ditto
    
    * string.c: ditto
    
    * struct.c: ditto
    
    * transcode.c: ditto
    
    * vm_eval.c: ditto
    
    * vm_insnhelper.c: ditto & implementation of rb_error_arity
    
    * test/ruby/test_arity.rb: tests for above

  Modified files:
    trunk/ChangeLog
    trunk/array.c
    trunk/class.c
    trunk/enumerator.c
    trunk/eval.c
    trunk/file.c
    trunk/hash.c
    trunk/include/ruby/intern.h
    trunk/numeric.c
    trunk/proc.c
    trunk/process.c
    trunk/random.c
    trunk/re.c
    trunk/signal.c
    trunk/string.c
    trunk/struct.c
    trunk/test/ruby/test_arity.rb
    trunk/transcode.c
    trunk/vm_eval.c
    trunk/vm_insnhelper.c

Index: array.c
===================================================================
--- array.c	(revision 35023)
+++ array.c	(revision 35024)
@@ -1443,9 +1443,7 @@
 	rb_ary_splice(ary, beg, len, argv[2]);
 	return argv[2];
     }
-    if (argc != 2) {
-	rb_raise(rb_eArgError, "wrong number of arguments (%d for 2)", argc);
-    }
+    rb_check_arity(argc, 2, 2);
     rb_ary_modify_check(ary);
     if (FIXNUM_P(argv[0])) {
 	offset = FIX2LONG(argv[0]);
@@ -1480,9 +1478,7 @@
 {
     long pos;
 
-    if (argc < 1) {
-	rb_raise(rb_eArgError, "wrong number of arguments (at least 1)");
-    }
+    rb_check_arity(argc, 1, UNLIMITED_ARGUMENTS);
     rb_ary_modify_check(ary);
     if (argc == 1) return ary;
     pos = NUM2LONG(argv[0]);
@@ -3902,9 +3898,7 @@
     if (OPTHASH_GIVEN_P(opts)) {
 	randgen = rb_hash_lookup2(opts, sym_random, randgen);
     }
-    if (argc > 0) {
-	rb_raise(rb_eArgError, "wrong number of arguments (%d for 0)", argc);
-    }
+    rb_check_arity(argc, 0, 0);
     rb_ary_modify(ary);
     i = RARRAY_LEN(ary);
     ptr = RARRAY_PTR(ary);
Index: include/ruby/intern.h
===================================================================
--- include/ruby/intern.h	(revision 35023)
+++ include/ruby/intern.h	(revision 35024)
@@ -256,6 +256,12 @@
 const char *rb_sourcefile(void);
 VALUE rb_check_funcall(VALUE, ID, int, VALUE*);
 
+NORETURN(void rb_error_arity(int, int, int));
+#define rb_check_arity(argc, min, max) do { \
+  if (((argc) < (min)) || ((argc) > (max) && (max) != UNLIMITED_ARGUMENTS)) \
+    rb_error_arity(argc, min, max); \
+  } while(0)
+
 #if defined(NFDBITS) && defined(HAVE_RB_FD_INIT)
 typedef struct {
     int maxfd;
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 35023)
+++ ChangeLog	(revision 35024)
@@ -1,3 +1,52 @@
+Thu Mar 15 06:08:06 2012  Marc-Andre Lafortune  <ruby-core@m...>
+
+	* include/ruby/intern.h: Add rb_check_arity, rb_error_arity [#6085]
+
+	* array.c: Use rb_check_arity / rb_error_arity
+
+	* class.c: ditto
+
+	* enumerator.c: ditto
+
+	* eval.c: ditto
+
+	* file.c: ditto
+
+	* hash.c: ditto
+
+	* numeric.c: ditto
+
+	* proc.c: ditto
+
+	* process.c: ditto
+
+	* random.c: ditto
+
+	* re.c: ditto
+
+	* signal.c: ditto
+
+	* string.c: ditto
+
+	* struct.c: ditto
+
+	* transcode.c: ditto
+
+	* vm_eval.c: ditto
+
+	* vm_insnhelper.c: ditto & implementation of rb_error_arity
+
+	* test/ruby/test_arity.rb: tests for above
+
+Thu Mar 15 06:08:05 2012  Marc-Andre Lafortune  <ruby-core@m...>
+
+	* vm_insnhelper.c: improve number of arguments error in case of
+	  optional parameters (issue #6085)
+
+	* include/ruby/intern.h: define UNLIMITED_ARGUMENTS
+
+	* test/ruby/test_arity.rb:  test for above
+
 Thu Mar 15 00:58:04 2012  Shugo Maeda  <shugo@r...>
 
 	* enumerator.c (enumerable_lazy): fix the documentation of
Index: re.c
===================================================================
--- re.c	(revision 35023)
+++ re.c	(revision 35024)
@@ -2904,9 +2904,7 @@
     const char *ptr;
     long len;
 
-    if (argc == 0 || argc > 3) {
-	rb_raise(rb_eArgError, "wrong number of arguments (%d for 1..3)", argc);
-    }
+    rb_check_arity(argc, 1, 3);
     if (TYPE(argv[0]) == T_REGEXP) {
 	VALUE re = argv[0];
 
Index: enumerator.c
===================================================================
--- enumerator.c	(revision 35023)
+++ enumerator.c	(revision 35024)
@@ -352,7 +352,7 @@
 
     if (argc == 0) {
 	if (!rb_block_given_p())
-	    rb_raise(rb_eArgError, "wrong number of argument (0 for 1+)");
+	    rb_check_arity(argc, 1, UNLIMITED_ARGUMENTS);
 
 	recv = generator_init(generator_allocate(rb_cGenerator), rb_block_proc());
     }
Index: string.c
===================================================================
--- string.c	(revision 35023)
+++ string.c	(revision 35024)
@@ -2727,7 +2727,7 @@
 {
     VALUE re, result;
     if (argc < 1)
-       rb_raise(rb_eArgError, "wrong number of arguments (%d for 1..2)", argc);
+	rb_check_arity(argc, 1, 2);
     re = argv[0];
     argv[0] = str;
     result = rb_funcall2(get_pat(re, 0), rb_intern("match"), argc, argv);
@@ -3237,9 +3237,7 @@
 	}
 	return rb_str_substr(str, NUM2LONG(argv[0]), NUM2LONG(argv[1]));
     }
-    if (argc != 1) {
-	rb_raise(rb_eArgError, "wrong number of arguments (%d for 1..2)", argc);
-    }
+    rb_check_arity(argc, 1, 2);
     return rb_str_aref(str, argv[0]);
 }
 
@@ -3467,9 +3465,7 @@
 	}
 	return argv[2];
     }
-    if (argc != 2) {
-	rb_raise(rb_eArgError, "wrong number of arguments (%d for 2..3)", argc);
-    }
+    rb_check_arity(argc, 2, 3);
     return rb_str_aset(str, argv[0], argv[1]);
 }
 
@@ -3532,9 +3528,7 @@
     VALUE buf[3];
     int i;
 
-    if (argc < 1 || 2 < argc) {
-	rb_raise(rb_eArgError, "wrong number of arguments (%d for 1..2)", argc);
-    }
+    rb_check_arity(argc, 1, 2);
     for (i=0; i<argc; i++) {
 	buf[i] = argv[i];
     }
@@ -3593,11 +3587,13 @@
     int tainted = 0;
     int untrusted = 0;
     long plen;
+    int min_arity = rb_block_given_p() ? 1 : 2;
 
-    if (argc == 1 && rb_block_given_p()) {
+    rb_check_arity(argc, min_arity, 2);
+    if (argc == 1) {
 	iter = 1;
     }
-    else if (argc == 2) {
+    else {
 	repl = argv[1];
 	hash = rb_check_convert_type(argv[1], T_HASH, "Hash", "to_hash");
 	if (NIL_P(hash)) {
@@ -3606,9 +3602,6 @@
 	if (OBJ_TAINTED(repl)) tainted = 1;
 	if (OBJ_UNTRUSTED(repl)) untrusted = 1;
     }
-    else {
-	rb_raise(rb_eArgError, "wrong number of arguments (%d for 1..2)", argc);
-    }
 
     pat = get_pat(argv[0], 1);
     str_modifiable(str);
@@ -3761,7 +3754,7 @@
 	if (OBJ_TAINTED(repl)) tainted = 1;
 	break;
       default:
-	rb_raise(rb_eArgError, "wrong number of arguments (%d for 1..2)", argc);
+	rb_check_arity(argc, 1, 2);
     }
 
     pat = get_pat(argv[0], 1);
@@ -4120,9 +4113,7 @@
     if (argc == 2) {
 	return str_byte_substr(str, NUM2LONG(argv[0]), NUM2LONG(argv[1]));
     }
-    if (argc != 1) {
-	rb_raise(rb_eArgError, "wrong number of arguments (%d for 1..2)", argc);
-    }
+    rb_check_arity(argc, 1, 2);
     return str_byte_aref(str, argv[0]);
 }
 
@@ -5394,9 +5385,7 @@
     int i, ascompat, cr;
 
     if (RSTRING_LEN(str) == 0 || !RSTRING_PTR(str)) return Qnil;
-    if (argc < 1) {
-	rb_raise(rb_eArgError, "wrong number of arguments (at least 1)");
-    }
+    rb_check_arity(argc, 1, UNLIMITED_ARGUMENTS);
     for (i=0; i<argc; i++) {
 	VALUE s = argv[i];
 
@@ -5640,9 +5629,7 @@
     int i;
     int ascompat;
 
-    if (argc < 1) {
-	rb_raise(rb_eArgError, "wrong number of arguments (at least 1)");
-    }
+    rb_check_arity(argc, 1, UNLIMITED_ARGUMENTS);
     for (i=0; i<argc; i++) {
 	VALUE tstr = argv[i];
 	unsigned char c;
Index: vm_eval.c
===================================================================
--- vm_eval.c	(revision 35023)
+++ vm_eval.c	(revision 35024)
@@ -87,16 +87,12 @@
 	break;
       }
       case VM_METHOD_TYPE_ATTRSET: {
-	if (argc != 1) {
-	    rb_raise(rb_eArgError, "wrong number of arguments (%d for 1)", argc);
-	}
+	rb_check_arity(argc, 1, 1);
 	val = rb_ivar_set(recv, def->body.attr.id, argv[0]);
 	break;
       }
       case VM_METHOD_TYPE_IVAR: {
-	if (argc != 0) {
-	    rb_raise(rb_eArgError, "wrong number of arguments (%d for 0)", argc);
-	}
+	rb_check_arity(argc, 0, 0);
 	val = rb_attr_get(recv, def->body.attr.id);
 	break;
       }
@@ -1283,37 +1279,25 @@
 specific_eval(int argc, VALUE *argv, VALUE klass, VALUE self)
 {
     if (rb_block_given_p()) {
-	if (argc > 0) {
-	    rb_raise(rb_eArgError, "wrong number of arguments (%d for 0)", argc);
-	}
+	rb_check_arity(argc, 0, 0);
 	return yield_under(klass, self, Qundef);
     }
     else {
 	const char *file = "(eval)";
 	int line = 1;
 
-	if (argc == 0) {
-	    rb_raise(rb_eArgError, "block not supplied");
+	rb_check_arity(argc, 1, 3);
+	if (rb_safe_level() >= 4) {
+	    StringValue(argv[0]);
 	}
 	else {
-	    if (rb_safe_level() >= 4) {
-		StringValue(argv[0]);
-	    }
-	    else {
-		SafeStringValue(argv[0]);
-	    }
-	    if (argc > 3) {
-		const char *name = rb_id2name(rb_frame_callee());
-		rb_raise(rb_eArgError,
-			 "wrong number of arguments: %s(src) or %s{..}",
-			 name, name);
-	    }
-	    if (argc > 2)
-		line = NUM2INT(argv[2]);
-	    if (argc > 1) {
-		file = StringValuePtr(argv[1]);
-	    }
+	    SafeStringValue(argv[0]);
 	}
+	if (argc > 2)
+	    line = NUM2INT(argv[2]);
+	if (argc > 1) {
+	    file = StringValuePtr(argv[1]);
+	}
 	return eval_under(klass, self, argv[0], file, line);
     }
 }
Index: proc.c
===================================================================
--- proc.c	(revision 35023)
+++ proc.c	(revision 35024)
@@ -1350,7 +1350,8 @@
 	id = rb_to_id(argv[0]);
 	body = rb_block_lambda();
     }
-    else if (argc == 2) {
+    else {
+	rb_check_arity(argc, 1, 2);
 	id = rb_to_id(argv[0]);
 	body = argv[1];
 	if (!rb_obj_is_method(body) && !rb_obj_is_proc(body)) {
@@ -1359,9 +1360,6 @@
 		     rb_obj_classname(body));
 	}
     }
-    else {
-	rb_raise(rb_eArgError, "wrong number of arguments (%d for 1)", argc);
-    }
 
     if (rb_obj_is_method(body)) {
 	struct METHOD *method = (struct METHOD *)DATA_PTR(body);
Index: struct.c
===================================================================
--- struct.c	(revision 35023)
+++ struct.c	(revision 35024)
@@ -776,9 +776,7 @@
     VALUE result;
     long i;
 
-    if (argc > 0) {
-	rb_raise(rb_eArgError, "wrong number of arguments (%d for 0)", argc);
-    }
+    rb_check_arity(argc, 0, 0);
     RETURN_ENUMERATOR(s, 0, 0);
     result = rb_ary_new();
     for (i = 0; i < RSTRUCT_LEN(s); i++) {
Index: eval.c
===================================================================
--- eval.c	(revision 35023)
+++ eval.c	(revision 35024)
@@ -555,7 +555,7 @@
 	}
 	break;
       default:
-	rb_raise(rb_eArgError, "wrong number of arguments (%d for 0..3)", argc);
+	rb_check_arity(argc, 0, 3);
 	break;
     }
     if (argc > 0) {
@@ -889,10 +889,7 @@
     st_table *const_tbl = 0, *method_tbl = 0;
     int i = 0;
 
-    if (argc < 1 || argc > 3) {
-      wrong_args:
-	rb_raise(rb_eArgError, "wrong number of arguments (%d for 1)", argc);
-    }
+    rb_check_arity(argc, 1, 3);
     module = argv[i++];
 
     switch (TYPE(module)) {
@@ -922,7 +919,7 @@
 	}
 	methods = tmp;
     }
-    if (i < argc) goto wrong_args;
+    if (i < argc) rb_raise(rb_eArgError, "wrong arguments");
     if (!NIL_P(constants)) {
 	VALUE hash = rb_hash_new();
 	for (i = 0; i < RARRAY_LEN(constants); ++i) {
@@ -1015,9 +1012,7 @@
 {
     int i;
 
-    if (argc == 0) {
-	rb_raise(rb_eArgError, "wrong number of arguments (at least 1)");
-    }
+    rb_check_arity(argc, 1, UNLIMITED_ARGUMENTS);
     for (i = 0; i < argc; i++)
 	Check_Type(argv[i], T_MODULE);
     while (argc--) {
Index: class.c
===================================================================
--- class.c	(revision 35023)
+++ class.c	(revision 35024)
@@ -1655,12 +1655,7 @@
     return argc;
 
   argc_error:
-    if (0 < n_opt)
-	rb_raise(rb_eArgError, "wrong number of arguments (%d for %d..%d%s)",
-		 argc, n_mand, n_mand + n_opt, f_var ? "+" : "");
-    else
-	rb_raise(rb_eArgError, "wrong number of arguments (%d for %d%s)",
-		 argc, n_mand, f_var ? "+" : "");
+    rb_error_arity(argc, n_mand, f_var ? UNLIMITED_ARGUMENTS : n_mand + n_opt);
 }
 
 /*!
Index: process.c
===================================================================
--- process.c	(revision 35023)
+++ process.c	(revision 35024)
@@ -1721,9 +1721,7 @@
     int i;
     const char *name = 0;
 
-    if (argc == 0) {
-	rb_raise(rb_eArgError, "wrong number of arguments");
-    }
+    rb_check_arity(argc, 1, UNLIMITED_ARGUMENTS);
 
     prog = 0;
     tmp = rb_check_array_type(argv[0]);
@@ -3385,12 +3383,10 @@
     if (argc == 0) {
 	rb_thread_sleep_forever();
     }
-    else if (argc == 1) {
+    else {
+	rb_check_arity(argc, 0, 1);
 	rb_thread_wait_for(rb_time_interval(argv[0]));
     }
-    else {
-	rb_raise(rb_eArgError, "wrong number of arguments (%d for 0..1)", argc);
-    }
 
     end = time(0) - beg;
 
Index: hash.c
===================================================================
--- hash.c	(revision 35023)
+++ hash.c	(revision 35024)
@@ -323,9 +323,7 @@
 
     rb_hash_modify(hash);
     if (rb_block_given_p()) {
-	if (argc > 0) {
-	    rb_raise(rb_eArgError, "wrong number of arguments");
-	}
+	rb_check_arity(argc, 0, 0);
 	ifnone = rb_block_proc();
 	default_proc_arity_check(ifnone);
 	RHASH_IFNONE(hash) = ifnone;
Index: numeric.c
===================================================================
--- numeric.c	(revision 35023)
+++ numeric.c	(revision 35024)
@@ -1765,13 +1765,9 @@
 	step = INT2FIX(1);
     }
     else {
-	if (argc == 2) {
-	    to = argv[0];
-	    step = argv[1];
-	}
-	else {
-	    rb_raise(rb_eArgError, "wrong number of arguments (%d for 1..2)", argc);
-	}
+	rb_check_arity(argc, 1, 2);
+	to = argv[0];
+	step = argv[1];
 	if (rb_equal(step, INT2FIX(0))) {
 	    rb_raise(rb_eArgError, "step can't be 0");
 	}
@@ -2357,7 +2353,7 @@
       case 1:
 	break;
       default:
-	rb_raise(rb_eArgError, "wrong number of arguments (%d for 0..1)", argc);
+	rb_check_arity(argc, 0, 1);
 	break;
     }
     enc = rb_to_encoding(argv[0]);
Index: vm_insnhelper.c
===================================================================
--- vm_insnhelper.c	(revision 35023)
+++ vm_insnhelper.c	(revision 35024)
@@ -163,6 +163,11 @@
     rb_raise(rb_eArgError, msg, RSTRING_PTR(keys));
 }
 
+void
+rb_error_arity(int argc, int min, int max) {
+    rb_exc_raise(rb_arg_error_new(argc, min, max));
+}
+
 #define VM_CALLEE_SETUP_ARG(ret, th, iseq, orig_argc, orig_argv, block) \
     if (LIKELY((iseq)->arg_simple & 0x01)) { \
 	/* simple check */ \
@@ -354,10 +359,7 @@
 {
     /* printf("len: %d, argc: %d\n", len, argc); */
 
-    if (len >= 0 && argc != len) {
-	rb_raise(rb_eArgError, "wrong number of arguments(%d for %d)",
-		 argc, len);
-    }
+    if (len >= 0) rb_check_arity(argc, len, len);
 
     switch (len) {
       case -2:
@@ -581,17 +583,13 @@
 		break;
 	      }
 	      case VM_METHOD_TYPE_ATTRSET:{
-		if (num != 1) {
-		    rb_raise(rb_eArgError, "wrong number of arguments (%d for 1)", num);
-		}
+		rb_check_arity(num, 1, 1);
 		val = rb_ivar_set(recv, me->def->body.attr.id, *(cfp->sp - 1));
 		cfp->sp -= 2;
 		break;
 	      }
 	      case VM_METHOD_TYPE_IVAR:{
-		if (num != 0) {
-		    rb_raise(rb_eArgError, "wrong number of arguments (%d for 0)", num);
-		}
+		rb_check_arity(num, 0, 0);
 		val = rb_attr_get(recv, me->def->body.attr.id);
 		cfp->sp -= 1;
 		break;
Index: test/ruby/test_arity.rb
===================================================================
--- test/ruby/test_arity.rb	(revision 35023)
+++ test/ruby/test_arity.rb	(revision 35024)
@@ -58,4 +58,14 @@
     assert_equal :ok,  p.call(1, 2, 3)
     assert_equal :ok,  p.call
   end
+
+  def test_message_change_issue_6085
+    assert_equal "3 for 1..2",  err_mess{ SignalException.new(1, "", nil) }
+    assert_equal "1 for 0",     err_mess{ Hash.new(1){} }
+    assert_equal "3 for 1..2",  err_mess{ Module.send :define_method, 1, 2, 3 }
+    assert_equal "1 for 2",     err_mess{ "".sub!(//) }
+    assert_equal "0 for 1..2",  err_mess{ "".sub!{} }
+    assert_equal "0 for 1+",    err_mess{ exec }
+    assert_equal "0 for 1+",    err_mess{ Struct.new }
+  end
 end
Index: signal.c
===================================================================
--- signal.c	(revision 35023)
+++ signal.c	(revision 35024)
@@ -231,10 +231,7 @@
 	if (!NIL_P(sig)) argnum = 2;
 	else sig = argv[0];
     }
-    if (argc < 1 || argnum < argc) {
-	rb_raise(rb_eArgError, "wrong number of arguments (%d for %d)",
-		 argc, argnum);
-    }
+    rb_check_arity(argc, 1, argnum);
     if (argnum == 2) {
 	signo = NUM2INT(sig);
 	if (signo < 0 || signo > NSIG) {
@@ -346,8 +343,8 @@
     const char *s;
 
     rb_secure(2);
-    if (argc < 2)
-	rb_raise(rb_eArgError, "wrong number of arguments (%d for at least 2)", argc);
+    rb_check_arity(argc, 2, UNLIMITED_ARGUMENTS);
+
     switch (TYPE(argv[0])) {
       case T_FIXNUM:
 	sig = FIX2INT(argv[0]);
@@ -931,9 +928,7 @@
     struct trap_arg arg;
 
     rb_secure(2);
-    if (argc < 1 || argc > 2) {
-	rb_raise(rb_eArgError, "wrong number of arguments (%d for 1..2)", argc);
-    }
+    rb_check_arity(argc, 1, 2);
 
     arg.sig = trap_signm(argv[0]);
     if (reserved_signal_p(arg.sig)) {
Index: file.c
===================================================================
--- file.c	(revision 35023)
+++ file.c	(revision 35024)
@@ -2581,7 +2581,7 @@
 	omask = umask(NUM2INT(argv[0]));
     }
     else {
-	rb_raise(rb_eArgError, "wrong number of arguments (%d for 0..1)", argc);
+	rb_check_arity(argc, 0, 1);
     }
     return INT2FIX(omask);
 }
@@ -4180,7 +4180,7 @@
 
     rb_secure(2);
     n+=1;
-    if (n != argc) rb_raise(rb_eArgError, "wrong number of arguments (%d for %d)", argc, n);
+    rb_check_arity(argc, n, n);
     for (i=1; i<n; i++) {
 	switch (TYPE(argv[i])) {
 	  case T_STRING:
@@ -4258,7 +4258,7 @@
 {
     int cmd;
 
-    if (argc == 0) rb_raise(rb_eArgError, "wrong number of arguments (0 for 2..3)");
+    if (argc == 0) rb_check_arity(argc, 2, 3);
     cmd = NUM2CHR(argv[0]);
     if (cmd == 0) goto unknown;
     if (strchr("bcdefgGkloOprRsSuwWxXz", cmd)) {
Index: random.c
===================================================================
--- random.c	(revision 35023)
+++ random.c	(revision 35024)
@@ -1168,8 +1168,8 @@
     if (argc == 0) {
 	return rb_float_new(genrand_real(&rnd->mt));
     }
-    else if (argc != 1) {
-	rb_raise(rb_eArgError, "wrong number of arguments (%d for 0..1)", argc);
+    else {
+	rb_check_arity(argc, 0, 1);
     }
     vmax = argv[0];
     if (NIL_P(vmax)) {
Index: transcode.c
===================================================================
--- transcode.c	(revision 35023)
+++ transcode.c	(revision 35024)
@@ -2665,9 +2665,7 @@
     const char *sname, *dname;
     int dencidx;
 
-    if (argc <0 || argc > 2) {
-	rb_raise(rb_eArgError, "wrong number of arguments (%d for 0..2)", argc);
-    }
+    rb_check_arity(argc, 0, 2);
 
     if (argc == 0) {
 	arg1 = rb_enc_default_internal();
@@ -2984,8 +2982,7 @@
 
     if (!NIL_P(flags_v)) {
 	if (!NIL_P(opt)) {
-	    rb_raise(rb_eArgError, "wrong number of arguments (%d for 2..3)",
-		argc + 1);
+	    rb_error_arity(argc + 1, 2, 3);
 	}
         ecflags = NUM2INT(rb_to_int(flags_v));
         ecopts = Qnil;
@@ -3672,8 +3669,7 @@
 
     if (!NIL_P(flags_v)) {
 	if (!NIL_P(opt)) {
-	    rb_raise(rb_eArgError, "wrong number of arguments (%d for 2..5)",
-		argc + 1);
+	    rb_error_arity(argc + 1, 2, 5);
 	}
 	flags = NUM2INT(rb_to_int(flags_v));
     }

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

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