Bug #5738
closedif false; BEGIN {}; end が syntax error になる
Description
1.8 の時と異なり、以下のコードが syntax error になります。
if false; BEGIN {}; end
test/ruby/test_beginendblock.rb や過去の NEWS に記述がない事などから、もしかしたらバグかもしれないと考えています。1.9 からの仕様であれば reject してやってください。
なお、以下についても syntax error になりますが、1.8 の時と異なり、yyerror("BEGIN in method"); に到達しない事からチケットを発行する事にしました。
def foo; BEGIN {}; end
Updated by matz (Yukihiro Matsumoto) about 13 years ago
- Status changed from Open to Rejected
エラーのタイプは異なりますが、この変更は意図的です。ifでくくってあってもBEGINはコンパイル時に登録されます。ので、トップレベルでしか登録できないように文法が変更されました。
Updated by sho-h (Sho Hashimoto) about 13 years ago
了解です。ありがとうございます。
Updated by shugo (Shugo Maeda) about 13 years ago
- ruby -v changed from ruby 1.9.3dev (2011-07-31 revision 32789) [i686-linux] to -
前田です。
2011年12月10日22:10 Yukihiro Matsumoto matz@ruby-lang.org:
エラーのタイプは異なりますが、この変更は意図的です。ifでくくってあってもBEGINはコンパイル時に登録されます。ので、トップレベルでしか登録できないように文法が変更されました。
エラーメッセージがわかりにくくなっている気がするのですが、こんな感じで
エラーメッセージを表示してはどうでしょうか。
https://gist.github.com/1455275
せめて、以下のパスは通らないので削った方がいいように思います。
if (in_def || in_single) {
yyerror("BEGIN in method");
}
--
Shugo Maeda
Updated by matz (Yukihiro Matsumoto) about 13 years ago
まつもと ゆきひろです
In message "Re: [ruby-dev:44966] Re: [ruby-trunk - Bug #5738][Rejected] if false; BEGIN {}; end が syntax error になる"
on Sat, 10 Dec 2011 23:25:19 +0900, Shugo Maeda shugo@ruby-lang.org writes:
|エラーメッセージがわかりにくくなっている気がするのですが、こんな感じで
|エラーメッセージを表示してはどうでしょうか。
|
| https://gist.github.com/1455275
なるほど。それでもいいかもしれませんね。コミットしてください。