[squeak-dev] Re: becomeForward: alternative
Eliot Miranda
eliot.miranda at gmail.com
Thu Sep 18 16:57:12 UTC 2008
On Thu, Sep 18, 2008 at 9:44 AM, Rob Withers <reefedjib at yahoo.com> wrote:
> :-)
>
> I just compiled with:
>
> (twoWayFlag not and: [copyHashFlag not])
> ifTrue: [(self containOnlyOops: array1) ifFalse: [^false]]
> ifFalse: [(self containOnlyOops: array1 and: array2) ifFalse: [^false]].
> but I like your positive logic better. Thanks!
>
Forgive me, you've got me started :) I hate it when people don't cut down
on their conditionals. I saw this the other day (won't tell you where) and
it drives me *batty*.
if((options & LINK_OPTION_PRIVATE) == LINK_OPTION_PRIVATE)
object_image->image.private = TRUE;
else
object_image->image.private = FALSE;
the following takes 25% of the vertical real estate and says it better.
object_image->image.private = options & LINK_OPTION_PRIVATE) ==
LINK_OPTION_PRIVATE;
Even worse is the following idiom:
if(print_addresses == TRUE)
I mean if you're that doubtful surely you want to use belt-and-braces and
write
if(((print_addresses == TRUE) == TRUE) == TRUE)
to be free of anxiety.
> Rob
>
> ----- Original Message -----
> *From:* Eliot Miranda <eliot.miranda at gmail.com>
> *To:* The general-purpose Squeak developers list<squeak-dev at lists.squeakfoundation.org>
> *Sent:* Thursday, September 18, 2008 12:41 PM
> *Subject:* Re: [squeak-dev] Re: becomeForward: alternative
>
> 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/7655acaf/attachment.htm
More information about the Squeak-dev
mailing list
|