Bug #1034

Ruby 1.8 evaluates block argument out of order from other arguments and receiver

Added by Charles Nutter over 5 years ago. Updated 12 months ago.

[ruby-core:21496]
Status:Closed
Priority:Normal
Assignee:Yukihiro Matsumoto
Category:-
Target version:-
ruby -v:Ruby 1.8

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

History

#1 Updated by Koichi Sasada about 5 years ago

  • Assignee set to Yukihiro Matsumoto
  • ruby -v set to Ruby 1.8

=begin

=end

#2 Updated by Shyouhei Urabe over 3 years ago

  • Status changed from Open to Assigned

=begin

=end

#3 Updated by Charles Nutter over 1 year 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.

#4 Updated by Motohiro KOSAKI about 1 year ago

  • Description updated (diff)
  • Status changed from Assigned to Closed

1.8 is dead.

#5 Updated by Test Redmine 12 months ago

test

Also available in: Atom PDF