Actions
Bug #15052
closedmust not optimize `foo(**{})` out
Description
A keyword rest argument with empty hash, **{}
, is removed during parsing phase. However, under the current spec of keyword parameters, this leads to a problem:
def foo(opt = "opt", **hsh)
p [opt, hsh]
end
foo({}, **{}) #=> expected: [{}, {}], actual: ["opt", {}]
foo({}, **{})
is obviously expected to pass the first {}
to opt
, and the second **{}
to **hsh
. However, **{}
is removed at parsing phase, sp the first {}
is considered as a keyword rest argument, which causes the above strange result.
So, we cannot optimize **{}
out, unless keyword argument is separated from normal arguments #14183. (The current spec is really intractable not only for Ruby users but also for Ruby developers!)
Files
Updated by mame (Yusuke Endoh) about 6 years ago
- Related to Bug #15078: Hash splat of empty hash should not create a positional argument. added
Updated by mame (Yusuke Endoh) about 6 years ago
- Related to Bug #15087: Segmentation fault with splat and block added
Updated by jeremyevans0 (Jeremy Evans) about 5 years ago
- Status changed from Open to Closed
Fixed by 1d5066efb08cbb328ba528a5f8be1708584b659f.
Actions
Like0
Like0Like0Like0