summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--eval.c10
2 files changed, 15 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 4210108cb8..832cf16b3f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Mon Oct 9 01:56:34 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_obj_define_method): add new method
+ Kernel#define_singleton_method. [ruby-list:42851]
+
Sat Oct 7 23:53:08 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
* string.c (rb_str_scan): small documentation fix.
diff --git a/eval.c b/eval.c
index 12f852f776..829e8cd45a 100644
--- a/eval.c
+++ b/eval.c
@@ -234,6 +234,7 @@ VALUE rb_cMethod;
VALUE rb_cUnboundMethod;
static VALUE umethod_bind(VALUE, VALUE);
static VALUE rb_mod_define_method(int, VALUE*, VALUE);
+static VALUE rb_obj_define_method(int, VALUE*, VALUE);
NORETURN(static void rb_raise_jump(VALUE));
static VALUE rb_make_exception(int argc, VALUE *argv);
@@ -7910,6 +7911,7 @@ Init_eval(void)
rb_define_method(rb_cBasicObject, "__send!", rb_f_funcall, -1);
rb_define_method(rb_mKernel, "instance_eval", rb_obj_instance_eval, -1);
rb_define_method(rb_mKernel, "instance_exec", rb_obj_instance_exec, -1);
+ rb_define_method(rb_mKernel, "define_singleton_method", rb_obj_define_method, -1);
rb_define_private_method(rb_cModule, "append_features", rb_mod_append_features, 1);
rb_define_private_method(rb_cModule, "extend_object", rb_mod_extend_object, 1);
@@ -9567,6 +9569,14 @@ rb_mod_define_method(int argc, VALUE *argv, VALUE mod)
return body;
}
+static VALUE
+rb_obj_define_method(int argc, VALUE *argv, VALUE obj)
+{
+ VALUE klass = rb_singleton_class(obj);
+
+ return rb_mod_define_method(argc, argv, klass);
+}
+
/*
* <code>Proc</code> objects are blocks of code that have been bound to
* a set of local variables. Once bound, the code may be called in