Project

General

Profile

Bug #15052

must not optimize `foo(**{})` out

Added by mame (Yusuke Endoh) 8 months ago.

Status:
Open
Priority:
Normal
Assignee:
-
Target version:
-
[ruby-core:88785]

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


Related issues

Related to Ruby trunk - Bug #15078: Hash splat of empty hash should not create a positional argument.OpenActions
Related to Ruby trunk - Bug #15087: Segmentation fault with splat and blockClosedActions

History

#1

Updated by mame (Yusuke Endoh) 8 months ago

  • Related to Bug #15078: Hash splat of empty hash should not create a positional argument. added
#2

Updated by mame (Yusuke Endoh) 8 months ago

  • Related to Bug #15087: Segmentation fault with splat and block added

Also available in: Atom PDF