summaryrefslogtreecommitdiff
path: root/eval.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>1999-04-09 18:04:08 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>1999-04-09 18:04:08 +0000
commit178a2f7064af173ed2b223b9a1c70e77dd016e49 (patch)
tree16c6920c4e3a7a6abb9144fdd1c91ee166a7bbba /eval.c
parent529bc6166cb3e6083678c278d8a871e803420804 (diff)
*** empty log message ***
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/v1_1r@414 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'eval.c')
-rw-r--r--eval.c24
1 files changed, 12 insertions, 12 deletions
diff --git a/eval.c b/eval.c
index d6b801fcfd..56be8c72d4 100644
--- a/eval.c
+++ b/eval.c
@@ -922,22 +922,19 @@ static VALUE
eval_node(self)
VALUE self;
{
- VALUE result = Qnil;
- NODE *tree;
+ NODE *beg_tree, *tree;
- if (eval_tree_begin) {
- tree = eval_tree_begin;
+ beg_tree = eval_tree_begin;
+ tree = eval_tree;
+ if (beg_tree) {
eval_tree_begin = 0;
- rb_eval(self, tree);
+ rb_eval(self, beg_tree);
}
- if (!eval_tree) return Qnil;
-
- tree = eval_tree;
+ if (!tree) return Qnil;
eval_tree = 0;
- result = rb_eval(self, tree);
- return result;
+ return rb_eval(self, tree);
}
int rb_in_eval;
@@ -1950,7 +1947,7 @@ rb_eval(self, node)
case NODE_FLIP2: /* like AWK */
if (node->nd_state == 0) {
if (RTEST(rb_eval(self, node->nd_beg))) {
- node->nd_state = rb_eval(self, node->nd_end)?0:1;
+ node->nd_state = RTEST(rb_eval(self, node->nd_end))?0:1;
result = TRUE;
}
else {
@@ -1971,7 +1968,9 @@ rb_eval(self, node)
node->nd_state = 1;
result = TRUE;
}
- result = FALSE;
+ else {
+ result = FALSE;
+ }
}
else {
if (RTEST(rb_eval(self, node->nd_end))) {
@@ -4894,6 +4893,7 @@ blk_copy_prev(block)
tmp = ALLOC_N(struct BLOCK, 1);
MEMCPY(tmp, block->prev, struct BLOCK, 1);
tmp->frame.argv = ALLOC_N(VALUE, tmp->frame.argc);
+ scope_dup(tmp->scope);
MEMCPY(tmp->frame.argv, block->frame.argv, VALUE, tmp->frame.argc);
block->prev = tmp;
block = tmp;