From: nobuyoshi nakada Date: 2005-08-09T18:36:47+09:00 Subject: [ruby-dev:26774] Re: zsuper in a method with optional arg At Tue, 9 Aug 2005 18:12:38 +0900, Yukihiro Matsumoto wrote in [ruby-dev:26773]: > |> |どちらが意図した挙動でしょう。なんか前にも議論になりましたっけ? > |> > |> えーと、私の意図に近いのは前者の方なんですが、後者もそれなり > |> にうれしい局面もありそうですね。どっちがいいんだろう? > | > |最初、呼び出し側から渡されたものがそのまま渡されるHEADの動作の > |ほうが自然かもと思ってたんですが、[ruby-dev:23973]からの「引数 > |の上書きとsuper」のスレッドでの結論からすると、今の1.8の動作の > |ほうが正しいように見えます。 > > そうかあ。では、コミットしていただけませんか。 ループとifをまとめるとこんな感じかなぁ。帰ってからコミットしま す。 * eval.c (formal_assign): let default values override arguments to zsuper. fixed: [ruby-dev:26743] Index: eval.c =================================================================== RCS file: /cvs/ruby/src/ruby/eval.c,v retrieving revision 1.813 diff -U2 -p -u -r1.813 eval.c --- eval.c 8 Aug 2005 23:24:23 -0000 1.813 +++ eval.c 9 Aug 2005 09:29:22 -0000 @@ -5732,4 +5731,5 @@ formal_assign(recv, node, argc, argv, lo { int i; + int nopt = 0; if (nd_type(node) != NODE_ARGS) { @@ -5742,7 +5742,7 @@ formal_assign(recv, node, argc, argv, lo } if (!node->nd_rest) { - int nopt = i; NODE *optnode = node->nd_opt; + nopt = i; while (optnode) { nopt++; @@ -5781,13 +5781,18 @@ formal_assign(recv, node, argc, argv, lo } } - if (node->nd_rest) { + if (!node->nd_rest) { + i = nopt; + } + else { VALUE v; - if (argc > 0) + if (argc > 0) { v = rb_ary_new4(argc,argv); - else + i = -i - 1; + } + else { v = rb_ary_new2(0); + } assign(recv, node->nd_rest, v, 1); - if (argc > 0) return -i - 1; } return i; -- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦