Merge pull request #6288 from dearblue/closing
[mruby.git] / src / enum.c
blobc2720bf7863e7c626af84a578936822025ac6075
1 /*
2 ** enum.c - Enumerable module
3 **
4 ** See Copyright Notice in mruby.h
5 */
7 #include <mruby.h>
8 #include <mruby/proc.h>
9 #include <mruby/presym.h>
11 /* internal method `__update_hash(oldhash, index, itemhash)` */
12 static mrb_value
13 enum_update_hash(mrb_state *mrb, mrb_value self)
15 mrb_int hash;
16 mrb_int index;
17 mrb_int hv;
19 mrb_get_args(mrb, "iii", &hash, &index, &hv);
20 hash ^= ((uint32_t)hv << (index % 16));
22 return mrb_int_value(mrb, hash);
25 void
26 mrb_init_enumerable(mrb_state *mrb)
28 struct RClass *enumerable = mrb_define_module_id(mrb, MRB_SYM(Enumerable)); /* 15.3.2 */
29 mrb_define_module_function_id(mrb, enumerable, MRB_SYM(__update_hash), enum_update_hash, MRB_ARGS_REQ(3));