From: Wisccal Wisccal Date: 2009-09-28T16:48:36+09:00 Subject: Re: how to understand > when call "boot_defclass("Object", 0)","rb_cClass" is not defined,why > "rb_class_boot" can call "rb_cClass"? Dear Curious Friend I'm not a Ruby expert, nor do I know much about C. But since your curiosity infected me, I ventured into the Ruby source trying to figure this out. The following are my findings. rb_cObject, rb_cModule, rb_cClass all get allocated in NEWOBJ as struct RClass. NEWOBJ(obj, struct RClass); In, OBJSETUP, they're cast to type struct RObject, and the structs member klass gets assigned rb_cClass, which is a VALUE pointer: OBJSETUP(obj, klass, flags); #define OBJSETUP(obj,c,t) do {\ /*...*/ RBASIC(obj)->klass = (c);\ /*...*/ } while (0) Here, rb_cClass gets assigned an RClass type like rb_cObject, and rb_cModule. But it will also have a klass member that still holds a pointer to the same struct, which rb_cClass pointed to before: rb_cClass = boot_defclass("Class", rb_cModule); As pointed out in the beginning, I'm not an expert on this, so the above might very well be incorrect or incomplete. I would very much appreciate it if someone with better insight could provide a more thorough explanation and elaborate on why rb_cClass is needed. Regards wisccal -- Posted via http://www.ruby-forum.com/.