Bug #5738 closed
if false; BEGIN {}; end が syntax error になる
Added by sho-h (Sho Hashimoto) about 13 years ago.
Updated about 13 years ago.
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
Status changed from Open to Rejected
エラーのタイプは異なりますが、この変更は意図的です。ifでくくってあってもBEGINはコンパイル時に登録されます。ので、トップレベルでしか登録できないように文法が変更されました。
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
Also available in: Atom
PDF
Like 0
Like 0 Like 0 Like 0 Like 0