enum_first_187.patch

marcandre (Marc-Andre Lafortune), 06/02/2009 05:38 am

Download (1.1 kB)

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);