Project

General

Profile

Bug #11456

Hash リテラル中で rescue をもちいると SyntaxError になる

Added by koic (Koichi ITO) almost 5 years ago. Updated over 4 years ago.

Status:
Closed
Priority:
Normal
Assignee:
-
Target version:
-
ruby -v:
ruby 2.3.0dev (2015-08-18 trunk 51622) [x86_64-darwin13]
[ruby-dev:<unknown>]

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>'

こちらの挙動について期待している振る舞いかどうか判断がつかなかったため、レポートとさせてください。


Related issues

Related to Ruby master - Bug #10653: do-end block in ternary operator is syntax error Closedmatz (Yukihiro Matsumoto)Actions
#1

Updated by nobu (Nobuyoshi Nakada) almost 5 years ago

  • Related to Bug #10653: do-end block in ternary operator is syntax error added
#2

Updated by nobu (Nobuyoshi Nakada) almost 5 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
#3

Updated by nobu (Nobuyoshi Nakada) almost 5 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]
#4

Updated by nagachika (Tomoyuki Chikanaga) almost 5 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 時にこちらも一緒にバックポートします。

#5

Updated by nagachika (Tomoyuki Chikanaga) over 4 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 します。

#6

Updated by nobu (Nobuyoshi Nakada) over 4 years ago

%w じゃなくて %q%Q ですよね。

https://github.com/nobu/ruby/tree/feature/label-with-percent

#7

Updated by nagachika (Tomoyuki Chikanaga) over 4 years ago

%w じゃなくて %q%Q ですよね。

おっしゃる通りです。手癖でまちがえました。

https://github.com/nobu/ruby/commit/918830f1236ffd2014261b95d41cc6adc79aa71b は trunk でも { %q"key": value } を復活させようということでしょうか?

#8

Updated by nobu (Nobuyoshi Nakada) over 4 years ago

Tomoyuki Chikanaga wrote:

trunk でも { %q"key": value } を復活させようということでしょうか?

どうしても復活させたいというわけでもないですが、互換性を保つべきだということであれば。

Updated by nobu (Nobuyoshi Nakada) over 4 years ago

2.2.3でも %q"key": は通るけれど %q[key]: はダメだとか微妙な感じだったので、ナシということで。

Also available in: Atom PDF