Bug #18673
closedAnonymous block forwarding fails when combined with keyword arguments
Description
Hello!
I tried to use the anonymous block forwarding feature introduced in https://bugs.ruby-lang.org/issues/11256 and released with ruby 3.1.
Unfortunately it appears to unexpectedly fail during parsing when used in a method that also accepts keyword arguments. I don't see this limitation documented so I presume it is a bug. I've attached a simple reproduction script.
/cc @jeremyevans0 (Jeremy Evans) as author.
$ ruby -v
ruby 3.1.1p18 (2022-02-18 revision 53f5fc4236) [x86_64-linux]
$ ruby anon_repro.rb
anon_repro.rb:14: no anonymous block parameter
Carl
Files
Updated by jeremyevans0 (Jeremy Evans) over 2 years ago
This does seem to be a bug. It affects method that accept explicit keyword parameters (keyword splats are not affected, nor are methods that explicitly accept no keywords via **nil
). I'll try to take a look in the coming week, hopefully it's a simple fix in parse.y
. @mame (Yusuke Endoh) @nobu (Nobuyoshi Nakada), any ideas?
Updated by jeremyevans0 (Jeremy Evans) over 2 years ago
- Backport changed from 2.6: UNKNOWN, 2.7: UNKNOWN, 3.0: UNKNOWN, 3.1: UNKNOWN to 2.7: DONTNEED, 3.0: DONTNEED, 3.1: REQUIRED
I submitted a pull request to fix this issue: https://github.com/ruby/ruby/pull/5761
Updated by jeremyevans (Jeremy Evans) over 2 years ago
- Status changed from Open to Closed
Applied in changeset git|3bb70a6924ddd83f90b508b5bbc4d5629b8a41c6.
Fix using anonymous block in method accepting explicit keywords
Record block ID before vtable_pop, so the incorrect one doesn't
override it.
Fixes [Bug #18673]
Updated by nagachika (Tomoyuki Chikanaga) over 2 years ago
- Backport changed from 2.7: DONTNEED, 3.0: DONTNEED, 3.1: REQUIRED to 2.7: DONTNEED, 3.0: DONTNEED, 3.1: DONE
ruby_3_1 750d4dc3aff7c2fef25fe99f1b98327f68734c9a merged revision(s) 3bb70a6924ddd83f90b508b5bbc4d5629b8a41c6.