summaryrefslogtreecommitdiff
path: root/class.c
diff options
context:
space:
mode:
Diffstat (limited to 'class.c')
-rw-r--r--class.c46
1 files changed, 21 insertions, 25 deletions
diff --git a/class.c b/class.c
index 579cc83c7e..0fce4bcfca 100644
--- a/class.c
+++ b/class.c
@@ -529,44 +529,40 @@ method_entry(key, body, list)
}
static VALUE
-method_list(mod, recur, func)
- VALUE mod;
- int recur;
- int (*func)();
-{
- st_table *list;
- VALUE klass, ary;
-
- list = st_init_numtable();
- for (klass = mod; klass; klass = RCLASS(klass)->super) {
- st_foreach(RCLASS(klass)->m_tbl, method_entry, (st_data_t)list);
- if (!recur) break;
- }
- ary = rb_ary_new();
- st_foreach(list, func, ary);
- st_free_table(list);
-
- return ary;
-}
-
-static VALUE
class_instance_method_list(argc, argv, mod, func)
int argc;
VALUE *argv;
VALUE mod;
- void (*func)();
+ int (*func) _((ID, long, VALUE));
{
- VALUE recur;
+ VALUE ary;
+ int recur;
+ st_table *list;
- rb_scan_args(argc, argv, "01", &recur);
if (argc == 0) {
#if RUBY_VERSION_CODE < 181
rb_warn("%s: parameter will default to 'true' as of 1.8.1", rb_id2name(rb_frame_last_func()));
+ recur = Qfalse;
#else
recur = Qtrue;
#endif
}
- return method_list(mod, RTEST(recur), func);
+ else {
+ VALUE r;
+ rb_scan_args(argc, argv, "01", &r);
+ recur = RTEST(r);
+ }
+
+ list = st_init_numtable();
+ for (; mod; mod = RCLASS(mod)->super) {
+ st_foreach(RCLASS(mod)->m_tbl, method_entry, (st_data_t)list);
+ if (!recur) break;
+ }
+ ary = rb_ary_new();
+ st_foreach(list, func, ary);
+ st_free_table(list);
+
+ return ary;
}
VALUE