Hi Levente. Thanks for looking into the issue. I saw your code and there is something I don't understand.
pointsTo: anObject
��� "Answers true if the garbage collector would fail to collect anObject because I hold a reference to it, or false otherwise"
��� (self instVarsInclude: anObject)
��� ��� ifTrue: [
��� ��� ��� self class isWeak ifFalse: [ ^true ].
��� ��� ��� 1 to: self class instSize do: [ :i |
��� ��� ��� ��� (self instVarAt: i) == anObject ifTrue: [ ^true ] ].
��� ��� ��� ^false ]
��� ��� ifFalse: [ ^self class == anObject and: [ self class isCompact not ] ]
I don't understand the loop of
��� ��� ��� 1 to: self class instSize do: [ :i |
��� ��� ��� ��� (self instVarAt: i) == anObject ifTrue: [ ^true ] ].
In which scenario can ��� (self instVarsInclude: anObject)� answer true, but the loop false?
doesn't #instVarsInclude do exactly what you are doing there?
Anyway, I have integrated your changes in Pharo, but still, I have the same problem :(
If I understand correctly, the following shouldn't fail, but it does. Here is the version of Squeak that fails.
| a |
10 timesRepeat: [
a := Date new.
Smalltalk garbageCollect.
self assert: (PointerFinder pointersTo: a) isEmpty
]
Thanks a lot,
On Sun, 8 Jan 2012, Mariano Martinez Peck wrote:Because #pointsTo: is a normal message send, it even sends other methods, so it will create contexts.
What I don't understand is why in Squeak it does work.Ok, you are right. Squeak #inboundPointersExcluding: �is using
Because #pointsTo: is not used in Squeak (yet). As usual I dug deeper than
I should have, so I'll publish a few changes soon.
#instVarsInclude: �rather than #pointsTo. And that solves the problem in
Pharo as well. But still, I would like to understand why we get those
method contexts with #pointsTo.
I pushed my changes to the Squeak Inbox, which fully works around this issue. The changes about weak references can simply be removed if you don't like them, the rest will just work without them.
Thanks Levente for your help. If you find something let us know, I want to
learn :)
Levente
Thanks
Levente
Thanks in advance Levente!
�it will create at least one new MethodContext which is not included in
that list.
Levente
�Levente
�Thanks again.
�Levente
�Do you mean what I understand :)? that some tools compiled methods?
:)
�--
�Stef
Mariano
�--
http://marianopeck.wordpress.********com <
http://marianopeck.wordpress.
****
com <http://marianopeck.wordpress.****com<http://marianopeck.**
wordpress.com <http://marianopeck.wordpress.com>>
Mariano
http://marianopeck.wordpress.******com <http://marianopeck.wordpress.
****
com <http://marianopeck.wordpress.**com<http://marianopeck.wordpress.com>
--
Mariano
http://marianopeck.wordpress.****com <http://marianopeck.wordpress.**
com <http://marianopeck.wordpress.com>>
--
Mariano
http://marianopeck.wordpress.com