From 40bc4f5ae4ffe325c36a49e0d3280dbee2a39cee Mon Sep 17 00:00:00 2001 From: matz Date: Thu, 29 Aug 2002 09:08:18 +0000 Subject: * array.c (rb_ary_become): should not free ptr if it's shared. * eval.c (rb_alias): prohibit making an alias named "allocate" if klass is a metaclass. * string.c (rb_string_value_ptr): StringValuePtr() should never return NULL pointer. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@2764 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- eval.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'eval.c') diff --git a/eval.c b/eval.c index 425ee5a361..25ce389052 100644 --- a/eval.c +++ b/eval.c @@ -1700,6 +1700,7 @@ rb_alias(klass, name, def) { VALUE origin; NODE *orig, *body; + VALUE singleton = 0; rb_frozen_class_p(klass); if (name == def) return; @@ -1715,6 +1716,12 @@ rb_alias(klass, name, def) if (!orig || !orig->nd_body) { print_undef(klass, def); } + if (FL_TEST(klass, FL_SINGLETON)) { + singleton = rb_iv_get(klass, "__attached__"); + if (name == alloc && TYPE(singleton) == T_CLASS) { + rb_raise(rb_eNameError, "cannot make alias named `allocate'"); + } + } body = orig->nd_body; orig->nd_cnt++; if (nd_type(body) == NODE_FBODY) { /* was alias */ @@ -1726,9 +1733,8 @@ rb_alias(klass, name, def) rb_clear_cache_by_id(name); st_insert(RCLASS(klass)->m_tbl, name, NEW_METHOD(NEW_FBODY(body, def, origin), orig->nd_noex)); - if (FL_TEST(klass, FL_SINGLETON)) { - rb_funcall(rb_iv_get(klass, "__attached__"), - singleton_added, 1, ID2SYM(name)); + if (singleton) { + rb_funcall(singleton, singleton_added, 1, ID2SYM(name)); } else { rb_funcall(klass, added, 1, ID2SYM(name)); -- cgit v1.2.3