summaryrefslogtreecommitdiff
path: root/proc.c
diff options
context:
space:
mode:
authorKoichi Sasada <ko1@atdot.net>2021-12-13 01:16:04 +0900
committerKoichi Sasada <ko1@atdot.net>2021-12-13 10:23:52 +0900
commit4d0cb1a54ba5e8e053e6acc860fd1cb9ca5e1b19 (patch)
treeec188f06c36dc5f65b108cdcd3a7579f5dc9a53b /proc.c
parent2f79d6d3f268adf2bde6abed33acf936d8d08157 (diff)
downloadruby-4d0cb1a54ba5e8e053e6acc860fd1cb9ca5e1b19.tar.gz
add `method_def_aritry()`
Diffstat (limited to 'proc.c')
-rw-r--r--proc.c18
1 files changed, 11 insertions, 7 deletions
diff --git a/proc.c b/proc.c
index 90ecf1e59b..6933db36d6 100644
--- a/proc.c
+++ b/proc.c
@@ -2637,10 +2637,8 @@ umethod_bind_call(int argc, VALUE *argv, VALUE method)
* if there is no maximum.
*/
static int
-rb_method_entry_min_max_arity(const rb_method_entry_t *me, int *max)
+method_def_min_max_arity(const rb_method_definition_t *def, int *max)
{
- const rb_method_definition_t *def = me->def;
-
again:
if (!def) return *max = 0;
switch (def->type) {
@@ -2696,15 +2694,21 @@ rb_method_entry_min_max_arity(const rb_method_entry_t *me, int *max)
*max = UNLIMITED_ARGUMENTS;
return 0;
}
- rb_bug("rb_method_entry_min_max_arity: invalid method entry type (%d)", def->type);
+ rb_bug("method_def_min_max_arity: invalid method entry type (%d)", def->type);
UNREACHABLE_RETURN(Qnil);
}
+static int
+method_def_aritry(const rb_method_definition_t *def)
+{
+ int max, min = method_def_min_max_arity(def, &max);
+ return min == max ? min : -min-1;
+}
+
int
rb_method_entry_arity(const rb_method_entry_t *me)
{
- int max, min = rb_method_entry_min_max_arity(me, &max);
- return min == max ? min : -min-1;
+ return method_def_aritry(me->def);
}
/*
@@ -2786,7 +2790,7 @@ method_min_max_arity(VALUE method, int *max)
const struct METHOD *data;
TypedData_Get_Struct(method, struct METHOD, &method_data_type, data);
- return rb_method_entry_min_max_arity(data->me, max);
+ return method_def_min_max_arity(data->me->def, max);
}
int