summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog7
-rw-r--r--eval.c4
-rw-r--r--lib/delegate.rb6
3 files changed, 13 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index 3dbc491fbc..e1fedc8fe1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+Sat Jan 5 01:50:32 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (Init_eval): move instance_eval and instance_exec to
+ BasicObject. [ruby-core:14747]
+
+ * lib/delegate.rb: should preserve new methods in BasicObject.
+
Sat Jan 5 01:46:29 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
* ruby.c (proc_options): update according to the last API revert.
diff --git a/eval.c b/eval.c
index 270d160ba0..27417e98c9 100644
--- a/eval.c
+++ b/eval.c
@@ -2726,8 +2726,8 @@ Init_eval(void)
rb_define_method(rb_mKernel, "send", rb_f_send, -1);
rb_define_method(rb_mKernel, "public_send", rb_f_public_send, -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_cBasicObject, "instance_eval", rb_obj_instance_eval, -1);
+ rb_define_method(rb_cBasicObject, "instance_exec", rb_obj_instance_exec, -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);
diff --git a/lib/delegate.rb b/lib/delegate.rb
index 8501ed1064..f4068f1b32 100644
--- a/lib/delegate.rb
+++ b/lib/delegate.rb
@@ -115,7 +115,9 @@
# implementation, see SimpleDelegator.
#
class Delegator
- preserved = [:__id__, :object_id, :__send__, :public_send, :respond_to?, :send]
+ preserved = [:__id__, :object_id, :__send__, :public_send, :respond_to?, :send,
+ :instance_eval, :instance_exec,
+ ]
instance_methods.each do |m|
next if preserved.include?(m)
undef_method m
@@ -264,7 +266,7 @@ def DelegateClass(superclass)
methods -= [
:__id__, :object_id, :__send__, :public_send, :respond_to?, :send,
:==, :equal?, :initialize, :method_missing, :__getobj__, :__setobj__,
- :clone, :dup, :marshal_dump, :marshal_load,
+ :clone, :dup, :marshal_dump, :marshal_load, :instance_eval, :instance_exec,
]
klass.module_eval {
include Delegator::MethodDelegation