* proc.c (rb_proc_parameters): unnamed_parameters() expects int

not VALUE.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@22952 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2009-03-14 08:59:12 +00:00
parent 1f43321991
commit 07167378cb
2 changed files with 18 additions and 12 deletions

View File

@ -1,3 +1,8 @@
Sat Mar 14 17:59:10 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
* proc.c (rb_proc_parameters): unnamed_parameters() expects in
not VALUE.
Sat Mar 14 17:54:19 2009 Nobuyoshi Nakada <nobu@ruby-lang.org> Sat Mar 14 17:54:19 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
* util.c (ruby_each_words): assume no string exceeds INT_MAX. * util.c (ruby_each_words): assume no string exceeds INT_MAX.

25
proc.c
View File

@ -575,6 +575,13 @@ rb_proc_call_with_block(VALUE self, int argc, VALUE *argv, VALUE pass_procval)
static VALUE static VALUE
proc_arity(VALUE self) proc_arity(VALUE self)
{
int arity = rb_proc_arity(self);
return INT2FIX(arity);
}
int
rb_proc_arity(VALUE proc)
{ {
rb_proc_t *proc; rb_proc_t *proc;
rb_iseq_t *iseq; rb_iseq_t *iseq;
@ -583,27 +590,21 @@ proc_arity(VALUE self)
if (iseq) { if (iseq) {
if (BUILTIN_TYPE(iseq) != T_NODE) { if (BUILTIN_TYPE(iseq) != T_NODE) {
if (iseq->arg_rest < 0) { if (iseq->arg_rest < 0) {
return INT2FIX(iseq->argc); return iseq->argc;
} }
else { else {
return INT2FIX(-(iseq->argc + 1 + iseq->arg_post_len)); return -(iseq->argc + 1 + iseq->arg_post_len);
} }
} }
else { else {
NODE *node = (NODE *)iseq; NODE *node = (NODE *)iseq;
if (nd_type(node) == NODE_IFUNC && node->nd_cfnc == bmcall) { if (nd_type(node) == NODE_IFUNC && node->nd_cfnc == bmcall) {
/* method(:foo).to_proc.arity */ /* method(:foo).to_proc.arity */
return INT2FIX(method_arity(node->nd_tval)); return method_arity(node->nd_tval);
} }
} }
} }
return INT2FIX(-1); return -1;
}
int
rb_proc_arity(VALUE proc)
{
return FIX2INT(proc_arity(proc));
} }
static rb_iseq_t * static rb_iseq_t *
@ -689,7 +690,7 @@ rb_proc_parameters(VALUE self)
int is_proc; int is_proc;
rb_iseq_t *iseq = get_proc_iseq(self, &is_proc); rb_iseq_t *iseq = get_proc_iseq(self, &is_proc);
if (!iseq) { if (!iseq) {
return unnamed_parameters(proc_arity(self)); return unnamed_parameters(rb_proc_arity(self));
} }
return rb_iseq_parameters(iseq, is_proc); return rb_iseq_parameters(iseq, is_proc);
} }
@ -1814,7 +1815,7 @@ curry(VALUE dummy, VALUE args, int argc, VALUE *argv, VALUE passed_proc)
static VALUE static VALUE
proc_curry(int argc, VALUE *argv, VALUE self) proc_curry(int argc, VALUE *argv, VALUE self)
{ {
int sarity, marity = FIX2INT(proc_arity(self)); int sarity, marity = rb_proc_arity(self);
VALUE arity, opt = Qfalse; VALUE arity, opt = Qfalse;
if (marity < 0) { if (marity < 0) {