Hello,
I am noticing that if I in the body of splicing-let-syntax I put a
module+, or anything that lifts with
syntax-local-lift-module-end-decloration really, The stuff that gets
lifted out doesn't seem to match what I would expect it to. I suspect
this is in part do to using prop:rename-transformer, and mutable
structs, but I don't want to use a syntax-parameter because I would
like to parameterize over an identifier.
Here is the code I have:
#lang racket
(require racket/splicing)
(define-syntax (yellow stx) #'"yellow")
(define-syntax (blue stx) #'"blue")
(begin-for-syntax
(struct stx-box (stx)
#:mutable
#:transparent
#:property prop:rename-transformer
(lambda (inst)
(syntax-property (stx-box-stx inst) 'not-free-identifier=? #t))))
(define-syntax (set-stx! stx)
(syntax-case stx ()
[(_ box value)
(begin
(define-values (x y) (syntax-local-value/immediate #'box))
(set-stx-box-stx! x #'value)
#'(void))]))
(define-syntax x-top (stx-box #'yellow))
(define-syntax y-top 52)
(splicing-let-syntax ([x (syntax-local-value #'x-top)])
(module+ test
x))
(set-stx! x-top blue)
(splicing-let-syntax ([x (syntax-local-value #'x-top)])
(module+ test
x))
When I run it out I get:
"yellow"
"yellow"
What I would like to get is:
"yellow"
"blue"
Is there any better way to do this, and still have x be an identifier
that is bound to the correct string?
Thank you very much.
~Leif Andersen
--
You received this message because you are subscribed to the Google Groups
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.