------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 classmail_quote">On 4/26/07, <b classmail_sendername">Mauricio Fernandez</b> &lt;<a hrefailto:mfp / acm.org">mfp / acm.org</a>&gt; wrote:</span><blockquote classmail_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>&gt; $ ruby19 -v -e &quot;p proc{}.arity&quot;<br>&gt; ruby 1.9.0 (2007-02-07 patchlevel 0) [i686-linux]<br>&gt; 0<br>&gt; $ ./ruby19 -v -e &quot;p proc{}.arity&quot;
<br>&gt; ruby 1.9.0 (2007-04-26 patchlevel 0) [i686-linux]<br>&gt; -1<br>&gt;<br>&gt; However, the RDoc documentation attached to proc_arity still says that it<br>&gt; should return 0, so there&#39;s a bug, either in the code (wrong iseq-&gt;argc ?) or
<br>&gt; in the docs (if the latter, the patch below should do).<br><br>It seems it&#39;s a regression after all; no time to fix it now, but I&#39;ve found<br>when it happened:<br><br>ruby-trunk-12116$ ./ruby -v -e &quot;p proc{}.arity&quot;
<br>ruby 1.9.0 (2007-03-21 patchlevel 0) [i686-linux]<br>0<br><br>ruby-trunk-12117$ ./ruby -v -e &quot;p proc{}.arity&quot;<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.&nbsp; I&#39;m sure it&#39;s naive, but it seems to work.<br>
<br>
-Adam<br>
<br>
Index: proc.c<br>
r>
--- proc.c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (revision 12226)<br>
+++ proc.c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (working copy)<br>
@@ -434,11 +434,11 @@<br>
&nbsp;&nbsp;&nbsp;&nbsp; GetProcPtr(self, proc);<br>
&nbsp;&nbsp;&nbsp;&nbsp; iseq  roc-&gt;block.iseq;<br>
&nbsp;&nbsp;&nbsp;&nbsp; if (iseq &amp;&amp; BUILTIN_TYPE(iseq) ! _NODE) {<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (iseq-&gt;arg_rest 0 &amp;&amp; iseq-&gt;arg_opts 0) {<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return INT2FIX(iseq-&gt;argc);<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if( iseq-&gt;arg_rest &lt; 0 ) {<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return INT2FIX(iseq-&gt;argc);<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else {<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return INT2FIX(-iseq-&gt;argc - 1);<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return INT2FIX(-(iseq-&gt;argc + 1));<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp;&nbsp; else {<br>
<br>

------art_135219_32355806.1177650748889--