* lib/observer.rb: a patch from nornagon <nornagon@gmail.com>
merged to allow arbitrary names for update methods. [ruby-core:05416] * eval.c (rb_f_fcall): new method to avoid inefficiency of obj.instance_eval{send(...)} tricks. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@9082 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
48653d5ef0
commit
df27d91fc4
19
ChangeLog
19
ChangeLog
@ -1,3 +1,15 @@
|
|||||||
|
Mon Sep 5 17:03:07 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
|
||||||
|
|
||||||
|
* lib/ostruct.rb: a patch from Florian Gross <florgro@gmail.com>
|
||||||
|
merged to allow recursive inspect (and to_s) for OpenStruct.
|
||||||
|
[ruby-core:05532]
|
||||||
|
|
||||||
|
Mon Sep 5 08:20:19 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
|
||||||
|
|
||||||
|
* lib/observer.rb: a patch from nornagon <nornagon@gmail.com>
|
||||||
|
merged to allow arbitrary names for update methods.
|
||||||
|
[ruby-core:05416]
|
||||||
|
|
||||||
Mon Sep 5 07:01:12 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
|
Mon Sep 5 07:01:12 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
|
||||||
|
|
||||||
* ext/openssl/openssl/lib/openssl/buffering.rb (Buffering#do_write):
|
* ext/openssl/openssl/lib/openssl/buffering.rb (Buffering#do_write):
|
||||||
@ -8,6 +20,11 @@ Sun Sep 4 15:01:35 2005 Minero Aoki <aamine@loveruby.net>
|
|||||||
* parse.y (f_arg): Ripper should not do semantic check.
|
* parse.y (f_arg): Ripper should not do semantic check.
|
||||||
[ruby-dev:26948]
|
[ruby-dev:26948]
|
||||||
|
|
||||||
|
Sat Sep 3 23:52:35 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
|
||||||
|
|
||||||
|
* eval.c (rb_f_fcall): new method to avoid inefficiency of
|
||||||
|
obj.instance_eval{send(...)} tricks.
|
||||||
|
|
||||||
Sat Sep 3 13:59:31 2005 Tanaka Akira <akr@m17n.org>
|
Sat Sep 3 13:59:31 2005 Tanaka Akira <akr@m17n.org>
|
||||||
|
|
||||||
* lib/pathname.rb (Pathname#descend): Pathname.new("./a/b/c").descend
|
* lib/pathname.rb (Pathname#descend): Pathname.new("./a/b/c").descend
|
||||||
@ -3333,7 +3350,7 @@ Fri Mar 4 12:45:17 2005 Charles Mills <cmills@freeshell.org>
|
|||||||
(rb_define_const), accessors (rb_define_attr), and makes a
|
(rb_define_const), accessors (rb_define_attr), and makes a
|
||||||
couple fixes. [ruby-core:4307]
|
couple fixes. [ruby-core:4307]
|
||||||
|
|
||||||
Fri Mar 4 12:45:17 2005 Florian Gro <florgro@gmail.com>
|
Fri Mar 4 12:45:17 2005 Florian Gross <florgro@gmail.com>
|
||||||
|
|
||||||
* lib/rdoc/parsers/parse_rb.rb: Logic for def Builtin.method() end
|
* lib/rdoc/parsers/parse_rb.rb: Logic for def Builtin.method() end
|
||||||
[ruby-core:4302]
|
[ruby-core:4302]
|
||||||
|
3
class.c
3
class.c
@ -407,7 +407,8 @@ rb_include_module(klass, module)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
c = RCLASS(c)->super = include_class_new(module, RCLASS(c)->super);
|
RCLASS(c)->super = include_class_new(module, RCLASS(c)->super);
|
||||||
|
c = RCLASS(c)->super;
|
||||||
changed = 1;
|
changed = 1;
|
||||||
skip:
|
skip:
|
||||||
module = RCLASS(module)->super;
|
module = RCLASS(module)->super;
|
||||||
|
88
eval.c
88
eval.c
@ -6062,32 +6062,14 @@ rb_apply(recv, mid, args)
|
|||||||
return rb_call(CLASS_OF(recv), recv, mid, argc, argv, 1);
|
return rb_call(CLASS_OF(recv), recv, mid, argc, argv, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* call-seq:
|
|
||||||
* obj.send(symbol [, args...]) => obj
|
|
||||||
* obj.__send__(symbol [, args...]) => obj
|
|
||||||
*
|
|
||||||
* Invokes the method identified by _symbol_, passing it any
|
|
||||||
* arguments specified. You can use <code>__send__</code> if the name
|
|
||||||
* +send+ clashes with an existing method in _obj_.
|
|
||||||
*
|
|
||||||
* class Klass
|
|
||||||
* def hello(*args)
|
|
||||||
* "Hello " + args.join(' ')
|
|
||||||
* end
|
|
||||||
* end
|
|
||||||
* k = Klass.new
|
|
||||||
* k.send :hello, "gentle", "readers" #=> "Hello gentle readers"
|
|
||||||
*/
|
|
||||||
|
|
||||||
static VALUE
|
static VALUE
|
||||||
rb_f_send(argc, argv, recv)
|
send_fcall(argc, argv, recv, scope)
|
||||||
int argc;
|
int argc;
|
||||||
VALUE *argv;
|
VALUE *argv;
|
||||||
VALUE recv;
|
VALUE recv;
|
||||||
|
int scope;
|
||||||
{
|
{
|
||||||
VALUE vid;
|
VALUE vid;
|
||||||
int scope = (ruby_frame->flags & FRAME_FUNC) ? 1 : 0;
|
|
||||||
|
|
||||||
if (argc == 0) rb_raise(rb_eArgError, "no method name given");
|
if (argc == 0) rb_raise(rb_eArgError, "no method name given");
|
||||||
|
|
||||||
@ -6099,6 +6081,61 @@ rb_f_send(argc, argv, recv)
|
|||||||
return vid;
|
return vid;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* call-seq:
|
||||||
|
* obj.send(symbol [, args...]) => obj
|
||||||
|
* obj.__send__(symbol [, args...]) => obj
|
||||||
|
*
|
||||||
|
* Invokes the method identified by _symbol_, passing it any
|
||||||
|
* arguments specified. You can use <code>__send__</code> if the name
|
||||||
|
* +send+ clashes with an existing method in _obj_. Raises an
|
||||||
|
* NoMethodError exception for private methods except when it is
|
||||||
|
* called in function call style.
|
||||||
|
*
|
||||||
|
* class Klass
|
||||||
|
* def hello(*args)
|
||||||
|
* "Hello " + args.join(' ')
|
||||||
|
* end
|
||||||
|
* end
|
||||||
|
* k = Klass.new
|
||||||
|
* k.send :hello, "gentle", "readers" #=> "Hello gentle readers"
|
||||||
|
*
|
||||||
|
* 1.send(:puts, "foo") # NoMethodError exception
|
||||||
|
* send(:puts, "foo") # prints "foo"
|
||||||
|
*/
|
||||||
|
|
||||||
|
static VALUE
|
||||||
|
rb_f_send(argc, argv, recv)
|
||||||
|
int argc;
|
||||||
|
VALUE *argv;
|
||||||
|
VALUE recv;
|
||||||
|
{
|
||||||
|
int scope = (ruby_frame->flags & FRAME_FUNC) ? 1 : 0;
|
||||||
|
|
||||||
|
return send_fcall(argc, argv, recv, scope);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* call-seq:
|
||||||
|
* obj.fcall(symbol [, args...]) => obj
|
||||||
|
*
|
||||||
|
* Invokes the method identified by _symbol_, passing it any
|
||||||
|
* arguments specified. Unlike send, which calls private methods only
|
||||||
|
* when it is invoked in function call style, fcall always aware of
|
||||||
|
* private methods.
|
||||||
|
*
|
||||||
|
* 1.fcall(:puts, "hello") # prints "foo"
|
||||||
|
*/
|
||||||
|
|
||||||
|
static VALUE
|
||||||
|
rb_f_fcall(argc, argv, recv)
|
||||||
|
int argc;
|
||||||
|
VALUE *argv;
|
||||||
|
VALUE recv;
|
||||||
|
{
|
||||||
|
return send_fcall(argc, argv, recv, 1);
|
||||||
|
}
|
||||||
|
|
||||||
VALUE
|
VALUE
|
||||||
#ifdef HAVE_STDARG_PROTOTYPES
|
#ifdef HAVE_STDARG_PROTOTYPES
|
||||||
rb_funcall(VALUE recv, ID mid, int n, ...)
|
rb_funcall(VALUE recv, ID mid, int n, ...)
|
||||||
@ -7458,18 +7495,18 @@ rb_mod_modfunc(argc, argv, module)
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
static VALUE
|
static VALUE
|
||||||
rb_mod_append_features(module, include)
|
rb_mod_append_features(module, dest)
|
||||||
VALUE module, include;
|
VALUE module, dest;
|
||||||
{
|
{
|
||||||
switch (TYPE(include)) {
|
switch (TYPE(dest)) {
|
||||||
case T_CLASS:
|
case T_CLASS:
|
||||||
case T_MODULE:
|
case T_MODULE:
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
Check_Type(include, T_CLASS);
|
Check_Type(dest, T_CLASS);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
rb_include_module(include, module);
|
rb_include_module(dest, module);
|
||||||
|
|
||||||
return module;
|
return module;
|
||||||
}
|
}
|
||||||
@ -7907,6 +7944,7 @@ Init_eval()
|
|||||||
|
|
||||||
rb_define_method(rb_mKernel, "send", rb_f_send, -1);
|
rb_define_method(rb_mKernel, "send", rb_f_send, -1);
|
||||||
rb_define_method(rb_mKernel, "__send__", rb_f_send, -1);
|
rb_define_method(rb_mKernel, "__send__", rb_f_send, -1);
|
||||||
|
rb_define_method(rb_mKernel, "fcall", rb_f_fcall, -1);
|
||||||
rb_define_method(rb_mKernel, "instance_eval", rb_obj_instance_eval, -1);
|
rb_define_method(rb_mKernel, "instance_eval", rb_obj_instance_eval, -1);
|
||||||
|
|
||||||
rb_define_private_method(rb_cModule, "append_features", rb_mod_append_features, 1);
|
rb_define_private_method(rb_cModule, "append_features", rb_mod_append_features, 1);
|
||||||
|
@ -1186,13 +1186,13 @@ class TkFont
|
|||||||
def dup
|
def dup
|
||||||
src = self
|
src = self
|
||||||
obj = super()
|
obj = super()
|
||||||
obj.instance_eval{ initialize(src) }
|
obj.fcall(:initialize, src)
|
||||||
obj
|
obj
|
||||||
end
|
end
|
||||||
def clone
|
def clone
|
||||||
src = self
|
src = self
|
||||||
obj = super()
|
obj = super()
|
||||||
obj.instance_eval{ initialize(src) }
|
obj.fcall(:initialize, src)
|
||||||
obj
|
obj
|
||||||
end
|
end
|
||||||
=end
|
=end
|
||||||
|
@ -78,7 +78,7 @@ module Tk
|
|||||||
def self.new(name, keys=nil)
|
def self.new(name, keys=nil)
|
||||||
unless obj = Tk_IMGTBL["::icon::#{name}"]
|
unless obj = Tk_IMGTBL["::icon::#{name}"]
|
||||||
obj = allocate()
|
obj = allocate()
|
||||||
obj.instance_eval{initialize(name, keys)}
|
obj.fcall(:initialize, name, keys)
|
||||||
end
|
end
|
||||||
obj
|
obj
|
||||||
end
|
end
|
||||||
|
@ -710,7 +710,7 @@ class TkTreeCtrl_demo
|
|||||||
systemHighlightText = @SystemHighlightText
|
systemHighlightText = @SystemHighlightText
|
||||||
|
|
||||||
proc_disp_styles_in_item = proc{|item|
|
proc_disp_styles_in_item = proc{|item|
|
||||||
master.instance_eval{ display_styles_in_item(item) }
|
master.fcall(:display_styles_in_item, item)
|
||||||
}
|
}
|
||||||
|
|
||||||
@demo_scripts.instance_eval{
|
@demo_scripts.instance_eval{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user