From 185a97d8a8457d4791b995f0133e6749b3de4568 Mon Sep 17 00:00:00 2001 From: nobu Date: Tue, 9 Aug 2005 12:53:38 +0000 Subject: * eval.c (formal_assign): let default values override arguments to zsuper. fixed: [ruby-dev:26743] git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@8959 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- eval.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) (limited to 'eval.c') diff --git a/eval.c b/eval.c index 4354765cb..0ce62fd3b 100644 --- a/eval.c +++ b/eval.c @@ -5731,6 +5731,7 @@ formal_assign(recv, node, argc, argv, local_vars) VALUE *local_vars; { int i; + int nopt = 0; if (nd_type(node) != NODE_ARGS) { rb_bug("no argument-node"); @@ -5741,9 +5742,9 @@ formal_assign(recv, node, argc, argv, local_vars) rb_raise(rb_eArgError, "wrong number of arguments (%d for %d)", argc, i); } if (!node->nd_rest) { - int nopt = i; NODE *optnode = node->nd_opt; + nopt = i; while (optnode) { nopt++; optnode = optnode->nd_next; @@ -5780,15 +5781,20 @@ formal_assign(recv, node, argc, argv, local_vars) rb_eval(recv, opt); } } - if (node->nd_rest) { + if (!node->nd_rest) { + i = nopt; + } + else { VALUE v; - if (argc > 0) + if (argc > 0) { v = rb_ary_new4(argc,argv); - else + i = -i - 1; + } + else { v = rb_ary_new2(0); + } assign(recv, node->nd_rest, v, 1); - if (argc > 0) return -i - 1; } return i; } -- cgit