
Issue #21378 has been updated by Eregon (Benoit Daloze). Assignee changed from prism to matz (Yukihiro Matsumoto) It's the same with parse.y: ``` $ ruby -v --parser=parse.y -e 'def x?(y, z) = y in { x: ^z }' ruby 3.5.0dev (2025-05-28T04:34:40Z master d064fd067b) [x86_64-linux] -e:1: z: no such local variable ruby: compile error (SyntaxError) ``` So I think we should assign matz and not prism. I guess it's a pitfall of the weird precedence of `def =`, which has already been reported many times in various variants. `def x?(y, z); y in { x: ^z }; end` works fine of course. ---------------------------------------- Bug #21378: variable pinning does not look for method arguments https://bugs.ruby-lang.org/issues/21378#change-113474 * Author: shyouhei (Shyouhei Urabe) * Status: Assigned * Assignee: matz (Yukihiro Matsumoto) * ruby -v: ruby 3.5.0dev (2025-01-23T15:24:35Z origin/7ed08c4fd31.. 7ed08c4fd3) +PRISM [wasm32-wasi] * Backport: 3.2: UNKNOWN, 3.3: UNKNOWN, 3.4: UNKNOWN ---------------------------------------- Is this intentional? ``` irb(main):001> def x?(y, z) = y in { x: ^z } <internal:kernel>:168:in 'Kernel#loop': (irb):1: syntax error found (SyntaxError)
1 | def x?(y, z) = y in { x: ^z } | ^ z: no such local variable
from eval_async:132:in '<main>' from /bundle/gems/js-2.7.1/lib/js.rb:109:in 'Kernel.eval' from /bundle/gems/js-2.7.1/lib/js.rb:109:in 'block in JS.__eval_async_rb' from /bundle/gems/js-2.7.1/lib/js.rb:120:in 'block in JS.__async' ``` -- https://bugs.ruby-lang.org/