<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;"><div>Maybe something like this, to make sure it is only changed by a parameterize form?</div><div><br></div><div><font face="Courier New">(provide </font><span style="font-family: 'Courier New';">syntax-local-introduce</span></div><div><span style="font-family: 'Courier New';"> call-</span><span style="font-family: 'Courier New';">with-syntax-introducer</span><span style="font-family: 'Courier New';">)</span></div><div><font face="Courier New"><br></font></div><div><font face="Courier New">(define current-syntax-introducer (make-parameter #f))</font></div><div><font face="Courier New"><br></font></div><div><div><font face="Courier New">(define (syntax-local-introduce stx)</font></div><div><font face="Courier New"> ((current-syntax-introducer) stx))</font></div></div><div><font face="Courier New"><br></font></div><div><font face="Courier New">(define (call-with-syntax-introducer intro thunk)</font></div><div><font face="Courier New"> (parameterize ([current-syntax-introducer intro]) (thunk)))</font></div><div><br></div><div><div>On Aug 12, 2014, at 9:47 AM, Gustavo Massaccesi <<a href="mailto:gustavo@oma.org.ar">gustavo@oma.org.ar</a>> wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite">+1 . Last year I was experimenting with require-tranformers and<br>provide-transformers. They are very weird macros, because they have to<br>be executed in the "wrong order" (from inside to outside, like<br>functions). They use a newly created syntax-mark, and to break hygiene<br>you must use syntax-local-require-introduce or<br>syntax-local-provide-introduce (under the hood, the marker is stored<br>in a parameter, but the parameter is not exported, so you can't<br>change/parameterize it).<br><br>I think that all of them can be merged in a generalized<br>syntax-local-introduce with a public parameter. The parameter should<br>be used only in a parameterize form. Overwriting the parameter doesn't<br>look like a good idea. I think it will break the current macro and<br>create a syntax error, but it will not be useful to break the<br>security.<br><br><br>Gustavo<br><br><br>On Mon, Aug 11, 2014 at 4:22 PM, Alexander D. Knauth<br><<a href="mailto:alexander@knauth.org">alexander@knauth.org</a>> wrote:<br><blockquote type="cite"><br>On Aug 11, 2014, at 1:44 AM, Matthew Flatt <<a href="mailto:mflatt@cs.utah.edu">mflatt@cs.utah.edu</a>> wrote:<br><br><blockquote type="cite">Answers below, but first a big caution: While these details have been<br>the same for a while, I hope and expect the representation of syntax<br>objects to change in the coming months. I have been threatening to<br>rewrite the macro expander (yes, in Racket) for a while, but things are<br>lining up so that I can actually start trying soon.<br></blockquote><br><br>This is off topic, but if your planning on rewriting the macro expander in Racket, would it be possible to make it so that syntax-local-introduce uses a parameter?<br>That way for match expanders (etc.) it could set that parameter to a new syntax-introducer so that syntax-local-introduce could be used within match-expanders (etc.)?<br><br><br><br>____________________<br> Racket Users list:<br> <a href="http://lists.racket-lang.org/users">http://lists.racket-lang.org/users</a><br></blockquote></blockquote></div><br></body></html>