ruby-changes:20691
From: nobu <ko1@a...>
Date: Fri, 29 Jul 2011 23:53:58 +0900 (JST)
Subject: [ruby-changes:20691] nobu:r32739 (trunk): * vm_eval.c (rb_apply): get rid of too large alloca.
nobu 2011-07-29 23:53:47 +0900 (Fri, 29 Jul 2011) New Revision: 32739 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=32739 Log: * vm_eval.c (rb_apply): get rid of too large alloca. Modified files: trunk/ChangeLog trunk/vm_eval.c Index: ChangeLog =================================================================== --- ChangeLog (revision 32738) +++ ChangeLog (revision 32739) @@ -1,3 +1,7 @@ +Fri Jul 29 23:53:44 2011 Nobuyoshi Nakada <nobu@r...> + + * vm_eval.c (rb_apply): get rid of too large alloca. + Fri Jul 29 20:48:39 2011 Tanaka Akira <akr@f...> * ext/socket/mkconstants.rb: fix typos. Index: vm_eval.c =================================================================== --- vm_eval.c (revision 32738) +++ vm_eval.c (revision 32739) @@ -597,9 +597,17 @@ rb_apply(VALUE recv, ID mid, VALUE args) { int argc; - VALUE *argv; + VALUE *argv, ret; argc = RARRAY_LENINT(args); + if (argc >= 0x100) { + args = rb_ary_subseq(args, 0, argc); + RBASIC(args)->klass = 0; + OBJ_FREEZE(args); + ret = rb_call(recv, mid, argc, RARRAY_PTR(args), CALL_FCALL); + RB_GC_GUARD(args); + return ret; + } argv = ALLOCA_N(VALUE, argc); MEMCPY(argv, RARRAY_PTR(args), VALUE, argc); return rb_call(recv, mid, argc, argv, CALL_FCALL); -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/