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
Actions