------ art_135219_32355806.1177650748889 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline On 4/26/07, Mauricio Fernandez <mfp / acm.org> 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 roc->block.iseq; if (iseq && BUILTIN_TYPE(iseq) ! _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 { ------ art_135219_32355806.1177650748889 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline <br><div><span class mail_quote">On 4/26/07, <b class mail_sendername">Mauricio Fernandez</b> <<a href ailto:mfp / acm.org">mfp / acm.org</a>> wrote:</span><blockquote class mail_quote" styleorder-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> On Thu, Apr 26, 2007 at 06:55:46PM +0900, Mauricio Fernandez wrote:<br>> $ ruby19 -v -e "p proc{}.arity"<br>> ruby 1.9.0 (2007-02-07 patchlevel 0) [i686-linux]<br>> 0<br>> $ ./ruby19 -v -e "p proc{}.arity" <br>> ruby 1.9.0 (2007-04-26 patchlevel 0) [i686-linux]<br>> -1<br>><br>> However, the RDoc documentation attached to proc_arity still says that it<br>> should return 0, so there's a bug, either in the code (wrong iseq->argc ?) or <br>> in the docs (if the latter, the patch below should do).<br><br>It seems it's a regression after all; no time to fix it now, but I've found<br>when it happened:<br><br>ruby-trunk-12116$ ./ruby -v -e "p proc{}.arity" <br>ruby 1.9.0 (2007-03-21 patchlevel 0) [i686-linux]<br>0<br><br>ruby-trunk-12117$ ./ruby -v -e "p proc{}.arity"<br>ruby 1.9.0 (2007-03-21 patchlevel 0) [i686-linux]<br>-1<br><br></blockquote></div><br>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.<br> <br> -Adam<br> <br> Index: proc.c<br> r> --- proc.c (revision 12226)<br> +++ proc.c (working copy)<br> @@ -434,11 +434,11 @@<br> GetProcPtr(self, proc);<br> iseq roc->block.iseq;<br> if (iseq && BUILTIN_TYPE(iseq) ! _NODE) {<br> - if (iseq->arg_rest 0 && iseq->arg_opts 0) {<br> - return INT2FIX(iseq->argc);<br> - }<br> + if( iseq->arg_rest < 0 ) {<br> + return INT2FIX(iseq->argc);<br> + } <br> else {<br> - return INT2FIX(-iseq->argc - 1);<br> + return INT2FIX(-(iseq->argc + 1));<br> }<br> }<br> else {<br> <br> ------ art_135219_32355806.1177650748889--