From: wanabe Date: 2008-04-09T19:20:37+09:00 Subject: [ruby-dev:34272] patch for [ruby-core:14537] ワナベと申します。 [ruby-core:14537]に対するパッチを書きました。 rescue の引数に配列の展開を許すようにしました。 Index: compile.c =================================================================== --- compile.c (revision 15910) +++ compile.c (working copy) @@ -3211,11 +3211,27 @@ narg = resq->nd_args; while (narg) { - COMPILE(ret, "rescue arg", narg->nd_head); - ADD_INSN2(ret, nd_line(node), getdynamic, INT2FIX(1), - INT2FIX(0)); - ADD_SEND(ret, nd_line(node), ID2SYM(idEqq), INT2FIX(1)); - ADD_INSNL(ret, nd_line(node), branchif, label_hit); + if (nd_type(narg) == NODE_SPLAT || + nd_type(narg) == NODE_ARGSCAT) { + ADD_INSN2(ret, nd_line(node), getdynamic, INT2FIX(1), + INT2FIX(0)); + COMPILE(ret, "rescue arg", narg->nd_head); + if (nd_type(narg) == NODE_ARGSCAT) { + COMPILE(ret, "rescue argscat", narg->nd_body); + ADD_INSN(ret, nd_line(node), concatarray); + } + ADD_INSN1(ret, nd_line(node), checkincludearray, Qtrue); + ADD_INSN(ret, nd_line(node), swap); + ADD_INSN(ret, nd_line(node), pop); + ADD_INSNL(ret, nd_line(node), branchif, label_hit); + } + else { + COMPILE(ret, "rescue arg", narg->nd_head); + ADD_INSN2(ret, nd_line(node), getdynamic, INT2FIX(1), + INT2FIX(0)); + ADD_SEND(ret, nd_line(node), ID2SYM(idEqq), INT2FIX(1)); + ADD_INSNL(ret, nd_line(node), branchif, label_hit); + } narg = narg->nd_next; } if (resq->nd_args == 0) { -- ワナベ