> >>> >>> So..I am puzzle again. I said "In which scenario can (self >> instVarsInclude: anObject) answer true, but the loop false? " >> you answered: "The scenario happens when the receiver has weak slots and >> the argument is referenced from one of those weak slots, but not from the >> other slots." >> Imagine the receiver has a weak slot XXX that points to anObject. So (self >> instVarsInclude: anObject) answers true. How can the loop answer false >> without a GC? >> why would XXX stop pointing to anObject if there is not GC in the middle ? >> > > The loop doesn't iterate over the indexable slots, only named ones. > > grrr you are right!
Ok, so I finally got it. So previously pointersTo: would answer true even if the slots were weak. Now it would answer false, and that's why you have changed the method comment. Now I am thinking if this should be the default behavior of #pointsTo:. If I just read the selector #pointsTo: I would guess weak references are also taken into account. So that's why I am not completely sure. Aren't there any other impact of the system because of this change? what about having #stronglyPointsTo: with this new version and have another one #pointsTo: which considers weak also? does it make sense? or it is better to directly avoid weak by defualt in #pointsTo? > > Levente > > >> thanks >> >> >> Levente >>> >>> >>> >>>> >>>> doesn't #instVarsInclude do exactly what you are doing there? >>>>> >>>>> >>>>>> >>>>>> Just partially. Since we have no information about which slots hold >>>>> the >>>>> reference to the argument, therefore this loop must be "repeated". >>>>> >>>>> >>>> >>>> Ok, I see. >>>> >>>> >>>> >>>> >>>>> >>>>> 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. >>>>>> >>>>>> >>>>>> The assetion fails, because the indirection vector (the Array found >>>>> by >>>>> PointerFinder) holds a reference to the object after the first >>>>> assignment >>>>> to a. If you move the temporary inside the block or use an inlined loop >>>>> (e.g. #to:do: with literal block argument), then the assertion won't >>>>> fail. >>>>> So this is just a normal (maybe surprising) reference to the object. >>>>> >>>>> >>>>> Excellent. Now I got it. Thank you very much for your help Levente. >>>>> Now >>>>> >>>> PointerFinderTest are green :) >>>> >>>> >>>> >>>> Levente >>>>> >>>>> >>>>> | a | >>>>> >>>>>> 10 timesRepeat: [ >>>>>> a := Date new. >>>>>> Smalltalk garbageCollect. >>>>>> self assert: (PointerFinder pointersTo: a) isEmpty >>>>>> ] >>>>>> >>>>>> Thanks a lot, >>>>>> >>>>>> >>>>>> On Mon, Jan 9, 2012 at 2:40 PM, Levente Uzonyi <[email protected]> wrote: >>>>>> >>>>>> On Sun, 8 Jan 2012, Mariano Martinez Peck wrote: >>>>>> >>>>>> >>>>>> What I don't understand is why in Squeak it does work. >>>>>>> >>>>>>> >>>>>>> >>>>>>>> >>>>>>>>> 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. >>>>>>>>> >>>>>>>>> >>>>>>>>> Ok, you are right. Squeak #inboundPointersExcluding: is using >>>>>>>>> >>>>>>>>> #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. >>>>>>>> >>>>>>>> >>>>>>>> Because #pointsTo: is a normal message send, it even sends other >>>>>>>> >>>>>>> methods, >>>>>>> so it will create contexts. >>>>>>> >>>>>>> >>>>>>> Thanks Levente for your help. If you find something let us know, I >>>>>>> want >>>>>>> to >>>>>>> >>>>>>> learn :) >>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> 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. >>>>>>> >>>>>>> >>>>>>> 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< >>>>>>>>>>>>>>>> http://marianopeck.****wordpress**.com < >>>>>>>>>>>>>>>> http://wordpress.com>< >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> http://marianopeck.**wordpress**.com <http://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 <http://marianopeck.wordpress.******com< >>>>>>>>>>>>>> http://marianopeck.**wordpress**.com <http://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 <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 >>>>>>>>>> <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 <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 <http://marianopeck.wordpress.com> >> >> > -- Mariano http://marianopeck.wordpress.com
