# TYPE(cl) in rb\_obj\_is\_kind\_of

**URL:** <https://www.ruby-forum.com/t/type-cl-in-rb-obj-is-kind-of/115105>\
**Category:** Development\
**Created:** [September 20, 2007, 4:35pm UTC](https://www.ruby-forum.com/t/type-cl-in-rb-obj-is-kind-of/115105 "2007-09-20T16:35:41Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Tanaka\_A](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/c67d28/32.png) [@Tanaka\_A](https://www.ruby-forum.com/u/Tanaka_A)\
**Post date:** [September 20, 2007, 4:35pm UTC](https://www.ruby-forum.com/t/type-cl-in-rb-obj-is-kind-of/115105/1 "2007-09-20T16:35:41Z")

</div>

rb\_obj\_is\_kind\_of e$BCf$Ge(B TYPE(cl) e$B$,e(B T\_CLASS e$B$de(B T\_ICLASS  
e$B$G$Je(B  
e$B$$$3$H$O@5\>o$J$N$G$7$g$&$+e(B?

e$B$D$^$j!"0J2\<$NI=L@$O4V0c$C$F$$$k$G$7$g$&$+e(B?

# Index: object.c

— object.c (revision 13472)  
+++ object.c (working copy)  
@@ -11,6 +11,7 @@  
Copyright © 2000 Information-technology Promotion Agency, Japan

\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*/  
+#include \<assert.h\>

#include “ruby/ruby.h”  
#include “ruby/st.h”  
@@ -390,6 +391,7 @@  
rb\_obj\_is\_kind\_of(VALUE obj, VALUE c)  
{  
VALUE cl = CLASS\_OF(obj);

- assert(TYPE(cl) == T\_CLASS || TYPE(cl) == T\_ICLASS);

e$B$3$NI=L@$r$D$1$k$H!"e(Btest/runner.rb  
e$B$,0J2\<$N$h$&$K\<:GT$7$^$9!#e(B

% ./ruby test/runner.rb  
ruby: object.c:394: rb\_obj\_is\_kind\_of: Assertion `rb\_type((VALUE)(cl))  
== RUBY\_T\_CLASS || rb\_type((VALUE)(cl)) == RUBY\_T\_ICLASS’ failed.

e$B0J2\<$N$h$&$K$9$l$P!"\>.$5$J%9%/%j%W%H$G:F8=$5$;$k$3$H$,$G$-$^e(B  
e$B$9!#e(B

% ls -l empty.rb z.rb  
-rw-r–r-- 1 akr akr 0 Sep 20 23:29 empty.rb  
-rw-r–r-- 1 akr akr 81 Sep 20 23:29 z.rb  
% cat z.rb  
eval(“require ‘empty’”, TOPLEVEL\_BINDING)  
ObjectSpace.each\_object(Class) {|x| }  
% ./ruby z.rb  
ruby: object.c:394: rb\_obj\_is\_kind\_of: Assertion `rb\_type((VALUE)(cl))  
== RUBY\_T\_CLASS || rb\_type((VALUE)(cl)) == RUBY\_T\_ICLASS’ failed.

---

<div class="post-metadata">

**Author:** ![Tanaka\_A](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/c67d28/32.png) [@Tanaka\_A](https://www.ruby-forum.com/u/Tanaka_A)\
**Post date:** [September 20, 2007, 4:37pm UTC](https://www.ruby-forum.com/t/type-cl-in-rb-obj-is-kind-of/115105/2 "2007-09-20T16:37:41Z")

</div>

In article [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid),  
Tanaka A. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) writes:

> e$B0J2\<$N$h$&$K$9$l$P!"\>.$5$J%9%/%j%W%H$G:F8=$5$;$k$3$H$,$G$-$^e(B  
> e$B$9!#e(B

e$B$&!"0J2\<$G==J,$G$7$?!#e(B

% ./ruby -e ‘eval(“”, TOPLEVEL\_BINDING); ObjectSpace.each\_object(Class)  
{|x| }’  
ruby: object.c:394: rb\_obj\_is\_kind\_of: Assertion `rb\_type((VALUE)(cl))  
== RUBY\_T\_CLASS || rb\_type((VALUE)(cl)) == RUBY\_T\_ICLASS’ failed.

---

<div class="post-metadata">

**Author:** ![Tanaka\_A](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/c67d28/32.png) [@Tanaka\_A](https://www.ruby-forum.com/u/Tanaka_A)\
**Post date:** [September 20, 2007, 10:43pm UTC](https://www.ruby-forum.com/t/type-cl-in-rb-obj-is-kind-of/115105/3 "2007-09-20T22:43:49Z")

</div>

e$B$J$+$@$G$9!#e(B

At Thu, 20 Sep 2007 23:34:33 +0900,  
Tanaka A. wrote in [ruby-dev:31804]:

> rb\_obj\_is\_kind\_of e$BCf$Ge(B TYPE(cl) e$B$,e(B T\_CLASS e$B$de(B T\_ICLASS e$B$G$Je(B  
> e$B$$$3$H$O@5\>o$J$N$G$7$g$&$+e(B?

e$B$=$ND\>8e$Ne(Bswitche$B$r$\_$l$P!"e(BT\_MODULEe$B$O@5\>o$J%1!\<%9$@$H;W$$$^$9!#e(B

---

<div class="post-metadata">

**Author:** ![Tanaka\_A](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/c67d28/32.png) [@Tanaka\_A](https://www.ruby-forum.com/u/Tanaka_A)\
**Post date:** [September 21, 2007, 2:37am UTC](https://www.ruby-forum.com/t/type-cl-in-rb-obj-is-kind-of/115105/4 "2007-09-21T02:37:14Z")

</div>

In article [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid),  
Nobuyoshi N. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) writes:

> > rb\_obj\_is\_kind\_of e$BCf$Ge(B TYPE(cl) e$B$,e(B T\_CLASS e$B$de(B T\_ICLASS e$B$G$Je(B  
> > e$B$$$3$H$O@5\>o$J$N$G$7$g$&$+e(B?
> 
> e$B$=$ND\>8e$Ne(Bswitche$B$r$\_$l$P!"e(BT\_MODULEe$B$O@5\>o$J%1!\<%9$@$H;W$$$^$9!#e(B

e$B$&$%$`!#e(B

e$B$3$N7o$G$Oe(B T\_MODULE e$B$G$b$J$$$h$&$G$9!#e(B

% gdb ruby  
GNU gdb 6.3-debian  
Copyright 2004 Free Software Foundation, Inc.  
GDB is free software, covered by the GNU General Public License, and you  
are  
welcome to change it and/or distribute copies of it under certain  
conditions.  
Type “show copying” to see the conditions.  
There is absolutely no warranty for GDB. Type “show warranty” for  
details.  
This GDB was configured as “i386-linux”…Using host libthread\_db  
library “/lib/tls/libthread\_db.so.1”.

(gdb) run -e ‘eval(“”, TOPLEVEL\_BINDING); ObjectSpace.each\_object(Class)  
{|x| }’  
Starting program: /tmp/a/ruby/ruby -e ‘eval(“”, TOPLEVEL\_BINDING);  
ObjectSpace.each\_object(Class) {|x| }’  
[Thread debugging using libthread\_db enabled]  
[New Thread -1210039200 (LWP 27073)]  
[New Thread -1210770512 (LWP 27076)]  
ruby: object.c:394: rb\_obj\_is\_kind\_of: Assertion `rb\_type((VALUE)(cl))  
== RUBY\_T\_CLASS || rb\_type((VALUE)(cl)) == RUBY\_T\_ICLASS’ failed.

Program received signal SIGABRT, Aborted.  
[Switching to Thread -1210039200 (LWP 27073)]  
0xb7e2d83b in raise () from /lib/tls/libc.so.6  
(gdb) bt  
#0 0xb7e2d83b in raise () from /lib/tls/libc.so.6  
#1 0xb7e2efa2 in abort () from /lib/tls/libc.so.6  
#2 0xb7e272df in \_\_assert\_fail () from /lib/tls/libc.so.6  
#3 0x0807768d in rb\_obj\_is\_kind\_of (obj=0, c=3084396900) at ruby.h:897  
#4 0x0806327b in os\_obj\_of (of=3084396900) at gc.c:1744  
#5 0x0806330c in os\_each\_obj (argc=0, argv=0x0) at gc.c:1799  
#6 0x080d96da in call\_cfunc (func=0x80632c0 \<os\_each\_obj\>,  
recv=3084273360, len=6, argc=27073, argv=0xb7d83020)  
at insnhelper.ci:276  
#7 0x080dac15 in vm\_call\_cfunc (th=0x815d160, reg\_cfp=0xb7e02f60,  
num=1, id=8080, recv=3084273360, klass=3084273260,  
mn=0xb7d64658, blockptr=0x0) at insnhelper.ci:365  
#8 0x080d9e06 in vm\_call\_method (th=0x815d160, cfp=0xb7e02f60, num=1,  
blockptr=0xb7e02f74, flag=0, id=8080, mn=0x815d160,  
recv=3084273360, klass=3084273260) at insnhelper.ci:490  
#9 0x080d5360 in vm\_eval (th=0x815d160, initial=0) at insns.def:1073  
#10 0x080d84b0 in vm\_eval\_body (th=0x815d160) at vm.c:1162  
#11 0x080d887a in rb\_iseq\_eval (iseqval=3084259860) at vm.c:1371  
#12 0x0805a589 in ruby\_exec\_node (n=0xb7d61250, file=0x8197139 “-e”) at  
eval.c:231  
#13 0x0805a5ef in ruby\_run\_node (n=0xb7d61250) at eval.c:256  
#14 0x08057757 in main (argc=0, argv=0x0, envp=0xbfe6f0d4) at main.c:46  
(gdb) up  
#1 0xb7e2efa2 in abort () from /lib/tls/libc.so.6  
(gdb)  
#2 0xb7e272df in \_\_assert\_fail () from /lib/tls/libc.so.6  
(gdb)  
#3 0x0807768d in rb\_obj\_is\_kind\_of (obj=0, c=3084396900) at ruby.h:897  
897 if (obj == Qfalse) return rb\_cFalseClass;  
(gdb)  
#4 0x0806327b in os\_obj\_of (of=3084396900) at gc.c:1744  
1744 if (rb\_obj\_is\_kind\_of((VALUE)p, of)) {  
(gdb) rp p  
T\_VALUES: $1 = (struct RValues \*) 0xb7d60fbc  
(gdb) p \*$1  
$2 = {basic = {flags = 26, klass = 3084262000}, v1 = 4, v2 = 4, v3 = 4}  
(gdb) rp 3084262000  
T\_NODE(NODE\_BLOCK): $3 = {flags = 1055, nd\_file = 0x0, u1 = {node =  
0xb7d829b4, id = 3084396980, value = 3084396980,  
cfunc = 0xb7d829b4, tbl = 0xb7d829b4}, u2 = {node = 0x2, id = 2,  
argc = 2, value = 2}, u3 = {node = 0x0, id = 0,  
state = 0, entry = 0x0, cnt = 0, value = 0}}  
(gdb)

e$B$H$$$&$h$&$K!"e(Brb\_obj\_is\_kind\_of e$B$KEO$7$F$$$k$N$Oe(B T\_VALUES  
e$B$G!"e(B  
e$B$=$Ne(B klass e$B$Oe(B T\_NODE e$B$K$J$C$F$$$^$9!#e(B
