On 10/13/2010 05:05 PM, Andres Valloud wrote:
> [mas o menos, hay que mirar bien el paper de Bosworth, creo que era el]).
Advertencia! va código:
rescueEphemerons
| unknowns rescan |
unknowns := self localStack.
rescan := false.
[ephemerons isEmpty] whileFalse: [
rescan := self followEphemeronsCollectingIn: unknowns.
rescan
ifTrue: [unknowns addAll: ephemerons]
ifFalse: [unknowns do: [:ephemeron | self rescueEphemeron:
ephemeron]].
unknowns reset]
rescueEphemeron: ephemeron
self follow: ephemeron count: ephemeron _extendedSize startingAt: 1.
ephemeron _haveNoWeaks.
rescuedEphemerons add: ephemeron.
self holdReferenceTo: rescuedEphemerons
donde follow:count:startingAt: recorre recursivamente el grafo de
referencias de un objeto
_haveNoWeaks marca el objeto para que deje de ser ephemeron, como vos
decías, y lo agregá al array de rescuedEphemerons.
esto es código (principalmente de javier con toqueteadas mias), con
suerte lo releseamos en la Smalltalks 2010
saludos,
gera
--
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
http://www.clubSmalltalk.org