[squeak-dev] Re: #recreateSpecialObjectsArray woes

Igor Stasenko siguctua at gmail.com
Mon Apr 12 18:46:06 UTC 2010


On 12 April 2010 21:08, Andreas Raab <andreas.raab at gmx.de> wrote:
> On 4/12/2010 10:57 AM, Igor Stasenko wrote:
>>
>> On 12 April 2010 20:49, Andreas Raab<andreas.raab at gmx.de>  wrote:
>>>
>>> Today, you can give your plugin an array of your own special objects that
>>> is
>>> used by your plugin, registered with the VM as a GC root and there's no
>>> need
>>> to modify splObjs.
>>>
>> Looks like i missed something. HOW?
>> Suppose a primitive needs to answer an instance of a special class, known
>> by it.
>> How it can instantiate it, if it having no any clues, where its
>> invoked from, and it can't rely on a receiver, nor any of method's
>> arguments?
>
> You make it work just like splObjs, i.e.,
>
> FooPlugin>>primitiveSetSplObjs
>        "Sets the special objects for my plugin"
>        splObjs := interpreterProxy stackObjectValue: 0.
>        "... should have sanity checks ..."
>        interpreterProxy addGCRoot: (self cCode: '&splObjs').
>
> FooPlugin>>instantiateNewBar
>        "Instantiates a new Bar (at index 2 in the splObjs)"
>
>        "... should have sanity checks ..."
>        foo := interpreterProxy instantiateClass: (interpreterProxy
> fetchPointer: 2 ofObject: splObjs) indexableSize: 0.
>        interpreterProxy pop: 1 thenPush: foo.
>
> then you use it like here:
>
> Foo class>>startUp: resuming
>        "Install my special objects on system startup"
>        resuming ifTrue:[
>                self primitiveSetSplObjs: {Foo. Bar. DukeNukem. 42}.
>        ].
>
> Foo class>>newBar
>        ^self primitiveNewBar
>
> The "trick" is that your plugin can register whatever it wants for GC
> tracing (in fact you should probably set the variable to nilObj and call
> addGCRoot from initialiseModule exactly once and release it via
> shutdownModule). This removes the need for abusing splObjs to stick in stuff
> that you'd like to preserve between prim calls.
>

Ah, that's cool.. Except that most recent SVN repository
sqVirtualMachine.h (revision 1955) having no addGCroot: defined in
InterpreterProxy struct.
I am using wrong SVN repository?
http://squeakvm.org/svn/squeak/trunk/

After some research i found another file in plugins/IA32ABI/, which
includes new proxy functions,  but its not used by builder.

> Cheers,
>  - Andreas
>
>



-- 
Best regards,
Igor Stasenko AKA sig.



More information about the Squeak-dev mailing list