<div dir="ltr">Thanks, John.<div><br><div>As you suggest, I'm trying to do exactly what the debugger is doing.  As far as I can tell by tracing through its code, the debugger does the following to go from a raw datum ('(+ 1 2) in my example) to the syntax that it feeds into annotate (this is boiled down from several hundred lines of unrelated stuff in debug-tool.rkt)</div>
<div><br></div><div> (expand-syntax</div><div>   (expand-syntax-to-top-form</div><div>     (namespace-syntax-introduce</div><div>       (datum->syntax #f</div><div>                      '(+ 1 2)))))</div><div><br></div>
<div>When I run this with racket from my command line, it fails with </div><div><br></div><div><div>+: unbound identifier;</div><div> also, no #%app syntax transformer is bound</div><div>  at: +</div><div>  in: (+ 1 2)</div>
<div>  context...:</div><div>   /home/patrick/dev/scry/scree.rkt: [running body]</div></div><div><br></div><div>I can wrap it with a call to (parameterize ([current-namespace (make-base-namespace)]) ...), but then the resulting syntax is:</div>
<div><br></div><div><div>#<syntax (#%app + (quote 1) (quote 2))></div></div><div><br></div><div>Which, as you can see, contains #%app instead of the #%plain-app that the annotator is looking for.  </div><div><br></div>
<div>Huh.</div><div><br></div><div><br></div></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Tue, Jan 21, 2014 at 12:20 AM, John Clements <span dir="ltr"><<a href="mailto:clements@brinckerhoff.org" target="_blank">clements@brinckerhoff.org</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im"><br>
On Jan 20, 2014, at 4:40 PM, Patrick Boe wrote:<br>
<br>
> Thanks for taking a look, John.  Here's a reduced version.  I don't think there's any missing namespace information here at the time of evaluation, since the syntax is being manipulated in a macro, but I am relatively new to using namespace anchors, so I could be wrong. It seems to me like the syntax is being expanded either more or less fully than the annotator wants.<br>

><br>
> #lang racket<br>
> (require (for-syntax racket/format gui-debugger/annotator))<br>
> (define-syntax fail-to-annotate<br>
>   (lambda (stx)<br>
>     (let-values<br>
>       ([(annotated _)<br>
>         (annotate-stx (expand (cadr (syntax-e stx))) '_ '_ '_ )])<br>
>       annotated)))<br>
> (fail-to-annotate (string-append "hi" "lo"))<br>
<br>
</div>Right... I would say "less." In particular, it appears to me that the syntax here is not fully expanded.<br>
<br>
However, this code is also setting off my "border-crossing" alarms. I've been working with the racket syntax since... 1997? ... and so it embarrasses me not to be able to give you a more definitive answer, but I think that, to make a long story short, you don't want to put calls to annotate-stx inside a macro.  Instead, I think you probably want to implement your debugger the way the debugger does---as a global transformation on fully-expanded syntax.<br>

<br>
Put differently: doing it this way looks to me like it's straining the built-in structure of the macro system. You can probably move it toward what you want, but it's probably not ever going to work really nicely.<br>

<br>
Sorry for not giving you a more definitive answer,<br>
<br>
John Clements<br>
<div class="HOEnZb"><div class="h5"><br>
<br>
><br>
><br>
><br>
> On Mon, Jan 20, 2014 at 2:18 AM, John Clements <<a href="mailto:clements@brinckerhoff.org">clements@brinckerhoff.org</a>> wrote:<br>
><br>
> On Jan 16, 2014, at 4:05 PM, Patrick Boe wrote:<br>
><br>
> > I am trying to learn how to use the DrRacket debugger's annotate function. My ultimate aim is to build a REPL that you can execute from within a closure and have access to everything that's in scope. (see my StackOverflow question on that topic and Greg Hendershott's well-researched answer) For the time being, I'm just trying to explore how the annotate function works. You can see my first exploratory attempt at using it, and the results, here.<br>

> ><br>
> > The error, which is happing inside of the annotator, seems to arise when it tries to pattern-match he application of string-append. The matcher is looking for a #%plain-app and the expanded syntax I'm presenting to it contains an #%app. I'm unsure if I should be expanding the syntax differently so it comes out as a #%plain-app or if there's something else I'm doing wrong to produce the syntax I'm feeding into the annotator. Does anybody see where my error is?<br>

><br>
> Sadly, I don't have a browser right now, so I can't take a look at your links. Perhaps you can reduce it to a ten-line example? Could the solution have something to do with namespace anchors?<br>
><br>
> John Clements<br>
><br>
> ><br>
> > I originally posted this question to SO, but Greg suggested I might have more luck with it here.<br>
> ><br>
> > Best,<br>
> > Patrick<br>
> ><br>
> > PS - if you're reading this, thanks the great PLAI class last year, SK!<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>
><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>
</div></div></blockquote></div><br></div>