diff options
author | Jean byroot Boussier <[email protected]> | 2023-05-23 15:51:28 +0200 |
---|---|---|
committer | GitHub <[email protected]> | 2023-05-23 15:51:28 +0200 |
commit | 31ac8efca8ecb574e1e7b7c32cce54cb1b97f19a (patch) | |
tree | aa374c742c0dbac38313ede9a49df297a4ef4bf6 /hash.c | |
parent | 98637d421dbe8bcf86cc2effae5e26bb96a6a4da (diff) |
Hash.new: print a deprecation warning when receiving keyword arguments (#7828)
[Feature #19236]
In Ruby 3.3, `Hash.new` shall print a deprecation warning if keyword arguments
are passed instead of treating them as an implicit positional Hash.
This will allow to safely introduce a `capacity` keyword argument in 3.4
Co-authored-by: Jean Boussier <[email protected]>
Notes
Notes:
Merged-By: byroot <[email protected]>
Diffstat (limited to 'hash.c')
-rw-r--r-- | hash.c | 14 |
1 files changed, 9 insertions, 5 deletions
@@ -1714,17 +1714,21 @@ set_proc_default(VALUE hash, VALUE proc) static VALUE rb_hash_initialize(int argc, VALUE *argv, VALUE hash) { - VALUE ifnone; - rb_hash_modify(hash); + if (rb_block_given_p()) { rb_check_arity(argc, 0, 0); - ifnone = rb_block_proc(); - SET_PROC_DEFAULT(hash, ifnone); + SET_PROC_DEFAULT(hash, rb_block_proc()); } else { rb_check_arity(argc, 0, 1); - ifnone = argc == 0 ? Qnil : argv[0]; + + VALUE options, ifnone; + rb_scan_args(argc, argv, "01:", &ifnone, &options); + if (NIL_P(ifnone) && !NIL_P(options)) { + ifnone = options; + rb_warn_deprecated_to_remove("3.4", "Calling Hash.new with keyword arguments", "Hash.new({ key: value })"); + } RHASH_SET_IFNONE(hash, ifnone); } |