<br><br><div class="gmail_quote">On Tue, Sep 7, 2010 at 1:07 PM, Nicolas Cellier <span dir="ltr"><<a href="mailto:nicolas.cellier.aka.nice@gmail.com" target="_blank">nicolas.cellier.aka.nice@gmail.com</a>></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 & al catch<br>
OutOfScopeNotification at all ?<br></blockquote><div><br></div><div>Looking at the Mantis case I'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>>#encodeVariable:sourceRange:ifUnknown: that says</div>
<div><div><br></div><div> <span style="white-space:pre-wrap">        </span>(varNode isTemp and: [varNode scope < 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: 'out of scope']].
</div></div><div><br></div><div>to "do the right thing". This isn't the right thing:</div><div><br></div><div><div> <span style="white-space:pre-wrap">        </span>(varNode isTemp and: [varNode scope < 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 "Undeclared", which is misleading.</div>
<div><br></div><div>Instead one fix might be to change Encoder>>encodeVariable: name to something like</div><div><div>Encoder>>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 < 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: ['block arg'] ifFalse: ['temp']),</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>' is out of scope']]</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>>#encodeVariable:sourceRange:ifUnknown: to Encoder>>#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>