<div dir="ltr"><div dir="ltr"><div class="gmail_default" style="font-size:small"><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Feb 13, 2023 at 12:10 AM Jaromir Matas <<a href="mailto:mail@jaromir.net">mail@jaromir.net</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div class="msg5256080933678537810">





<div lang="EN-US" style="overflow-wrap: break-word;">
<div class="m_309886432562611549WordSection1">
<p class="MsoNormal">Actually, FullBlockClosure >> home should be fixed too (returns nil for outerContext = nil):</p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">FullBlockClosure >> home<u></u><u></u></p>
<p class="MsoNormal">                ^ outerContext ifNotNil: [ outerContext home ]</p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">Fix:</p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">FullBlockClosure >> home</p>
<p class="MsoNormal">                outerContext ifNotNil: [ ^outerContext home ]</p></div></div></div></blockquote><div><br></div><div class="gmail_default" style="font-size:small">I'm not sure about this.  home answers a context.  This fix would have home for a clean block answer the block itself.  Is that what we want?</div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small">(P.S. feel free to make the other changes you're proposing)</div><div class="gmail_default" style="font-size:small"></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div class="msg5256080933678537810"><div lang="EN-US" style="overflow-wrap: break-word;"><div class="m_309886432562611549WordSection1">
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<div style="border-style:solid none none;border-top-width:1pt;border-top-color:rgb(225,225,225);padding:3pt 0in 0in">
<p class="MsoNormal" style="border:none;padding:0in"><b>From: </b><a href="mailto:mail@jaromir.net" target="_blank">Jaromir Matas</a><br>
<b>Sent: </b>Sunday, February 12, 2023 23:44<br>
<b>To: </b><a href="mailto:squeak-dev@lists.squeakfoundation.org" target="_blank">squeak-dev@lists.squeakfoundation.org</a>;
<a href="mailto:eliot.miranda@gmail.com" target="_blank">Eliot Miranda</a><br>
<b>Subject: </b>Re: [squeak-dev] The Trunk: Kernel-eem.1498.mcz</p>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">Hi Eliot,<u></u><u></u></p>
<p class="MsoNormal">I guess the same fix should apply for #methodReturnContext.<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">I wanted to ask about this: #home and #methodReturnContext are synonymous; why is that? Some backward compatibility thing or historical reasons?<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">Similarly I’ve noticed #method and #homeMethod seem synonymous too if I’m not mistaken (in BlockClosure and FullBlockClosure). Is it intentional?<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">Thanks,<u></u><u></u></p>
<p class="MsoNormal">Jaromir<u></u><u></u></p>
<p class="MsoNormal"><span style="color:rgb(143,170,220)"><u></u> <u></u></span></p>
<p class="MsoNormal"><u></u> <u></u></p>
<div style="border-style:solid none none;border-top-width:1pt;border-top-color:rgb(225,225,225);padding:3pt 0in 0in">
<p class="MsoNormal"><b>From: </b><a href="mailto:commits@source.squeak.org" target="_blank">commits@source.squeak.org</a><br>
<b>Sent: </b>Sunday, February 12, 2023 22:31<br>
<b>To: </b><a href="mailto:squeak-dev@lists.squeakfoundation.org" target="_blank">squeak-dev@lists.squeakfoundation.org</a>;
<a href="mailto:packages@lists.squeakfoundation.org" target="_blank">packages@lists.squeakfoundation.org</a><br>
<b>Subject: </b>[squeak-dev] The Trunk: Kernel-eem.1498.mcz<u></u><u></u></p>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal" style="margin-bottom:12pt">Eliot Miranda uploaded a new version of Kernel to project The Trunk:<br>
<a href="http://source.squeak.org/trunk/Kernel-eem.1498.mcz" target="_blank">http://source.squeak.org/trunk/Kernel-eem.1498.mcz</a><br>
<br>
==================== Summary ====================<br>
<br>
Name: Kernel-eem.1498<br>
Author: eem<br>
Time: 12 February 2023, 1:30:55.883243 pm<br>
UUID: e8b69d4d-8a07-4cf8-8ee7-d764b47f1981<br>
Ancestors: Kernel-tpr.1497<br>
<br>
In implementing BlockClosure>>hasMethodReturn, don't assume the byutecode set.<br>
<br>
Implement Context>>#home so that it will code with clean blocks.<br>
<br>
=============== Diff against Kernel-tpr.1497 ===============<br>
<br>
Item was changed:<br>
  ----- Method: BlockClosure>>hasMethodReturn (in category 'testing') -----<br>
  hasMethodReturn<br>
         "Answer whether the receiver has a method-return ('^') in its code."<br>
         | scanner endpc |<br>
+        scanner := InstructionStream new method: self method pc: startpcOrMethod.<br>
-        scanner := InstructionStream new method: outerContext method pc: startpcOrMethod.<br>
         endpc := self endPC.<br>
+        scanner scanFor:<br>
+                [:byte |<br>
+                scanner willReturn ifTrue:<br>
+                        [scanner willBlockReturn ifFalse:<br>
+                                [^true]].<br>
+                scanner pc >= endpc].<br>
+        ^false!<br>
-        scanner scanFor: [:byte | (byte between: 120 and: 124) or: [scanner pc > endpc]].<br>
-        ^scanner pc <= endpc!<br>
<br>
Item was changed:<br>
  ----- Method: Context>>home (in category 'accessing') -----<br>
  home <br>
+        "Answer the outermost context (along the static chain) for the receiver.<br>
+         This is the outermost lexical scope in which the receiver's method is defined."<br>
-        "Answer the context in which the receiver was defined."<br>
  <br>
+        ^closureOrNil<br>
+                ifNil: [self] "normal method activation"<br>
+                ifNotNil:       "block activation"<br>
+                        [:closure|<br>
+                         closure outerContext<br>
+                                ifNil: [self] "clean block"<br>
+                                ifNotNil: [:outerContext| outerContext home]] "normal block"!<br>
-        closureOrNil == nil ifTrue:<br>
-                [^self].<br>
-        ^closureOrNil outerContext home!<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
</div>

</div></blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature"><div dir="ltr"><div><span style="font-size:small;border-collapse:separate"><div>_,,,^..^,,,_<br></div><div>best, Eliot</div></span></div></div></div></div>