Bug #11456
closedHash リテラル中で rescue をもちいると SyntaxError になる
Description
ruby 2.3.0dev (2015-08-18 trunk 51622) にて、Hash リテラル中で rescue をもちいると SyntaxError になりました。
まず、ruby 2.2.0p0 (2014-12-25 revision 49005) [x86_64-darwin13] の実行結果です。
% irb
irb(main):001:0> {foo: ("" rescue "")}
=> {:foo=>""}
次に、ruby 2.3.0dev (2015-08-18 trunk 51622) [x86_64-darwin13] の実行結果です。
% irb
irb(main):001:0> {foo: ("" rescue "")}
SyntaxError: (irb):1: syntax error, unexpected modifier_rescue, expecting ')'
{ foo: ('' rescue '') }
^
from /Users/koic/.rbenv/versions/2.3.0-dev/bin/irb:11:in `<main>'
こちらの挙動について期待している振る舞いかどうか判断がつかなかったため、レポートとさせてください。
Updated by nobu (Nobuyoshi Nakada) over 9 years ago
- Related to Bug #10653: do-end block in ternary operator is syntax error added
Updated by nobu (Nobuyoshi Nakada) over 9 years ago
- Description updated (diff)
- Backport changed from 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN to 2.0.0: DONTNEED, 2.1: DONTNEED, 2.2: REQUIRED
Updated by nobu (Nobuyoshi Nakada) over 9 years ago
- Status changed from Open to Closed
Applied in changeset r51624.
parse.y: fix labelarg
- parse.y (IS_BEG): include labeled argument state, which was
EXPR_LABELARG. [ruby-dev:49221] [Bug #11456]
Updated by nagachika (Tomoyuki Chikanaga) over 9 years ago
バックポート用メモ
ruby_2_2
の HEAD ( ruby 2.2.3p171 (2015-08-17 revision 51619)) においては以下はいずれも syntax error になりません。
{foo: ("" rescue "")}
{foo: (1 rescue 0)}
{foo: /=/}
#10653 の修正である r51617 によって表れる現象だと思われますので、r51617 の backport 時にこちらも一緒にバックポートします。
Updated by nagachika (Tomoyuki Chikanaga) about 9 years ago
- Backport changed from 2.0.0: DONTNEED, 2.1: DONTNEED, 2.2: REQUIRED to 2.0.0: DONTNEED, 2.1: DONTNEED, 2.2: DONE
r50409, r51616, r51617 and r51624 were backported into ruby_2_2
branch at r52046.
r50409 により { %w"key": 0 } が SyntaxError になるという(おそらく誰も使っていないと思われる)非互換が入ります。
この変更の全体が必要とは限らないと思いますが、必要なところだけ切り取れる自信がなかったのでまるごと backport します。
Updated by nobu (Nobuyoshi Nakada) about 9 years ago
%w
じゃなくて %q
や %Q
ですよね。
https://github.com/nobu/ruby/tree/feature/label-with-percent
Updated by nagachika (Tomoyuki Chikanaga) about 9 years ago
%w
じゃなくて%q
や%Q
ですよね。
おっしゃる通りです。手癖でまちがえました。
https://github.com/nobu/ruby/commit/918830f1236ffd2014261b95d41cc6adc79aa71b は trunk でも { %q"key": value }
を復活させようということでしょうか?
Updated by nobu (Nobuyoshi Nakada) about 9 years ago
Tomoyuki Chikanaga wrote:
trunk でも
{ %q"key": value }
を復活させようということでしょうか?
どうしても復活させたいというわけでもないですが、互換性を保つべきだということであれば。
Updated by nobu (Nobuyoshi Nakada) about 9 years ago
2.2.3でも %q"key":
は通るけれど %q[key]:
はダメだとか微妙な感じだったので、ナシということで。