eh!!!!
Te falto la parte magica :)
followEphemeronsCollectingIn: unknowns
        | rescan |
        rescan := false.
        [ephemerons isEmpty] whileFalse: [| ephemeron |
                ephemeron := ephemerons pop.
                ephemeron == nil ifFalse: [
                        (self checkReachablePropertyOf: ephemeron)
                                ifTrue: [
                                        self follow: ephemeron count: ephemeron 
_extendedSize startingAt: 1.
                                        rescan := true]
                                ifFalse: [unknowns add: ephemeron]]].
        ^rescan

checkReachablePropertyOf: ephemeron
        | key |
        key := ephemeron _basicAt: 1.
        ^(fromSpace includes: key) not or: [key _isProxy]


2010/10/14 Gerardo Richarte <[email protected]>:
> 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



-- 
" To be is to do " ( Socrates )
" To be or not to be " ( Shakespeare )
" To do is to be " ( Sartre )
" Do be do be do " ( Sinatra )

-- 
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