diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2003-10-30 04:37:50 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2003-10-30 04:37:50 +0000 |
commit | cf22db8d6910a428b2bb51b3c78c34b86d83bf74 (patch) | |
tree | 63337a17a4e86d48e6694d2860d2a5571fa4a738 /eval.c | |
parent | 22b8cc47eb999311bef34240dd8c4f6cfdda849c (diff) | |
download | ruby-cf22db8d6910a428b2bb51b3c78c34b86d83bf74.tar.gz |
* parse.y (logop): left may be NULL. [ruby-talk:84539]
* eval.c (rb_eval): NODE_CASE nd_head may be NULL.
* eval.c (rb_eval): remove never occurred NODE_WHEN branch.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@4864 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'eval.c')
-rw-r--r-- | eval.c | 44 |
1 files changed, 3 insertions, 41 deletions
@@ -2585,42 +2585,6 @@ rb_eval(self, n) } goto again; - case NODE_WHEN: - while (node) { - NODE *tag; - - if (nd_type(node) != NODE_WHEN) goto again; - tag = node->nd_head; - while (tag) { - if (trace_func) { - call_trace_func("line", tag, self, - ruby_frame->last_func, - ruby_frame->last_class); - } - if (nd_type(tag->nd_head) == NODE_WHEN) { - VALUE v = rb_eval(self, tag->nd_head->nd_head); - long i; - - if (TYPE(v) != T_ARRAY) v = rb_ary_to_ary(v); - for (i=0; i<RARRAY(v)->len; i++) { - if (RTEST(RARRAY(v)->ptr[i])) { - node = node->nd_body; - goto again; - } - } - tag = tag->nd_next; - continue; - } - if (RTEST(rb_eval(self, tag->nd_head))) { - node = node->nd_body; - goto again; - } - tag = tag->nd_next; - } - node = node->nd_next; - } - RETURN(Qnil); - case NODE_CASE: { VALUE val; @@ -2640,7 +2604,7 @@ rb_eval(self, n) ruby_frame->last_func, ruby_frame->last_class); } - if (nd_type(tag->nd_head) == NODE_WHEN) { + if (tag->nd_head && nd_type(tag->nd_head) == NODE_WHEN) { VALUE v = rb_eval(self, tag->nd_head->nd_head); long i; @@ -2973,16 +2937,14 @@ rb_eval(self, n) case NODE_ARGSCAT: { VALUE args = rb_eval(self, node->nd_head); - result = rb_ary_concat(args, - splat_value(rb_eval(self, node->nd_body))); + result = rb_ary_concat(args, splat_value(rb_eval(self, node->nd_body))); } break; case NODE_ARGSPUSH: { VALUE args = rb_ary_dup(rb_eval(self, node->nd_head)); - result = rb_ary_push(args, - rb_eval(self, node->nd_body)); + result = rb_ary_push(args, rb_eval(self, node->nd_body)); } break; |