[racket-dev] splicing-syntax-parameterize and syntax-parameter-value

From: Matthew Flatt (mflatt at cs.utah.edu)
Date: Sat Dec 1 10:29:13 EST 2012

Interesting problem. I almost gave up, but I think I've sorted it out
--- repair pushed.

At Thu, 29 Nov 2012 18:20:18 -0500 (EST), "J. Ian Johnson" wrote:
> Simpler example:
> 
> (require racket/splicing racket/stxparam)
> (define-syntax-parameter f #f)
> (define x 0)
> ;; 0
> (syntax-parameterize ([f (make-rename-transformer #'x)]) 
> (splicing-syntax-parameterize ([f (syntax-parameter-value #'f)]) f))
> ;; 0
> (splicing-syntax-parameterize ([f (make-rename-transformer #'x)]) 
> (syntax-parameterize ([f (syntax-parameter-value #'f)]) f))
> ;; error
> > (splicing-syntax-parameterize ([f (make-rename-transformer #'x)]) 
> (splicing-syntax-parameterize ([f (syntax-parameter-value #'f)]) f))
> stdin::334: f: bad syntax
>   in: f
>   context...:
>    /home/ianj/racket/collects/racket/splicing.rkt:224:0
>    /home/ianj/racket/collects/racket/splicing.rkt:177:0
>    /home/ianj/racket/collects/racket/splicing.rkt:224:0
>    /home/ianj/racket/collects/racket/splicing.rkt:177:0
>    /home/ianj/racket/collects/racket/private/misc.rkt:87:7
> 
> -Ian
> ----- Original Message -----
> From: "J. Ian Johnson" <ianj at ccs.neu.edu>
> To: "dev" <dev at racket-lang.org>
> Sent: Thursday, November 29, 2012 4:01:09 PM GMT -05:00 US/Canada Eastern
> Subject: [racket-dev] splicing-syntax-parameterize and syntax-parameter-value
> 
> (require racket/stxparam racket/splicing)
> (define-syntax-parameter f #f)
> (splicing-syntax-parameterize ([f #t])
>   (begin-for-syntax (printf "~a~%" (syntax-parameter-value #'f)))
>   (void))
> 
> This prints #f.
> 
> If I instead add a macro indirection
> 
> (define-syntax (blah stx) (syntax-case stx () [(_ f) (printf "~a~%" 
> (syntax-parameter-value #'f)) #'(void)]))
> 
> Then
> 
> (splicing-syntax-parameterize ([f #t])
>   (blah f)
>   (void))
> 
> prints #t
> 
> This is messing up some of my syntax parameters that build their definitions 
> from the existing value in the parameter. Why does the first program have this 
> behavior? This feels bug-like to me.
> -Ian


Posted on the dev mailing list.