<div dir="ltr">I agree!</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Nov 21, 2023 at 4:36 PM Juan Vuletich <<a href="mailto:juan@cuis.st">juan@cuis.st</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"><u></u>

  
    
  
  <div bgcolor="#ffffff">
    Hi Folks,<br>
    <br>
    Great work!<br>
    <br>
    WRT Hernáns concern about modifying #resume, I agree, and suggest
    modifying #resumeProcess instead, so that the modified line reads:<br>
    <br>
            interruptedProcess resolvePendingQuickReturns; resume ].<br>
    <br>
    WRT the fix to the problem shown by Hernán's example, it looks OK to
    me.<br>
    <br>
    If you both agreen, I'm willing to push the changes to GitHub.<br>
    <br>
    Thanks!<br>
    <br>
    On 11/18/2023 7:05 PM, Hernán Wilkinson via Cuis-dev wrote:
    <blockquote type="cite">
      <div dir="ltr">
        <div class="gmail_quote">
          <div>Hi Facu,</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">
            <div dir="ltr">
              <div>I'm looking into it—these errors are really tough to
                debug!</div>
              <div>The problem arises when you try to debug an
                exception: in your code example, <font face="monospace">Customer
                  class>>#importCustomers</font> throws an
                exception because the file input.txt does not exist,
                therefore <font face="monospace">line</font> is <font face="monospace">nil</font><font face="arial,
                  sans-serif">.</font></div>
            </div>
          </blockquote>
          <div><br>
          </div>
          <div>oh! that is because I forgot to send you the file, but
            create a file called input.txt or replace the file with a
            ReadStream. That is not the problem I had.</div>
          <div>Replace the opening of the file with:</div>
          <div>inputStream := ReadStream on: 'C,a,b,d,1122'.<br>
          </div>
          <div>That will help you reproduce the error. You have to step
            over until the [ line notNil ] </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">
            <div dir="ltr">
              <div><br>
              </div>
              <div>📝 Here's what I've found so far:</div>
              <div>In my previous changeset, I changed the <font face="monospace">InstructionStream>>#willReturn</font>
                method so that it'll stop before actually performing a
                quick return once you step into it. This is used from <font face="monospace">ContextPart>>#stepToSendOrReturn</font> (👈 notice
                the message name).</div>
              <div>While I was debugging this issue, I realized that
                there's also another place where something similar is
                done: <font face="monospace">ContextPart>>#runUntilErrorOrReturnFrom:</font>.
                This is used, for example, when you perform a "through"
                action. As a quick return method can only return an
                object, I changed <span style="font-family:monospace">#runUntilErrorOrReturnFrom:</span> to
                just do that instead of going through the rest of the
                logic.</div>
              <div><br>
              </div>
              <div>I attach a fileout of the changes to <span style="font-family:monospace">ContextPart>>#runUntilErrorOrReturnFrom:</span>.
                It should be filed-in after having applied the original
                changeset, and it should fix the problem.</div>
              <div>I don't think this is an elegant solution, but I want
                you to try it to see if it works on your tests or if you
                find more problems.</div>
            </div>
          </blockquote>
          <div><br>
          </div>
          <div>With this fix, the problem I describe above is gone, so
            it fixes the issue.</div>
          <div><br>
          </div>
          <div>Cheers!</div>
          <div>Hernan.</div>
          <div><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><br>
              </div>
              <div>I'll keep looking into it!</div>
              <div>Cheers!<br>
                Facu<br>
                <br>
                <br>
              </div>
            </div>
            <br>
            <div class="gmail_quote">
              <div dir="ltr" class="gmail_attr">El mar, 14 nov 2023 a
                las 9:35, Hernán Wilkinson (<<a href="mailto:hernan.wilkinson@10pines.com" target="_blank">hernan.wilkinson@10pines.com</a>>)
                escribió:<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">Hi Facu,
                  <div> there is an error with this change. I do not
                    know exactly what it is, but you can reproduce it by
                    filing in the attached file and debugging
                    importCustomers from Customer class (it is a class
                    method). The error happens when doing step over in [
                    line notNil ] whileTrue: ...</div>
                </div>
                <br>
                <div class="gmail_quote">
                  <div dir="ltr" class="gmail_attr">On Tue, Nov 14, 2023
                    at 8:07 AM Hernán Wilkinson <<a href="mailto:hernan.wilkinson@10pines.com" target="_blank">hernan.wilkinson@10pines.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">This is so great!! It is a really
                      important feature when doing TDD and the first
                      implementation of a method is a ^true or similar.
                      <div>The only concern I have is the change in
                        Process>>#resume, because that impacts all
                        the situations where #resume is sent... I know
                        the impact is low, but is it possible to
                        restrict that change to the debugger only or
                        not?</div>
                      <div><br>
                      </div>
                      <div>Cheers!</div>
                      <div>Hernan.</div>
                    </div>
                    <br>
                    <div class="gmail_quote">
                      <div dir="ltr" class="gmail_attr">On Mon, Nov 13,
                        2023 at 8:28 PM Facundo Javier Gelatti via
                        Cuis-dev <<a href="mailto:cuis-dev@lists.cuis.st" target="_blank">cuis-dev@lists.cuis.st</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">Hi!<br>
                          I attach some code to be able to step into
                          quick return methods from the debugger, and
                          there's also <a href="https://drive.google.com/file/d/1Iv5-hJ4TNjmR0pG-qm02KpTxCvKzsDZC/view?usp=sharing" target="_blank">a demo video</a>. Being able
                          to step into a quick return method is very
                          useful, especially in situations where we are
                          doing TDD (because the first implementation of
                          a method probably ends up being a quick
                          return).<br>
                          <br>
                          Most of these changes were developed during
                          the Camp Smalltalk event of the Smalltalks
                          2023 conference by me, Juan Vuletich and
                          Felipe Zak (thank you guys!).<br>
                          <br>
                          I included automated tests for various
                          debugging scenarios. The class <font face="monospace">QuickReturnDebuggingTest</font> should
                          probably be moved to an appropriate category
                          (it's currently in the "Smalltalks 2023"
                          category, just because the changes were
                          developed during the conference) or be merged
                          into another existing test class (I wasn't
                          sure where to put it).<br>
                          <br>
                          ℹ️ Extra interesting info: there are other
                          places in which we're currently treating quick
                          return methods in a special way. See for
                          example <font face="monospace">Debugger>>#contents:notifying:</font>,
                          which handles the special case of a normal
                          method becoming a quick return method after
                          saving the changes on the debugger (the stack
                          frame is removed in that case, try it!). As a
                          curiosity, another quirk related to quick
                          returns is that you cannot debug an expression
                          that will compile to a quick return (e.g. <font face="monospace">^2</font>), the debugger
                          simply doesn't show up! None of this is
                          modified on the code I'm submitting.<br>
                          <br>
                          I include a summary of the changes below, that
                          could be useful during code review 👇<br>
                          <br>
                          Cheers!<br>
                          Facu<br>
                          <div><br>
                            <hr style="color:rgb(0,0,0);font-family:"Times New Roman";font-size:medium"></div>
                          📝 Changes summary:<br>
                          <ul>
                            <li style="margin-left:15px">Do not run a
                              quick return as a primitive in <font face="monospace">ContextPart>>#send:to:with:lookupIn:</font>,
                              treat it as a normal instruction —before
                              which we can stop— and create a new stack
                              frame for it.</li>
                            <li style="margin-left:15px">Refactor:
                              extracted an <font face="monospace">isPrimitive</font> variable
                              in <font face="monospace">ContextPart>>#send:to:with:lookupIn:</font>,
                              to avoid having repeated code.</li>
                            <li style="margin-left:15px">Changed <font face="monospace">InstructionStream>>#willReturn</font> to
                              include quick returns there. This ends up
                              telling the debugger that it's possible to
                              pause the execution there.</li>
                            <li style="margin-left:15px">In <font face="monospace">Process>>#resume</font>,
                              resolve pending quick returns before
                              running <font face="monospace">#primitiveResume</font>,
                              so that the VM can resume the process
                              without having an unexpected stack frame
                              (if you remove this, the VM crashes).</li>
                            <li style="margin-left:15px">Refactor:
                              extracted the method <font face="monospace">Debugger
                                class>>#newDebugging:</font>,
                              which is useful for tests (because it does
                              not open the debugger UI).</li>
                          </ul>
                        </div>
                        -- <br>
                        Cuis-dev mailing list<br>
                        <a href="mailto:Cuis-dev@lists.cuis.st" target="_blank">Cuis-dev@lists.cuis.st</a><br>
                        <a href="https://lists.cuis.st/mailman/listinfo/cuis-dev" rel="noreferrer" target="_blank">https://lists.cuis.st/mailman/listinfo/cuis-dev</a><br>
                      </blockquote>
                    </div>
                    <br clear="all">
                    <div><br>
                    </div>
                    <span class="gmail_signature_prefix">-- </span><br>
                    <div dir="ltr" class="gmail_signature">
                      <div dir="ltr">
                        <div>
                          <div dir="ltr">
                            <div style="font-size:small">
                              <div dir="ltr">
                                <div dir="ltr">
                                  <div style="font-size:12.8px"><span style="font-family:tahoma,sans-serif;font-size:xx-small;border-collapse:collapse"><strong><span style="font-size:8pt"><span style="font-size:small"><font size="2"><span style="font-weight:normal"><span style="font-weight:bold">Hernán
                                                  Wilkinson</span><br>
                                                Agile Software
                                                Development, Teaching
                                                & Coaching</span></font></span></span></strong></span></div>
                                  <div style="font-size:12.8px"><span style="font-family:tahoma,sans-serif;font-size:xx-small;border-collapse:collapse"><strong><span style="font-size:8pt"><span style="font-size:small"><font size="2"><span style="font-weight:normal">Phone: +54-011</span></font></span></span></strong></span><font size="2" face="tahoma, sans-serif">-4893-2057</font></div>
                                  <div style="font-size:12.8px"><strong style="font-family:tahoma,sans-serif;font-size:xx-small"><span style="font-size:8pt"><span style="font-size:small"><font size="2"><span style="font-weight:normal">Twitter:
                                              @HernanWilkinson</span></font></span></span></strong></div>
                                  <div style="font-size:12.8px"><span style="font-family:tahoma,sans-serif;font-size:xx-small;border-collapse:collapse"><strong><span style="font-size:8pt"><span style="font-size:small"><font size="2"><span style="font-weight:normal">site: <a href="http://www.10pines.com/" style="color:rgb(17,65,112)" target="_blank">http://www.10Pines.com</a></span></font></span></span></strong></span></div>
                                  <div style="font-size:12.8px"><font face="tahoma, sans-serif"><span style="border-collapse:collapse">Address: Alem 896</span></font>,
                                    Floor 6, Buenos Aires, Argentina</div>
                                </div>
                              </div>
                            </div>
                          </div>
                        </div>
                      </div>
                    </div>
                  </blockquote>
                </div>
                <br clear="all">
                <div><br>
                </div>
                <span class="gmail_signature_prefix">-- </span><br>
                <div dir="ltr" class="gmail_signature">
                  <div dir="ltr">
                    <div>
                      <div dir="ltr">
                        <div style="font-size:small">
                          <div dir="ltr">
                            <div dir="ltr">
                              <div style="font-size:12.8px"><span style="font-family:tahoma,sans-serif;font-size:xx-small;border-collapse:collapse"><strong><span style="font-size:8pt"><span style="font-size:small"><font size="2"><span style="font-weight:normal"><span style="font-weight:bold">Hernán
                                              Wilkinson</span><br>
                                            Agile Software Development,
                                            Teaching & Coaching</span></font></span></span></strong></span></div>
                              <div style="font-size:12.8px"><span style="font-family:tahoma,sans-serif;font-size:xx-small;border-collapse:collapse"><strong><span style="font-size:8pt"><span style="font-size:small"><font size="2"><span style="font-weight:normal">Phone:
                                            +54-011</span></font></span></span></strong></span><font size="2" face="tahoma, sans-serif">-4893-2057</font></div>
                              <div style="font-size:12.8px"><strong style="font-family:tahoma,sans-serif;font-size:xx-small"><span style="font-size:8pt"><span style="font-size:small"><font size="2"><span style="font-weight:normal">Twitter:
                                          @HernanWilkinson</span></font></span></span></strong></div>
                              <div style="font-size:12.8px"><span style="font-family:tahoma,sans-serif;font-size:xx-small;border-collapse:collapse"><strong><span style="font-size:8pt"><span style="font-size:small"><font size="2"><span style="font-weight:normal">site: <a href="http://www.10pines.com/" style="color:rgb(17,65,112)" target="_blank">http://www.10Pines.com</a></span></font></span></span></strong></span></div>
                              <div style="font-size:12.8px"><font face="tahoma, sans-serif"><span style="border-collapse:collapse">Address:
                                    Alem 896</span></font>, Floor 6,
                                Buenos Aires, Argentina</div>
                            </div>
                          </div>
                        </div>
                      </div>
                    </div>
                  </div>
                </div>
              </blockquote>
            </div>
          </blockquote>
        </div>
        <br clear="all">
        <div><br>
        </div>
        <span class="gmail_signature_prefix">-- </span><br>
        <div dir="ltr" class="gmail_signature">
          <div dir="ltr">
            <div>
              <div dir="ltr">
                <div style="font-size:small">
                  <div dir="ltr">
                    <div dir="ltr">
                      <div style="font-size:12.8px"><span style="font-family:tahoma,sans-serif;font-size:xx-small;border-collapse:collapse"><strong><span style="font-size:8pt"><span style="font-size:small"><font size="2"><span style="font-weight:normal"><span style="font-weight:bold">Hernán Wilkinson</span><br>
                                    Agile Software Development, Teaching
                                    & Coaching</span></font></span></span></strong></span></div>
                      <div style="font-size:12.8px"><span style="font-family:tahoma,sans-serif;font-size:xx-small;border-collapse:collapse"><strong><span style="font-size:8pt"><span style="font-size:small"><font size="2"><span style="font-weight:normal">Phone: +54-011</span></font></span></span></strong></span><font size="2" face="tahoma, sans-serif">-4893-2057</font></div>
                      <div style="font-size:12.8px"><strong style="font-family:tahoma,sans-serif;font-size:xx-small"><span style="font-size:8pt"><span style="font-size:small"><font size="2"><span style="font-weight:normal">Twitter: @HernanWilkinson</span></font></span></span></strong></div>
                      <div style="font-size:12.8px"><span style="font-family:tahoma,sans-serif;font-size:xx-small;border-collapse:collapse"><strong><span style="font-size:8pt"><span style="font-size:small"><font size="2"><span style="font-weight:normal">site: <a href="http://www.10pines.com/" style="color:rgb(17,65,112)" target="_blank">http://www.10Pines.com</a></span></font></span></span></strong></span></div>
                      <div style="font-size:12.8px"><font face="tahoma, sans-serif"><span style="border-collapse:collapse">Address:
                            Alem 896</span></font>, Floor 6, Buenos
                        Aires, Argentina</div>
                    </div>
                  </div>
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
    </blockquote>
    <br>
    <br>
    <pre cols="72">-- 
Juan Vuletich
<a href="http://cuis.st" target="_blank">cuis.st</a>
<a href="http://github.com/jvuletich" target="_blank">github.com/jvuletich</a>
<a href="http://researchgate.net/profile/Juan-Vuletich" target="_blank">researchgate.net/profile/Juan-Vuletich</a>
<a href="http://independent.academia.edu/JuanVuletich" target="_blank">independent.academia.edu/JuanVuletich</a>
<a href="http://patents.justia.com/inventor/juan-manuel-vuletich" target="_blank">patents.justia.com/inventor/juan-manuel-vuletich</a>
<a href="http://linkedin.com/in/juan-vuletich-75611b3" target="_blank">linkedin.com/in/juan-vuletich-75611b3</a>
<a href="http://twitter.com/JuanVuletich" target="_blank">twitter.com/JuanVuletich</a></pre>
  </div>

</blockquote></div><br clear="all"><div><br></div><span class="gmail_signature_prefix">-- </span><br><div dir="ltr" class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div style="font-size:small"><div dir="ltr"><div dir="ltr"><div style="font-size:12.8px"><span style="font-family:tahoma,sans-serif;font-size:xx-small;border-collapse:collapse"><strong><span style="font-size:8pt"><span style="font-size:small"><font size="2"><span style="font-weight:normal"><span style="font-weight:bold">Hernán Wilkinson</span><br>Agile Software Development, Teaching & Coaching</span></font></span></span></strong></span></div><div style="font-size:12.8px"><span style="font-family:tahoma,sans-serif;font-size:xx-small;border-collapse:collapse"><strong><span style="font-size:8pt"><span style="font-size:small"><font size="2"><span style="font-weight:normal">Phone: +54-011</span></font></span></span></strong></span><font face="tahoma, sans-serif" size="2">-4893-2057</font></div><div style="font-size:12.8px"><strong style="font-family:tahoma,sans-serif;font-size:xx-small"><span style="font-size:8pt"><span style="font-size:small"><font size="2"><span style="font-weight:normal">Twitter: @HernanWilkinson</span></font></span></span></strong></div><div style="font-size:12.8px"><span style="font-family:tahoma,sans-serif;font-size:xx-small;border-collapse:collapse"><strong><span style="font-size:8pt"><span style="font-size:small"><font size="2"><span style="font-weight:normal">site: <a href="http://www.10pines.com/" style="color:rgb(17,65,112)" target="_blank">http://www.10Pines.com</a></span></font></span></span></strong></span></div><div style="font-size:12.8px"><font face="tahoma, sans-serif"><span style="border-collapse:collapse">Address: Alem 896</span></font>, Floor 6, Buenos Aires, Argentina</div></div></div></div></div></div></div></div>