diff options
Diffstat (limited to 'class.c')
-rw-r--r-- | class.c | 16 |
1 files changed, 7 insertions, 9 deletions
@@ -30,8 +30,6 @@ #include "ruby/st.h" #include "vm_core.h" -#define id_attached id__attached__ - #define METACLASS_OF(k) RBASIC(k)->klass #define SET_METACLASS_OF(k, cls) RBASIC_SET_CLASS(k, cls) @@ -615,7 +613,7 @@ rb_singleton_class_clone_and_attach(VALUE obj, VALUE attach) // attached to an object other than `obj`. In which case `obj` does not have // a material singleton class attached yet and there is no singleton class // to clone. - if (!(FL_TEST(klass, FL_SINGLETON) && rb_attr_get(klass, id_attached) == obj)) { + if (!(FL_TEST(klass, FL_SINGLETON) && RCLASS_ATTACHED_OBJECT(klass) == obj)) { // nothing to clone return klass; } @@ -668,7 +666,7 @@ void rb_singleton_class_attached(VALUE klass, VALUE obj) { if (FL_TEST(klass, FL_SINGLETON)) { - rb_class_ivar_set(klass, id_attached, obj); + RCLASS_SET_ATTACHED_OBJECT(klass, obj); } } @@ -682,13 +680,13 @@ rb_singleton_class_attached(VALUE klass, VALUE obj) static int rb_singleton_class_has_metaclass_p(VALUE sklass) { - return rb_attr_get(METACLASS_OF(sklass), id_attached) == sklass; + return RCLASS_ATTACHED_OBJECT(METACLASS_OF(sklass)) == sklass; } int rb_singleton_class_internal_p(VALUE sklass) { - return (RB_TYPE_P(rb_attr_get(sklass, id_attached), T_CLASS) && + return (RB_TYPE_P(RCLASS_ATTACHED_OBJECT(sklass), T_CLASS) && !rb_singleton_class_has_metaclass_p(sklass)); } @@ -1677,7 +1675,7 @@ rb_class_attached_object(VALUE klass) rb_raise(rb_eTypeError, "`%"PRIsVALUE"' is not a singleton class", klass); } - return rb_attr_get(klass, id_attached); + return RCLASS_ATTACHED_OBJECT(klass); } static void @@ -2206,7 +2204,7 @@ singleton_class_of(VALUE obj) klass = METACLASS_OF(obj); if (!(FL_TEST(klass, FL_SINGLETON) && - rb_attr_get(klass, id_attached) == obj)) { + RCLASS_ATTACHED_OBJECT(klass) == obj)) { klass = rb_make_metaclass(obj, klass); } @@ -2245,7 +2243,7 @@ rb_singleton_class_get(VALUE obj) } klass = METACLASS_OF(obj); if (!FL_TEST(klass, FL_SINGLETON)) return Qnil; - if (rb_attr_get(klass, id_attached) != obj) return Qnil; + if (RCLASS_ATTACHED_OBJECT(klass) != obj) return Qnil; return klass; } |