enum_first_187.patch
| enum.c (working copy) | ||
|---|---|---|
| 667 | 667 |
else {
|
| 668 | 668 |
long n = NUM2LONG(ary[0]); |
| 669 | 669 | |
| 670 |
rb_ary_push(ary[1], i); |
|
| 671 |
n--; |
|
| 670 | 672 |
if (n <= 0) {
|
| 671 | 673 |
rb_iter_break(); |
| 672 | 674 |
} |
| 673 |
rb_ary_push(ary[1], i); |
|
| 674 |
n--; |
|
| 675 | 675 |
ary[0] = INT2NUM(n); |
| 676 | 676 |
} |
| 677 | 677 |
return Qnil; |
| ... | ... | |
| 700 | 700 |
ary[0] = ary[1] = Qnil; |
| 701 | 701 |
} |
| 702 | 702 |
else {
|
| 703 |
long len; |
|
| 703 | 704 |
rb_scan_args(argc, argv, "01", &n); |
| 704 |
ary[0] = n; |
|
| 705 |
ary[1] = rb_ary_new2(NUM2LONG(n)); |
|
| 705 |
len = NUM2LONG(n); |
|
| 706 |
if (len == 0) return rb_ary_new2(0); |
|
| 707 |
ary[0] = INT2NUM(len); |
|
| 708 |
ary[1] = rb_ary_new2(len); |
|
| 706 | 709 |
} |
| 707 | 710 |
rb_block_call(obj, id_each, 0, 0, first_i, (VALUE)ary); |
| 708 | 711 | |
| ... | ... | |
| 1609 | 1612 |
VALUE i; |
| 1610 | 1613 |
VALUE *arg; |
| 1611 | 1614 |
{
|
| 1612 |
if (arg[1]-- == 0) rb_iter_break(); |
|
| 1613 | 1615 |
rb_ary_push(arg[0], i); |
| 1616 |
if (--arg[1] == 0) rb_iter_break(); |
|
| 1614 | 1617 |
return Qnil; |
| 1615 | 1618 |
} |
| 1616 | 1619 | |
| ... | ... | |
| 1637 | 1640 |
rb_raise(rb_eArgError, "attempt to take negative size"); |
| 1638 | 1641 |
} |
| 1639 | 1642 | |
| 1643 |
if (len == 0) return rb_ary_new2(0); |
|
| 1640 | 1644 |
args[1] = len; |
| 1641 | 1645 |
args[0] = rb_ary_new(); |
| 1642 | 1646 |
rb_block_call(obj, id_each, 0, 0, take_i, (VALUE)args); |