<div dir="ltr">I thought that was a deliberate typo. He he<div><br></div><div>Best,</div><div>Karl</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Mar 19, 2019 at 8:00 PM Eliot Miranda <<a href="mailto:eliot.miranda@gmail.com">eliot.miranda@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr"><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Mar 19, 2019 at 11:58 AM <<a href="mailto:commits@source.squeak.org" target="_blank">commits@source.squeak.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Eliot Miranda uploaded a new version of Compiler to project The Trunk:<br>
<a href="http://source.squeak.org/trunk/Compiler-eem.403.mcz" rel="noreferrer" target="_blank">http://source.squeak.org/trunk/Compiler-eem.403.mcz</a><br>
<br>
==================== Summary ====================<br>
<br>
Name: Compiler-eem.403<br>
Author: eem<br>
Time: 19 March 2019, 11:58:47.238202 am<br>
UUID: a0f07dce-0a58-422e-af37-32d5a3bd6546<br>
Ancestors: Compiler-eem.402<br>
<br>
Fixed yhree typos in a comment, and improved the class comments for ParseNodeEnumerator & subclass.<br></blockquote><div><br></div><div>Oh really?  Three steps forward, one step back.  Boy this is a humiliating business ;-)</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
=============== Diff against Compiler-eem.402 ===============<br>
<br>
Item was changed:<br>
  ParseNodeVisitor subclass: #ParseNodeEnumerator<br>
        instanceVariableNames: 'theBlock theSelectBlock'<br>
        classVariableNames: ''<br>
        poolDictionaries: ''<br>
        category: 'Compiler-Support'!<br>
<br>
+ !ParseNodeEnumerator commentStamp: 'eem 3/19/2019 11:58' prior: 0!<br>
- !ParseNodeEnumerator commentStamp: 'eem 8/31/2010 11:41' prior: 0!<br>
  ParseNodeEnumerator implements ParseNode>>nodesDo:.  It can be used to enumerate an entire tree via<br>
        aParseNode accept: (ParseNodeEnumerator ofBlock: aBlock)<br>
  or selectively, excluding the node and subnodes for which selectBlock answers false, via<br>
        aParseNode accept: (ParseNodeEnumerator<br>
                                                        ofBlock: aBlock<br>
                                                        select: selectBlock)<br>
+ Instance Variables<br>
+       theBlock:                       <BlockClosure><br>
+       theSelectBlock:         <BlockClosure | nil><br>
<br>
+ theBlock<br>
+       - the block that is evaluated with the parse nodes the receiver visits.<br>
+ <br>
+ theSelectBlock<br>
+       - an optional block used to select blocks to visit and descend into.<br>
+ <br>
  Here's a doIt that generates and compiles the visiting methods:<br>
<br>
  self superclass selectors do:<br>
        [:s|<br>
        self compile: (String streamContents:<br>
                [:str| | arg |<br>
                arg := 'a', (s allButFirst: 5) allButLast.<br>
                str nextPutAll: s, ' ', arg; crtab;<br>
                        nextPutAll: '(theSelectBlock isNil or: [theSelectBlock value: '; nextPutAll: arg; nextPutAll: ']) ifFalse:'; crtab;<br>
                        tab: 2; nextPutAll: '[^nil].'; crtab;<br>
                        nextPutAll: 'theBlock value: '; nextPutAll: arg; nextPut: $.; crtab;<br>
                        nextPutAll: '^super '; nextPutAll: s, ' ', arg])]!<br>
<br>
Item was changed:<br>
  ParseNodeEnumerator subclass: #ParseNodeWithPrecedingStatementEnumerator<br>
        instanceVariableNames: 'precedingStatement'<br>
        classVariableNames: ''<br>
        poolDictionaries: ''<br>
        category: 'Compiler-Support'!<br>
+ <br>
+ !ParseNodeWithPrecedingStatementEnumerator commentStamp: 'eem 3/19/2019 11:55' prior: 0!<br>
+ A ParseNodeWithPrecedingStatementEnumerator is a ParseNodeEnumerator that accepts a binary block in ofBlock:, and hence enumerates statement nodes with their preceding statement, or nil if they are the first.<br>
+ <br>
+ Instance Variables<br>
+       precedingStatement:             <ParseNode | nil><br>
+ <br>
+ precedingStatement<br>
+       - the preceding statement node, if any<br>
+ !<br>
<br>
Item was changed:<br>
  ----- Method: ParseNodeWithPrecedingStatementEnumerator>>ofBlock: (in category 'initialize-release') -----<br>
  ofBlock: aBlock<br>
        "N.B. This enumerator visits a node before any of the node's children.<br>
+        Hence, when enumerating statements in a block, we can ensure that<br>
+        the second argument to the block, the preceding statement, is non-nil<br>
+        only for top-level statements in the block by nilling out precedingStatement<br>
-        Hence, when enumewrating statements in a block, we can ensure that<br>
-        the second argument to the block, the preceeding statement, is non-nil<br>
-        only for top-level statements in the block by nilling out preceedingStatement<br>
         once the block is evaluated. Perhaps stronger would be to capture its value<br>
         in a temporary and nil it before evaluating, but this is good enough."<br>
        theBlock := [:node|<br>
                                aBlock value: node value: precedingStatement.<br>
                                precedingStatement := nil]!<br>
<br>
<br>
</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail-m_-577427719157108230gmail_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>
<br>
</blockquote></div>