ruby-changes:13117
From: nobu <ko1@a...>
Date: Sun, 13 Sep 2009 00:03:20 +0900 (JST)
Subject: [ruby-changes:13117] Ruby:r24867 (trunk): * vm_method.c (rb_add_method, rb_add_method_me): call method added
nobu 2009-09-13 00:03:02 +0900 (Sun, 13 Sep 2009) New Revision: 24867 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=24867 Log: * vm_method.c (rb_add_method, rb_add_method_me): call method added hook after definition. [ruby-core:25536] Modified files: trunk/ChangeLog trunk/test/ruby/test_module.rb trunk/version.h trunk/vm_method.c Index: ChangeLog =================================================================== --- ChangeLog (revision 24866) +++ ChangeLog (revision 24867) @@ -1,3 +1,8 @@ +Sun Sep 13 00:03:01 2009 Nobuyoshi Nakada <nobu@r...> + + * vm_method.c (rb_add_method, rb_add_method_me): call method added + hook after definition. [ruby-core:25536] + Sat Sep 12 22:47:24 2009 Tanaka Akira <akr@f...> * lib/open-uri.rb (URI::FTP#buffer_open): use the port specified in Index: vm_method.c =================================================================== --- vm_method.c (revision 24866) +++ vm_method.c (revision 24867) @@ -212,6 +212,12 @@ st_insert(mtbl, mid, (st_data_t) me); + return me; +} + +static void +method_added(VALUE klass, ID mid) +{ if (mid != ID_ALLOCATOR && ruby_running) { if (FL_TEST(klass, FL_SINGLETON)) { rb_funcall(rb_iv_get(klass, "__attached__"), singleton_added, 1, ID2SYM(mid)); @@ -220,8 +226,6 @@ rb_funcall(klass, added, 1, ID2SYM(mid)); } } - - return me; } rb_method_entry_t * @@ -260,6 +264,7 @@ default: rb_bug("rb_add_method: unsupported method type (%d)\n", type); } + method_added(klass, mid); return me; } @@ -267,7 +272,9 @@ rb_add_method_me(VALUE klass, ID mid, const rb_method_entry_t *me, rb_method_flag_t noex) { rb_method_type_t type = me->def ? me->def->type : VM_METHOD_TYPE_UNDEF; - return rb_add_method_def(klass, mid, type, me->def, noex); + rb_method_entry_t *newme = rb_add_method_def(klass, mid, type, me->def, noex); + method_added(klass, mid); + return newme; } void Index: version.h =================================================================== --- version.h (revision 24866) +++ version.h (revision 24867) @@ -1,5 +1,5 @@ #define RUBY_VERSION "1.9.2" -#define RUBY_RELEASE_DATE "2009-09-12" +#define RUBY_RELEASE_DATE "2009-09-13" #define RUBY_PATCHLEVEL -1 #define RUBY_BRANCH_NAME "trunk" @@ -8,7 +8,7 @@ #define RUBY_VERSION_TEENY 1 #define RUBY_RELEASE_YEAR 2009 #define RUBY_RELEASE_MONTH 9 -#define RUBY_RELEASE_DAY 12 +#define RUBY_RELEASE_DAY 13 #include "ruby/version.h" Index: test/ruby/test_module.rb =================================================================== --- test/ruby/test_module.rb (revision 24866) +++ test/ruby/test_module.rb (revision 24867) @@ -755,4 +755,23 @@ c = eval("class C\u{df}; self; end") assert_equal("TestModule::C\u{df}", c.name, '[ruby-core:24600]') end + + def test_method_added + memo = [] + mod = Module.new do + mod = self + (class << self ; self ; end).class_eval do + define_method :method_added do |sym| + memo << sym + memo << mod.instance_methods(false) + memo << (mod.instance_method(sym) rescue nil) + end + end + def f + end + end + assert_equal :f, memo.shift + assert_equal mod.instance_methods(false), memo.shift + assert_equal mod.instance_method(:f), memo.shift + end end -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/