aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-05-02 06:21:58 +0000
committerko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-05-02 06:21:58 +0000
commit1db71b2ecae2d35c700de5a4d8257c3617a093ae (patch)
treeb173f352fd613a075f965bf8b6aa7192d6408590
parentf53a94c83124ce44a53e4262cdd30ffa53016f1a (diff)
downloadruby-1db71b2ecae2d35c700de5a4d8257c3617a093ae.tar.gz
* eval_method.h: add redefine checks ([ruby-dev:30751]).
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@12241 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog4
-rw-r--r--eval_method.h17
2 files changed, 17 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index a48c334eca..71cd2772ac 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+Wed May 2 15:14:56 2007 Koichi Sasada <ko1@atdot.net>
+
+ * eval_method.h: add redefine checks ([ruby-dev:30751]).
+
Wed May 2 11:22:52 2007 Koichi Sasada <ko1@atdot.net>
* compile.c: use Qtrue instead of 2.
diff --git a/eval_method.h b/eval_method.h
index d0351c82e1..fb19af5f25 100644
--- a/eval_method.h
+++ b/eval_method.h
@@ -293,6 +293,11 @@ remove_method(VALUE klass, ID mid)
rb_name_error(mid, "method `%s' not defined in %s",
rb_id2name(mid), rb_class2name(klass));
}
+
+ if (nd_type(body->nd_body->nd_body) == NODE_CFUNC) {
+ rb_vm_check_redefinition_opt_method(body);
+ }
+
rb_clear_cache_for_undef(klass, mid);
if (FL_TEST(klass, FL_SINGLETON)) {
rb_funcall(rb_iv_get(klass, "__attached__"), singleton_removed, 1,
@@ -559,10 +564,14 @@ rb_alias(VALUE klass, ID name, ID def)
orig_fbody->nd_cnt++;
- if (RTEST(ruby_verbose) &&
- st_lookup(RCLASS(klass)->m_tbl, name, (st_data_t *) & node)) {
- if (node && node->nd_cnt == 0 && node->nd_body) {
- rb_warning("discarding old %s", rb_id2name(name));
+ if (st_lookup(RCLASS(klass)->m_tbl, name, (st_data_t *) & node)) {
+ if (node) {
+ if (RTEST(ruby_verbose) && node->nd_cnt == 0 && node->nd_body) {
+ rb_warning("discarding old %s", rb_id2name(name));
+ }
+ if (nd_type(node->nd_body->nd_body) == NODE_CFUNC) {
+ rb_vm_check_redefinition_opt_method(node);
+ }
}
}