なかだです。

At Thu, 7 Jun 2007 17:49:35 +0900,
Tadashi Saito wrote in [ruby-dev:30918]:
> ふと思い立って、以前akrさんが投げられたcallccでcoreを吐くテストを現状の
> 実装でも行ってみました。結果、[ruby-dev:24291]のみが現在でもcoreを吐く
> ようです。

いっぱいあって見落としてたみたいですねぇ。1.8でもそのままのような
気がします。


Index: enum.c =================================================================== --- enum.c (revision 12456) +++ enum.c (working copy) @@ -628,5 +628,9 @@ sort_by_cmp(const void *ap, const void * VALUE a = (*(NODE *const *)ap)->u1.value; VALUE b = (*(NODE *const *)bp)->u1.value; + VALUE ary = (VALUE)data; + if (RBASIC(ary)->klass) { + rb_raise(rb_eRuntimeError, "sort_by reentered"); + } return rb_cmpint(rb_funcall(a, id_cmp, 1, b), a, b); } @@ -718,5 +722,6 @@ enum_sort_by(VALUE obj) rb_block_call(obj, id_each, 0, 0, sort_by_i, ary); if (RARRAY_LEN(ary) > 1) { - ruby_qsort(RARRAY_PTR(ary), RARRAY_LEN(ary), sizeof(VALUE), sort_by_cmp, 0); + ruby_qsort(RARRAY_PTR(ary), RARRAY_LEN(ary), sizeof(VALUE), + sort_by_cmp, (void *)ary); } if (RBASIC(ary)->klass) {
-- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦