summaryrefslogtreecommitdiff
path: root/eval.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>1999-11-04 08:39:57 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>1999-11-04 08:39:57 +0000
commita9e9697994a08600f5dbb46a1fe2a07233cb4890 (patch)
tree9976842c343a888dc34f5cc53ecedc5abb358669 /eval.c
parent0d684beafb4258da9606b1e3b4448511b709a2e2 (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.c23
1 files changed, 13 insertions, 10 deletions
diff --git a/eval.c b/eval.c
index 7a858018c0..6e9ad5e9fb 100644
--- a/eval.c
+++ b/eval.c
@@ -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);