diff options
| author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2000-06-22 08:29:58 +0000 |
|---|---|---|
| committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2000-06-22 08:29:58 +0000 |
| commit | 623f789e46a571d4d18ba5a7ae5fd657e5d34a0f (patch) | |
| tree | 10e665c60414c3070ce957e5c534e30ed499bc2d /eval.c | |
| parent | 2c4dd0158164639963d6957bb20a5606a807c5a6 (diff) | |
| download | ruby-623f789e46a571d4d18ba5a7ae5fd657e5d34a0f.tar.gz ruby-623f789e46a571d4d18ba5a7ae5fd657e5d34a0f.tar.xz ruby-623f789e46a571d4d18ba5a7ae5fd657e5d34a0f.zip | |
2000-06-22
git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@775 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'eval.c')
| -rw-r--r-- | eval.c | 27 |
1 files changed, 25 insertions, 2 deletions
@@ -1420,6 +1420,28 @@ rb_mod_s_constants() return ary; } +static void +frozen_class_p(klass) + VALUE klass; +{ + char *desc = "something(?!)"; + + if (OBJ_FROZEN(klass)) { + if (FL_TEST(klass, FL_SINGLETON)) + desc = "object"; + else { + switch (TYPE(klass)) { + case T_MODULE: + case T_ICLASS: + desc = "module"; break; + case T_CLASS: + desc = "class"; break; + } + } + rb_error_frozen(desc); + } +} + void rb_undef(klass, id) VALUE klass; @@ -1434,7 +1456,7 @@ rb_undef(klass, id) if (rb_safe_level() >= 4 && !OBJ_TAINTED(klass)) { rb_raise(rb_eSecurityError, "Insecure: can't undef"); } - if (OBJ_FROZEN(klass)) rb_error_frozen("class/module"); + frozen_class_p(klass); body = search_method(ruby_class, id, &origin); if (!body || !body->nd_body) { char *s0 = " class"; @@ -1476,6 +1498,7 @@ rb_alias(klass, name, def) VALUE origin; NODE *orig, *body; + frozen_class_p(klass); if (name == def) return; if (klass == rb_cObject) { rb_secure(4); @@ -2757,6 +2780,7 @@ rb_eval(self, n) if (ruby_class == rb_cObject && node->nd_mid == init) { rb_warn("re-defining Object#initialize may cause infinite loop"); } + frozen_class_p(ruby_class); body = search_method(ruby_class, node->nd_mid, &origin); if (body){ if (RTEST(ruby_verbose) && ruby_class == origin) { @@ -2975,7 +2999,6 @@ rb_eval(self, n) } if (rb_safe_level() >= 4 && !OBJ_TAINTED(klass)) rb_raise(rb_eSecurityError, "Insecure: can't extend object"); - if (OBJ_FROZEN(klass)) rb_error_frozen("object"); if (FL_TEST(CLASS_OF(klass), FL_SINGLETON)) { rb_clear_cache(); } |
