Bug #2551
closedcase/when matches literal *[1,2,3] but not variable *ary
Description
=begin
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
=end