<div dir="ltr">#lang web-server converts the program to ANF and something like CPS. Then ANF stages the program into steps and then the CPS-ish stage takes each of those steps and lifts them to the top-level adding arguments that close over free variables. In Jordan's program and Robby's example, each usage of "me" introduces a new "step" and thus a new closure. The transformer takes the previously available "me" and uses it bind the next "me".<div><br></div><div>I believe that the way to "fix" the arrows would be to change this line:</div><div><br></div><div><a href="https://github.com/racket/web-server/blob/master/web-server-lib/web-server/lang/closure.rkt#L89">https://github.com/racket/web-server/blob/master/web-server-lib/web-server/lang/closure.rkt#L89</a><br></div><div><br></div><div>so that rather than using fvars, it used a new argument fvar-bindings which would be bound-identifier=? but would have different srclocs. Computing that would be difficult as we'd have to change the interface to make-closure to accept some sort of top-down mapping of all the bindings.</div><div><br></div><div>Jay</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Sun, Jan 4, 2015 at 9:51 AM, Robby Findler <span dir="ltr"><<a href="mailto:robby@eecs.northwestern.edu" target="_blank">robby@eecs.northwestern.edu</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>This looks to me like something tricky that #lang web-server is doing. Here's a simplified example:</div><div><br></div><div><div>#lang web-server</div><div>(define (f me)</div><div>  `((a . ,me)</div><div>    (r . ,me)</div><div>    ,@me))</div></div><div><br></div><div><br></div><div>Perhaps someone (Jay?) can shed a little light on what transformations #lang web-server is doing in this case and we can see if it needs to change or if check syntax does.</div><div><br></div><div>My guess is that the second "me" is ending up in a binding position that shadows the original binding of "me" and probably just rebinds it. Looking at the expansion it isn't clear to me which one and whether or not there are actually two of them (if there are, then the one that "looks wrong" to check syntax can just be turned off somehow probably).</div><div><br></div><div>Robby</div><div><br></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote"><div><div class="h5">On Sun, Jan 4, 2015 at 1:18 AM, Jordan Johnson <span dir="ltr"><<a href="mailto:jmj@fellowhuman.com" target="_blank">jmj@fellowhuman.com</a>></span> wrote:<br></div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="h5"><div style="word-wrap:break-word">Hi all,<div><br></div><div>This behavior (shown in attached images) showed up in some code I was working on tonight: A complex quasiquoted expression is apparently fooling DrRacket (6.1.1 under OS X Yosemite) into thinking one reference refers to another reference, not to its actual binding.</div><div><br></div><div><img height="137" width="636" src="cid:C397FD9E-8974-4593-8C4B-934CA50EA7C7"><img height="144" width="526" src="cid:258129F8-A765-40F6-9240-E5DB2CAC9634"></div><div><br></div><div>(In the code pictured here, <b>oauth2-client</b> is a struct type defined in the file, and <b>me</b> refers to an instance of it. <b>me</b> was a constant that I was in the process of lifting to be a parameter.)</div><div><br></div><div>If I replace the <b>,(oauth2-client-callback me)</b> with a different expression, the bottommost <b>me</b> is then correctly shown referring to the function parameter, but if I retype anything of the form <b>,(some-defined-function me)</b>, the odd behavior comes back. It persists across saving and reloading of the file.</div><div><br></div><div>This seemed worthy of reporting, but after about 40 min of experimentation, I still haven’t managed to reproduce the behavior in another file, so I thought I’d best throw it out to the list to see if it triggers any ideas from someone with more knowledge of the syntax-checking internals.</div><div><br></div><div>Cheers,</div><div>Jordan</div><div><br></div><div><br></div></div><br></div></div>____________________<br>
  Racket Users list:<br>
  <a href="http://lists.racket-lang.org/users" target="_blank">http://lists.racket-lang.org/users</a><br>
<br></blockquote></div><br></div>
<br>____________________<br>
  Racket Users list:<br>
  <a href="http://lists.racket-lang.org/users" target="_blank">http://lists.racket-lang.org/users</a><br>
<br></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature">Jay McCarthy<br><a href="http://jeapostrophe.github.io" target="_blank">http://jeapostrophe.github.io</a><br><br>           "Wherefore, be not weary in well-doing,<br>      for ye are laying the foundation of a great work.<br>And out of small things proceedeth that which is great."<br>                          - D&C 64:33</div>
</div>