static VALUE curry(VALUE dummy, VALUE args, int argc, VALUE *argv) { VALUE proc, passed, arity; proc = RARRAY_AT(args, 0); passed = RARRAY_AT(args, 1); arity = RARRAY_AT(args, 2); passed = rb_ary_plus(passed, rb_ary_new4(argc, argv)); rb_ary_freeze(passed); if(RARRAY_LEN(passed) < FIX2INT(arity)) { arity = make_curry_proc(proc, passed, arity); return arity; } arity = rb_proc_call(proc, passed); return arity; }
static VALUE curry(VALUE dummy, VALUE args, int argc, VALUE *argv, VALUE passed_proc) { VALUE proc, passed, arity; proc = RARRAY_PTR(args)[0]; passed = RARRAY_PTR(args)[1]; arity = RARRAY_PTR(args)[2]; passed = rb_ary_plus(passed, rb_ary_new4(argc, argv)); rb_ary_freeze(passed); if(RARRAY_LEN(passed) < FIX2INT(arity)) { if (!NIL_P(passed_proc)) { rb_warn("given block not used"); } arity = make_curry_proc(proc, passed, arity); return arity; } else { return rb_proc_call_with_block(proc, RARRAY_LEN(passed), RARRAY_PTR(passed), passed_proc); } }
static VALUE bdb_sary_plus(VALUE obj, VALUE y) { return rb_ary_plus(bdb_sary_to_a(obj), y); }
static VALUE array_spec_rb_ary_plus(VALUE self, VALUE array1, VALUE array2) { return rb_ary_plus(array1, array2); }