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

Responder a