[racket] When does 3D syntax get marshalled?

From: J. Ian Johnson (ianj at ccs.neu.edu)
Date: Tue Jan 22 12:12:28 EST 2013

I have a fairly crazy macro that chains together syntax transformers that are stored in syntax-parameters to get a sort of "macro mix-in" if you will. In order to do this, I have code that looks like the following:
(define old-tr (syntax-parameter-value #'p))
(define new-tr (syntax-parser [(_ blah) (old-tr #'(modified-blah))]))
(syntax-parser [(_ macro-in) #'(syntax-parameterize ([p #,new-tr]) macro-out)])

Often this works. However, I am now putting this kind of code inside of a let-syntax that is the product of a macro that is given the identifier to bind in the let-syntax. The use of this macro uses the bound identifier, which (in my head) should just use this transformer, expand away and not have to be marshalled. There is no documentation for the term "3D syntax" so I wasn't sure where I could read why my mental model is flawed.

So, what could be happening here that would cause the marshalling?

-Ian

Posted on the users mailing list.