Looks good to me.  Thanks, Nicolas!<br><br><div class="gmail_quote">On Wed, Mar 2, 2011 at 3:12 PM, Nicolas Cellier <span dir="ltr">&lt;<a href="mailto:nicolas.cellier.aka.nice@gmail.com">nicolas.cellier.aka.nice@gmail.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">Oops, I always forget to select changes before filing out...<br>
<br>
Nicolas<br>
<br>
2011/3/3 Nicolas Cellier &lt;<a href="mailto:nicolas.cellier.aka.nice@gmail.com">nicolas.cellier.aka.nice@gmail.com</a>&gt;:<br>
<div><div></div><div class="h5">&gt; Then attached proof of concept may work.<br>
&gt;<br>
&gt; Nicolas<br>
&gt;<br>
&gt; 2011/3/3 Eliot Miranda &lt;<a href="mailto:eliot.miranda@gmail.com">eliot.miranda@gmail.com</a>&gt;:<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; On Wed, Mar 2, 2011 at 3:02 PM, Nicolas Cellier<br>
&gt;&gt; &lt;<a href="mailto:nicolas.cellier.aka.nice@gmail.com">nicolas.cellier.aka.nice@gmail.com</a>&gt; wrote:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; One dumb way would be to retain a copy of<br>
&gt;&gt;&gt; originalSelector &amp; originalArguments in MethodNode ivar at creation,<br>
&gt;&gt;&gt; then let #ensureCanCascade: restore the originals.<br>
&gt;&gt;<br>
&gt;&gt; I like this.  Not at all dumb.<br>
&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Nicolas<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; 2011/3/2 Eliot Miranda &lt;<a href="mailto:eliot.miranda@gmail.com">eliot.miranda@gmail.com</a>&gt;:<br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt; On Wed, Mar 2, 2011 at 1:52 PM, Juan Vuletich &lt;<a href="mailto:juan@jvuletich.org">juan@jvuletich.org</a>&gt;<br>
&gt;&gt;&gt; &gt; wrote:<br>
&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt; Hi Eliot,<br>
&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt; Thanks for caring!<br>
&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt; The attached code fixed the case I reported first, but not this:<br>
&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt; true ifTrue: [ &#39;was true&#39; print ]; ifFalse: [ &#39;not true&#39; print ]<br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt; Does the second one have to be unoptimized?  I guess that in this both<br>
&gt;&gt;&gt; &gt; are<br>
&gt;&gt;&gt; &gt; deoptimized right?<br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt; true ifTrue: [ &#39;was true&#39; print ]; ifFalse: [ &#39;not true&#39; print ];<br>
&gt;&gt;&gt; &gt; yourself<br>
&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt; Thanks,<br>
&gt;&gt;&gt; &gt;&gt; Juan Vuletich<br>
&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt; Eliot Miranda wrote:<br>
&gt;&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt;&gt; Hi Juan,<br>
&gt;&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt;&gt;     I think the deoptimize-after-the-fact approach has no hope of<br>
&gt;&gt;&gt; &gt;&gt;&gt; working<br>
&gt;&gt;&gt; &gt;&gt;&gt; given the transformations for ifFalse:ifTrue: (swap arguments and<br>
&gt;&gt;&gt; &gt;&gt;&gt; transform<br>
&gt;&gt;&gt; &gt;&gt;&gt; to ifTrue:ifFalse:), ifNil:ifNotNil: et al.  Better is to avoid<br>
&gt;&gt;&gt; &gt;&gt;&gt; transforming<br>
&gt;&gt;&gt; &gt;&gt;&gt; at all if in a cascade.  So the attached is a start.  It needs<br>
&gt;&gt;&gt; &gt;&gt;&gt; cleaning up,<br>
&gt;&gt;&gt; &gt;&gt;&gt; the older hack (ensureCanCascade:) removing and either all uses of<br>
&gt;&gt;&gt; &gt;&gt;&gt; receiver:selector:arguments:precedence:from:sourceRange: should use<br>
&gt;&gt;&gt; &gt;&gt;&gt; receiver:selector:arguments:precedence:from:sourceRange:canTransform:,<br>
&gt;&gt;&gt; &gt;&gt;&gt; or<br>
&gt;&gt;&gt; &gt;&gt;&gt; implement receiver:selector:arguments:precedence:from:sourceRange in<br>
&gt;&gt;&gt; &gt;&gt;&gt; terms<br>
&gt;&gt;&gt; &gt;&gt;&gt; of<br>
&gt;&gt;&gt; &gt;&gt;&gt; receiver:selector:arguments:precedence:from:sourceRange:canTransform.<br>
&gt;&gt;&gt; &gt;&gt;&gt;  Anyway, test this and see how you get on.<br>
&gt;&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt;&gt; cheers,<br>
&gt;&gt;&gt; &gt;&gt;&gt; Eliot<br>
&gt;&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt;&gt; On Wed, Mar 2, 2011 at 11:46 AM, Juan Vuletich &lt;<a href="mailto:juan@jvuletich.org">juan@jvuletich.org</a><br>
&gt;&gt;&gt; &gt;&gt;&gt; &lt;mailto:<a href="mailto:juan@jvuletich.org">juan@jvuletich.org</a>&gt;&gt; wrote:<br>
&gt;&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt;&gt;    Hi Folks,<br>
&gt;&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt;&gt;    <a href="mailto:commits@source.squeak.org">commits@source.squeak.org</a> &lt;mailto:<a href="mailto:commits@source.squeak.org">commits@source.squeak.org</a>&gt; wrote:<br>
&gt;&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt;&gt;        Nicolas Cellier uploaded a new version of Compiler to project<br>
&gt;&gt;&gt; &gt;&gt;&gt;        The Trunk:<br>
&gt;&gt;&gt; &gt;&gt;&gt;        <a href="http://source.squeak.org/trunk/Compiler-nice.189.mcz" target="_blank">http://source.squeak.org/trunk/Compiler-nice.189.mcz</a><br>
&gt;&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt;&gt;        ==================== Summary ====================<br>
&gt;&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt;&gt;        Name: Compiler-nice.189<br>
&gt;&gt;&gt; &gt;&gt;&gt;        Author: nice<br>
&gt;&gt;&gt; &gt;&gt;&gt;        Time: 13 February 2011, 7:44:38.363 pm<br>
&gt;&gt;&gt; &gt;&gt;&gt;        UUID: 3f6f02cd-1acf-48de-a388-b5ac55e27055<br>
&gt;&gt;&gt; &gt;&gt;&gt;        Ancestors: Compiler-nice.188<br>
&gt;&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt;&gt;        Enable cascading of special messages by deoptimizing, thanks<br>
&gt;&gt;&gt; &gt;&gt;&gt;        Eliot.<br>
&gt;&gt;&gt; &gt;&gt;&gt;        This is mostly useless, but it removes an arbitrary limitation<br>
&gt;&gt;&gt; &gt;&gt;&gt;        of the language.<br>
&gt;&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt;&gt;        =============== Diff against Compiler-nice.188 ===============<br>
&gt;&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt;&gt;    I integrated this nice code in Cuis, and tried:<br>
&gt;&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt;&gt;    true ifTrue: [ Transcript cr; show: &#39;was true&#39; ]; yourself<br>
&gt;&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt;&gt;    I found that this works ok with the interpreter but does nothing<br>
&gt;&gt;&gt; &gt;&gt;&gt;    in Cog. A bug, right?<br>
&gt;&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt;&gt;    Cheers,<br>
&gt;&gt;&gt; &gt;&gt;&gt;    Juan Vuletich<br>
&gt;&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt;&gt; ------------------------------------------------------------------------<br>
&gt;&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt;&gt; ------------------------------------------------------------------------<br>
&gt;&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt;&gt; No virus found in this message.<br>
&gt;&gt;&gt; &gt;&gt;&gt; Checked by AVG - <a href="http://www.avg.com" target="_blank">www.avg.com</a> &lt;<a href="http://www.avg.com" target="_blank">http://www.avg.com</a>&gt;<br>
&gt;&gt;&gt; &gt;&gt;&gt; Version: 10.0.1204 / Virus Database: 1435/3477 - Release Date:<br>
&gt;&gt;&gt; &gt;&gt;&gt; 03/02/11<br>
&gt;&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;<br>
</div></div><br><br>
<br></blockquote></div><br>