[BUG][FIX][3.3] Morph>>updateableActionMap has wrong return value
rwithers12 at attbi.com
Thu Apr 25 13:09:23 UTC 2002
Ned Konz <ned at bike-nomad.com> wrote:
> On Wednesday 24 April 2002 08:31 pm, Rob Withers wrote:
> > This weekend, I hope to continue with the WeakMessageSend we were
> > discussing, for the receivers and args. How does the finalization
> > mechanism work? Will it nil out garbage slots?
> Yes. So it's not clear what you should do when you have an argument
> slot that's nil. I guess you could keep flags saying which arg slots
> were supposed to be nil.
> That is: if someone makes a WeakMessageSend and passes in an argument
> that is only held onto by the arguments array in the WMS, then it
> will be GC'd and the slot will become nil.
> This kind of error will be hard to debug, which is why I'd recommend
> having a bitflag (say) that marks the position of desired nils in the
> args array.
> You could disallow sending messages to nil (I can't imagine that such
> messages are very useful). So the receiver could go away and you
> could detect it (and signal a meaningful exception, or just not do
> the call).
I think this is as far as we took the discussions the last time. when
#valuewitharguments: is sent, we could go through the correct
marshalling of arguments, then verify that all fields that aren't
supposed to be nil, meet that criteria.
> Depending on whether you want to be able to change the arguments after
> you create a WMS, you might be able to get away with this:
> Object weakSubclass: #WeakMessageSend
> instanceVariableNames: 'selector '
> classVariableNames: ''
> poolDictionaries: ''
> category: 'Kernel-Objects'
> and keep the receiver and the arguments in the indexed slots. But
> you'd have to know the number of args at construction time to call
> new: .
So a weak subclass has indexed slots, like an array? I notice that
Array is a variableSubclass, which does have indexed slots. What does a
> If you don't mind using become: you could even change the number of
> arguments. I think. Though I don't know if you can use become: with a
> weak object.
> Or you could use a WeakArray to hold onto the arguments and/or
> receiver. That way you could make a new one if someone wanted to
> change the number of arguments.
I was thinking this might be the way to go, since the arguments in a
MessageSend are held in an array, anyway. It looks like #weakSubclass:
is how one defines the WeakArray class, so it must have indexable slots.
More information about the Squeak-dev