ruby-changes:23808
From: nobu <ko1@a...>
Date: Fri, 1 Jun 2012 09:31:46 +0900 (JST)
Subject: [ruby-changes:23808] nobu:r35859 (trunk): class_or_module_required
nobu 2012-06-01 09:31:00 +0900 (Fri, 01 Jun 2012) New Revision: 35859 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=35859 Log: class_or_module_required * object.c (class_or_module_required): extract check for class or module. Modified files: trunk/ChangeLog trunk/object.c Index: ChangeLog =================================================================== --- ChangeLog (revision 35858) +++ ChangeLog (revision 35859) @@ -1,3 +1,8 @@ +Fri Jun 1 09:30:53 2012 Nobuyoshi Nakada <nobu@r...> + + * object.c (class_or_module_required): extract check for class or + module. + Fri Jun 1 08:50:47 2012 Eric Hodel <drbrain@s...> * array.c: Updated Array documentation formatting. Patch by Zachary Index: object.c =================================================================== --- object.c (revision 35858) +++ object.c (revision 35859) @@ -509,7 +509,23 @@ return rb_funcall(obj, rb_intern("to_s"), 0, 0); } +static VALUE +class_or_module_required(VALUE c) +{ + if (SPECIAL_CONST_P(c)) goto not_class; + switch (BUILTIN_TYPE(c)) { + case T_MODULE: + case T_CLASS: + case T_ICLASS: + break; + default: + not_class: + rb_raise(rb_eTypeError, "class or module required"); + } + return c; +} + /* * call-seq: * obj.instance_of?(class) -> true or false @@ -530,15 +546,7 @@ VALUE rb_obj_is_instance_of(VALUE obj, VALUE c) { - switch (TYPE(c)) { - case T_MODULE: - case T_CLASS: - case T_ICLASS: - break; - default: - rb_raise(rb_eTypeError, "class or module required"); - } - + c = class_or_module_required(c); if (rb_obj_class(obj) == c) return Qtrue; return Qfalse; } @@ -577,16 +585,7 @@ { VALUE cl = CLASS_OF(obj); - switch (TYPE(c)) { - case T_MODULE: - case T_CLASS: - case T_ICLASS: - break; - - default: - rb_raise(rb_eTypeError, "class or module required"); - } - + c = class_or_module_required(c); while (cl) { if (cl == c || RCLASS_M_TBL(cl) == RCLASS_M_TBL(c)) return Qtrue; -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/