summaryrefslogtreecommitdiff
path: root/class.c
diff options
context:
space:
mode:
authornagachika <nagachika@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-04-14 15:17:44 +0000
committernagachika <nagachika@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-04-14 15:17:44 +0000
commitc6c33ec6ff69ac85c0047c71075e0964244b95b8 (patch)
tree313449983dff76a4246ad6b06d08b889d6a4ea33 /class.c
parent5525ff192c620e46d2364a10e78ece9ee64d7d7a (diff)
merge revision(s) 40013,40032: [Backport #8188]
* class.c (HAVE_METACLASS_P): should check FL_SINGLTON flag before get instance variable to get rid of wrong warning about __attached__. [ruby-core:53839] [Bug #8188] * class.c (HAVE_METACLASS_P): should check FL_SINGLETON flag before get git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_0_0@40294 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'class.c')
-rw-r--r--class.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/class.c b/class.c
index b8e47df8f2..85ce5b88bb 100644
--- a/class.c
+++ b/class.c
@@ -307,6 +307,14 @@ rb_singleton_class_attached(VALUE klass, VALUE obj)
*/
#define META_CLASS_OF_CLASS_CLASS_P(k) (METACLASS_OF(k) == (k))
+/*!
+ * whether k has a metaclass
+ * @retval 1 if \a k has a metaclass
+ * @retval 0 otherwise
+ */
+#define HAVE_METACLASS_P(k) \
+ (FL_TEST(METACLASS_OF(k), FL_SINGLETON) && \
+ rb_ivar_get(METACLASS_OF(k), id_attached) == (k))
/*!
* ensures \a klass belongs to its own eigenclass.
@@ -316,7 +324,7 @@ rb_singleton_class_attached(VALUE klass, VALUE obj)
* @note this macro creates a new eigenclass if necessary.
*/
#define ENSURE_EIGENCLASS(klass) \
- (rb_ivar_get(METACLASS_OF(klass), id_attached) == (klass) ? METACLASS_OF(klass) : make_metaclass(klass))
+ (HAVE_METACLASS_P(klass) ? METACLASS_OF(klass) : make_metaclass(klass))
/*!