Bug #1034
closedRuby 1.8 evaluates block argument out of order from other arguments and receiver
Description
=begin
In Ruby 1.9 and all alternative impls I tested, block arguments are evaluated in the order they're encountered in a call. For example:
a.foo(b, c, &d)
The expected order would be left to right, a, then b, then c, then d. But Ruby 1.8 evaluates in the order d, a, b, c. In a case like the following (somewhat contrived) this would have odd side effects:
x = 0
(x += 1; a).foo(x += 1, x += 1, &(x += 1, d))
In 1.8, the two non-block arguments would be 3, 4, while on Ruby 1.9 and other impls it would be 2, 3 as you'd expect.
=end
Updated by ko1 (Koichi Sasada) over 15 years ago
- Assignee set to matz (Yukihiro Matsumoto)
- ruby -v set to Ruby 1.8
=begin
=end
Updated by shyouhei (Shyouhei Urabe) about 14 years ago
- Status changed from Open to Assigned
=begin
=end
Updated by headius (Charles Nutter) almost 12 years ago
This was an artifact of 1.8's interpreter. It should be fixed (which would be hard, since iter/blockarg wraps whatever call it goes with) if 1.8 is open or closed if it is not.
Updated by kosaki (Motohiro KOSAKI) over 11 years ago
- Description updated (diff)
- Status changed from Assigned to Closed
1.8 is dead.