summaryrefslogtreecommitdiff
path: root/eval.c
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2005-08-08 23:24:29 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2005-08-08 23:24:29 +0000
commit09d57b8e0c3bb80d43798d7a2bfc239229126e9a (patch)
treed8b00e5170b80d83851bd7013a4a27123efb0da7 /eval.c
parent81579af43e3ad506e30a81bda710570d78dea021 (diff)
* parse.y (f_block_arg), eval.c (rb_yield_0): deal with dynamic
variable lambda arguments. [ruby-core:05540] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@8955 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'eval.c')
-rw-r--r--eval.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/eval.c b/eval.c
index 01dde5fe5f..4354765cb5 100644
--- a/eval.c
+++ b/eval.c
@@ -4893,6 +4893,13 @@ rb_yield_0(val, self, klass, flags, avalue)
}
formal_assign(self, var, RARRAY(val)->len, RARRAY(val)->ptr, 0);
}
+ else if (nd_type(var) == NODE_BLOCK) {
+ if (var->nd_next) {
+ bvar = var->nd_next->nd_head;
+ }
+ var = var->nd_head;
+ goto block_var;
+ }
else {
int len = 0;
if (avalue) {
@@ -5269,13 +5276,6 @@ assign(self, lhs, val, pcall)
}
break;
- case NODE_BLOCK:
- lhs = lhs->nd_head;
- if (nd_type(lhs) == NODE_ARGS) {
- formal_assign(self, lhs, 1, &val, 0);
- break;
- }
-
default:
rb_bug("bug in variable assignment");
break;