Project

General

Profile

Bug #1686

Enumerable#first broken

Added by marcandre (Marc-Andre Lafortune) almost 10 years ago. Updated about 8 years ago.

Status:
Closed
Priority:
Normal
Assignee:
-
Target version:
ruby -v:
ruby 1.9.2dev (2009-06-24 trunk 23840) [i386-darwin9.7.0]
Backport:
[ruby-core:24017]

Description

=begin
Enumerable#first is broken in the current HEAD. If 4 <= n < enum_length + 4, enum.first(n) returns the (n-4)th element instead of an array of n elements. E.g.:

to6 = (1..6).to_enum # necessary so Enumerable#first is used
p to6.first(2) # ==> [1, 2]
p to6.first(4) # ==> 1
p to6.first(9) # ==> 6
p to6.first(10) # ==> [1, 2, 3, 4, 5, 6]

This is due to http://redmine.ruby-lang.org/repositories/diff/ruby-19/enum.c?rev=23622 , after which ary[0] holds "n" as a long instead of a Fixnum. The comparison to Qnil isn't working as desired.

Either ary[0] holds INT2NUM(len) and first_i calls NUM2LONG + INT2NUM (as per my original patch, see http://redmine.ruby-lang.org/issues/show/1554 ) or alternatively, enum_first could use take_i or enum_take when there is an argument, since they behave the same way in that case.
=end

History

#1

Updated by matz (Yukihiro Matsumoto) almost 10 years ago

  • Status changed from Open to Closed
  • % Done changed from 0 to 100

=begin
Applied in changeset r23846.
=end

Also available in: Atom PDF