# \[Bug:1.9\] case $BJ8$N\<0$,\>JN,$5$l(B when $B@a$KG\[NsE83+$,$"$k$H$-$N5sF0(B

**URL:** <https://www.ruby-forum.com/t/bug-1-9-case-bj8-n-0-jn-5-l-b-when-b-a-kg-nse83-k-h-n5sf0-b/177459>\
**Category:** Development\
**Created:** [October 17, 2009, 11:17pm UTC](https://www.ruby-forum.com/t/bug-1-9-case-bj8-n-0-jn-5-l-b-when-b-a-kg-nse83-k-h-n5sf0-b/177459 "2009-10-17T23:17:22Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![wanabe](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/w/51bf81/32.png) [@wanabe](https://www.ruby-forum.com/u/wanabe)\
**Post date:** [October 17, 2009, 11:17pm UTC](https://www.ruby-forum.com/t/bug-1-9-case-bj8-n-0-jn-5-l-b-when-b-a-kg-nse83-k-h-n5sf0-b/177459/1 "2009-10-17T23:17:22Z")

</div>

e$B%o%J%Y$H?=$7$^$9!#e(B

case e$BJ8$N\<0$,\>JN,$5$l!"$+$De(B when  
e$B@a$KG[NsE83+$,$"$k$H$-$N5sF0!"e(B  
e$B$h$j6qBNE\*$K$Oe(B NODE\_ARGSCAT, NODE\_ARGSPUSH e$B$Ne(B  
e$B%3%s%Q%$%k7k2L$,@5$7$/$J$$$h$&$K;W$$$^$9!#e(B  
e$BDL\>o$Ne(B NODE\_CASE e$B$HF1$8$h$&$K=hM}$9$k$N$O$I$&$G$7$g$&$+!#e(B

$ 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);

```
   vals = node->nd_head;

```

- 

```
 if (vals && nd_type(vals) == NODE_ARRAY) {

```

- 

```
 if (!vals) {

```

- rb\_bug(“NODE\_WHEN: must be NODE\_ARRAY, but 0”);
- 

```
 }

```

- 

```
 switch (nd_type(vals)) {

```

- 

```
   case NODE_ARRAY:

```

while (vals) {  
val = vals-\>nd\_head;  
COMPILE(ret, “when2”, val);  
ADD\_INSNL(ret, nd\_line(val), branchif, l1);  
vals = vals-\>nd\_next;  
}
- break;
- 

```
   case NODE_SPLAT:

```

- 

```
   case NODE_ARGSCAT:

```

- 

```
   case NODE_ARGSPUSH:

```

- ADD\_INSN(ret, nd\_line(vals), putnil);
- COMPILE(ret, “when2/cond splat”, vals);
- ADD\_INSN1(ret, nd\_line(vals), checkincludearray, Qfalse);
- ADD\_INSN(ret, nd\_line(vals), pop);
- ADD\_INSNL(ret, nd\_line(vals), branchif, l1);
- break;
- 

```
   default:

```

- rb\_bug(“NODE\_WHEN: unknown node (%s)”,
- 

```
      ruby_node_name(nd_type(vals)));
 }

```

- 

```
 else if (nd_type(vals) == NODE_SPLAT ||

```

- 

```
    nd_type(vals) == NODE_ARGSCAT ||

```

- 

```
    nd_type(vals) == NODE_ARGSPUSH) {

```

- 
- NODE \*val = vals-\>nd\_head;
- 
- if (nd\_type(vals) == NODE\_ARGSCAT || nd\_type(vals) ==  
NODE\_ARGSPUSH) {
- 

```
   NODE *vs = vals->nd_head;

```

- 

```
   val = vals->nd_body;

```

- 
- 

```
   while (vs) {

```

- 

```
 NODE* val = vs->nd_head;

```

- 

```
 COMPILE(ret, "when/argscat", val);

```

- 

```
 ADD_INSNL(ret, nd_line(val), branchif, l1);

```

- 

```
 vs = vs->nd_next;

```

- 

```
   }

```

- }
- 
- ADD\_INSN(ret, nd\_line(val), putnil);
- COMPILE(ret, “when2/splat”, val);
- ADD\_INSN1(ret, nd\_line(val), checkincludearray, Qfalse);
- ADD\_INSN(ret, nd\_line(val), pop);
- ADD\_INSNL(ret, nd\_line(val), branchif, l1);
- 

```
 }

```

- 

```
 else {

```

- rb\_bug(“err”);
- 

```
 }
 node = node->nd_next;

```

}  
/\* else \*/

---

<div class="post-metadata">

**Author:** ![wanabe](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/w/51bf81/32.png) [@wanabe](https://www.ruby-forum.com/u/wanabe)\
**Post date:** [January 28, 2010, 6:38pm UTC](https://www.ruby-forum.com/t/bug-1-9-case-bj8-n-0-jn-5-l-b-when-b-a-kg-nse83-k-h-n5sf0-b/177459/2 "2010-01-28T18:38:08Z")

</div>

e$B%A%1%C%He(B #2226 e$B$,99?7$5$l$^$7$?!#e(B (by \_ wanabe)

## e$B$^$D$b$H$5$s!J$“$k$$$O$5$5$@$5$s!)!Ke(B e$B$3$N%A%1%C%H$K$D$$$F!”$h$m$7$1$l$P0U8+$r$\*J9$-$7$?$$$N$G$9$,$I$&$G$7$g$&$+!#e(B e$B!J%P%0$G$O$J$$!“%P%0$@$,%Q%C%A$,@5$7$/$J$$!”%3%\_%C%H$7$F$h$$!“$J$I!Ke(B e$B:EB%$9$k$h$&$G?=$7Lu$”$j$^$;$s!#e(B

[http://redmine.ruby-lang.org/issues/show/2226](http://redmine.ruby-lang.org/issues/show/2226)

---

<div class="post-metadata">

**Author:** ![wanabe](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/w/51bf81/32.png) [@wanabe](https://www.ruby-forum.com/u/wanabe)\
**Post date:** [April 16, 2010, 5:49pm UTC](https://www.ruby-forum.com/t/bug-1-9-case-bj8-n-0-jn-5-l-b-when-b-a-kg-nse83-k-h-n5sf0-b/177459/3 "2010-04-16T17:49:09Z")

</div>

wanabe e$B$5$se(B  
e$B1sF#$G$9!#e(B

2009e$BG/e(B10e$B7ne(B18e$BF|e(B6:16 wanabe [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> case e$BJ8$N\<0$,\>JN,$5$l!“$+$De(B when e$B@a$KG[NsE83+$,$”$k$H$-$N5sF0!"e(B  
> e$B$h$j6qBNE\*$K$Oe(B NODE\_ARGSCAT, NODE\_ARGSPUSH e$B$Ne(B  
> e$B%3%s%Q%$%k7k2L$,@5$7$/$J$$$h$&$K;W$$$^$9!#e(B  
> e$BDL\>o$Ne(B NODE\_CASE e$B$HF1$8$h$&$K=hM}$9$k$N$O$I$&$G$7$g$&$+!#e(B

2010e$BG/e(B1e$B7ne(B29e$BF|e(B2:37 \_ wanabe [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> e$B$^$D$b$H$5$s!J$“$k$$$O$5$5$@$5$s!)!Ke(B  
> e$B$3$N%A%1%C%H$K$D$$$F!”$h$m$7$1$l$P0U8+$r$\*J9$-$7$?$$$N$G$9$,$I$&$G$7$g$&$+!#e(B  
> e$B!J%P%0$G$O$J$$!“%P%0$@$,%Q%C%A$,@5$7$/$J$$!”%3%\_%C%H$7$F$h$$!"$J$I!Ke(B

e$B3N$+$K%P%0$@$H;W$$$^$9$7!“%o%J%Y$5$s$N%Q%C%A$G@5$7$$$H;W$$$^$9!#e(B  
e$BH?BP$b$J$$$h$&$J$N$G!”%3%\_%C%H$7$A$c$C$F$/$@$5$$!#e(B

e$B$?$@!"0l1~!"0J2\<$NE@$,Hs8\_49$K$J$k$h$&$G$9!#e(B

$ 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)

e$B$H$$$C$F$b!"e(BNODE\_CASE  
e$B$NJ}$G$O%o%J%Y$5$s$N%Q%C%A$NA0$+$iHs8\_49$Je(B  
e$B$h$&$G$9!#e(B

$ 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)

e$B\<B32$O$[$$J$$$H;W$&$N$G$9$,!"$b$72K$@$C$?$i8+$F$d$C$F$/$@$5$$!#e(B

---

<div class="post-metadata">

**Author:** ![wanabe](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/w/51bf81/32.png) [@wanabe](https://www.ruby-forum.com/u/wanabe)\
**Post date:** [April 17, 2010, 2:27am UTC](https://www.ruby-forum.com/t/bug-1-9-case-bj8-n-0-jn-5-l-b-when-b-a-kg-nse83-k-h-n5sf0-b/177459/4 "2010-04-17T02:27:52Z")

</div>

e$B%A%1%C%He(B #2226 e$B$,99?7$5$l$^$7$?!#e(B (by \_ wanabe)

e$B%9%F!\<%?%9e(B Assignede$B$+$ie(BClosede$B$KJQ99e(B  
e$B?JD=e(B % 0e$B$+$ie(B100e$B$KJQ99e(B

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.

* * *

[http://redmine.ruby-lang.org/issues/show/2226](http://redmine.ruby-lang.org/issues/show/2226)
