<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <font face="Georgia">I'm reminded at this point of SmalltalkAgents
      which used curly quotes (single and double) so that literals and
      comments could nest. FWIW<br>
      <br>
    </font>
    <div class="moz-cite-prefix">On 2/6/13 1:14 AM, Eliot Miranda wrote:<br>
    </div>
    <blockquote
cite="mid:CAC20JE062uSyB4Lj9u_SHnyuHdebv4nS8e_+PpVnZj7uKxiYAQ@mail.gmail.com"
      type="cite">Hi All,
      <div><br>
      </div>
      <div>&nbsp; &nbsp; I had fun implementing a quasi-quote for Squeak today.
        &nbsp;This is a convenient way of embedding substrings in format
        strings (a little like printf), and, because it uses a different
        quote character, a convenient way of embedding code form other
        languages in a string literal.</div>
      <div><br>
      </div>
      <div>An example of the former usage is</div>
      <div>&nbsp; &nbsp; `hello [#cruel] world`</div>
      <div>which evaluates to</div>
      <div>&nbsp; &nbsp; 'hello cruel world'</div>
      <div>And</div>
      <div>&nbsp; &nbsp; `Float pi is [Float pi]`</div>
      <div>
        evaluates to</div>
      <div>&nbsp; &nbsp; 'Float pi is 3.141592653589793'</div>
      <div><br>
      </div>
      <div>An example of the latter use is that one can write</div>
      <div>&nbsp; &nbsp; `printf("%s: %c\\n", "a string", 'C');`</div>
      <div>instead of</div>
      <div>&nbsp; &nbsp; 'printf("%s: %c\n", "a string", ''C'');'</div>
      <div><br>
      </div>
      <div>This last example shows a limitation; The use of \ to escape
        characters ($\ $[ and $`) in quasi-quote might not be such a
        good choice.</div>
      <div><br>
      </div>
      <div><br>
      </div>
      <div>Anyway I thought I'd put this in the in-box for people to
        play with and savage. &nbsp;Please let me know what you think, both
        about the semantics and the implementation. &nbsp;This is a quick
        hack and I'm sure that there's plenty of scope for clean-up.</div>
      <div><br>
      </div>
      <div>cheers</div>
      <div>Eliot<br>
        <br>
        <div class="gmail_quote">On Tue, Feb 5, 2013 at 9:54 PM, <span
            dir="ltr">&lt;<a moz-do-not-send="true"
              href="mailto:commits@source.squeak.org" target="_blank">commits@source.squeak.org</a>&gt;</span>
          wrote:<br>
          <blockquote class="gmail_quote" style="margin:0 0 0
            .8ex;border-left:1px #ccc solid;padding-left:1ex">A new
            version of Compiler was added to project The Inbox:<br>
            <a moz-do-not-send="true"
              href="http://source.squeak.org/inbox/Compiler.quasiquote-eem.248.mcz"
              target="_blank">http://source.squeak.org/inbox/Compiler.quasiquote-eem.248.mcz</a><br>
            <br>
            ==================== Summary ====================<br>
            <br>
            Name: Compiler.quasiquote-eem.248<br>
            Author: eem<br>
            Time: 5 February 2013, 9:54:20.317 pm<br>
            UUID: ef044906-3339-48cc-856b-9b5172e3e81b<br>
            Ancestors: Compiler-cwp.247<br>
            <br>
            Add a quasi-quote form that allows convenient embedding<br>
            of substrings within a format string, and provides a<br>
            convenient way of embedding literal strings within an<br>
            alternative literal string whose string delimiter is
            different.<br>
            <br>
            e.g.<br>
            &nbsp; &nbsp; &nbsp; &nbsp; `hello [#cruel] world!`<br>
            evaluates to<br>
            &nbsp; &nbsp; &nbsp; &nbsp; 'hello cruel world'.<br>
            <br>
            &nbsp; &nbsp; &nbsp; &nbsp; `S1[B1]...SN[BN]SN+1`<br>
            <br>
            is equivalent to<br>
            &nbsp; &nbsp; &nbsp; &nbsp; { 'S1'. [B1] value. ... 'SN'. [BN] value. 'SN+1' }
            concatenateQuasiQuote<br>
            where concatenateQuasiQuote sends asString to each<br>
            element and answers the concatenation of those elements.<br>
            <br>
            however, single-statement blocks are inlined, so e.g. the<br>
            above `hello [#cruel] world!` is compiled as<br>
            &nbsp; &nbsp; &nbsp; &nbsp; { 'hello '. #cruel. ' world!' }
            concatenateQuasiQuote<br>
            <br>
            See Tests.quasiquote-eem.188 for tests and examples.<br>
            <br>
            =============== Diff against Compiler-cwp.247
            ===============<br>
            <br>
            Item was added:<br>
            + ----- Method: Array&gt;&gt;concatenateQuasiQuote (in
            category '*Compiler-support') -----<br>
            + concatenateQuasiQuote<br>
            + &nbsp; &nbsp; &nbsp; "This method is used in compilation of quasi-quote
            constructs.<br>
            + &nbsp; &nbsp; &nbsp; It MUST NOT be deleted or altered."<br>
            +<br>
            + &nbsp; &nbsp; &nbsp; | s sz |<br>
            + &nbsp; &nbsp; &nbsp; sz := self size.<br>
            + &nbsp; &nbsp; &nbsp; s := WriteStream on: (String new: sz * 16).<br>
            + &nbsp; &nbsp; &nbsp; 1 to: sz do:<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [:i| s nextPutAll: (self at: i) asString].<br>
            + &nbsp; &nbsp; &nbsp; ^s contents!<br>
            <br>
            Item was removed:<br>
            - ----- Method:
            Decompiler&gt;&gt;checkForBlock:selector:arguments: (in
            category 'control') -----<br>
            - checkForBlock: receiver selector: selector arguments:
            arguments<br>
            - &nbsp; &nbsp; &nbsp; selector == #blockCopy: ifTrue:<br>
            - &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [^self checkForBlockCopy: receiver].<br>
            - &nbsp; &nbsp; &nbsp; self assert: selector == #closureCopy:copiedValues:.<br>
            - &nbsp; &nbsp; &nbsp; ^self checkForClosureCopy: receiver arguments:
            arguments!<br>
            <br>
            Item was added:<br>
            + ----- Method:
            Decompiler&gt;&gt;checkForMacroMessage:selector:arguments:
            (in category 'control') -----<br>
            + checkForMacroMessage: rcvr selector: selector arguments:
            args<br>
            + &nbsp; &nbsp; &nbsp; ^ &nbsp; &nbsp; &nbsp; (selector == #concatenateQuasiQuote<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;and: [self checkForQuasiQuote: rcvr
            selector: selector arguments: args])<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; or: [(#closureCopy:copiedValues: == selector<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;and: [self checkForClosureCopy: rcvr
            arguments: args])<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; or: [#blockCopy: == selector<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; and: [self checkForBlockCopy: rcvr]]]!<br>
            <br>
            Item was added:<br>
            + ----- Method:
            Decompiler&gt;&gt;checkForQuasiQuote:selector:arguments: (in
            category 'control') -----<br>
            + checkForQuasiQuote: rcvr "&lt;BraceNode&gt;" selector:
            selector "&lt;Symbol&gt;" arguments: args "&lt;Array&gt;"<br>
            + &nbsp; &nbsp; &nbsp; stack addLast:<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ((MessageNode new<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; receiver: rcvr<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; selector: (SelectorNode new
            key: #concatenateQuasiQuote code: nil)<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; arguments: args<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; precedence: 1)<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; notePrintingSelector:
            #printQuasiQuoteOn:indent:;<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; yourself).<br>
            + &nbsp; &nbsp; &nbsp; ^true!<br>
            <br>
            Item was changed:<br>
            &nbsp; ----- Method: Decompiler&gt;&gt;send:super:numArgs: (in
            category 'instruction decoding') -----<br>
            &nbsp; send: selector super: superFlag numArgs: numArgs<br>
            <br>
            &nbsp; &nbsp; &nbsp; &nbsp; | args rcvr selNode msgNode messages |<br>
            &nbsp; &nbsp; &nbsp; &nbsp; args := Array new: numArgs.<br>
            &nbsp; &nbsp; &nbsp; &nbsp; (numArgs to: 1 by: -1) do:<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [:i | args at: i put: stack removeLast].<br>
            &nbsp; &nbsp; &nbsp; &nbsp; rcvr := stack removeLast.<br>
            &nbsp; &nbsp; &nbsp; &nbsp; superFlag ifTrue: [rcvr := constructor codeSuper].<br>
            + &nbsp; &nbsp; &nbsp; (self checkForMacroMessage: rcvr selector: selector
            arguments: args) ifFalse:<br>
            - &nbsp; &nbsp; &nbsp; ((#(blockCopy: closureCopy:copiedValues:) includes:
            selector)<br>
            - &nbsp; &nbsp; &nbsp; &nbsp; and: [self checkForBlock: rcvr selector: selector
            arguments: args]) ifFalse:<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [selNode := constructor codeAnySelector:
            selector.<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; rcvr == CascadeFlag<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ifTrue:<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ["May actually be a cascade
            or an ifNil: for value."<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self willJumpIfFalse<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ifTrue: "= generated
            by a case macro"<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [selector ==
            #= ifTrue:<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [" =
            signals a case statement..."<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
            statements addLast: args first.<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
            stack addLast: rcvr. "restore CascadeFlag"<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ^
            self].<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; selector ==
            #== ifTrue:<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ["
            == signals an ifNil: for value..."<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
            stack removeLast; removeLast.<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; rcvr
            := stack removeLast.<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
            stack addLast: IfNilFlag;<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
            &nbsp; &nbsp; addLast: (constructor<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; codeMessage: rcvr<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; selector: selNode<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; arguments: args).<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ^
            self]]<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ifFalse:<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [(self
            willJumpIfTrue and: [selector == #==]) ifTrue:<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ["
            == signals an ifNotNil: for value..."<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
            stack removeLast; removeLast.<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; rcvr
            := stack removeLast.<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
            stack addLast: IfNilFlag;<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
            &nbsp; &nbsp; addLast: (constructor<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; codeMessage: rcvr<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; selector: selNode<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; arguments: args).<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ^
            self]].<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; msgNode := constructor<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
            &nbsp; &nbsp; codeCascadedMessage: selNode<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
            &nbsp; &nbsp; arguments: args.<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; stack last == CascadeFlag
            ifFalse:<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ["Last message of a
            cascade"<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; statements addLast:
            msgNode.<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; messages := self
            popTo: stack removeLast. &nbsp;"Depth saved by first dup"<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; msgNode :=
            constructor<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; codeCascade: stack removeLast<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; messages: messages]]<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ifFalse:<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [msgNode := constructor<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
            codeMessage: rcvr<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
            selector: selNode<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
            arguments: args].<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; stack addLast: msgNode]!<br>
            <br>
            Item was changed:<br>
            &nbsp; ----- Method: MessageNode class&gt;&gt;initialize (in
            category 'class initialization') -----<br>
            &nbsp; initialize<br>
            &nbsp; &nbsp; &nbsp; &nbsp; "MessageNode initialize"<br>
            &nbsp; &nbsp; &nbsp; &nbsp; MacroSelectors :=<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #( &nbsp; &nbsp; &nbsp;ifTrue: ifFalse: ifTrue:ifFalse:
            ifFalse:ifTrue:<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; and: or:<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; whileFalse: whileTrue: whileFalse
            whileTrue<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; to:do: to:by:do:<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; caseOf: caseOf:otherwise:<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ifNil: ifNotNil: &nbsp;ifNil:ifNotNil:
            ifNotNil:ifNil:<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; repeat<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; nil "space for
            concatenateQuasiQuote" ).<br>
            - &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; repeat ).<br>
            &nbsp; &nbsp; &nbsp; &nbsp; MacroTransformers :=<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #( &nbsp; &nbsp; &nbsp;transformIfTrue: transformIfFalse:
            transformIfTrueIfFalse: transformIfFalseIfTrue:<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; transformAnd: transformOr:<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; transformWhile: transformWhile:
            transformWhile: transformWhile:<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; transformToDo: transformToDo:<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; transformCase: transformCase:<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; transformIfNil: transformIfNil:
            &nbsp;transformIfNilIfNotNil: transformIfNotNilIfNil:<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; transformRepeat:<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; nil "space for
            concatenateQuasiQuote" ).<br>
            - &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; transformRepeat: ).<br>
            &nbsp; &nbsp; &nbsp; &nbsp; MacroEmitters :=<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #( &nbsp; &nbsp; &nbsp;emitCodeForIf:encoder:value:
            emitCodeForIf:encoder:value:<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; emitCodeForIf:encoder:value:
            emitCodeForIf:encoder:value:<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; emitCodeForIf:encoder:value:
            emitCodeForIf:encoder:value:<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; emitCodeForWhile:encoder:value:
            emitCodeForWhile:encoder:value:<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; emitCodeForWhile:encoder:value:
            emitCodeForWhile:encoder:value:<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; emitCodeForToDo:encoder:value:
            emitCodeForToDo:encoder:value:<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; emitCodeForCase:encoder:value:
            emitCodeForCase:encoder:value:<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; emitCodeForIfNil:encoder:value:
            emitCodeForIfNil:encoder:value:<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; emitCodeForIf:encoder:value:
            emitCodeForIf:encoder:value:<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; emitCodeForRepeat:encoder:value:<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; nil "space for
            concatenateQuasiQuote").<br>
            - &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; emitCodeForRepeat:encoder:value:).<br>
            &nbsp; &nbsp; &nbsp; &nbsp; MacroSizers :=<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #( &nbsp; &nbsp; &nbsp;sizeCodeForIf:value:
            sizeCodeForIf:value: sizeCodeForIf:value:
            sizeCodeForIf:value:<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sizeCodeForIf:value:
            sizeCodeForIf:value:<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sizeCodeForWhile:value:
            sizeCodeForWhile:value: sizeCodeForWhile:value:
            sizeCodeForWhile:value:<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sizeCodeForToDo:value:
            sizeCodeForToDo:value:<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sizeCodeForCase:value:
            sizeCodeForCase:value:<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sizeCodeForIfNil:value:
            sizeCodeForIfNil:value: sizeCodeForIf:value:
            sizeCodeForIf:value:<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sizeCodeForRepeat:value:<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; nil "space for
            concatenateQuasiQuote").<br>
            - &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sizeCodeForRepeat:value:).<br>
            &nbsp; &nbsp; &nbsp; &nbsp; MacroPrinters :=<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #( &nbsp; &nbsp; &nbsp;printIfOn:indent: printIfOn:indent:
            printIfOn:indent: printIfOn:indent:<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; printIfOn:indent: printIfOn:indent:<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; printWhileOn:indent:
            printWhileOn:indent: printWhileOn:indent:
            printWhileOn:indent:<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; printToDoOn:indent:
            printToDoOn:indent:<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; printCaseOn:indent:
            printCaseOn:indent:<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; printIfNil:indent:
            printIfNil:indent: printIfNilNotNil:indent:
            printIfNilNotNil:indent:<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; printRepeatOn:indent:<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; printQuasiQuoteOn:indent:)!<br>
            - &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; printRepeatOn:indent:)!<br>
            <br>
            Item was added:<br>
            + ----- Method: MessageNode&gt;&gt;notePrintingSelector: (in
            category 'macro transformations') -----<br>
            + notePrintingSelector: printingSelectorSymbol<br>
            + &nbsp; &nbsp; &nbsp; "decompile"<br>
            +<br>
            + &nbsp; &nbsp; &nbsp; special := MacroPrinters indexOf:
            printingSelectorSymbol!<br>
            <br>
            Item was added:<br>
            + ----- Method: MessageNode&gt;&gt;printQuasiQuoteOn:indent:
            (in category 'printing') -----<br>
            + printQuasiQuoteOn: aStream indent: level<br>
            + &nbsp; &nbsp; &nbsp; aStream nextPut: $`.<br>
            + &nbsp; &nbsp; &nbsp; receiver elements do:<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [:parseNode|<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (parseNode isLiteralNode<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;and: [parseNode key class == 'literal'
            class])<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ifTrue:<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [parseNode key do:<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [:char|<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ('`[\' includes:
            char) ifTrue:<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [aStream
            nextPut: $\].<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; aStream nextPut:
            char]]<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ifFalse:<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [(parseNode isMessageNode<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; and: [parseNode selector
            key == #value<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; and: [parseNode receiver
            isBlockNode]])<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ifTrue:<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [parseNode
            receiver printOn: aStream indent: 0]<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ifFalse:<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [aStream
            nextPut: $[.<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;parseNode
            printOn: aStream indent: 0.<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;aStream
            nextPut: $]]]].<br>
            + &nbsp; &nbsp; &nbsp; aStream nextPut: $`!<br>
            <br>
            Item was changed:<br>
            &nbsp; ----- Method: Parser&gt;&gt;advance (in category
            'scanning') -----<br>
            &nbsp; advance<br>
            &nbsp; &nbsp; &nbsp; &nbsp; | this |<br>
            &nbsp; &nbsp; &nbsp; &nbsp; prevMark := hereMark.<br>
            &nbsp; &nbsp; &nbsp; &nbsp; prevEnd := hereEnd.<br>
            &nbsp; &nbsp; &nbsp; &nbsp; this := here.<br>
            &nbsp; &nbsp; &nbsp; &nbsp; here := token.<br>
            &nbsp; &nbsp; &nbsp; &nbsp; hereType := tokenType.<br>
            &nbsp; &nbsp; &nbsp; &nbsp; hereMark := mark.<br>
            &nbsp; &nbsp; &nbsp; &nbsp; hereEnd := source position - (aheadChar ==
            DoItCharacter<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ifTrue: [hereChar == DoItCharacter<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ifTrue: [0]<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ifFalse: [1]]<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ifFalse: [2]).<br>
            + &nbsp; &nbsp; &nbsp; hereType ~~ #backQuote ifTrue:<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [self scanToken].<br>
            - &nbsp; &nbsp; &nbsp; self scanToken.<br>
            &nbsp; &nbsp; &nbsp; &nbsp; "Transcript show: 'here: ', here printString, '
            mark: ', hereMark printString, ' end: ', hereEnd
            printString; cr."<br>
            &nbsp; &nbsp; &nbsp; &nbsp; ^this!<br>
            <br>
            Item was changed:<br>
            &nbsp; ----- Method: Parser&gt;&gt;expression (in category
            'expression types') -----<br>
            &nbsp; expression<br>
            <br>
            + &nbsp; &nbsp; &nbsp; (hereType == #word and: [tokenType == #leftArrow])
            ifTrue:<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [^self assignment: self variable].<br>
            + &nbsp; &nbsp; &nbsp; hereType == #backQuote<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ifTrue: [self quasiQuoteExpression]<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ifFalse:<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [hereType == #leftBrace<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ifTrue: [self
            braceExpression]<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ifFalse:<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [self
            primaryExpression ifFalse:<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [^false]]].<br>
            + &nbsp; &nbsp; &nbsp; (self messagePart: 3 repeat: true) ifTrue:<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [hereType == #semicolon ifTrue:<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [self cascade]].<br>
            + &nbsp; &nbsp; &nbsp; ^true!<br>
            - &nbsp; &nbsp; &nbsp; (hereType == #word and: [tokenType == #leftArrow])<br>
            - &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ifTrue: [^ self assignment: self variable].<br>
            - &nbsp; &nbsp; &nbsp; hereType == #leftBrace<br>
            - &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ifTrue: [self braceExpression]<br>
            - &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ifFalse: [self primaryExpression ifFalse: [^
            false]].<br>
            - &nbsp; &nbsp; &nbsp; (self messagePart: 3 repeat: true)<br>
            - &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ifTrue: [hereType == #semicolon ifTrue:
            [self cascade]].<br>
            - &nbsp; &nbsp; &nbsp; ^ true!<br>
            <br>
            Item was added:<br>
            + ----- Method: Parser&gt;&gt;nonQuasiQuoteExpression (in
            category 'expression types') -----<br>
            + nonQuasiQuoteExpression<br>
            +<br>
            + &nbsp; &nbsp; &nbsp; (hereType == #word and: [tokenType == #leftArrow])<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ifTrue: [^ self assignment: self variable].<br>
            + &nbsp; &nbsp; &nbsp; hereType == #leftBrace<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ifTrue: [self braceExpression]<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ifFalse: [self primaryExpression ifFalse: [^
            false]].<br>
            + &nbsp; &nbsp; &nbsp; (self messagePart: 3 repeat: true)<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ifTrue: [hereType == #semicolon ifTrue:
            [self cascade]].<br>
            + &nbsp; &nbsp; &nbsp; ^ true!<br>
            <br>
            Item was added:<br>
            + ----- Method: Parser&gt;&gt;quasiQuoteExpression (in
            category 'expression types') -----<br>
            + quasiQuoteExpression<br>
            + &nbsp; &nbsp; &nbsp; "`quasi-quote`<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =&gt; { elements } concatenateQuasiQuote<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =&gt; MessageNode receiver:
            BraceNode selector: #concatenateQuasiQuote.<br>
            +<br>
            + &nbsp; &nbsp; &nbsp; &nbsp;The syntax of quasi-quote is<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; quasi-quote := $` (characters |
            blockExpression) * $`<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; characters := (unescapedCharacter | $\
            escapedCharacter) *<br>
            +<br>
            + &nbsp; &nbsp; &nbsp; The semantics of quasi-quote are that each
            blockExpression is evaluated<br>
            + &nbsp; &nbsp; &nbsp; &nbsp;left-to-right in the scope of the enclosing method
            or block. &nbsp;The sequence<br>
            + &nbsp; &nbsp; &nbsp; &nbsp;of interspersed character sequences and expressions
            are concatenated<br>
            + &nbsp; &nbsp; &nbsp; &nbsp;left-to-right, sending asString to each element
            immediately prior to concatenation.<br>
            + &nbsp; &nbsp; &nbsp; &nbsp;The concatenation is then the result of the
            expression. &nbsp;It is always a new string.<br>
            +<br>
            + &nbsp; &nbsp; &nbsp; &nbsp;The implementation inlines single-statement blocks
            into the brace expression that<br>
            + &nbsp; &nbsp; &nbsp; &nbsp;comprises the receiver of concatenateQuasiQuote"<br>
            +<br>
            + &nbsp; &nbsp; &nbsp; | elements locations stringStream loc |<br>
            + &nbsp; &nbsp; &nbsp; elements := OrderedCollection new.<br>
            + &nbsp; &nbsp; &nbsp; locations := OrderedCollection new.<br>
            + &nbsp; &nbsp; &nbsp; stringStream := WriteStream on: (String new: 16).<br>
            + &nbsp; &nbsp; &nbsp; [loc := hereMark + requestorOffset.<br>
            + &nbsp; &nbsp; &nbsp; &nbsp;hereType == #doit ifTrue:<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [^self expected: 'back quote'].<br>
            + &nbsp; &nbsp; &nbsp; &nbsp;hereType == #leftBracket<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ifTrue:<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [self scanToken; advance.<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;parseNode := nil.<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;self blockExpression.<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;parseNode statements size = 1<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ifTrue:<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [elements addLast:
            parseNode statements first]<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ifFalse:<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [elements addLast:
            (MessageNode new<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; receiver: parseNode<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; selector: #value<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; arguments: #()<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; precedence: 1<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; from: encoder)].<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;source position: hereMark - 1.<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[source peek ~~ $]] whileTrue:<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [source position: source
            position - 1].<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;source next.<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;self step; step.<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;self setHereTypeForQuasiQuote.<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;locations addLast: loc]<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ifFalse:<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [(self
            scanQuasiQuoteCharactersUsing: stringStream) ifNotNil:<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [:lit|<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;elements addLast: lit.<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;locations addLast: loc]].<br>
            + &nbsp; &nbsp; &nbsp; &nbsp;hereType ~~ #backQuote] whileTrue.<br>
            + &nbsp; &nbsp; &nbsp; parseNode := MessageNode new<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; receiver: (BraceNode
            new elements: elements sourceLocations: locations)<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; selector:
            #concatenateQuasiQuote<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; arguments: #()<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; precedence: 1<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; from: encoder.<br>
            + &nbsp; &nbsp; &nbsp; self scanToken; advance.<br>
            + &nbsp; &nbsp; &nbsp; ^true!<br>
            <br>
            Item was changed:<br>
            + ----- Method: Parser&gt;&gt;queriedUnusedTemporaries (in
            category 'temps') -----<br>
            - ----- Method: Parser&gt;&gt;queriedUnusedTemporaries (in
            category 'accessing') -----<br>
            &nbsp; queriedUnusedTemporaries<br>
            <br>
            &nbsp; &nbsp; &nbsp; &nbsp; queriedUnusedTemporaries ifNil:<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [queriedUnusedTemporaries := Dictionary
            new].<br>
            &nbsp; &nbsp; &nbsp; &nbsp; ^queriedUnusedTemporaries!<br>
            <br>
            Item was added:<br>
            + ----- Method: Parser&gt;&gt;scanQuasiQuoteCharactersUsing:
            (in category 'scanning') -----<br>
            + scanQuasiQuoteCharactersUsing: stringStream<br>
            + &nbsp; &nbsp; &nbsp; "Answer the next non-empty sequence of characters in
            a quasi-quote string, or nil, if none."<br>
            + &nbsp; &nbsp; &nbsp; stringStream reset.<br>
            + &nbsp; &nbsp; &nbsp; [hereChar ~~ $` and: [hereChar ~~ $[ and: [hereChar
            ~~ DoItCharacter]]] whileTrue:<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [hereChar == $\<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ifTrue:<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [stringStream nextPut:
            aheadChar. self step]<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ifFalse:<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [stringStream nextPut:
            hereChar].<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;self step].<br>
            + &nbsp; &nbsp; &nbsp; self setHereTypeForQuasiQuote.<br>
            + &nbsp; &nbsp; &nbsp; ^stringStream position &gt; 0 ifTrue:<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [encoder encodeLiteral: stringStream
            contents]!<br>
            <br>
            Item was added:<br>
            + ----- Method: Parser&gt;&gt;setHereTypeForQuasiQuote (in
            category 'scanning') -----<br>
            + setHereTypeForQuasiQuote<br>
            + &nbsp; &nbsp; &nbsp; "Set hereType appropriately based on hereChar. &nbsp;Used
            only for quasi-quote parsing."<br>
            + &nbsp; &nbsp; &nbsp; hereChar == $`<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ifTrue:<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [hereType := #backQuote.<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;self step]<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ifFalse:<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [hereChar == $[<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ifTrue:<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [hereType :=
            #leftBracket.<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;self step]<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ifFalse:<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [hereChar ==
            DoItCharacter ifTrue:<br>
            + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [hereType :=
            #doit]]]!<br>
            <br>
            Item was changed:<br>
            + ----- Method: Parser&gt;&gt;tempsMark (in category
            'temps') -----<br>
            - ----- Method: Parser&gt;&gt;tempsMark (in category
            'accessing') -----<br>
            &nbsp; tempsMark<br>
            &nbsp; &nbsp; &nbsp; &nbsp; ^ tempsMark!<br>
            <br>
            Item was changed:<br>
            + ----- Method: Parser&gt;&gt;tempsMark: (in category
            'temps') -----<br>
            - ----- Method: Parser&gt;&gt;tempsMark: (in category
            'accessing') -----<br>
            &nbsp; tempsMark: aNumber<br>
            &nbsp; tempsMark := aNumber!<br>
            <br>
            Item was changed:<br>
            &nbsp; ----- Method: Scanner class&gt;&gt;initializeTypeTable (in
            category 'initialization') -----<br>
            &nbsp; initializeTypeTable<br>
            &nbsp; &nbsp; &nbsp; &nbsp; "self initializeTypeTable"<br>
            <br>
            &nbsp; &nbsp; &nbsp; &nbsp; | newTable |<br>
            &nbsp; &nbsp; &nbsp; &nbsp; newTable := Array new: 256 withAll: #xBinary.
            "default"<br>
            &nbsp; &nbsp; &nbsp; &nbsp; newTable atAll: #(9 10 12 13 32 ) put: #xDelimiter.
            "tab lf ff cr space"<br>
            &nbsp; &nbsp; &nbsp; &nbsp; newTable atAll: ($0 asciiValue to: $9 asciiValue)
            put: #xDigit.<br>
            <br>
            &nbsp; &nbsp; &nbsp; &nbsp; 1 to: 255<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; do: [:index |<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (Character value: index) isLetter<br>
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ifTrue: [newTable at: index
            put: #xLetter]].<br>
            <br>
            &nbsp; &nbsp; &nbsp; &nbsp; newTable at: $" asciiValue put: #xDoubleQuote.<br>
            &nbsp; &nbsp; &nbsp; &nbsp; newTable at: $# asciiValue put: #xLitQuote.<br>
            &nbsp; &nbsp; &nbsp; &nbsp; newTable at: $$ asciiValue put: #xDollar.<br>
            &nbsp; &nbsp; &nbsp; &nbsp; newTable at: $' asciiValue put: #xSingleQuote.<br>
            + &nbsp; &nbsp; &nbsp; newTable at: $` asciiValue put: #backQuote.<br>
            &nbsp; &nbsp; &nbsp; &nbsp; newTable at: $: asciiValue put: #xColon.<br>
            &nbsp; &nbsp; &nbsp; &nbsp; newTable at: $( asciiValue put: #leftParenthesis.<br>
            &nbsp; &nbsp; &nbsp; &nbsp; newTable at: $) asciiValue put: #rightParenthesis.<br>
            &nbsp; &nbsp; &nbsp; &nbsp; newTable at: $. asciiValue put: #period.<br>
            &nbsp; &nbsp; &nbsp; &nbsp; newTable at: $; asciiValue put: #semicolon.<br>
            &nbsp; &nbsp; &nbsp; &nbsp; newTable at: $[ asciiValue put: #leftBracket.<br>
            &nbsp; &nbsp; &nbsp; &nbsp; newTable at: $] asciiValue put: #rightBracket.<br>
            &nbsp; &nbsp; &nbsp; &nbsp; newTable at: ${ asciiValue put: #leftBrace.<br>
            &nbsp; &nbsp; &nbsp; &nbsp; newTable at: $} asciiValue put: #rightBrace.<br>
            &nbsp; &nbsp; &nbsp; &nbsp; newTable at: $^ asciiValue put: #upArrow.<br>
            &nbsp; &nbsp; &nbsp; &nbsp; newTable at: $_ asciiValue put: #xUnderscore.<br>
            &nbsp; &nbsp; &nbsp; &nbsp; newTable at: $| asciiValue put: #verticalBar.<br>
            &nbsp; &nbsp; &nbsp; &nbsp; TypeTable := newTable "bon voyage!!"!<br>
            <br>
            <br>
          </blockquote>
        </div>
        <br>
        <br clear="all">
        <div><br>
        </div>
        -- <br>
        best,
        <div>Eliot</div>
      </div>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <pre wrap="">
</pre>
    </blockquote>
    <br>
  </body>
</html>