summaryrefslogtreecommitdiff
path: root/string.c
diff options
context:
space:
mode:
authormarcandre <marcandre@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-03-14 21:10:34 +0000
committermarcandre <marcandre@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-03-14 21:10:34 +0000
commit7316302483182a73136b00ad368585e551cbd86f (patch)
treed32188711001581a5e7e21d6669f6c4e91fcb497 /string.c
parent35c356ea72094dbbf1397d8f5acd065bd23d1177 (diff)
* 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 git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@35024 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'string.c')
-rw-r--r--string.c37
1 files changed, 12 insertions, 25 deletions
diff --git a/string.c b/string.c
index 6355070324..f2694a8947 100644
--- a/string.c
+++ b/string.c
@@ -2727,7 +2727,7 @@ rb_str_match_m(int argc, VALUE *argv, VALUE str)
{
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 @@ rb_str_aref_m(int argc, VALUE *argv, VALUE str)
}
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 @@ rb_str_aset_m(int argc, VALUE *argv, VALUE str)
}
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 @@ rb_str_slice_bang(int argc, VALUE *argv, VALUE str)
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 @@ rb_str_sub_bang(int argc, VALUE *argv, VALUE str)
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 @@ rb_str_sub_bang(int argc, VALUE *argv, VALUE str)
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 @@ str_gsub(int argc, VALUE *argv, VALUE str, int bang)
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 @@ rb_str_byteslice(int argc, VALUE *argv, VALUE str)
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 @@ rb_str_delete_bang(int argc, VALUE *argv, VALUE str)
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 @@ rb_str_count(int argc, VALUE *argv, VALUE str)
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;