[Vm-dev] primitivePerform (prim 83)
eliot.miranda at gmail.com
Thu Dec 8 02:01:58 UTC 2011
On Wed, Dec 7, 2011 at 4:09 PM, Stefan Marr <squeak at stefan-marr.de> wrote:
> 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.
> Is that correct, or does for instance Cog do something else? (it does not
> seem so)
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).
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)
> Furthermore, I guess, there is an upper limit on the number of arguments
> with regard to frame size?
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.
> Stefan Marr
> Software Languages Lab
> Vrije Universiteit Brussel
> Pleinlaan 2 / B-1050 Brussels / Belgium
> Phone: +32 2 629 2974
> Fax: +32 2 629 3525
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Vm-dev