diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 1999-11-04 08:39:57 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 1999-11-04 08:39:57 +0000 |
commit | a9e9697994a08600f5dbb46a1fe2a07233cb4890 (patch) | |
tree | 9976842c343a888dc34f5cc53ecedc5abb358669 /eval.c | |
parent | 0d684beafb4258da9606b1e3b4448511b709a2e2 (diff) |
19991104
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@557 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'eval.c')
-rw-r--r-- | eval.c | 23 |
1 files changed, 13 insertions, 10 deletions
@@ -1771,7 +1771,7 @@ rb_eval(self, node) /* nodes for speed-up(literal match) */ case NODE_MATCH2: result = rb_reg_match(rb_eval(self,node->nd_recv), - rb_eval(self,node->nd_value)); + rb_eval(self,node->nd_value)); break; /* nodes for speed-up(literal match) */ @@ -1841,7 +1841,12 @@ rb_eval(self, node) { VALUE val; - val = rb_eval(self, node->nd_head); + if (node->nd_head) { + val = rb_eval(self, node->nd_head); + } + else { + val = Qtrue; + } node = node->nd_body; while (node) { NODE *tag; @@ -2334,17 +2339,15 @@ rb_eval(self, node) case NODE_OP_ASGN_AND: result = rb_eval(self, node->nd_head); - if (RTEST(result)) { - result = rb_eval(self, node->nd_value); - } - break; + if (!RTEST(result)) break; + node = node->nd_value; + goto again; case NODE_OP_ASGN_OR: result = rb_eval(self, node->nd_head); - if (!RTEST(result)) { - result = rb_eval(self, node->nd_value); - } - break; + if (RTEST(result)) break; + node = node->nd_value; + goto again; case NODE_MASGN: result = massign(self, node, rb_eval(self, node->nd_value),0); |