On 31 July 2011 20:03, Levente Uzonyi leves@elte.hu wrote:
On Sun, 31 Jul 2011, Igor Stasenko wrote:
I found that similar primitive could be implemented to behave analogically to becomeForward: (to copy memory contents of one object over another one).
This is not strictly equivalent to becomeForward, since
if you have objects x , y and forwarding x -> y then all who were pointing to x will point to y.
While with copy-over, obviously the pointers remain unchanged. But it may be not too important, since the most often use case for #becomeForward: is like:
newObject := SomeClass new. newObject initAndFillContents bla bla.
SomeGlobalObject becomeForward: newObject
( and newObject is not used anywhere outside this scope)
primitiveCopyObject (#168, Object >> #copyFrom:) can be used for this already. It only works for pointer objects of the same class and same size, but I guess this covers most use cases. New features (if any) should be added to this primitive IMHO.
Yes, thanks for reminder. I modified this prim to relax requirements (so it is not necessary that source and dest should be of same format and even more - of same class) but it is necessary that their header types and size in memory are the same.
(i added the code to http://code.google.com/p/cog/issues/detail?id=59 )
Btw +1 from me for your #become: speedup idea.
Levente