summaryrefslogtreecommitdiff
path: root/hash.c
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2021-06-28 10:51:42 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2021-06-28 10:53:37 +0900
commit47a9b58b2ae52a10c93c5368c7aa30b1eb398bc7 (patch)
tree2373a32c5e29a6c8b77728a268f2f42c853dd795 /hash.c
parente724857f42280fe285e6d0de69b4832458b80b0a (diff)
Share freeze option handling
Diffstat (limited to 'hash.c')
-rw-r--r--hash.c20
1 files changed, 3 insertions, 17 deletions
diff --git a/hash.c b/hash.c
index cf19cdb5e6..7ef30b43bc 100644
--- a/hash.c
+++ b/hash.c
@@ -6501,25 +6501,11 @@ static VALUE
env_clone(int argc, VALUE *argv, VALUE obj)
{
if (argc) {
- static ID keyword_ids[1];
VALUE opt, kwfreeze;
-
- if (!keyword_ids[0]) {
- CONST_ID(keyword_ids[0], "freeze");
- }
- rb_scan_args(argc, argv, "0:", &opt);
- if (!NIL_P(opt)) {
- rb_get_kwargs(opt, keyword_ids, 0, 1, &kwfreeze);
- switch (kwfreeze) {
- case Qtrue:
+ if (rb_scan_args(argc, argv, "0:", &opt) < argc) {
+ kwfreeze = rb_get_freeze_opt(1, &opt);
+ if (RTEST(kwfreeze)) {
rb_raise(rb_eTypeError, "cannot freeze ENV");
- break;
- default:
- rb_raise(rb_eArgError, "invalid value for freeze keyword");
- break;
- case Qnil:
- case Qfalse:
- break;
}
}
}