[Vm-dev] Re: A possible Cog bug (was: Re: [squeak-dev] Direct implementation of shift/reset in Smalltalk)

Levente Uzonyi leves at elte.hu
Mon Apr 25 19:10:10 UTC 2011


On Sun, 24 Apr 2011, Eliot Miranda wrote:

> Great catch Levente.  I'll try and track this down asap.

Great, thanks. I found that primitive 148 (#shallowCopy) doesn't copy the 
pc and the temporaries (indexable fields). But there are some other 
interesting cases, where the number of indexable fields are different. To 
reproduce this issue, replace ContextPart >> #copyTo: with the following:

copyTo: aContext
 	"Copy self and my sender chain down to, but not including, 
aContext.  End of copied chain will have nil sender."

 	| copy |
 	self == aContext ifTrue: [ ^nil ].
 	copy := self copy.
 	"Cog doesn't copy the pc, so copy it here."
 	copy pc: pc.
 	copy basicSize = self basicSize ifFalse: [ self halt ].
 	sender ifNotNil: [ copy privSender: (sender copyTo: aContext) ].
 	^copy

Then evaluate

c := [ 3 + [ :k | k ] shift ] reset.

in the workspace in the image I prepared. Two halts will appear after 
each other (proceed after the first). In the first case the size of the 
copy is smaller than the original, in the second case it's larger.


Levente


More information about the Vm-dev mailing list