Bug #2226
closedcase 文の式が省略され when 節に配列展開があるときの挙動
Description
=begin
ワナベと申します。
case 文の式が省略され、かつ when 節に配列展開があるときの挙動、
より具体的には NODE_ARGSCAT, NODE_ARGSPUSH の
コンパイル結果が正しくないように思います。
通常の NODE_CASE と同じように処理するのはどうでしょうか。
$ cat test.rb
case
when *[], false
p :ng1
else
p :ok
end
case
when *false, []
p :ok
else
p :ng2
end
begin
case
when false, *nonexistent_var, false
p :ng3
else
p :ng4
end
rescue NameError
p :ok
end
$ ruby -v test.rb
ruby 1.9.2dev (2009-10-17 trunk 25387) [i386-mingw32]
:ng1
:ng2
:ng3
Index: compile.c¶
--- compile.c (revision 25387)
+++ compile.c (working copy)
@@ -3116,41 +3116,31 @@
ADD_INSNL(body_seq, nd_line(node), jump, endlabel);
-
}
/* else */
--
ワナベ
=end
Updated by naruse (Yui NARUSE) over 16 years ago
- Category set to core
- Status changed from Open to Assigned
- Assignee set to matz (Yukihiro Matsumoto)
- Target version set to 1.9.2
- ruby -v set to ruby 1.9.2dev (2009-10-22 trunk 25433) [x86_64-freebsd8.0]
=begin
=end
Updated by wanabe (_ wanabe) over 16 years ago
=begin
まつもとさん(あるいはささださん?)
このチケットについて、よろしければ意見をお聞きしたいのですがどうでしょうか。
(バグではない、バグだがパッチが正しくない、コミットしてよい、など)
催促するようで申し訳ありません。
=end
Updated by mame (Yusuke Endoh) about 16 years ago
=begin
wanabe さん
遠藤です。
2009年10月18日6:16 wanabe s.wanabe@gmail.com:
case 文の式が省略され、かつ when 節に配列展開があるときの挙動、
より具体的には NODE_ARGSCAT, NODE_ARGSPUSH の
コンパイル結果が正しくないように思います。
通常の NODE_CASE と同じように処理するのはどうでしょうか。
2010年1月29日2:37 _ wanabe redmine@ruby-lang.org:
まつもとさん(あるいはささださん?)
このチケットについて、よろしければ意見をお聞きしたいのですがどうでしょうか。
(バグではない、バグだがパッチが正しくない、コミットしてよい、など)
確かにバグだと思いますし、ワナベさんのパッチで正しいと思います。
反対もないようなので、コミットしちゃってください。
ただ、一応、以下の点が非互換になるようです。
$ ruby -ve 'case; when true, *x; p :ok; end'
ruby 1.8.7 (2008-08-11 patchlevel 72) [i486-linux]
:ok
$ ./ruby -ve 'case; when true, *x; p :ok; end'
ruby 1.9.2dev (2010-04-16 trunk 27359) [i686-linux]
-e:1:in <main>': undefined local variable or method x' for
main:Object (NameError)
といっても、NODE_CASE の方ではワナベさんのパッチの前から非互換な
ようです。
$ ruby -ve 'case "foo"; when "foo", *x; p :ok; end'
ruby 1.8.7 (2008-08-11 patchlevel 72) [i486-linux]
:ok
$ ./ruby -ve 'case "foo"; when "foo", *x; p :ok; end'
ruby 1.9.2dev (2010-04-16 trunk 27359) [i686-linux]
-e:1:in <main>': undefined local variable or method x' for
main:Object (NameError)
実害はほぼないと思うのですが、もし暇だったら見てやってください。
--
Yusuke ENDOH mame@tsg.ne.jp
=end
Updated by wanabe (_ wanabe) about 16 years ago
- Status changed from Assigned to Closed
- % Done changed from 0 to 100
=begin
This issue was solved with changeset r27376.
_, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.
=end