19 #define id_each idEach
26 if (argc == 0)
return Qnil;
27 if (argc == 1)
return argv[0];
31 #define ENUM_WANT_SVALUE() do { \
32 i = enum_values_pack(argc, argv); \
35 #define enum_yield rb_yield_values2
162 rb_warn(
"given block not used");
215 if (!
NIL_P(if_none)) {
281 rb_warn(
"given block not used");
568 switch (
rb_scan_args(argc, argv,
"02", &memo[0], &memo[1])) {
690 if (
NIL_P(params[1])) {
729 params[0] = params[1] =
Qnil;
772 #define SORT_BY_BUFSIZE 16
937 #define ENUMFUNC(name) rb_block_given_p() ? name##_iter_i : name##_i
939 #define DEFINE_ENUMFUNCS(name) \
940 static VALUE enum_##name##_func(VALUE result, VALUE *memo); \
943 name##_i(VALUE i, VALUE *memo, int argc, VALUE *argv) \
945 return enum_##name##_func(enum_values_pack(argc, argv), memo); \
949 name##_iter_i(VALUE i, VALUE *memo, int argc, VALUE *argv) \
951 return enum_##name##_func(enum_yield(argc, argv), memo); \
955 enum_##name##_func(VALUE result, VALUE *memo)
1034 else if (*memo ==
Qtrue) {
1579 if (memo.last_bv !=
Qundef)
1621 long n = (*(
VALUE *)memo)++;
1742 VALUE ary = memo[0];
1783 args[1] = (
VALUE)size;
1796 VALUE ary = memo[0];
1841 args[1] = (
VALUE)size;
1885 long n = memo->
u3.
cnt++;
1901 if (
NIL_P(result)) {
1948 if (
NIL_P(result)) {
1991 for (i=0; i<
argc; i++) {
2001 for (i=0; i<
argc; i++) {
2215 if (n <= 0)
return Qnil;
2221 if (len == 0)
return Qnil;
2222 while (n < 0 || 0 < --n) {
2223 for (i=0; i<
len; i++) {
2260 else if (
NIL_P(v) || v == separator) {
2305 if (!
NIL_P(arg.prev_elts))
2410 VALUE initial_state;
2448 if (
RTEST(header_p)) {
2480 if (!
NIL_P(arg.prev_elts))
2629 VALUE initial_state;
2661 #define rb_intern(str) rb_intern_const(str)
static long NUM2LONG(VALUE x)
static VALUE count_i(VALUE i, VALUE memop, int argc, VALUE *argv)
static VALUE max_ii(VALUE i, VALUE *memo, int argc, VALUE *argv)
static VALUE UINT2NUM(unsigned int v)
static VALUE enum_any(VALUE obj)
VALUE rb_ary_new4(long n, const VALUE *elts)
static VALUE minmax_ii(VALUE i, VALUE _memo, int argc, VALUE *argv)
static VALUE enum_all(VALUE obj)
static VALUE grep_i(VALUE i, VALUE args, int argc, VALUE *argv)
static VALUE chunk_ii(VALUE i, VALUE _argp, int argc, VALUE *argv)
static VALUE enum_each_with_index(int argc, VALUE *argv, VALUE obj)
VALUE rb_yield_values(int n,...)
static VALUE group_by_i(VALUE i, VALUE hash, int argc, VALUE *argv)
static int sort_by_cmp(const void *ap, const void *bp, void *data)
VALUE rb_ary_sort(VALUE ary)
static VALUE flat_map_i(VALUE i, VALUE ary, int argc, VALUE *argv)
static VALUE max_i(VALUE i, VALUE *memo, int argc, VALUE *argv)
VALUE rb_ary_shift(VALUE ary)
#define rb_block_call(arg1, arg2, arg3, arg4, arg5, arg6)
static VALUE enum_each_slice(VALUE obj, VALUE n)
static VALUE inject_op_i(VALUE i, VALUE p, int argc, VALUE *argv)
static VALUE take_while_i(VALUE i, VALUE *ary, int argc, VALUE *argv)
VALUE rb_ary_push(VALUE ary, VALUE item)
static VALUE each_cons_i(VALUE i, VALUE *memo, int argc, VALUE *argv)
static VALUE enum_each_cons(VALUE obj, VALUE n)
VALUE rb_ary_tmp_new(long capa)
static VALUE INT2NUM(int v)
static VALUE zip_i(VALUE val, NODE *memo, int argc, VALUE *argv)
static VALUE chunk_i(VALUE yielder, VALUE enumerator, int argc, VALUE *argv)
static VALUE enum_sort_by(VALUE obj)
VALUE rb_funcall(VALUE, ID, int,...)
Calls a method.
static VALUE enum_member(VALUE obj, VALUE val)
static VALUE first_i(VALUE i, VALUE *params, int argc, VALUE *argv)
void rb_raise(VALUE exc, const char *fmt,...)
VALUE rb_ivar_get(VALUE, ID)
static VALUE max_by_i(VALUE i, VALUE *memo, int argc, VALUE *argv)
#define DEFINE_ENUMFUNCS(name)
static VALUE enum_slice_before(int argc, VALUE *argv, VALUE enumerable)
#define RARRAY_LEN(ARRAY)
VALUE rb_ary_new3(long n,...)
int rb_cmpint(VALUE val, VALUE a, VALUE b)
static VALUE min_by_i(VALUE i, VALUE *memo, int argc, VALUE *argv)
static VALUE slicebefore_i(VALUE yielder, VALUE enumerator, int argc, VALUE *argv)
void Init_Enumerable(void)
static VALUE each_with_index_i(VALUE i, VALUE memo, int argc, VALUE *argv)
#define ENUM_WANT_SVALUE()
static VALUE collect_i(VALUE i, VALUE ary, int argc, VALUE *argv)
static VALUE enum_max(VALUE obj)
static VALUE enum_max_by(VALUE obj)
static VALUE min_i(VALUE i, VALUE *memo, int argc, VALUE *argv)
static VALUE enum_take(VALUE obj, VALUE n)
static VALUE enum_chunk(int argc, VALUE *argv, VALUE enumerable)
static VALUE each_val_i(VALUE i, VALUE p, int argc, VALUE *argv)
int rb_block_given_p(void)
VALUE rb_hash_aset(VALUE hash, VALUE key, VALUE val)
static VALUE find_all_i(VALUE i, VALUE ary, int argc, VALUE *argv)
static VALUE enum_sort(VALUE obj)
static VALUE count_all_i(VALUE i, VALUE memop, int argc, VALUE *argv)
static VALUE enum_each_entry(int argc, VALUE *argv, VALUE obj)
static VALUE enum_inject(int argc, VALUE *argv, VALUE obj)
static VALUE enum_grep(VALUE obj, VALUE pat)
static VALUE enum_find_all(VALUE obj)
void rb_ary_store(VALUE ary, long idx, VALUE val)
static VALUE count_iter_i(VALUE i, VALUE memop, int argc, VALUE *argv)
static void minmax_i_update(VALUE i, VALUE j, struct minmax_t *memo)
static VALUE each_slice_i(VALUE i, VALUE *memo, int argc, VALUE *argv)
static VALUE enum_first(int argc, VALUE *argv, VALUE obj)
VALUE rb_obj_alloc(VALUE)
static void minmax_by_i_update(VALUE v1, VALUE v2, VALUE i1, VALUE i2, struct minmax_by_t *memo)
static VALUE min_ii(VALUE i, VALUE *memo, int argc, VALUE *argv)
static VALUE enum_cycle(int argc, VALUE *argv, VALUE obj)
SSL_METHOD *(* func)(void)
static VALUE each_with_object_i(VALUE i, VALUE memo, int argc, VALUE *argv)
#define rb_node_newnode(type, a1, a2, a3)
static VALUE find_index_iter_i(VALUE i, VALUE memop, int argc, VALUE *argv)
int rb_scan_args(int argc, const VALUE *argv, const char *fmt,...)
static VALUE cycle_i(VALUE i, VALUE ary, int argc, VALUE *argv)
VALUE rb_ivar_set(VALUE, ID, VALUE)
VALUE rb_assoc_new(VALUE car, VALUE cdr)
static void minmax_ii_update(VALUE i, VALUE j, struct minmax_t *memo)
static VALUE partition_i(VALUE i, VALUE *ary, int argc, VALUE *argv)
static VALUE member_i(VALUE iter, VALUE *memo, int argc, VALUE *argv)
static VALUE enum_collect(VALUE obj)
void ruby_qsort(void *, const size_t, const size_t, int(*)(const void *, const void *, void *), void *)
static VALUE take_i(VALUE i, VALUE *arg, int argc, VALUE *argv)
static VALUE find_i(VALUE i, VALUE *memo, int argc, VALUE *argv)
static VALUE minmax_i(VALUE i, VALUE _memo, int argc, VALUE *argv)
static VALUE enum_min(VALUE obj)
static VALUE enum_none(VALUE obj)
VALUE rb_rescue2(VALUE(*b_proc)(ANYARGS), VALUE data1, VALUE(*r_proc)(ANYARGS), VALUE data2,...)
register unsigned int len
#define RARRAY_PTR(ARRAY)
static VALUE drop_i(VALUE i, VALUE *arg, int argc, VALUE *argv)
static VALUE enum_one(VALUE obj)
VALUE rb_block_call_func(VALUE, VALUE, int, VALUE *)
static VALUE enum_drop_while(VALUE obj)
static VALUE zip_ary(VALUE val, NODE *memo, int argc, VALUE *argv)
static VALUE slicebefore_ii(VALUE i, VALUE _argp, int argc, VALUE *argv)
VALUE rb_ary_resize(VALUE ary, long len)
expands or shrinks ary to len elements.
static VALUE enum_reject(VALUE obj)
VALUE rb_equal(VALUE, VALUE)
static VALUE enum_each_with_object(VALUE obj, VALUE memo)
static VALUE drop_while_i(VALUE i, VALUE *args, int argc, VALUE *argv)
static VALUE enum_partition(VALUE obj)
static VALUE enum_to_a(int argc, VALUE *argv, VALUE obj)
static VALUE enum_minmax_by(VALUE obj)
VALUE rb_block_proc(void)
static VALUE enum_reverse_each(int argc, VALUE *argv, VALUE obj)
VALUE rb_check_array_type(VALUE ary)
VALUE rb_hash_aref(VALUE hash, VALUE key)
static VALUE enum_count(int argc, VALUE *argv, VALUE obj)
static VALUE minmax_by_i(VALUE i, VALUE _memo, int argc, VALUE *argv)
void rb_thread_check_ints(void)
static VALUE enum_drop(VALUE obj, VALUE n)
static VALUE enum_find(int argc, VALUE *argv, VALUE obj)
VALUE rb_ary_dup(VALUE ary)
static VALUE collect_all(VALUE i, VALUE ary, int argc, VALUE *argv)
VALUE rb_ary_concat(VALUE x, VALUE y)
static VALUE enum_zip(int argc, VALUE *argv, VALUE obj)
static unsigned int hash(const char *str, unsigned int len)
static VALUE enum_min_by(VALUE obj)
#define RETURN_ENUMERATOR(obj, argc, argv)
VALUE rb_ary_new2(long capa)
const char * rb_id2name(ID id)
static VALUE enum_flat_map(VALUE obj)
static VALUE enum_take_while(VALUE obj)
static VALUE enum_find_index(int argc, VALUE *argv, VALUE obj)
static VALUE enum_minmax(VALUE obj)
void rb_warning(const char *fmt,...)
#define CONST_ID(var, str)
static VALUE call_stop(VALUE *v)
static VALUE enum_values_pack(int argc, VALUE *argv)
VALUE rb_define_module(const char *name)
static VALUE reject_i(VALUE i, VALUE ary, int argc, VALUE *argv)
static VALUE enum_group_by(VALUE obj)
void rb_define_method(VALUE klass, const char *name, VALUE(*func)(ANYARGS), int argc)
static VALUE sort_by_i(VALUE i, VALUE _data, int argc, VALUE *argv)
void rb_warn(const char *fmt,...)
static VALUE grep_iter_i(VALUE i, VALUE args, int argc, VALUE *argv)
static VALUE inject_i(VALUE i, VALUE p, int argc, VALUE *argv)
static VALUE call_next(VALUE *v)
static VALUE find_index_i(VALUE i, VALUE memop, int argc, VALUE *argv)
VALUE rb_attr_get(VALUE, ID)