なかだです。

At Wed, 15 Oct 2003 11:07:12 +0900,
Yukihiro Matsumoto wrote:
> ||ANSI-Cかどうかわかんないけど、VMSは確かEXIT_SUCCESSは1で、
> ||EXIT_FAILUREは0です。という意味でもEXIT_FAILUREにすべきか。
> |
> |ということでexitやexit!のデフォルトはEXIT_SUCCESSになったのに、
> |スクリプトの最後で終了するときの値が0のままになってるということ
> |です。
> 
> 十分に理解している自信が無いのですが、こういうこと?
> 
> --- eval.c	14 Oct 2003 10:09:39 -0000	1.564
> +++ eval.c	15 Oct 2003 02:05:31 -0000
> @@ -1334,3 +1334,3 @@ ruby_finalize()

ruby_finalize()はruby_finalize_0()の戻り値を捨てているので、何
を渡しても関係ないと思います。

ほとんどの環境(EXIT_SUCCESS == 0)では現状とほぼ変わりないはずで
すが、そうでない環境ではexit(ruby_nerrs)もまずいような気がして
来ました。

しかし、ruby_run()が2回呼ばれることはないはずなので、exがstatic
である必要もないような。

> でも、それだとhttp://sheepman.parfait.ne.jp/20031014.html#p02
> が説明できないような。

exit(1)としても常にEXIT_SUCCESSだったので誤動作した、ということ
かと思ったのですが。違うのかな。eval.cを1.564にしたら誤動作した
のか誤動作しなくなったのか、どっちでしょう。


Index: eval.c =================================================================== RCS file: /cvs/ruby/src/ruby/eval.c,v retrieving revision 1.564 diff -u -2 -p -r1.564 eval.c --- eval.c 14 Oct 2003 10:09:39 -0000 1.564 +++ eval.c 15 Oct 2003 02:26:32 -0000 @@ -1389,9 +1389,9 @@ ruby_run() { int state; - static int ex; + int ex = EXIT_SUCCESS; - if (ruby_nerrs > 0) exit(ruby_nerrs); + if (ruby_nerrs > 0) exit(EXIT_FAILURE); state = ruby_exec(); - if (state && !ex) ex = state; + if (state) ex = EXIT_FAILURE; ruby_stop(ex); }
-- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦