[squeak-dev] Object new becomeForward: #normal

Eliot Miranda eliot.miranda at gmail.com
Wed Jul 19 18:10:36 UTC 2017

On Tue, Jul 18, 2017 at 2:10 PM, Bert Freudenberg <bert at freudenbergs.de>

> On Tue, Jul 18, 2017 at 10:03 PM, Eliot Miranda <eliot.miranda at gmail.com>
> wrote:
>> I'm modifying the Spur VM to fail becomeForward: when copyHash is true
>> and the target object is immutable.  So when we have immutable literals,
>> #normal would be immutable and the become would fail.
> ​+1​
>> However, it seems to me that becomerForward: doing a copyHash is itself a
>> bug.  What's the rationale for copying the receiver's hash to the target
>> object?  I've seen various frameworks use become to clean-up objects by
>> doing aNoLongerWantedObject becomeFor4ward: nil, and with our current
>> default implementation for becomeForward: that will cause havoc.
> ​Well, it would mean nil's identityHash changes. But since nil isn't
> typically used as key in hashed collections, that use may be fine?

Maybe but in Spur I doubt it :-)

#(nil false true) collect: [:ea| ea identityHash]  #(1 2 3)

> I agree that the becomeForward: default should be to not copy the hash.
> This could be done in the image though, no need to change the primitive.

Changing the primitive is not an option as it breaks VM backward
compatibility.  But adding another primitive that implements the desired
default is quite straight-forward and then the image can use whichever it
chooses without having to add another indirection.

best, Eliot
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20170719/1f848ae5/attachment.html>

More information about the Squeak-dev mailing list