Hi Stefan,<br><br><div class="gmail_quote">On Wed, Dec 7, 2011 at 4:09 PM, Stefan Marr <span dir="ltr"><<a href="mailto:squeak@stefan-marr.de">squeak@stefan-marr.de</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<br>
Hi:<br>
<br>
>From the current implementation, which I find in the interpreter, and from testing on Cog I assume that primitive 83, that is 'perform:', does easily handle an arbitrary number of parameters.<br>
<br>
Is that correct, or does for instance Cog do something else? (it does not seem so)<br></blockquote><div><br></div><div>That's correct. The primitive (InterpreterPrimitives>>primitivePerform) is written in terms of argumentCount and so should cope with any number of arguments up to the maximum (15 is the limit in CompiledMethod, 31 in the bytecode set I believe).</div>
<div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">I am just asking, because the number of parameters of the Object>>#perform:with: variants goes only up to three. And, the comment does not mention it. (at least in a recent Pharo image)<br>
<br>
Furthermore, I guess, there is an upper limit on the number of arguments with regard to frame size?<br></blockquote><div><br></div><div>Not in the StackVM or the Cog VM since these are running on a stack, not in a context, and so there's always plenty of headroom to push args on the stack during a perform. At least the method/bytecode set's limit on argumentCount is going to bite before the stack size. Similarly with perform:withArguments:, as long as the number of arguments is <= LargeFrameSize (56 slots?) the primitive will push arguments. Of course, the number of arguments must match the method that is found, and so the real limits are CompiledMethod's and the bytecode set's.</div>
<div><br></div><div>cheers,</div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<br>
Thanks<br>
Stefan<br>
<font color="#888888"><br>
--<br>
Stefan Marr<br>
Software Languages Lab<br>
Vrije Universiteit Brussel<br>
Pleinlaan 2 / B-1050 Brussels / Belgium<br>
<a href="http://soft.vub.ac.be/~smarr" target="_blank">http://soft.vub.ac.be/~smarr</a><br>
Phone: <a href="tel:%2B32%202%20629%202974" value="+3226292974">+32 2 629 2974</a><br>
Fax: <a href="tel:%2B32%202%20629%203525" value="+3226293525">+32 2 629 3525</a><br>
<br>
</font></blockquote></div><br><br clear="all"><div><br></div>-- <br>best,<div>Eliot</div><br>