So what semantics do people think BlockClosure>>copy should have? I think I wasn't thinking when I wrote the original of the method below. It seems to me that all one needs is to do shallowCopy. Returning from a copy of a block seems fine. The first method return form a method wins. e.g. [^1] copy value should still return. Makes no sense for it to throw an error. So the right resolution is simply to delete postCopy.<div>
<div><br><div class="gmail_quote">On Tue, Oct 13, 2009 at 7:41 PM, <span dir="ltr"><<a href="mailto:commits@source.squeak.org">commits@source.squeak.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Andreas Raab uploaded a new version of Kernel to project The Trunk:<br>
<a href="http://source.squeak.org/trunk/Kernel-ar.266.mcz" target="_blank">http://source.squeak.org/trunk/Kernel-ar.266.mcz</a><br>
<br>
==================== Summary ====================<br>
<br>
Name: Kernel-ar.266<br>
Author: ar<br>
Time: 13 October 2009, 7:41 am<br>
UUID: f651d6ae-0be3-a54b-9166-43f4b0abaa88<br>
Ancestors: Kernel-ul.264, Kernel-ul.265<br>
<br>
Merging Kernel-ul.264, Kernel-ul.265:<br>
<br>
- removed unnecessary #fixTemps send<br>
- removed Float >> #shallowCopy. Primitive 148 seems to handle this correcly.<br>
<br>
=============== Diff against Kernel-nice.263 ===============<br>
<br>
Item was changed:<br>
----- Method: BlockClosure>>postCopy (in category 'copying') -----<br>
postCopy<br>
"To render a copy safe we need to provide a new outerContext that<br>
cannot be returned from and a copy of any remoteTemp vectors.<br>
When a block is active it makes no reference to state in its nested<br>
contexts (this is the whole point of the indirect temps scheme; any<br>
indirect state is either copied or in indirect temp vectors. So we<br>
need to substitute a dummy outerContext and copy the copiedValues,<br>
copying anything looking like a remote temp vector. if we accidentally<br>
copy an Array that isn't actually an indirect temp vector we do extra work<br>
but don't break anything."<br>
<br>
outerContext := MethodContext<br>
sender: nil<br>
receiver: outerContext receiver<br>
method: outerContext method<br>
+ arguments: #()!<br>
- arguments: #().<br>
- self fixTemps!<br>
<br>
Item was removed:<br>
- ----- Method: Float>>shallowCopy (in category 'copying') -----<br>
- shallowCopy<br>
-<br>
- ^self - 0.0!<br>
<br>
<br>
</blockquote></div><br></div></div>