hash.c: implement typical part of merge in C.

This commit is contained in:
Yukihiro "Matz" Matsumoto
2022-06-19 22:28:31 +09:00
parent 909e1044ed
commit d2a24a540c
3 changed files with 19 additions and 7 deletions
+14
View File
@@ -1746,6 +1746,19 @@ mrb_hash_merge(mrb_state *mrb, mrb_value hash1, mrb_value hash2)
});
}
static mrb_value
mrb_hash_merge_m(mrb_state *mrb, mrb_value hash)
{
mrb_int argc;
mrb_value *argv;
mrb_get_args(mrb, "*", &argv, &argc);
while (argc--) {
mrb_hash_merge(mrb, hash, *argv++);
}
return hash;
}
/*
* call-seq:
* hsh.rehash -> hsh
@@ -1806,4 +1819,5 @@ mrb_init_hash(mrb_state *mrb)
mrb_define_method(mrb, h, "value?", mrb_hash_has_value, MRB_ARGS_REQ(1)); /* 15.2.13.4.27 */
mrb_define_method(mrb, h, "values", mrb_hash_values, MRB_ARGS_NONE()); /* 15.2.13.4.28 */
mrb_define_method(mrb, h, "rehash", mrb_hash_rehash, MRB_ARGS_NONE());
mrb_define_method(mrb, h, "__merge", mrb_hash_merge_m, MRB_ARGS_REQ(1));
}