summaryrefslogtreecommitdiff
path: root/class.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-05-19 04:58:36 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-05-19 04:58:36 +0000
commit7d1f48b5c3768aba7f742532f00dd3d5a404a819 (patch)
treecc5974a423a78150d3e682814e542e44b459b32f /class.c
parent6009d184ff73b623ec4eaba1a636f8abd5747b4a (diff)
* struct.c (struct_ivar_get): new function to avoid repeated
rb_intern() calls. * struct.c (rb_struct_iv_get): use struct_ivar_get() * struct.c (num_members): ditto. * struct.c (rb_struct_s_members): ditto. * class.c (rb_singleton_class): cache symbol to reduce calls to rb_intern(). git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@23488 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'class.c')
-rw-r--r--class.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/class.c b/class.c
index 386188d8ae..95e793eca5 100644
--- a/class.c
+++ b/class.c
@@ -857,6 +857,7 @@ VALUE
rb_singleton_class(VALUE obj)
{
VALUE klass;
+ ID attached;
if (FIXNUM_P(obj) || SYMBOL_P(obj)) {
rb_raise(rb_eTypeError, "can't define singleton");
@@ -868,8 +869,9 @@ rb_singleton_class(VALUE obj)
rb_bug("unknown immediate %ld", obj);
}
+ CONST_ID(attached, "__attached__");
if (FL_TEST(RBASIC(obj)->klass, FL_SINGLETON) &&
- rb_iv_get(RBASIC(obj)->klass, "__attached__") == obj) {
+ rb_ivar_get(RBASIC(obj)->klass, attached) == obj) {
klass = RBASIC(obj)->klass;
}
else {