Project

General

Profile

Actions

Bug #5738

closed

if false; BEGIN {}; end が syntax error になる

Added by sho-h (Sho Hashimoto) about 13 years ago. Updated about 13 years ago.

Status:
Rejected
Assignee:
-
Target version:
-
ruby -v:
-
Backport:
[ruby-dev:44963]

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 :

エラーのタイプは異なりますが、この変更は意図的です。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 writes:

|エラーメッセージがわかりにくくなっている気がするのですが、こんな感じで
|エラーメッセージを表示してはどうでしょうか。
|
| https://gist.github.com/1455275

なるほど。それでもいいかもしれませんね。コミットしてください。

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0