Hi Juan,

     I think the deoptimize-after-the-fact approach has no hope of working given the transformations for ifFalse:ifTrue: (swap arguments and transform to ifTrue:ifFalse:), ifNil:ifNotNil: et al.  Better is to avoid transforming at all if in a cascade.  So the attached is a start.  It needs cleaning up, the older hack (ensureCanCascade:) removing and either all uses of receiver:selector:arguments:precedence:from:sourceRange: should use receiver:selector:arguments:precedence:from:sourceRange:canTransform:, or implement receiver:selector:arguments:precedence:from:sourceRange in terms of receiver:selector:arguments:precedence:from:sourceRange:canTransform.  Anyway, test this and see how you get on.

cheers,
Eliot

On Wed, Mar 2, 2011 at 11:46 AM, Juan Vuletich <juan@jvuletich.org> wrote:
Hi Folks,

commits@source.squeak.org wrote:
Nicolas Cellier uploaded a new version of Compiler to project The Trunk:
http://source.squeak.org/trunk/Compiler-nice.189.mcz

==================== Summary ====================

Name: Compiler-nice.189
Author: nice
Time: 13 February 2011, 7:44:38.363 pm
UUID: 3f6f02cd-1acf-48de-a388-b5ac55e27055
Ancestors: Compiler-nice.188

Enable cascading of special messages by deoptimizing, thanks Eliot.
This is mostly useless, but it removes an arbitrary limitation of the language.

=============== Diff against Compiler-nice.188 ===============
 
I integrated this nice code in Cuis, and tried:

true ifTrue: [ Transcript cr; show: 'was true' ]; yourself

I found that this works ok with the interpreter but does nothing in Cog. A bug, right?

Cheers,
Juan Vuletich