<div dir="ltr"><div dir="ltr">On Mon, Nov 8, 2021 at 3:21 PM Jecel Assumpcao Jr <<a href="mailto:jecel@merlintec.com">jecel@merlintec.com</a>> wrote:<br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
An alternative, adopted by Self, is to simply declare this to be an<br>
error - the one you saw. You are allowed to use blocks created in B as<br>
long as its stack frame is still around. When B returns we just throw<br>
all its stuff away (pop the stack) and too bad if any blocks needed it.<br></blockquote><div><br></div><div>Yes, thanks for the thorough response. That explains why code like this will throw this error "(| a = (| | b value). b = (| | [1]) |) a". By the time method A gets the block back from B and sends it value, B has already returned.</div><div><br></div><div>I am still specifically confused on cases like this, however - "(| x = [2] |) x value". This case throws the error. It is not clear to me, in this case, which method has returned making the block that x points to no longer usable. (Maybe my confusion is in how data slots are assigned their values.)<br></div><div><br></div><div>Something similar to this is "(| x = (| | [2]) |) x value". This throws the same error. This one makes sense to me though, as the block is made in the x method which has returned by the time value is sent to it.</div><div><br></div><div>Thanks again for the responses.</div><div><br></div><div>-Luke<br></div><div><br></div></div></div>