[squeak-dev] Re: becomeForward: alternative
Eliot Miranda
eliot.miranda at gmail.com
Thu Sep 18 16:41:38 UTC 2008
Things work fine provided the become is one-way and hashes are not copied.
Simply change
(self containOnlyOops: array1 and: array2) ifFalse: [^false]
in ObjectMemory>>become:with:twoWay:copyHash: to
(twoWayFlag or: [copyHashFlag])
ifTrue: [(self containOnlyOops: array1 and: array2) ifFalse: [^false]]
ifFalse: [(self containOnlyOops: array1) ifFalse: [^false]].
along with the obvious implementation of containOnlyOops:.
If so,
| foo bar |
foo := 1 at 2.
bar := { foo. foo }.
foo becomeForward: 0 copyHash: false.
{ foo. bar }
produces
#(0 #(0 0))
On Thu, Sep 18, 2008 at 9:09 AM, Rob Withers <reefedjib at yahoo.com> wrote:
>
> ----- Original Message ----- From: "Paolo Bonzini" <bonzini at gnu.org>
> To: "The general-purpose Squeak developers list" <
> squeak-dev at lists.squeakfoundation.org>
> Sent: Tuesday, September 16, 2008 3:59 PM
> Subject: [squeak-dev] Re: becomeForward: alternative
>
>
>
> Rob Withers wrote:
>>
>>> I am trying to becomeForward with an object and a small integer. This
>>> of course doesn't work. Is there an alternative that would allow me to
>>> do this?
>>>
>>
>> There's actually no reason why the *destination* of a becomeForward:
>> cannot be a SmallInteger. It's a VM bug in my opinion.
>>
>>
> Thanks, Paolo.
>
> I tried looking into this a bit and here is what I have found. First off,
> this will only work with
> #elementsForwardIdentityTo: anArrayWithSmallIntegers copyHash: false.
> It would not work to copy the source hash to a SmallInteger.
>
> Next is understanding forwarding blocks and the process of remapping
> objects using them. There are three steps:
> 1) #prepareForwardingTableForBecoming:with:twoWay: "create and init
> forwarding blocks, and install into original headers"
> 2) #mapPointersInObjectsFrom:to: "point pointers to forwarded oop"
> 3) #restoreHeadersAfterForwardBecome: "restore original headers"
> The question seems to come down to the following. Can forwarding blocks
> point to SmallIntegers?
>
> Rob
>
> Paolo
>>
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20080918/c86cfa2a/attachment.htm
More information about the Squeak-dev
mailing list
|