Actions
Bug #15052
closedmust not optimize `foo(**{})` out
Bug #15052:
must 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 7 years ago
- Related to Bug #15078: Hash splat of empty hash should not create a positional argument. added
Updated by mame (Yusuke Endoh) about 7 years ago
- Related to Bug #15087: Segmentation fault with splat and block added
Updated by jeremyevans0 (Jeremy Evans) about 6 years ago
- Status changed from Open to Closed
Fixed by 1d5066efb08cbb328ba528a5f8be1708584b659f.
Actions