On Tue, Apr 27, 2010 at 01:01:33PM +0200, Bert Freudenberg wrote:
On 27.04.2010, at 11:27, Mariano Martinez Peck wrote:
Hi folks. I am writing some primitives in Interpreter and now I need to return more than one value. Of course, in a OOP the ideal would be to return an object that represents the result. That object would also have all the instance variables I want.
So..first question, is it possible to create and push on the stack an object of my own class ? If true, con can I do it ?
now...suppose I cannot do that, the other option is to create an array with the values I want to return, and then return the array. For this particular case, I have 3 or 4 interegers I would like to put in the array, and push it in the stack. Is this possible ? If true, how ?
Are there other options for what I need ?
It is better to avoid allocations in a primitive. So make a 3 or 4 element array, and pass this as argument to the primitive, which fills in the actual values.
As Bert says, it is safer to avoid allacations in the primitive. But for an example of how to do it properly, see FilePlugin>>makeDirEntryName:size:createDate:modDate:isDir:fileSize:
Note the use of #pushRemappableOop: and popRemappableOop, which is required to prevent the object pointers from changing due to garbage collection. Allocating an object in the primitive can and will invoke garbage collection, which leads to nasty intermittent bugs if you do not use #pushRemappableOop:.
Dave