summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-12-06 07:49:24 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-12-06 07:49:24 +0000
commit98e65d9d921ec810bbae2233b80e865e76dd8502 (patch)
tree16ce055f3f2dfcedef55c4649e5eb3d7bf707040
parent0cd28199e50039e9425f10b880c436d3ecacde0b (diff)
Prefer rb_check_arity when 0 or 1 arguments
Especially over checking argc then calling rb_scan_args just to raise an ArgumentError. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66238 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--enum.c17
-rw-r--r--enumerator.c7
-rw-r--r--error.c2
-rw-r--r--gc.c31
-rw-r--r--io.c7
-rw-r--r--iseq.c3
-rw-r--r--proc.c3
-rw-r--r--range.c7
-rw-r--r--rational.c16
-rw-r--r--signal.c2
-rw-r--r--string.c25
-rw-r--r--thread.c38
-rw-r--r--thread_sync.c2
-rw-r--r--time.c10
-rw-r--r--transcode.c5
-rw-r--r--variable.c22
-rw-r--r--vm.c3
-rw-r--r--vm_eval.c11
18 files changed, 72 insertions, 139 deletions
diff --git a/enum.c b/enum.c
index f446403b48..a739d335a9 100644
--- a/enum.c
+++ b/enum.c
@@ -2009,11 +2009,11 @@ enum_min_by(int argc, VALUE *argv, VALUE obj)
struct MEMO *memo;
VALUE num;
- rb_scan_args(argc, argv, "01", &num);
+ rb_check_arity(argc, 0, 1);
RETURN_SIZED_ENUMERATOR(obj, argc, argv, enum_size);
- if (!NIL_P(num))
+ if (argc && !NIL_P(num = argv[0]))
return rb_nmin_run(obj, num, 1, 0, 0);
memo = MEMO_NEW(Qundef, Qnil, 0);
@@ -2116,11 +2116,11 @@ enum_max_by(int argc, VALUE *argv, VALUE obj)
struct MEMO *memo;
VALUE num;
- rb_scan_args(argc, argv, "01", &num);
+ rb_check_arity(argc, 0, 1);
RETURN_SIZED_ENUMERATOR(obj, argc, argv, enum_size);
- if (!NIL_P(num))
+ if (argc && !NIL_P(num = argv[0]))
return rb_nmin_run(obj, num, 1, 1, 0);
memo = MEMO_NEW(Qundef, Qnil, 0);
@@ -2971,10 +2971,10 @@ enum_cycle(int argc, VALUE *argv, VALUE obj)
VALUE nv = Qnil;
long n, i, len;
- rb_scan_args(argc, argv, "01", &nv);
+ rb_check_arity(argc, 0, 1);
RETURN_SIZED_ENUMERATOR(obj, argc, argv, enum_cycle_size);
- if (NIL_P(nv)) {
+ if (!argc || NIL_P(nv = argv[0])) {
n = -1;
}
else {
@@ -3944,11 +3944,8 @@ enum_sum(int argc, VALUE* argv, VALUE obj)
VALUE beg, end;
int excl;
- if (rb_scan_args(argc, argv, "01", &memo.v) == 0)
- memo.v = LONG2FIX(0);
-
+ memo.v = (rb_check_arity(argc, 0, 1) == 0) ? LONG2FIX(0) : argv[0];
memo.block_given = rb_block_given_p();
-
memo.n = 0;
memo.r = Qundef;
diff --git a/enumerator.c b/enumerator.c
index e84785a6b8..615f933778 100644
--- a/enumerator.c
+++ b/enumerator.c
@@ -604,12 +604,9 @@ enumerator_with_index(int argc, VALUE *argv, VALUE obj)
{
VALUE memo;
- rb_scan_args(argc, argv, "01", &memo);
+ rb_check_arity(argc, 0, 1);
RETURN_SIZED_ENUMERATOR(obj, argc, argv, enumerator_enum_size);
- if (NIL_P(memo))
- memo = INT2FIX(0);
- else
- memo = rb_to_int(memo);
+ memo = (!argc || NIL_P(memo = argv[0])) ? INT2FIX(0) : rb_to_int(memo);
return enumerator_block_call(obj, enumerator_with_index_i, (VALUE)MEMO_NEW(memo, 0, 0));
}
diff --git a/error.c b/error.c
index b4ba64b57a..2e2cc25ac2 100644
--- a/error.c
+++ b/error.c
@@ -946,7 +946,7 @@ exc_initialize(int argc, VALUE *argv, VALUE exc)
{
VALUE arg;
- rb_scan_args(argc, argv, "01", &arg);
+ arg = (!rb_check_arity(argc, 0, 1) ? Qnil : argv[0]);
return exc_init(exc, arg);
}
diff --git a/gc.c b/gc.c
index 4de27892e8..a8e7192e25 100644
--- a/gc.c
+++ b/gc.c
@@ -2722,12 +2722,7 @@ os_each_obj(int argc, VALUE *argv, VALUE os)
{
VALUE of;
- if (argc == 0) {
- of = 0;
- }
- else {
- rb_scan_args(argc, argv, "01", &of);
- }
+ of = (!rb_check_arity(argc, 0, 1) ? 0 : argv[0]);
RETURN_ENUMERATOR(os, 1, &of);
return os_obj_of(of);
}
@@ -3487,9 +3482,10 @@ count_objects(int argc, VALUE *argv, VALUE os)
size_t freed = 0;
size_t total = 0;
size_t i;
- VALUE hash;
+ VALUE hash = Qnil;
- if (rb_scan_args(argc, argv, "01", &hash) == 1) {
+ if (rb_check_arity(argc, 0, 1) == 1) {
+ hash = argv[0];
if (!RB_TYPE_P(hash, T_HASH))
rb_raise(rb_eTypeError, "non-hash given");
}
@@ -7077,13 +7073,13 @@ gc_latest_gc_info(int argc, VALUE *argv, VALUE self)
rb_objspace_t *objspace = &rb_objspace;
VALUE arg = Qnil;
- if (rb_scan_args(argc, argv, "01", &arg) == 1) {
+ if (rb_check_arity(argc, 0, 1) == 1) {
+ arg = argv[0];
if (!SYMBOL_P(arg) && !RB_TYPE_P(arg, T_HASH)) {
rb_raise(rb_eTypeError, "non-hash or symbol given");
}
}
-
- if (arg == Qnil) {
+ else {
arg = rb_hash_new();
}
@@ -7452,7 +7448,8 @@ gc_stat(int argc, VALUE *argv, VALUE self)
{
VALUE arg = Qnil;
- if (rb_scan_args(argc, argv, "01", &arg) == 1) {
+ if (rb_check_arity(argc, 0, 1) == 1) {
+ arg = argv[0];
if (SYMBOL_P(arg)) {
size_t value = gc_stat_internal(arg);
return SIZET2NUM(value);
@@ -7461,8 +7458,7 @@ gc_stat(int argc, VALUE *argv, VALUE self)
rb_raise(rb_eTypeError, "non-hash or symbol given");
}
}
-
- if (arg == Qnil) {
+ else {
arg = rb_hash_new();
}
gc_stat_internal(arg);
@@ -9455,12 +9451,7 @@ gc_profile_report(int argc, VALUE *argv, VALUE self)
{
VALUE out;
- if (argc == 0) {
- out = rb_stdout;
- }
- else {
- rb_scan_args(argc, argv, "01", &out);
- }
+ out = (!rb_check_arity(argc, 0, 1) ? rb_stdout : argv[0]);
gc_profile_dump_on(out, rb_io_write);
return Qnil;
diff --git a/io.c b/io.c
index ac35e1ee4f..1a22d34c50 100644
--- a/io.c
+++ b/io.c
@@ -7878,12 +7878,7 @@ rb_obj_display(int argc, VALUE *argv, VALUE self)
{
VALUE out;
- if (argc == 0) {
- out = rb_stdout;
- }
- else {
- rb_scan_args(argc, argv, "01", &out);
- }
+ out = (!rb_check_arity(argc, 0, 1) ? rb_stdout : argv[0]);
rb_io_write(out, self);
return Qnil;
diff --git a/iseq.c b/iseq.c
index 0b5f7c14e4..8e890d4a67 100644
--- a/iseq.c
+++ b/iseq.c
@@ -3183,8 +3183,7 @@ rb_iseqw_local_variables(VALUE iseqval)
static VALUE
iseqw_to_binary(int argc, VALUE *argv, VALUE self)
{
- VALUE opt;
- rb_scan_args(argc, argv, "01", &opt);
+ VALUE opt = !rb_check_arity(argc, 0, 1) ? Qnil : argv[0];
return rb_iseq_ibf_dump(iseqw_check(self), opt);
}
diff --git a/proc.c b/proc.c
index 50e09d76e7..fb286fa42b 100644
--- a/proc.c
+++ b/proc.c
@@ -2993,8 +2993,7 @@ proc_curry(int argc, const VALUE *argv, VALUE self)
int sarity, max_arity, min_arity = rb_proc_min_max_arity(self, &max_arity);
VALUE arity;
- rb_scan_args(argc, argv, "01", &arity);
- if (NIL_P(arity)) {
+ if (rb_check_arity(argc, 0, 1) == 0 || NIL_P(arity = argv[0])) {
arity = INT2FIX(min_arity);
}
else {
diff --git a/range.c b/range.c
index 9661feb718..c30852e500 100644
--- a/range.c
+++ b/range.c
@@ -397,12 +397,7 @@ range_step(int argc, VALUE *argv, VALUE range)
b = RANGE_BEG(range);
e = RANGE_END(range);
- if (argc == 0) {
- step = INT2FIX(1);
- }
- else {
- rb_scan_args(argc, argv, "01", &step);
- }
+ step = (!rb_check_arity(argc, 0, 1) ? INT2FIX(1) : argv[0]);
if (!rb_block_given_p()) {
if (rb_obj_is_kind_of(b, rb_cNumeric) && (NIL_P(e) || rb_obj_is_kind_of(e, rb_cNumeric))) {
diff --git a/rational.c b/rational.c
index b320ed5501..076d42707f 100644
--- a/rational.c
+++ b/rational.c
@@ -1385,10 +1385,10 @@ f_round_common(int argc, VALUE *argv, VALUE self, VALUE (*func)(VALUE))
{
VALUE n, b, s;
- if (argc == 0)
+ if (rb_check_arity(argc, 0, 1) == 0)
return (*func)(self);
- rb_scan_args(argc, argv, "01", &n);
+ n = argv[0];
if (!k_integer_p(n))
rb_raise(rb_eTypeError, "not an integer");
@@ -1711,14 +1711,13 @@ nurat_rationalize(int argc, VALUE *argv, VALUE self)
{
VALUE e, a, b, p, q;
- if (argc == 0)
+ if (rb_check_arity(argc, 0, 1) == 0)
return self;
if (nurat_negative_p(self))
return rb_rational_uminus(nurat_rationalize(argc, argv, rb_rational_uminus(self)));
- rb_scan_args(argc, argv, "01", &e);
- e = f_abs(e);
+ e = f_abs(argv[0]);
a = f_sub(self, e);
b = f_add(self, e);
@@ -2283,16 +2282,13 @@ rb_flt_rationalize(VALUE flt)
static VALUE
float_rationalize(int argc, VALUE *argv, VALUE self)
{
- VALUE e;
double d = RFLOAT_VALUE(self);
if (d < 0.0)
return rb_rational_uminus(float_rationalize(argc, argv, DBL2NUM(-d)));
- rb_scan_args(argc, argv, "01", &e);
-
- if (argc != 0) {
- return rb_flt_rationalize_with_prec(self, e);
+ if (rb_check_arity(argc, 0, 1)) {
+ return rb_flt_rationalize_with_prec(self, argv[0]);
}
else {
return rb_flt_rationalize(self);
diff --git a/signal.c b/signal.c
index 02c8393730..631fdae4e0 100644
--- a/signal.c
+++ b/signal.c
@@ -391,7 +391,7 @@ interrupt_init(int argc, VALUE *argv, VALUE self)
VALUE args[2];
args[0] = INT2FIX(SIGINT);
- rb_scan_args(argc, argv, "01", &args[1]);
+ args[1] = rb_check_arity(argc, 0, 1) ? argv[0] : Qnil;
return rb_call_super(2, args);
}
diff --git a/string.c b/string.c
index ea72c0be48..6a89343bef 100644
--- a/string.c
+++ b/string.c
@@ -5724,16 +5724,9 @@ rb_str_include(VALUE str, VALUE arg)
static VALUE
rb_str_to_i(int argc, VALUE *argv, VALUE str)
{
- int base;
+ int base = 10;
- if (argc == 0) base = 10;
- else {
- VALUE b;
-
- rb_scan_args(argc, argv, "01", &b);
- base = NUM2INT(b);
- }
- if (base < 0) {
+ if (rb_check_arity(argc, 0, 1) && (base = NUM2INT(argv[0])) < 0) {
rb_raise(rb_eArgError, "invalid radix %d", base);
}
return rb_str_to_inum(str, base, FALSE);
@@ -9369,20 +9362,14 @@ static VALUE
rb_str_sum(int argc, VALUE *argv, VALUE str)
{
VALUE vbits;
- int bits;
+ int bits = 16;
char *ptr, *p, *pend;
long len;
VALUE sum = INT2FIX(0);
unsigned long sum0 = 0;
- if (argc == 0) {
- bits = 16;
- }
- else {
- rb_scan_args(argc, argv, "01", &vbits);
- bits = NUM2INT(vbits);
- if (bits < 0)
- bits = 0;
+ if (rb_check_arity(argc, 0, 1) && (bits = NUM2INT(argv[0])) < 0) {
+ bits = 0;
}
ptr = p = RSTRING_PTR(str);
len = RSTRING_LEN(str);
@@ -10397,7 +10384,7 @@ unicode_normalize_common(int argc, VALUE *argv, VALUE str, ID id)
UnicodeNormalizeRequired = 1;
}
argv2[0] = str;
- rb_scan_args(argc, argv, "01", &argv2[1]);
+ if (rb_check_arity(argc, 0, 1)) argv2[1] = argv[0];
return rb_funcallv(mUnicodeNormalize, id, argc+1, argv2);
}
diff --git a/thread.c b/thread.c
index d76f05aa41..faecec7a04 100644
--- a/thread.c
+++ b/thread.c
@@ -1111,19 +1111,18 @@ thread_join_m(int argc, VALUE *argv, VALUE self)
VALUE limit;
rb_hrtime_t rel, *to = 0;
- rb_scan_args(argc, argv, "01", &limit);
-
/*
* This supports INFINITY and negative values, so we can't use
* rb_time_interval right now...
*/
- switch (TYPE(limit)) {
- case T_NIL: break;
- case T_FIXNUM:
+ if (!rb_check_arity(argc, 0, 1) || NIL_P(argv[0])) {
+ /* unlimited */
+ }
+ else if (FIXNUM_P(limit = argv[0])) {
rel = rb_sec2hrtime(NUM2TIMET(limit));
to = &rel;
- break;
- default:
+ }
+ else {
to = double2hrtime(&rel, rb_num2dbl(limit));
}
@@ -2041,20 +2040,19 @@ rb_thread_pending_interrupt_p(int argc, VALUE *argv, VALUE target_thread)
if (rb_threadptr_pending_interrupt_empty_p(target_th)) {
return Qfalse;
}
+ if (rb_check_arity(argc, 0, 1)) {
+ VALUE err = argv[0];
+ if (!rb_obj_is_kind_of(err, rb_cModule)) {
+ rb_raise(rb_eTypeError, "class or module required for rescue clause");
+ }
+ if (rb_threadptr_pending_interrupt_include_p(target_th, err)) {
+ return Qtrue;
+ }
+ else {
+ return Qfalse;
+ }
+ }
else {
- if (argc == 1) {
- VALUE err;
- rb_scan_args(argc, argv, "01", &err);
- if (!rb_obj_is_kind_of(err, rb_cModule)) {
- rb_raise(rb_eTypeError, "class or module required for rescue clause");
- }
- if (rb_threadptr_pending_interrupt_include_p(target_th, err)) {
- return Qtrue;
- }
- else {
- return Qfalse;
- }
- }
return Qtrue;
}
}
diff --git a/thread_sync.c b/thread_sync.c
index e478a96b88..4a3cb2ad6a 100644
--- a/thread_sync.c
+++ b/thread_sync.c
@@ -517,7 +517,7 @@ mutex_sleep(int argc, VALUE *argv, VALUE self)
{
VALUE timeout;
- rb_scan_args(argc, argv, "01", &timeout);
+ timeout = rb_check_arity(argc, 0, 1) ? argv[0] : Qnil;
return rb_mutex_sleep(self, timeout);
}
diff --git a/time.c b/time.c
index f1cb7b6716..5c4a7f26b2 100644
--- a/time.c
+++ b/time.c
@@ -3764,9 +3764,8 @@ static VALUE
time_localtime_m(int argc, VALUE *argv, VALUE time)
{
VALUE off;
- rb_scan_args(argc, argv, "01", &off);
- if (!NIL_P(off)) {
+ if (rb_check_arity(argc, 0, 1) && !NIL_P(off = argv[0])) {
return time_zonelocal(time, off);
}
@@ -3881,9 +3880,8 @@ static VALUE
time_getlocaltime(int argc, VALUE *argv, VALUE time)
{
VALUE off;
- rb_scan_args(argc, argv, "01", &off);
- if (!NIL_P(off)) {
+ if (rb_check_arity(argc, 0, 1) && !NIL_P(off = argv[0])) {
VALUE zone = off;
if (maybe_tzobj_p(zone)) {
VALUE t = time_dup(time);
@@ -4136,9 +4134,7 @@ time_round(int argc, VALUE *argv, VALUE time)
long nd;
struct time_object *tobj;
- rb_scan_args(argc, argv, "01", &ndigits);
-
- if (NIL_P(ndigits))
+ if (!rb_check_arity(argc, 0, 1) || NIL_P(ndigits = argv[0]))
ndigits = INT2FIX(0);
else
ndigits = rb_to_int(ndigits);
diff --git a/transcode.c b/transcode.c
index 9462433130..5f9e4e9600 100644
--- a/transcode.c
+++ b/transcode.c
@@ -4115,10 +4115,9 @@ econv_putback(int argc, VALUE *argv, VALUE self)
int putbackable;
VALUE str, max;
- rb_scan_args(argc, argv, "01", &max);
-
- if (NIL_P(max))
+ if (!rb_check_arity(argc, 0, 1) || NIL_P(max = argv[0])) {
n = rb_econv_putbackable(ec);
+ }
else {
n = NUM2INT(max);
putbackable = rb_econv_putbackable(ec);
diff --git a/variable.c b/variable.c
index 968d404c05..89befc0c89 100644
--- a/variable.c
+++ b/variable.c
@@ -2728,16 +2728,11 @@ rb_const_list(void *data)
VALUE
rb_mod_constants(int argc, const VALUE *argv, VALUE mod)
{
- VALUE inherit;
+ bool inherit = TRUE;
- if (argc == 0) {
- inherit = Qtrue;
- }
- else {
- rb_scan_args(argc, argv, "01", &inherit);
- }
+ if (rb_check_arity(argc, 0, 1)) inherit = RTEST(argv[0]);
- if (RTEST(inherit)) {
+ if (inherit) {
return rb_const_list(rb_mod_const_of(mod, 0));
}
else {
@@ -3294,16 +3289,11 @@ cvar_list(void *data)
VALUE
rb_mod_class_variables(int argc, const VALUE *argv, VALUE mod)
{
- VALUE inherit;
+ bool inherit = TRUE;
st_table *tbl;
- if (argc == 0) {
- inherit = Qtrue;
- }
- else {
- rb_scan_args(argc, argv, "01", &inherit);
- }
- if (RTEST(inherit)) {
+ if (rb_check_arity(argc, 0, 1)) inherit = RTEST(argv[0]);
+ if (inherit) {
tbl = mod_cvar_of(mod, 0);
}
else {
diff --git a/vm.c b/vm.c
index 5920f25fc4..2c69498c13 100644
--- a/vm.c
+++ b/vm.c
@@ -422,7 +422,8 @@ vm_stat(int argc, VALUE *argv, VALUE self)
VALUE arg = Qnil;
VALUE hash = Qnil, key = Qnil;
- if (rb_scan_args(argc, argv, "01", &arg) == 1) {
+ if (rb_check_arity(argc, 0, 1) == 1) {
+ arg = argv[0];
if (SYMBOL_P(arg))
key = arg;
else if (RB_TYPE_P(arg, T_HASH))
diff --git a/vm_eval.c b/vm_eval.c
index 47191a0aab..9e1563dd8d 100644
--- a/vm_eval.c
+++ b/vm_eval.c
@@ -1949,16 +1949,9 @@ catch_i(VALUE tag, VALUE data)
*/
static VALUE
-rb_f_catch(int argc, VALUE *argv)
+rb_f_catch(int argc, VALUE *argv, VALUE self)
{
- VALUE tag;
-
- if (argc == 0) {
- tag = rb_obj_alloc(rb_cObject);
- }
- else {
- rb_scan_args(argc, argv, "01", &tag);
- }
+ VALUE tag = rb_check_arity(argc, 0, 1) ? argv[0] : rb_obj_alloc(rb_cObject);
return rb_catch_obj(tag, catch_i, 0);
}