なかだです。

Thread.startの引数とブロック引数が一致しなくてもエラーにならな
くなってます。1.6ではArgumentErrorになります。

  $ ruby16 -e 'Thread.start(1){|a,b|p a,b}.join'
  -e:1: wrong # of arguments (1 for 2) (ArgumentError)
  	from -e:1:in `join'
  	from -e:1
  $ ruby18 -e 'Thread.start(1){|a,b|p a,b}.join'
  1
  nil

rb_yield_0()の引数を変えたときの変更洩れじゃないかと思うのです
が。


* eval.c (rb_thread_yield, rb_f_catch): 4th argument to rb_yield_0()
  is a set of bit flags.


Index: eval.c =================================================================== RCS file: /cvs/ruby/src/ruby/eval.c,v retrieving revision 1.674 diff -u -2 -p -r1.674 eval.c --- eval.c 29 Jun 2004 01:31:32 -0000 1.674 +++ eval.c 4 Jul 2004 14:26:40 -0000 @@ -11471,5 +11471,5 @@ rb_thread_yield(arg, th) ruby_block->dyna_vars = ruby_dyna_vars; - return rb_yield_0(arg, 0, 0, Qtrue, Qtrue); + return rb_yield_0(arg, 0, 0, YIELD_LAMBDA_CALL, Qtrue); } @@ -12514,5 +12514,5 @@ rb_f_catch(dmy, tag) PUSH_TAG(tag); if ((state = EXEC_TAG()) == 0) { - val = rb_yield_0(tag, 0, 0, Qfalse, Qfalse); + val = rb_yield_0(tag, 0, 0, 0, Qfalse); } else if (state == TAG_THROW && tag == prot_tag->dst) {
-- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦