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