[ruby-dev:52164] [Ruby Bug#21608] 三項演算子と break を組み合わせると SyntaxError

Issue #21608 has been reported by ursm (Keita Urashima). ---------------------------------------- Bug #21608: 三項演算子と break を組み合わせると SyntaxError https://bugs.ruby-lang.org/issues/21608 * Author: ursm (Keita Urashima) * Status: Open * ruby -v: ruby 3.4.6 (2025-09-16 revision dbd83256b1) +PRISM [x86_64-linux] * Backport: 3.2: UNKNOWN, 3.3: UNKNOWN, 3.4: UNKNOWN ---------------------------------------- ```
RUBY_VERSION => "3.4.5" [1, 2].find {|i| i.even? ? break i : nil }
RUBY_VERSION => "3.4.6" [1, 2].find {|i| i.even? ? break i : nil } <internal:kernel>:168:in 'Kernel#loop': (irb):2: syntax error found (SyntaxError) 2 | ... i : nil } | ^ unexpected local variable or method, expecting end-of-input
from /home/ursm/.local/share/mise/installs/ruby/3.4.6/lib/ruby/gems/3.4.0/gems/irb-1.15.2/exe/irb:9:in '<top (required)>' from /home/ursm/.local/share/mise/installs/ruby/3.4.6/bin/irb:25:in 'Kernel#load' from /home/ursm/.local/share/mise/installs/ruby/3.4.6/bin/irb:25:in '<main>' ``` -- https://bugs.ruby-lang.org/

Issue #21608 has been updated by kddnewton (Kevin Newton). Assignee set to prism Thank you for the report, I will get this fixed. ---------------------------------------- Bug #21608: 三項演算子と break を組み合わせると SyntaxError https://bugs.ruby-lang.org/issues/21608#change-114646 * Author: ursm (Keita Urashima) * Status: Open * Assignee: prism * ruby -v: ruby 3.4.6 (2025-09-16 revision dbd83256b1) +PRISM [x86_64-linux] * Backport: 3.2: UNKNOWN, 3.3: UNKNOWN, 3.4: UNKNOWN ---------------------------------------- ```
RUBY_VERSION => "3.4.5" [1, 2].find {|i| i.even? ? break i : nil }
RUBY_VERSION => "3.4.6" [1, 2].find {|i| i.even? ? break i : nil } <internal:kernel>:168:in 'Kernel#loop': (irb):2: syntax error found (SyntaxError) 2 | ... i : nil } | ^ unexpected local variable or method, expecting end-of-input
from /home/ursm/.local/share/mise/installs/ruby/3.4.6/lib/ruby/gems/3.4.0/gems/irb-1.15.2/exe/irb:9:in '<top (required)>' from /home/ursm/.local/share/mise/installs/ruby/3.4.6/bin/irb:25:in 'Kernel#load' from /home/ursm/.local/share/mise/installs/ruby/3.4.6/bin/irb:25:in '<main>' ``` -- https://bugs.ruby-lang.org/

Issue #21608 has been updated by nobu (Nobuyoshi Nakada). Status changed from Open to Rejected In ruby code, operations with arguments without parentheses have quite lower precedence. That code is inverting the precedences, so this failure should be an intentional fix. ---------------------------------------- Bug #21608: 三項演算子と break を組み合わせると SyntaxError https://bugs.ruby-lang.org/issues/21608#change-114648 * Author: ursm (Keita Urashima) * Status: Rejected * Assignee: prism * ruby -v: ruby 3.4.6 (2025-09-16 revision dbd83256b1) +PRISM [x86_64-linux] * Backport: 3.2: UNKNOWN, 3.3: UNKNOWN, 3.4: REQUIRED ---------------------------------------- ```
RUBY_VERSION => "3.4.5" [1, 2].find {|i| i.even? ? break i : nil }
RUBY_VERSION => "3.4.6" [1, 2].find {|i| i.even? ? break i : nil } <internal:kernel>:168:in 'Kernel#loop': (irb):2: syntax error found (SyntaxError) 2 | ... i : nil } | ^ unexpected local variable or method, expecting end-of-input
from /home/ursm/.local/share/mise/installs/ruby/3.4.6/lib/ruby/gems/3.4.0/gems/irb-1.15.2/exe/irb:9:in '<top (required)>' from /home/ursm/.local/share/mise/installs/ruby/3.4.6/bin/irb:25:in 'Kernel#load' from /home/ursm/.local/share/mise/installs/ruby/3.4.6/bin/irb:25:in '<main>' ``` -- https://bugs.ruby-lang.org/

Issue #21608 has been updated by Earlopain (Earlopain _). To elaborate, if you replace `break` with a method call, it was already a syntax error. I suspect this was changed with https://bugs.ruby-lang.org/issues/21540. Such code has been rejected since at least ruby 2.0 and was only accidentally accepted since 3.4.0 ---------------------------------------- Bug #21608: 三項演算子と break を組み合わせると SyntaxError https://bugs.ruby-lang.org/issues/21608#change-114649 * Author: ursm (Keita Urashima) * Status: Rejected * Assignee: prism * ruby -v: ruby 3.4.6 (2025-09-16 revision dbd83256b1) +PRISM [x86_64-linux] * Backport: 3.2: UNKNOWN, 3.3: UNKNOWN, 3.4: REQUIRED ---------------------------------------- ```
RUBY_VERSION => "3.4.5" [1, 2].find {|i| i.even? ? break i : nil }
RUBY_VERSION => "3.4.6" [1, 2].find {|i| i.even? ? break i : nil } <internal:kernel>:168:in 'Kernel#loop': (irb):2: syntax error found (SyntaxError) 2 | ... i : nil } | ^ unexpected local variable or method, expecting end-of-input
from /home/ursm/.local/share/mise/installs/ruby/3.4.6/lib/ruby/gems/3.4.0/gems/irb-1.15.2/exe/irb:9:in '<top (required)>' from /home/ursm/.local/share/mise/installs/ruby/3.4.6/bin/irb:25:in 'Kernel#load' from /home/ursm/.local/share/mise/installs/ruby/3.4.6/bin/irb:25:in '<main>' ``` -- https://bugs.ruby-lang.org/
participants (4)
-
Earlopain (Earlopain _)
-
kddnewton (Kevin Newton)
-
nobu (Nobuyoshi Nakada)
-
ursm (Keita Urashima)