summaryrefslogtreecommitdiff
path: root/eval.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2002-02-18 09:52:48 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2002-02-18 09:52:48 +0000
commit7de72c4858a8240ae025aecb3599291f0bf90e34 (patch)
tree441e714bdb81d7dc466279d4b7306158a5043a7f /eval.c
parent3432cecf246414d63d55e70aeb5697e62198618f (diff)
* parse.y (expr_value, arg_value, primary_value): value_expr()
check in place. * eval.c (block_pass): "&nil" should clear block given. * dir.c (push_braces): remove MAXPATHLEN dependency. * dir.c (dir_s_globd): ditto. * dln.c (init_funcname): ditto. * dln.c (load_1): ditto. * dln.c (dln_load): ditto. * configure.in: add GNU/Hurd switches. * pack.c (pack_pack): allows comment in template strings. * pack.c (pack_unpack): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@2082 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'eval.c')
-rw-r--r--eval.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/eval.c b/eval.c
index 1bc78c72d1..634347388e 100644
--- a/eval.c
+++ b/eval.c
@@ -2323,17 +2323,18 @@ rb_eval(self, n)
case NODE_WHILE:
PUSH_TAG(PROT_NONE);
+ result = Qnil;
switch (state = EXEC_TAG()) {
case 0:
ruby_sourceline = nd_line(node);
- if (node->nd_state && !RTEST(result = rb_eval(self, node->nd_cond)))
+ if (node->nd_state && !RTEST(rb_eval(self, node->nd_cond)))
goto while_out;
do {
while_redo:
rb_eval(self, node->nd_body);
while_next:
;
- } while (RTEST(result = rb_eval(self, node->nd_cond)));
+ } while (RTEST(rb_eval(self, node->nd_cond)));
break;
case TAG_REDO:
@@ -2355,16 +2356,17 @@ rb_eval(self, n)
case NODE_UNTIL:
PUSH_TAG(PROT_NONE);
+ result = Qnil;
switch (state = EXEC_TAG()) {
case 0:
- if (node->nd_state && RTEST(result = rb_eval(self, node->nd_cond)))
+ if (node->nd_state && RTEST(rb_eval(self, node->nd_cond)))
goto until_out;
do {
until_redo:
rb_eval(self, node->nd_body);
until_next:
;
- } while (!RTEST(result = rb_eval(self, node->nd_cond)));
+ } while (!RTEST(rb_eval(self, node->nd_cond)));
break;
case TAG_REDO:
@@ -6598,7 +6600,10 @@ block_pass(self, node)
volatile int safe = ruby_safe_level;
if (NIL_P(block)) {
- return rb_eval(self, node->nd_iter);
+ PUSH_ITER(ITER_NOT);
+ result = rb_eval(self, node->nd_iter);
+ POP_ITER();
+ return result;
}
if (rb_obj_is_kind_of(block, rb_cMethod)) {
block = method_proc(block);