Issue #16560 has been updated by Dan0042 (Daniel DeLorme).


Thanks for the quick fix, and your hard work as usual.
Although imho that would be the expected behavior in 3.0, and in 2.7 it should be a warning with the same behavior as 2.6.

----------------------------------------
Bug #16560: Proc autosplats first argument if called with one argument and empty keyword splat
https://bugs.ruby-lang.org/issues/16560#change-84051

* Author: Dan0042 (Daniel DeLorme)
* Status: Open
* Priority: Normal
* Assignee: 
* Target version: 
* ruby -v: 
* Backport: 2.5: UNKNOWN, 2.6: UNKNOWN, 2.7: REQUIRED
----------------------------------------
While working on understanding the vm_args.c code via refactoring, I found the following:

```ruby
b = proc{ |a,b=0| [a,b] }
h = {k:42}
b.call([1,2,3],**h) #=> [[1, 2, 3], {:k=>42}]
h = {} 
b.call([1,2,3],**h) #=> [1, 2]           (in 2.7)
                    #=> [[1, 2, 3], {}]  (in 2.6)
```

Since the result is different from 2.6 I think this is a bug, especially since the result in 2.7 is so different based on being an empty or non-empty splat.

In my refactoring branch I'm solving this by moving the `args_check_block_arg0` check before the `ignore_keyword_hash_p` check, but that doesn't look so easy in master.



-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>