diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2002-02-18 09:52:48 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2002-02-18 09:52:48 +0000 |
commit | 7de72c4858a8240ae025aecb3599291f0bf90e34 (patch) | |
tree | 441e714bdb81d7dc466279d4b7306158a5043a7f /eval.c | |
parent | 3432cecf246414d63d55e70aeb5697e62198618f (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.c | 15 |
1 files changed, 10 insertions, 5 deletions
@@ -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); |