Hi Eliot, There are several other changes in that package that could generate different behavior. Are they correct? They are: BlockClosure >> value used to call primitive 201, now calls 205 used to check for zero args, now checks for one (!?) BlockClosure >> value: used to call primitive 202, now calls 205 BlockClosure >> value:value: used to call primitive 203, now calls 205 BlockClosure >> value:value:value: used to call primitive 204, now calls 205 Primitive 205 was previously only used for #value:value:value:value:, so I wonder if this might be a mistake. Thanks, Juan Vuletich Eliot Miranda wrote:
On Tue, Jul 6, 2010 at 12:51 PM, stephane ducasse <stephane.ducasse@free.fr <mailto:stephane.ducasse@free.fr>> wrote:
Eliot
should this fix be applied to pharo? http://code.google.com/p/pharo/issues/detail?id=2655
Yes please. Almost everything I'm likely to put in Compiler, Kernel or System on Squeak 4.1 belongs in all dialects using the closure compiler.
Is there a dependency?
What's happing here is that very old primitive failure code that allowed the closure system to run on old VMs without closure support depended on BlockClosure>>asContext, which had a bug in it. So the changes reflect the bug fix but are enclosed in false ifTrue: [] because they really are obsolete, but the code is retained because its useful documentation of how the closure primitives should work. I hope this makes sense!
best Eliot
Stef