allInstancesDo: aBlock
"Evaluate the argument, aBlock, for each of the current instances of
the
receiver.
Because aBlock might change the class of inst (for example, using
become:),
it is essential to compute next before aBlock value: inst."
self == UndefinedObject ifTrue: [^ aBlock value: nil].
self allInstances do: [:each | aBlock value: each. ]
Works
On Aug 5, 2009, at 8:58 PM, Stéphane Ducasse wrote:
> the problem now is that
>
> allInstancesDo: aBlock
> "Evaluate the argument, aBlock, for each of the current instances of
> the
> receiver.
>
> Because aBlock might change the class of inst (for example, using
> become:),
> it is essential to compute next before aBlock value: inst."
> | inst next |
> self == UndefinedObject ifTrue: [^ aBlock value: nil].
> inst := self someInstance.
> [inst == nil]
> whileFalse:
> [
> next := inst nextInstance.
> aBlock value: inst.
> inst := next]
>
> is looping too.
>
> Stef
>
> On Aug 5, 2009, at 7:01 PM, Marcus Denker wrote:
>
>>
>> On 05.08.2009, at 12:42, Marcus Denker wrote:
>>>>>
>>>> Hmm, if that so, then we would expect to see an interpreter speed
>>>> degradation. But its not. :)
>>>
>>> Yes, see the other mail. The reason is that the allocation of
>>> contexts
>>> in case of blocks happens now at #value, whereas it used to be just
>>> done
>>> at the definiton point (#blockCopy).
>>>
>>> So nothing to worry about.
>>
>>
>> Eliot says:
>>
>> | So you can either
>> | - wait for the stack VM or
>> | - inline allInstancesDo: into allInstances or
>> | - implement allInstacesDo: specially in ContextPart or
>> | - implement a pair of primitives to answer allInstances and
>> allObject atomically.
>> |
>> | This latter approach allows much more flexibility in implementing
>> the garbage collector subsequently; for
>> | example segmenting the heap and adding and freeing segments as
>> required, which complicates the simple object
>> | ordering provided by the single heap but has much better memory
>> usage.
>>
>>
>> I vote for inling for now... this fixes the problem.
>>
>> allInstances
>> "Answer a collection of all current instances of the receiver."
>>
>> | all inst next |
>> all := OrderedCollection new.
>> inst := self someInstance.
>> [inst == nil]
>> whileFalse: [
>> next := inst nextInstance.
>> inst == all ifFalse: [all add: inst].
>> inst := next].
>> ^ all asArray
>>
>>
>> Marcus
>>
>>
>> --
>> Marcus Denker - http://marcusdenker.de
>> PLEIAD Lab - Computer Science Department (DCC) - University of Chile
>>
>>
>> _______________________________________________
>> Pharo-project mailing list
>> [email protected]
>> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>
>
> _______________________________________________
> Pharo-project mailing list
> [email protected]
> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
_______________________________________________
Pharo-project mailing list
[email protected]
http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project