mrb_value mrb_obj_singleton_methods(mrb_state *mrb, int argc, mrb_value *argv, mrb_value obj) { mrb_value recur, ary; struct RClass* klass; if (argc == 0) { recur = mrb_true_value(); } else { recur = argv[0]; } klass = mrb_class(mrb, obj); ary = mrb_ary_new(mrb); if (klass && (klass->tt == MRB_TT_SCLASS)) { method_entry_loop(mrb, klass, ary); klass = klass->super; } if (RTEST(recur)) { while (klass && ((klass->tt == MRB_TT_SCLASS) || (klass->tt == MRB_TT_ICLASS))) { method_entry_loop(mrb, klass, ary); klass = klass->super; } } return ary; }
static mrb_value class_instance_method_list(mrb_state *mrb, int argc, mrb_value *argv, struct RClass* klass, int obj) { mrb_value ary; int recur; struct RClass* oldklass; if (argc == 0) { recur = TRUE; } else { mrb_value r; mrb_get_args(mrb, "o", &r); recur = mrb_test(r); } ary = mrb_ary_new(mrb); oldklass = 0; while (klass && (klass != oldklass)) { method_entry_loop(mrb, klass, ary); if ((klass->tt == MRB_TT_ICLASS) || (klass->tt == MRB_TT_SCLASS)) { } else { if (!recur) break; } oldklass = klass; klass = klass->super; } return ary; }
mrb_value mrb_obj_singleton_methods(mrb_state *mrb, mrb_bool recur, mrb_value obj) { mrb_value ary; struct RClass* klass; klass = mrb_class(mrb, obj); ary = mrb_ary_new(mrb); if (klass && (klass->tt == MRB_TT_SCLASS)) { method_entry_loop(mrb, klass, ary); klass = klass->super; } if (recur) { while (klass && ((klass->tt == MRB_TT_SCLASS) || (klass->tt == MRB_TT_ICLASS))) { method_entry_loop(mrb, klass, ary); klass = klass->super; } } return ary; }
mrb_value class_instance_method_list(mrb_state *mrb, mrb_bool recur, struct RClass* klass, int obj) { mrb_value ary; struct RClass* oldklass; ary = mrb_ary_new(mrb); oldklass = 0; while (klass && (klass != oldklass)) { method_entry_loop(mrb, klass, ary); if ((klass->tt == MRB_TT_ICLASS) || (klass->tt == MRB_TT_SCLASS)) { } else { if (!recur) break; } oldklass = klass; klass = klass->super; } return ary; }