aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-09-12 15:03:02 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-09-12 15:03:02 +0000
commitd7feab06ccaacff4e673f22e55a9b8f537fa89ba (patch)
treefeaacfbcd5bc13c8509c59b914d084ae19b14b30
parent797749c21938b27098d758a2d837b42996c0c310 (diff)
downloadruby-d7feab06ccaacff4e673f22e55a9b8f537fa89ba.tar.gz
* vm_method.c (rb_add_method, rb_add_method_me): call method added
hook after definition. [ruby-core:25536] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@24867 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog5
-rw-r--r--test/ruby/test_module.rb19
-rw-r--r--version.h4
-rw-r--r--vm_method.c13
4 files changed, 36 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index 4fcf7beb1a..8870b0b19d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Sun Sep 13 00:03:01 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * 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@fsij.org>
* lib/open-uri.rb (URI::FTP#buffer_open): use the port specified in
diff --git a/test/ruby/test_module.rb b/test/ruby/test_module.rb
index c001c5507c..23fce969dd 100644
--- a/test/ruby/test_module.rb
+++ b/test/ruby/test_module.rb
@@ -755,4 +755,23 @@ class TestModule < Test::Unit::TestCase
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
diff --git a/version.h b/version.h
index 834b46827b..c56e318aeb 100644
--- a/version.h
+++ b/version.h
@@ -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"
diff --git a/vm_method.c b/vm_method.c
index 1091eadbcd..c263defda2 100644
--- a/vm_method.c
+++ b/vm_method.c
@@ -212,6 +212,12 @@ rb_add_method_def(VALUE klass, ID mid, rb_method_type_t type, rb_method_definiti
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_add_method_def(VALUE klass, ID mid, rb_method_type_t type, rb_method_definiti
rb_funcall(klass, added, 1, ID2SYM(mid));
}
}
-
- return me;
}
rb_method_entry_t *
@@ -260,6 +264,7 @@ rb_add_method(VALUE klass, ID mid, rb_method_type_t type, void *opts, rb_method_
default:
rb_bug("rb_add_method: unsupported method type (%d)\n", type);
}
+ method_added(klass, mid);
return me;
}
@@ -267,7 +272,9 @@ rb_method_entry_t *
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