summaryrefslogtreecommitdiffstats
path: root/eval.c
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2005-08-08 13:14:08 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2005-08-08 13:14:08 +0000
commit9f5278b198ee66b97fc7c9d83d295cf2977af110 (patch)
treecf3d89ca1ac625c0f90cd5920eb1f00a43fa4e8e /eval.c
parentf2ba9d14d423c51e66c7456d3bad88e33aef521f (diff)
downloadruby-9f5278b198ee66b97fc7c9d83d295cf2977af110.tar.gz
ruby-9f5278b198ee66b97fc7c9d83d295cf2977af110.tar.xz
ruby-9f5278b198ee66b97fc7c9d83d295cf2977af110.zip
* eval.c (assign): deal with new block argument.
fixed: [ruby-core:05536] * eval.c (rb_node_arity): follow change of NODE_ARGS. fixed: [ruby-dev:26761] git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@8951 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'eval.c')
-rw-r--r--eval.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/eval.c b/eval.c
index 7ad94f1e6..01dde5fe5 100644
--- a/eval.c
+++ b/eval.c
@@ -5269,6 +5269,13 @@ 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;
@@ -9326,7 +9333,7 @@ rb_node_arity(body)
if (nd_type(body) == NODE_BLOCK)
body = body->nd_head;
if (!body) return 0;
- n = body->nd_cnt;
+ n = body->nd_frml ? RARRAY(body->nd_frml)->len : 0;
if (body->nd_opt || body->nd_rest)
n = -n-1;
return n;