<br><br><div class="gmail_quote">On Tue, Sep 7, 2010 at 1:07 PM, Nicolas Cellier <span dir="ltr">&lt;<a href="mailto:nicolas.cellier.aka.nice@gmail.com" target="_blank">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">
About <a href="http://bugs.squeak.org/view.php?id=3448" target="_blank">http://bugs.squeak.org/view.php?id=3448</a>, the visible<br>
consequences are fixed by introduction of closure, but...<br>
<br>
Can someone explain why should ParagraphEditor &amp; al catch<br>
OutOfScopeNotification at all ?<br></blockquote><div><br></div><div>Looking at the Mantis case I&#39;d say it was obsolete and ideally we would nuke the entire class and its uses, but we need to change the part of Encoder&gt;&gt;#encodeVariable:sourceRange:ifUnknown: that says</div>

<div><div><br></div><div> <span style="white-space:pre-wrap">        </span>(varNode isTemp and: [varNode scope &lt; 0]) ifTrue:</div><div> <span style="white-space:pre-wrap">                </span>[^OutOfScopeNotification signal</div>
<div><span style="white-space:pre-wrap">                        </span>ifTrue: [action value]</div><div><span style="white-space:pre-wrap">                        </span>ifFalse: [self notify: &#39;out of scope&#39;]].
</div></div><div><br></div><div>to &quot;do the right thing&quot;.  This isn&#39;t the right thing:</div><div><br></div><div><div> <span style="white-space:pre-wrap">        </span>(varNode isTemp and: [varNode scope &lt; 0]) ifTrue:</div>

<div> <span style="white-space:pre-wrap">                </span>[^action value].</div></div><div><br></div><div>Because for an out-of-scope temp this will cause a raise of an UndeclaredVariableWarning, which is wrong, which if uncaught will result in a notification of &quot;Undeclared&quot;, which is misleading.</div>
<div><br></div><div>Instead one fix might be to change Encoder&gt;&gt;encodeVariable: name to something like</div><div><div>Encoder&gt;&gt;encodeVariable: name</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>^self encodeVariable: name</div>
<div><span class="Apple-tab-span" style="white-space: pre; ">        </span><span class="Apple-tab-span" style="white-space: pre; ">        </span>sourceRange: nil</div><div><span class="Apple-tab-span" style="white-space: pre; ">        </span><span class="Apple-tab-span" style="white-space: pre; ">        </span>ifOutOfScope:</div>
<div><span class="Apple-tab-span" style="white-space: pre; ">        </span><span class="Apple-tab-span" style="white-space: pre; ">        </span><span class="Apple-tab-span" style="white-space: pre; ">        </span>[:nodeOrNil|</div><div><span class="Apple-tab-span" style="white-space: pre; ">        </span><span class="Apple-tab-span" style="white-space: pre; ">        </span><span class="Apple-tab-span" style="white-space: pre; ">        </span>nodeOrNil</div>
<div><span class="Apple-tab-span" style="white-space: pre; ">        </span><span class="Apple-tab-span" style="white-space: pre; ">        </span><span class="Apple-tab-span" style="white-space: pre; ">        </span><span class="Apple-tab-span" style="white-space: pre; ">        </span>ifNil: [self undeclared: name]</div>
<div><span class="Apple-tab-span" style="white-space: pre; ">        </span><span class="Apple-tab-span" style="white-space: pre; ">        </span><span class="Apple-tab-span" style="white-space: pre; ">        </span><span class="Apple-tab-span" style="white-space: pre; ">        </span>ifNotNil: [self assert: (nodeOrNil isTemp and: [nodeOrNil scope &lt; 0]).</div>
<div><span class="Apple-tab-span" style="white-space: pre; ">        </span><span class="Apple-tab-span" style="white-space: pre; ">        </span><span class="Apple-tab-span" style="white-space: pre; ">        </span><span class="Apple-tab-span" style="white-space: pre; ">        </span><span class="Apple-tab-span" style="white-space: pre; ">        </span>    requestor notify: (nodeOrNil isArg ifTrue: [&#39;block arg&#39;] ifFalse: [&#39;temp&#39;]),</div>
<div><span class="Apple-tab-span" style="white-space: pre; ">        </span><span class="Apple-tab-span" style="white-space: pre; ">        </span><span class="Apple-tab-span" style="white-space: pre; ">        </span><span class="Apple-tab-span" style="white-space: pre; ">        </span><span class="Apple-tab-span" style="white-space: pre; ">        </span><span class="Apple-tab-span" style="white-space: pre; ">        </span><span class="Apple-tab-span" style="white-space: pre; ">        </span><span class="Apple-tab-span" style="white-space: pre; ">        </span>&#39; is out of scope&#39;]]</div>
<div><span class="Apple-tab-span" style="white-space: pre; "></span></div><div><span class="Apple-tab-span" style="white-space: pre; "></span></div><div><br></div><div>rename Encoder&gt;&gt;#encodeVariable:sourceRange:ifUnknown: to Encoder&gt;&gt;#encodeVariable:sourceRange:ifOutOfScope: and have it pass in either nil or the out-of-scope temp.</div>
<div><br></div><div>What would you do?</div><div><br></div><div>best,</div><div>Eliot</div><div><span class="Apple-tab-span" style="white-space: pre; "></span></div><div><span class="Apple-tab-span" style="white-space: pre; "></span></div>
<div><span class="Apple-tab-span" style="white-space: pre; "></span></div><div><span class="Apple-tab-span" style="white-space: pre; "></span></div><div><span class="Apple-tab-span" style="white-space: pre; "></span></div>
<div><span class="Apple-tab-span" style="white-space: pre; "></span></div><div><span class="Apple-tab-span" style="white-space: pre; "></span></div><div><span class="Apple-tab-span" style="white-space: pre; "></span></div>
<div><span class="Apple-tab-span" style="white-space: pre; "></span></div><div><span class="Apple-tab-span" style="white-space: pre; "></span></div><div><span class="Apple-tab-span" style="white-space: pre; "></span></div>
<div><span class="Apple-tab-span" style="white-space: pre; "></span></div><div><span class="Apple-tab-span" style="white-space: pre; "></span></div><div><span class="Apple-tab-span" style="white-space: pre; "></span></div>
<div><span class="Apple-tab-span" style="white-space: pre; "></span></div><div><span class="Apple-tab-span" style="white-space: pre; "></span></div><div><span class="Apple-tab-span" style="white-space: pre; "></span></div>
</div>
<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<font color="#888888"><br>
Nicolas<br>
<br>
</font></blockquote></div><br>