From: nobu.nakada@... Date: 2002-05-22T18:58:36+09:00 Subject: [ruby-dev:17188] Re: コマンドラインオプションの順序制約 なかだです。 At Wed, 22 May 2002 18:03:29 +0900, Yukihiro Matsumoto wrote: > |-0がすでに数字だけを使うようになっているので、-Tもそのほうがよ > |さそうな気がします。それに、もし-Tがそれ以降をすべて消費するの > |であれば、数字以外はエラーにすべきでは。 > > そうか、数字を受けるのは-0と-Tだけですものね。 > では、-0に合わせましょう。って、中田さんのパッチでよいのか。 > > でも、-*-とRUBYOPTまわりの変更はよくわからなかったんですが。 > というか、-*-に関しては元のコードも十分わからないという、自 > 分が書いたんだろうに。 あ、-*-ですか。いや、これ何だろうとは思ったんですが、あんまり気 にしてなかった。うーん、あのパッチだと #!ruby -*-ruby-*- なんて のがエラーになりますね。逆に今はコマンドラインでも -* がエラー にならないとか。 RUBYOPTまわりは単に、moreswitches()の先頭で空白は飛ばしてるので 毎回は不要だろうというだけです。 Index: ruby.c =================================================================== RCS file: /cvs/ruby/src/ruby/ruby.c,v retrieving revision 1.58 diff -u -2 -p -r1.58 ruby.c --- ruby.c 2002/05/14 06:22:26 1.58 +++ ruby.c 2002/05/22 09:52:02 @@ -559,8 +559,9 @@ proc_options(argc, argv) v = scan_oct(s, 2, &numlen); if (numlen == 0) v = 1; + s += numlen; } rb_set_safe_level(v); } - break; + goto reswitch; case 'I': @@ -624,9 +625,26 @@ proc_options(argc, argv) break; - case '*': case ' ': if (s[1] == '-') s+=2; - break; + goto reswitch; + case '*': + if (argv0 == 0 && s[1] == '-') { + /* for -*- line, only in #! line */ + s += 2; + if (s = strstr(s, "-*-")) { + s += 3; + } + else { + while (argc > 0 && (s = strstr(argv[0], "-*-")) == 0) { + --argc; + ++argv; + } + if (!s) break; + s += 3; + } + goto reswitch; + } + /* through */ default: fprintf(stderr, "%s: invalid option -%c (-h will show valid options)\n", @@ -657,8 +675,10 @@ proc_options(argc, argv) else { while (s && *s) { - while (ISSPACE(*s)) s++; if (*s == '-') { s++; - if (ISSPACE(*s)) continue; + if (ISSPACE(*s)) { + do {s++;} while (ISSPACE(*s)); + continue; + } } if (!*s) break; -- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦