Bug #2551

case/when matches literal *[1,2,3] but not variable *ary

Added by Jeremy Kemper about 2 years ago. Updated 10 months ago.

[ruby-core:27378]
Status:Closed Start date:01/03/2010
Priority:High Due date:
Assignee:- % Done:

0%

Category:core
Target version:Ruby 1.8.8
ruby -v:ruby 1.8.8dev (2010-01-01 revision 26212) [i386-darwin10.2.0]

Description

Matching a splat works with a literal but not a variable:

$ irb188
>> case 42; when *[41..43]; true end
=> true
>> a = [41..43]
=> [41..43]
>> case 42; when *a; true end
=> nil

Behaves correctly on 1.9.2dev and 1.8.7:

$ irb192
>> RUBY_DESCRIPTION
=> "ruby 1.9.2dev (2010-01-03 trunk 26233) [x86_64-darwin10.2.0]"
>> case 42; when *[41..43]; true end
=> true
>> a = [41..43]
=> [41..43]
>> case 42; when *a; true end
=> true

This breaks a lot of code, such as the Builder library which escapes all values as '***' on 1.8.8dev.

A test case:

diff --git a/test/ruby/test_case.rb b/test/ruby/test_case.rb
index af925d1..f996ed6 100644
--- a/test/ruby/test_case.rb
+++ b/test/ruby/test_case.rb
@@ -52,5 +52,13 @@ class TestCase < Test::Unit::TestCase
     else
       assert(false)
     end
+
+    range = [41..43]
+    case 42
+    when *range
+      assert(true)
+    else
+      assert(false)
+    end
   end
 end

Related issues

duplicates Ruby 1.8 - Bug #2468: Array expansion inside case/when gives unexpected results Closed 12/10/2009
duplicated by Ruby 1.8 - Bug #2555: "case n when *VALID" Broken in Ruby 1.8.8; affects Ruby o... Closed 01/05/2010

History

Updated by Jeremy Kemper about 2 years ago

Duplicates #2468.

Updated by Jeremy Kemper about 2 years ago

This is a show-stopper bug that affects a lot of my code. If it's not going to be fixed, perhaps the 19migration/looser_args merge should be reverted.

Updated by Akinori MUSHA about 2 years ago

  • Status changed from Open to Closed
This issue was solved with changeset r26589.
Romulo, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.

Updated by Jeremy Kemper about 2 years ago

r26589 adds a failing test case but no fix. Please reopen.

Updated by Marc-Andre Lafortune about 2 years ago

  • Status changed from Closed to Open

Updated by Yui NARUSE almost 2 years ago

  • Status changed from Open to Closed
> I wish "ref [Bug #...]" would have been parsed just like "cf: [Bug #...]".
#... may change when the ticket moves from bug to backport or something.
So writing ref #... is correct.

Also available in: Atom PDF