From 1d5e119fa3a9365e9c7ded308d4a9db3c841b60b Mon Sep 17 00:00:00 2001 From: nobu Date: Thu, 26 Jun 2003 12:34:51 +0000 Subject: * class.c (class_instance_method_list): get rid of warning about arguement type mismatch, and inline method_list(). [ruby-core:01198] git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@4004 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- class.c | 46 +++++++++++++++++++++------------------------- 1 file changed, 21 insertions(+), 25 deletions(-) (limited to 'class.c') diff --git a/class.c b/class.c index 579cc83c7..0fce4bcfc 100644 --- a/class.c +++ b/class.c @@ -528,45 +528,41 @@ method_entry(key, body, list) return ST_CONTINUE; } -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 -- cgit