Project

General

Profile

Actions

Backport #7671

closed

Unexpected result of the Flip-Flop

Added by phasis68 (Heesob Park) about 11 years ago. Updated about 11 years ago.

Status:
Closed
[ruby-core:51296]

Description

Reported from http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/402825

C:\work>irb
irb(main):001:0> vs = (1..9).to_a
=> [1, 2, 3, 4, 5, 6, 7, 8, 9]
irb(main):002:0> v1 = vs.select { |n| if n==3..n==6 then 1 end }
=> [3, 4, 5, 6]
irb(main):003:0> v2 = vs.select { |n| if n==2..n==16 then 1 end }
=> [2, 3, 4, 5, 6, 7, 8, 9]
irb(main):004:0> v3 = vs.select { |n| if n==3..n==6 then 1 end }
=> [1, 2, 3, 4, 5, 6]

v1 and v3 use some condition , return value is different.

This bug is due to changeset r38292 and only occurs on the irb session.

Here is a patch:
diff --git a/compile.c b/compile.c.new
index db060e7..e644390 100644
--- a/compile.c
+++ b/compile.c.new
@@ -5057,7 +5057,7 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)

if (!data) data = iseq->compile_data;
cnt = data->flip_cnt++ + DEFAULT_SPECIAL_VAR_COUNT;
  • key = INT2FIX(cnt);
  • key = LL2NUM(cnt+(VALUE)iseq);

    ADD_INSN2(ret, nd_line(node), getspecial, key, INT2FIX(0));
    ADD_INSNL(ret, nd_line(node), branchif, lend);

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0