summaryrefslogtreecommitdiffstats
path: root/eval.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2006-09-02 14:36:22 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2006-09-02 14:36:22 +0000
commitcf4b4b4ed9283d87497b661fc1ac5172db6030c4 (patch)
tree3de0c26d6ca8959d5d17fc5bfe29ae864f4027a8 /eval.c
parent9e15823543b0fbfcdd0706fee9352b32fa355fd3 (diff)
downloadruby-cf4b4b4ed9283d87497b661fc1ac5172db6030c4.tar.gz
ruby-cf4b4b4ed9283d87497b661fc1ac5172db6030c4.tar.xz
ruby-cf4b4b4ed9283d87497b661fc1ac5172db6030c4.zip
* eval.c (rb_eval): should handle when in else clause. a patch
from Eric Hodel <drbrain at segment7.net>. [ruby-core:08662] * parse.y (primary): wrap with NODE_CASE. [ruby-core:08663] git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@10832 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'eval.c')
-rw-r--r--eval.c19
1 files changed, 3 insertions, 16 deletions
diff --git a/eval.c b/eval.c
index c24728da4..bd85e331f 100644
--- a/eval.c
+++ b/eval.c
@@ -2861,25 +2861,12 @@ rb_eval(VALUE self, NODE *n)
}
goto again;
- case NODE_WHEN:
- while (node) {
- if (nd_type(node) != NODE_WHEN) goto again;
- EXEC_EVENT_HOOK(RUBY_EVENT_LINE, node->nd_head, self,
- ruby_frame->this_func,
- ruby_frame->this_class);
- if (when_check(node->nd_head, Qundef, self)) {
- node = node->nd_body;
- goto again;
- }
- node = node->nd_next;
- }
- RETURN(Qnil);
-
case NODE_CASE:
{
- VALUE val;
+ VALUE val = Qundef;
- val = rb_eval(self, node->nd_head);
+ if (node->nd_head)
+ val = rb_eval(self, node->nd_head);
node = node->nd_body;
while (node) {
if (nd_type(node) != NODE_WHEN) {