summaryrefslogtreecommitdiff
path: root/eval.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2006-07-19 13:52:03 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2006-07-19 13:52:03 +0000
commitcb3e51e712717ca58c004cea31a5a998d78c6433 (patch)
tree542275fb503458ff1237869546394d317cafe592 /eval.c
parentf724560996316019d298c6ca0df2a8891bea2da3 (diff)
* eval.c (rb_yield_0): should check args_args before lambda
argument check. [ruby-dev:29029] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@10567 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'eval.c')
-rw-r--r--eval.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/eval.c b/eval.c
index aed3565c76..5c9ec1728f 100644
--- a/eval.c
+++ b/eval.c
@@ -4710,7 +4710,7 @@ rb_yield_0(VALUE val, VALUE self, VALUE klass /* OK */, int flags)
int old_vmode;
struct FRAME frame;
NODE *cnode = ruby_current_node;
- int ary_args = flags & YIELD_ARY_ARGS, lambda;
+ int ary_args, lambda;
int state, broken = 0;
rb_need_block();
@@ -4744,6 +4744,7 @@ rb_yield_0(VALUE val, VALUE self, VALUE klass /* OK */, int flags)
node = block->body;
var = block->var;
lambda = block->flags & BLOCK_LAMBDA;
+ ary_args = flags & YIELD_ARY_ARGS;
if (var) {
PUSH_TAG(PROT_NONE);
if ((state = EXEC_TAG()) == 0) {
@@ -4819,7 +4820,7 @@ rb_yield_0(VALUE val, VALUE self, VALUE klass /* OK */, int flags)
POP_TAG();
if (state) goto pop_state;
}
- else if (lambda && RARRAY(val)->len != 0 &&
+ else if (lambda && ary_args && RARRAY(val)->len != 0 &&
(!node || nd_type(node) != NODE_IFUNC ||
node->nd_cfnc != bmcall)) {
rb_raise(rb_eArgError, "wrong number of arguments (%ld for 0)",