On 4/26/07, Mauricio Fernandez wrote: > > On Thu, Apr 26, 2007 at 06:55:46PM +0900, Mauricio Fernandez wrote: > > $ ruby19 -v -e "p proc{}.arity" > > ruby 1.9.0 (2007-02-07 patchlevel 0) [i686-linux] > > 0 > > $ ./ruby19 -v -e "p proc{}.arity" > > ruby 1.9.0 (2007-04-26 patchlevel 0) [i686-linux] > > -1 > > > > However, the RDoc documentation attached to proc_arity still says that > it > > should return 0, so there's a bug, either in the code (wrong iseq->argc > ?) or > > in the docs (if the latter, the patch below should do). > > It seems it's a regression after all; no time to fix it now, but I've > found > when it happened: > > ruby-trunk-12116$ ./ruby -v -e "p proc{}.arity" > ruby 1.9.0 (2007-03-21 patchlevel 0) [i686-linux] > 0 > > ruby-trunk-12117$ ./ruby -v -e "p proc{}.arity" > ruby 1.9.0 (2007-03-21 patchlevel 0) [i686-linux] > -1 > > This makes arity behave like the docs specify for both method.arity and proc.arity. I'm sure it's naive, but it seems to work. -Adam Index: proc.c =================================================================== --- proc.c (revision 12226) +++ proc.c (working copy) @@ -434,11 +434,11 @@ GetProcPtr(self, proc); iseq = proc->block.iseq; if (iseq && BUILTIN_TYPE(iseq) != T_NODE) { - if (iseq->arg_rest == 0 && iseq->arg_opts == 0) { - return INT2FIX(iseq->argc); - } + if( iseq->arg_rest < 0 ) { + return INT2FIX(iseq->argc); + } else { - return INT2FIX(-iseq->argc - 1); + return INT2FIX(-(iseq->argc + 1)); } } else {