* enumerator.c (yielder_yield_i): use rb_proc_new instead of

rb_iterate.  [ruby-dev:38518]
 
* README.EXT: rb_iterate is obsolete since 1.9; use rb_block_call
  instead.
 
* README.EXT.ja: ditto.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@24094 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
mame 2009-07-13 16:07:43 +00:00
Родитель 9e6a1e1479
Коммит cb46d98caa
4 изменённых файлов: 35 добавлений и 9 удалений

Просмотреть файл

@ -1,3 +1,13 @@
Tue Jul 14 01:06:31 2009 Yusuke Endoh <mame@tsg.ne.jp>
* enumerator.c (yielder_yield_i): use rb_proc_new instead of
rb_iterate. [ruby-dev:38518]
* README.EXT: rb_iterate is obsolete since 1.9; use rb_block_call
instead.
* README.EXT.ja: ditto.
Tue Jul 14 00:45:41 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp> Tue Jul 14 00:45:41 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
* test/ruby/test_case.rb (TestCase#test_deoptimization): * test/ruby/test_case.rb (TestCase#test_deoptimization):

Просмотреть файл

@ -1159,12 +1159,23 @@ Sets the value of the instance variable.
** Control Structure ** Control Structure
VALUE rb_iterate(VALUE (*func1)(), void *arg1, VALUE (*func2)(), void *arg2) VALUE rb_block_call(VALUE recv, ID mid, int argc, VALUE * argv,
VALUE (*func) (ANYARGS), VALUE data2)
Calls a method on the recv, with the method name specified by the
symbol mid, supplying func as the block. func will receive the
value from yield as the first argument, data2 as the second, and
argc/argv as the third/fourth arguments.
[OBSOLETE] VALUE rb_iterate(VALUE (*func1)(), void *arg1, VALUE (*func2)(), void *arg2)
Calls the function func1, supplying func2 as the block. func1 will be Calls the function func1, supplying func2 as the block. func1 will be
called with the argument arg1. func2 receives the value from yield as called with the argument arg1. func2 receives the value from yield as
the first argument, arg2 as the second argument. the first argument, arg2 as the second argument.
When rb_iterate is used in 1.9, func1 has to call some Ruby-level method.
This function is obsolete since 1.9; use rb_block_call instead.
VALUE rb_yield(VALUE val) VALUE rb_yield(VALUE val)
Evaluates the block with value val. Evaluates the block with value val.

Просмотреть файл

@ -1258,12 +1258,23 @@ VALUE rb_iv_set(VALUE obj, const char *name, VALUE val)
** 制御構造 ** 制御構造
VALUE rb_iterate(VALUE (*func1)(), VALUE arg1, VALUE (*func2)(), VALUE arg2) VALUE rb_block_call(VALUE obj, ID mid, int argc, VALUE * argv,
VALUE (*func) (ANYARGS), VALUE data2)
funcをブロックとして設定し, objをレシーバ, argcとargvを引
数としてmidメソッドを呼び出す. funcは第一引数にyieldされた
値, 第二引数にdata2, 第三, 第四引数にargcとargvを受け取る.
[OBSOLETE] VALUE rb_iterate(VALUE (*func1)(), VALUE arg1, VALUE (*func2)(), VALUE arg2)
func2をブロックとして設定し, func1をイテレータとして呼ぶ func2をブロックとして設定し, func1をイテレータとして呼ぶ
func1には arg1が引数として渡され, func2には第1引数にイテレー func1には arg1が引数として渡され, func2には第1引数にイテレー
タから与えられた値, 第2引数にarg2が渡される タから与えられた値, 第2引数にarg2が渡される
1.9でrb_iterateを使う場合は, func1の中でRubyレベルのメソッド
を呼び出さなければならない.
1.9でobsoleteとなった. 代わりにrb_block_callが用意された.
VALUE rb_yield(VALUE val) VALUE rb_yield(VALUE val)
valを値としてイテレータブロックを呼び出す valを値としてイテレータブロックを呼び出す

Просмотреть файл

@ -717,12 +717,6 @@ yielder_yield(VALUE obj, VALUE args)
return obj; return obj;
} }
static VALUE
yielder_new_i(VALUE dummy)
{
return yielder_init(yielder_allocate(rb_cYielder), rb_block_proc());
}
static VALUE static VALUE
yielder_yield_i(VALUE obj, VALUE memo, int argc, VALUE *argv) yielder_yield_i(VALUE obj, VALUE memo, int argc, VALUE *argv)
{ {
@ -732,7 +726,7 @@ yielder_yield_i(VALUE obj, VALUE memo, int argc, VALUE *argv)
static VALUE static VALUE
yielder_new(void) yielder_new(void)
{ {
return rb_iterate(yielder_new_i, (VALUE)0, yielder_yield_i, (VALUE)0); return yielder_init(yielder_allocate(rb_cYielder), rb_proc_new(yielder_yield_i, 0));
} }
/* /*