Re: how to understand
- From: Wisccal Wisccal <wisccal@xxxxxxxxxxxxxx>
- Date: Mon, 28 Sep 2009 02:48:36 -0500
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/.
.
- References:
- how to understand
- From: Haoqi Haoqi
- how to understand
- Prev by Date: [OT] Internationalization, Localization and Encodings
- Next by Date: Re: regex problem for comments line
- Previous by thread: how to understand
- Next by thread: Re: ERB: import function
- Index(es):
Relevant Pages
|