<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <div class="moz-cite-prefix">On 1/11/2014 6:18 PM, Colin Putney
      wrote:<br>
    </div>
    <blockquote
cite="mid:CAD+=c1gK9izWf-kd5gibQLQ3ivRpGEA3WoW_t-ZbfrsuFDg7vg@mail.gmail.com"
      type="cite">
      <div dir="ltr"><br>
        <div class="gmail_extra"><br>
          <br>
          <div class="gmail_quote">On Sat, Jan 11, 2014 at 5:12 PM,
            Florin Mateoc <span dir="ltr">&lt;<a moz-do-not-send="true"
                href="mailto:florin.mateoc@gmail.com" target="_blank">florin.mateoc@gmail.com</a>&gt;</span>
            wrote:<br>
            <blockquote class="gmail_quote" style="margin:0 0 0
              .8ex;border-left:1px #ccc solid;padding-left:1ex">
              <div text="#000000" bgcolor="#FFFFFF">
                <div>
                  <div>
                    <div>On 1/11/2014 4:26 PM, Colin Putney wrote:<br>
                    </div>
                    <blockquote type="cite"> </blockquote>
                  </div>
                </div>
              </div>
            </blockquote>
            <div>&nbsp;</div>
            <blockquote class="gmail_quote" style="margin:0 0 0
              .8ex;border-left:1px #ccc solid;padding-left:1ex">
              <div text="#000000" bgcolor="#FFFFFF"> It does not skip
                over the sentinel. It encounters the "end" earlier
                because you create a new object after the sentinel was
                created.<br>
                If you do Object new nextObject you get 0. So when the
                proxy is materialized and then gets sent nextObject it
                returns 0</div>
            </blockquote>
            <div><br>
            </div>
            <div>This is what I mean. We start enumerating objects with
              nil, walk through memory until we hit the proxy, jump
              forward in memory to the materialized ancestry object, and
              continue until we hit 0. That jump causes a bunch of
              objects to be skipped, including the sentinel.&nbsp;</div>
            <div><br>
            </div>
            <div>It still doesn't explain why we get to the end of
              memory. MCProxyInfo faults in its target by reading MC
              versions into the image from a repository, then searching
              their ancestries for the object it represents. The object
              it becomes is virtually guaranteed not to be the most
              recent object allocated. So #nextObject will answer some
              object, and we'll execute the block at least once more.
              That should send us into the infinite loop that the
              sentinel object is designed to prevent.&nbsp;</div>
            <div><br>
            </div>
          </div>
        </div>
      </div>
    </blockquote>
    <br>
    No, by following the proxy's nextObject, we start iterating a
    different loop than the original one (constituted by the bunch of
    objects just created, the proxy being the oldest in the bunch) until
    we reach the newest one among them, which will return 0.<br>
    The sentinel is there because, even if only one block activation is
    created, we do not want to include it in the iteration, otherwise a
    check for 0 would be good enough.<br>
    If you open code the loop (say [(next := next nextObject) ~= 0]
    whileTrue: [...loop body...]) there is no block activation, so a
    check for 0 would be enough (if we don't otherwise create new
    objects).<br>
    <br>
    Florin<br>
  </body>
</html>