diff options
| author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-09-29 04:37:52 +0000 |
|---|---|---|
| committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-09-29 04:37:52 +0000 |
| commit | 404dbea3d6a84853f434be53325b28146bc010ec (patch) | |
| tree | 7d76f14c2194e897744000797b80a39171c209c6 | |
| parent | 3f125d6b460624dd3edace4ee79ba65c38a43c7c (diff) | |
| download | ruby-404dbea3d6a84853f434be53325b28146bc010ec.tar.gz ruby-404dbea3d6a84853f434be53325b28146bc010ec.tar.xz ruby-404dbea3d6a84853f434be53325b28146bc010ec.zip | |
* vm_method.c (rb_add_method_def): nothing to do if old method had
same definition. [ruby-dev:39397]
git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@25147 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
| -rw-r--r-- | ChangeLog | 5 | ||||
| -rw-r--r-- | test/ruby/test_class.rb | 8 | ||||
| -rw-r--r-- | vm_method.c | 11 |
3 files changed, 22 insertions, 2 deletions
@@ -1,3 +1,8 @@ +Tue Sep 29 13:37:50 2009 Nobuyoshi Nakada <nobu@ruby-lang.org> + + * vm_method.c (rb_add_method_def): nothing to do if old method had + same definition. [ruby-dev:39397] + Tue Sep 29 06:50:32 2009 NARUSE, Yui <naruse@ruby-lang.org> * string.c (rb_str_inspect): dump as \uXXXX when the diff --git a/test/ruby/test_class.rb b/test/ruby/test_class.rb index 8d618822a..382dbb9cc 100644 --- a/test/ruby/test_class.rb +++ b/test/ruby/test_class.rb @@ -130,6 +130,14 @@ class TestClass < Test::Unit::TestCase end end assert_equal("", stderr) + stderr = verbose_warning do + Module.new do + module_function + def foo; end + module_function :foo + end + end + assert_equal("", stderr, '[ruby-dev:39397]') end def test_check_inheritable diff --git a/vm_method.c b/vm_method.c index 3eef4449d..434e8424c 100644 --- a/vm_method.c +++ b/vm_method.c @@ -141,6 +141,8 @@ rb_free_method_entry(rb_method_entry_t *me) xfree(me); } +static int rb_method_definition_eq(const rb_method_definition_t *d1, const rb_method_definition_t *d2); + static rb_method_entry_t * rb_add_method_def(VALUE klass, ID mid, rb_method_type_t type, rb_method_definition_t *def, rb_method_flag_t noex) { @@ -179,7 +181,7 @@ rb_add_method_def(VALUE klass, ID mid, rb_method_type_t type, rb_method_definiti rb_method_entry_t *old_me = (rb_method_entry_t *)data; rb_method_definition_t *old_def = old_me->def; - if (old_def == def) return old_me; + if (rb_method_definition_eq(old_def, def)) return old_me; rb_vm_check_redefinition_opt_method(old_me); if (RTEST(ruby_verbose) && @@ -791,7 +793,12 @@ rb_mod_protected_method_defined(VALUE mod, VALUE mid) int rb_method_entry_eq(const rb_method_entry_t *m1, const rb_method_entry_t *m2) { - const rb_method_definition_t *d1 = m1->def, *d2 = m2->def; + return rb_method_definition_eq(m1->def, m2->def); +} + +static int +rb_method_definition_eq(const rb_method_definition_t *d1, const rb_method_definition_t *d2) +{ if (!d1) { return !d2; } |
