From: nobu@... Date: 2005-07-31T12:00:24+09:00 Subject: [ruby-dev:26660] Re: SEGV at zsuper with anonymous rest args. なかだです。 At Fri, 29 Jul 2005 18:21:35 +0900, H.Yamamoto wrote in [ruby-dev:26647]: > >|1.9がtest_super.rbのtest_array1でSEGVしています。 > >| > >|* eval.c (rb_call0): fix calling zsuper from a method with anonymous > >| rest argument. > > > >コミットしてください。 > > まだ落ちているようです。コールスタックを添付します。 こんなところでしょうか。 Index: eval.c =================================================================== RCS file: /cvs/ruby/src/ruby/eval.c,v retrieving revision 1.808 diff -U2 -p -r1.808 eval.c --- eval.c 29 Jul 2005 00:59:55 -0000 1.808 +++ eval.c 31 Jul 2005 02:50:37 -0000 @@ -5798,5 +5798,5 @@ rb_call0(klass, recv, id, oid, argc, arg int itr; static int tick; - volatile VALUE args; + volatile VALUE args = 0; TMP_PROTECT; @@ -5904,5 +5904,21 @@ rb_call0(klass, recv, id, oid, argc, arg } else { - local_vars = ruby_scope->local_vars = 0; + local_vars = 0; + if (argc > 0) { + if (args) { + rb_ary_unshift(args, Qnil); + rb_ary_unshift(args, Qnil); + local_vars = RARRAY(args)->ptr; + } + else { + args = rb_ary_new2(argc + 2); + local_vars = RARRAY(args)->ptr; + local_vars[0] = Qnil; + local_vars[1] = Qnil; + MEMCPY(local_vars + 2, argv, VALUE, argc); + } + argv = local_vars + 2; + } + ruby_scope->local_vars = local_vars; ruby_scope->local_tbl = 0; } @@ -9329,5 +9345,5 @@ rb_node_arity(body) if (!body) return 0; n = body->nd_cnt; - if (body->nd_opt || body->nd_rest) + if (body->nd_opt || RTEST(body->nd_rest)) n = -n-1; return n; -- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦