[racket-dev] some surprising behavior with syntax-parameterize and lexical info
>> I suspect that I should be using quote-syntax at this specific point,
>> but I am not completely sure.
>
> Right. Try replacing ??? with (quote-syntax #,a-placeholder).
I have to admit that I'm still confused. Here's my example:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
#lang racket
(require racket/stxparam racket/splicing)
(define-syntax-parameter current-def #f)
(define-syntax (def stx)
(syntax-case stx ()
[(_ (name args ...) body ...)
(with-syntax ([function-stx stx])
(syntax/loc stx
(define (name args ...)
(splicing-syntax-parameterize ([current-def
(quote-syntax
function-stx)])
body ...))))]))
(define-syntax (outer stx)
(syntax-case stx ()
[(_ id)
(datum->syntax (syntax-parameter-value #'current-def)
(syntax-e #'id))]))
(define x 42)
(def (f x) (* (outer x) x))
(f 2)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;