зеркало из https://github.com/github/ruby.git
* 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:
Родитель
48653d5ef0
Коммит
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>
|
||||
|
||||
* 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.
|
||||
[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>
|
||||
|
||||
* 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
|
||||
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
|
||||
[ruby-core:4302]
|
||||
|
|
3
class.c
3
class.c
|
@ -407,7 +407,8 @@ rb_include_module(klass, module)
|
|||
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;
|
||||
skip:
|
||||
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);
|
||||
}
|
||||
|
||||
/*
|
||||
* 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
|
||||
rb_f_send(argc, argv, recv)
|
||||
send_fcall(argc, argv, recv, scope)
|
||||
int argc;
|
||||
VALUE *argv;
|
||||
VALUE recv;
|
||||
int scope;
|
||||
{
|
||||
VALUE vid;
|
||||
int scope = (ruby_frame->flags & FRAME_FUNC) ? 1 : 0;
|
||||
|
||||
if (argc == 0) rb_raise(rb_eArgError, "no method name given");
|
||||
|
||||
|
@ -6099,6 +6081,61 @@ rb_f_send(argc, argv, recv)
|
|||
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
|
||||
#ifdef HAVE_STDARG_PROTOTYPES
|
||||
rb_funcall(VALUE recv, ID mid, int n, ...)
|
||||
|
@ -7458,18 +7495,18 @@ rb_mod_modfunc(argc, argv, module)
|
|||
*/
|
||||
|
||||
static VALUE
|
||||
rb_mod_append_features(module, include)
|
||||
VALUE module, include;
|
||||
rb_mod_append_features(module, dest)
|
||||
VALUE module, dest;
|
||||
{
|
||||
switch (TYPE(include)) {
|
||||
switch (TYPE(dest)) {
|
||||
case T_CLASS:
|
||||
case T_MODULE:
|
||||
break;
|
||||
default:
|
||||
Check_Type(include, T_CLASS);
|
||||
Check_Type(dest, T_CLASS);
|
||||
break;
|
||||
}
|
||||
rb_include_module(include, module);
|
||||
rb_include_module(dest, 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, "fcall", rb_f_fcall, -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);
|
||||
|
|
|
@ -1186,13 +1186,13 @@ class TkFont
|
|||
def dup
|
||||
src = self
|
||||
obj = super()
|
||||
obj.instance_eval{ initialize(src) }
|
||||
obj.fcall(:initialize, src)
|
||||
obj
|
||||
end
|
||||
def clone
|
||||
src = self
|
||||
obj = super()
|
||||
obj.instance_eval{ initialize(src) }
|
||||
obj.fcall(:initialize, src)
|
||||
obj
|
||||
end
|
||||
=end
|
||||
|
|
|
@ -78,7 +78,7 @@ module Tk
|
|||
def self.new(name, keys=nil)
|
||||
unless obj = Tk_IMGTBL["::icon::#{name}"]
|
||||
obj = allocate()
|
||||
obj.instance_eval{initialize(name, keys)}
|
||||
obj.fcall(:initialize, name, keys)
|
||||
end
|
||||
obj
|
||||
end
|
||||
|
|
|
@ -710,7 +710,7 @@ class TkTreeCtrl_demo
|
|||
systemHighlightText = @SystemHighlightText
|
||||
|
||||
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{
|
||||
|
|
Загрузка…
Ссылка в новой задаче