diff options
| author | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-05-02 06:21:58 +0000 |
|---|---|---|
| committer | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-05-02 06:21:58 +0000 |
| commit | 653ce66e657dac6005c8700f368e83bb87ef1af5 (patch) | |
| tree | b173f352fd613a075f965bf8b6aa7192d6408590 /eval_method.h | |
| parent | c44659dc2984b9670b42d25eed69148166625f6a (diff) | |
| download | ruby-653ce66e657dac6005c8700f368e83bb87ef1af5.tar.gz ruby-653ce66e657dac6005c8700f368e83bb87ef1af5.tar.xz ruby-653ce66e657dac6005c8700f368e83bb87ef1af5.zip | |
* eval_method.h: add redefine checks ([ruby-dev:30751]).
git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@12241 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'eval_method.h')
| -rw-r--r-- | eval_method.h | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/eval_method.h b/eval_method.h index d0351c82e..fb19af5f2 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); + } } } |
