[racket] reconstructing syntax objects
On 11/17/2011 01:20 PM, Ryan Culpepper wrote:
> On 11/17/2011 12:28 PM, Jon Rafkind wrote:
>> I have some code that deconstructs and reconstructs a syntax object. I'm
>> pretty sure this code is at fault for not adding the proper lexical
>> context back on so I get an error about 'no #%app bound'.
>>
>> (syntax-parse form
>> [(form ...)
>> (with-syntax ([(form* ...) (map honu->racket (syntax->list #'(form ...)))])
>> (datum->syntax forms
>> #'(form* ...)
>> forms
>> forms))]
>>
>> I had hoped that datum->syntax would add the original lexical context
>> back on, is it not doing what I hoped?
>
> No, the datum->syntax there is a no-op, because #'(form* ...) is already a syntax object, and datum->syntax stops when it hits something that's already a syntax object.
>
> You should do something like this instead:
>
> (datum->syntax forms
> (map honu->racket (syntax->list #'(form ...)))
> forms
> forms)
>
Ok thanks, that solved the problem. For future reference if I have a more complicated use case is there a way to put the original lexical context back on the new syntax object?
If such a function could exist it should go into unstable/syntax since I keep forgetting how to reconstruct the lexical context.