* proc.c (proc_arity): fix an arity bug ([ruby-core:11060]).

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@12232 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
ko1 2007-05-01 05:01:15 +00:00
Родитель 75d28f8870
Коммит f80841275d
2 изменённых файлов: 18 добавлений и 7 удалений

Просмотреть файл

@ -1,3 +1,7 @@
Tue May 1 13:59:18 2007 Koichi Sasada <ko1@atdot.net>
* proc.c (proc_arity): fix an arity bug ([ruby-core:11060]).
Tue May 1 13:12:49 2007 Koichi Sasada <ko1@atdot.net>
* yarvcore.h, compile.c (set_arguments): support post arguments.

21
proc.c
Просмотреть файл

@ -443,17 +443,24 @@ proc_arity(VALUE self)
rb_iseq_t *iseq;
GetProcPtr(self, proc);
iseq = proc->block.iseq;
if (iseq && BUILTIN_TYPE(iseq) != T_NODE) {
if (iseq->arg_rest < 0) {
return INT2FIX(iseq->argc);
if (iseq) {
if (BUILTIN_TYPE(iseq) != T_NODE) {
if (iseq->arg_rest < 0) {
return INT2FIX(iseq->argc);
}
else {
return INT2FIX(-(iseq->argc + 1 + iseq->arg_post_len));
}
}
else {
return INT2FIX(-(iseq->argc + 1 + iseq->arg_post_len));
NODE *node = (NODE *)iseq;
if (nd_type(node) == NODE_IFUNC && node->nd_cfnc == bmcall) {
/* method(:foo).to_proc.arity */
return INT2FIX(method_arity(node->nd_tval));
}
}
}
else {
return INT2FIX(-1);
}
return INT2FIX(-1);
}
int