<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"><<a moz-do-not-send="true"
href="mailto:florin.mateoc@gmail.com" target="_blank">florin.mateoc@gmail.com</a>></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> </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. </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. </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>