From: keiju@... Date: 2014-07-08T15:32:45+00:00 Subject: [ruby-dev:48387] [ruby-trunk - Bug #9975] irb で Hash を 1.9 記法で記述したときに、キーがキーワードだと syntax error Issue #9975 has been updated by Keiju Ishitsuka. けいじゅ@いしつかです. takkanm@gmail.com wrote: > Issue #9975 has been reported by 三村 益隆. > irb で Hash を 1.9 記法で記述したとき、以下の end を伴なうキーワードをキーとして使用するとエラーとなります。 > > ~~~ > if do case def for unless until while begin 確かにバグですが... > 添付したパッチを適用すると、上記キーワードをキーにしても正しく Hash > として認識されることを確認しています。 このパッチだと必要なところ以外も同じ判定になるので, インデントのカウン ト(式の完了)がうまく行かなくなる場合がでてきます. 解決は難しいような気がしていますが, うまく解決できる方法があるのか考え てみます. __ ---------------------------------------------------->> 石塚 圭樹 <<--- ---------------------------------->> e-mail: keiju@ishitsuka.com <<--- ---------------------------------------- Bug #9975: irb で Hash を 1.9 記法で記述したときに、キーがキーワードだと syntax error https://bugs.ruby-lang.org/issues/9975#change-47646 * Author: 三村 益隆 * Status: Open * Priority: Normal * Assignee: * Category: * Target version: * ruby -v: ruby 2.2.0dev (2014-06-24 trunk 46543) [x86_64-darwin13] * Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN ---------------------------------------- irb で Hash を 1.9 記法で記述したとき、以下の end を伴なうキーワードをキーとして使用するとエラーとなります。 ~~~ if do case def for unless until while begin ~~~ エラーが発生するのを確認したのは trunk と 2.1.0 ですが、1.9 以降であれば発生するのではと思います。 添付したパッチを適用すると、上記キーワードをキーにしても正しく Hash として認識されることを確認しています。 ~~~ # エラー例 $ ./bin/irb irb(main):001:0> {if: 1} irb(main):002:1> } SyntaxError: (irb):2: syntax error, unexpected tSTRING_DEND, expecting end-of-input from ./bin/irb:11:in `
' irb(main):003:0> {do: 1} irb(main):004:1> } SyntaxError: (irb):4: syntax error, unexpected tSTRING_DEND, expecting end-of-input from ./bin/irb:11:in `
' irb(main):005:0> {case: 1} irb(main):006:1> } SyntaxError: (irb):6: syntax error, unexpected tSTRING_DEND, expecting end-of-input from ./bin/irb:11:in `
' irb(main):007:0> {def: 1} irb(main):008:1> } SyntaxError: (irb):8: syntax error, unexpected tSTRING_DEND, expecting end-of-input from ./bin/irb:11:in `
' irb(main):001:0> {for: 1} irb(main):002:1> } SyntaxError: (irb):2: syntax error, unexpected tSTRING_DEND, expecting end-of-input from ./bin/irb:11:in `
' irb(main):003:0> {unless: 1} irb(main):004:1> } SyntaxError: (irb):4: syntax error, unexpected tSTRING_DEND, expecting end-of-input from ./bin/irb:11:in `
' irb(main):005:0> {until: 1} irb(main):006:1> } SyntaxError: (irb):6: syntax error, unexpected tSTRING_DEND, expecting end-of-input from ./bin/irb:11:in `
' irb(main):007:0> {while: 1} irb(main):008:1> } SyntaxError: (irb):8: syntax error, unexpected tSTRING_DEND, expecting end-of-input from ./bin/irb:11:in `
' irb(main):009:0> {begin: 1} irb(main):010:1> } SyntaxError: (irb):10: syntax error, unexpected tSTRING_DEND, expecting end-of-input from ./bin/irb:11:in `
' ~~~ ~~~ # パッチ適用後 irb(main):001:0> {if: 1} => {:if=>1} irb(main):002:0> {do: 1} => {:do=>1} irb(main):003:0> {case: 1} => {:case=>1} irb(main):004:0> {def: 1} => {:def=>1} irb(main):005:0> {for: 1} => {:for=>1} irb(main):006:0> {unless: 1} => {:unless=>1} irb(main):007:0> {while: 1} => {:while=>1} irb(main):008:0> {begin: 1} => {:begin=>1} irb(main):009:0> ~~~ ---Files-------------------------------- fix_irb_keyword_bug.patch (782 Bytes) -- https://bugs.ruby-lang.org/