emacs.d/clones/lisp/docs.racket-lang.org/reference/stxtrans.html

729 lines
456 KiB
HTML
Raw Normal View History

2022-08-24 19:36:32 +02:00
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"/><meta name="viewport" content="width=device-width, initial-scale=0.8"/><title>12.4&nbsp;Syntax Transformers</title><link rel="stylesheet" type="text/css" href="../scribble.css" title="default"/><link rel="stylesheet" type="text/css" href="extras.css" title="default"/><link rel="stylesheet" type="text/css" href="../racket.css" title="default"/><link rel="stylesheet" type="text/css" href="../manual-style.css" title="default"/><link rel="stylesheet" type="text/css" href="../manual-racket.css" title="default"/><link rel="stylesheet" type="text/css" href="../manual-racket.css" title="default"/><link rel="stylesheet" type="text/css" href="../doc-site.css" title="default"/><script type="text/javascript" src="../scribble-common.js"></script><script type="text/javascript" src="../manual-racket.js"></script><script type="text/javascript" src="../manual-racket.js"></script><script type="text/javascript" src="../doc-site.js"></script><script type="text/javascript" src="../local-redirect/local-redirect.js"></script><script type="text/javascript" src="../local-redirect/local-user-redirect.js"></script><!--[if IE 6]><style type="text/css">.SIEHidden { overflow: hidden; }</style><![endif]--></head><body id="doc-racket-lang-org"><div class="tocset"><div class="tocview"><div class="tocviewlist tocviewlisttopspace"><div class="tocviewtitle"><table cellspacing="0" cellpadding="0"><tr><td style="width: 1em;"><a href="javascript:void(0);" title="Expand/Collapse" class="tocviewtoggle" onclick="TocviewToggle(this,&quot;tocview_0&quot;);">&#9658;</a></td><td></td><td><a href="index.html" class="tocviewlink" data-pltdoc="x">The Racket Reference</a></td></tr></table></div><div class="tocviewsublisttop" style="display: none;" id="tocview_0"><table cellspacing="0" cellpadding="0"><tr><td align="right">1&nbsp;</td><td><a href="model.html" class="tocviewlink" data-pltdoc="x">Language Model</a></td></tr><tr><td align="right">2&nbsp;</td><td><a href="notation.html" class="tocviewlink" data-pltdoc="x">Notation for Documentation</a></td></tr><tr><td align="right">3&nbsp;</td><td><a href="syntax.html" class="tocviewlink" data-pltdoc="x">Syntactic Forms</a></td></tr><tr><td align="right">4&nbsp;</td><td><a href="data.html" class="tocviewlink" data-pltdoc="x">Datatypes</a></td></tr><tr><td align="right">5&nbsp;</td><td><a href="structures.html" class="tocviewlink" data-pltdoc="x">Structures</a></td></tr><tr><td align="right">6&nbsp;</td><td><a href="mzlib_class.html" class="tocviewlink" data-pltdoc="x">Classes and Objects</a></td></tr><tr><td align="right">7&nbsp;</td><td><a href="mzlib_unit.html" class="tocviewlink" data-pltdoc="x">Units</a></td></tr><tr><td align="right">8&nbsp;</td><td><a href="contracts.html" class="tocviewlink" data-pltdoc="x">Contracts</a></td></tr><tr><td align="right">9&nbsp;</td><td><a href="match.html" class="tocviewlink" data-pltdoc="x">Pattern Matching</a></td></tr><tr><td align="right">10&nbsp;</td><td><a href="control.html" class="tocviewlink" data-pltdoc="x">Control Flow</a></td></tr><tr><td align="right">11&nbsp;</td><td><a href="concurrency.html" class="tocviewlink" data-pltdoc="x">Concurrency and Parallelism</a></td></tr><tr><td align="right">12&nbsp;</td><td><a href="Macros.html" class="tocviewselflink" data-pltdoc="x">Macros</a></td></tr><tr><td align="right">13&nbsp;</td><td><a href="input-and-output.html" class="tocviewlink" data-pltdoc="x">Input and Output</a></td></tr><tr><td align="right">14&nbsp;</td><td><a href="security.html" class="tocviewlink" data-pltdoc="x">Reflection and Security</a></td></tr><tr><td align="right">15&nbsp;</td><td><a href="os.html" class="tocviewlink" data-pltdoc="x">Operating System</a></td></tr><tr><td align="right">16&nbsp;</td><td><a href="memory.html" class="tocviewlink" data-pltdoc="x">Memory Management</a></td></tr><tr><td align="right">17&nbsp;</td><td><a href="unsafe.html" class="tocviewlink" data-pltdoc="x">Unsafe Operations</a></td></tr><tr><td align="right">18&nbsp;</td><td><a href="running.html" clas
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._make-set%21-transformer%29%29" class="RktValLink" data-pltdoc="x">make-set!-transformer</a></span> or an instance of a structure type with
the <span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._prop~3aset%21-transformer%29%29" class="RktValLink" data-pltdoc="x">prop:set!-transformer</a></span> property, <span class="RktVal">#f</span> otherwise.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((quote._~23~25kernel)._make-set!-transformer))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._make-set%21-transformer%29%29" class="RktValDef RktValLink" data-pltdoc="x">make-set!-transformer</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">proc</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._set%21-transformer~3f%29%29" class="RktValLink" data-pltdoc="x">set!-transformer?</a></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">proc</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="stxops.html#%28def._%28%28quote._~23~25kernel%29._syntax~3f%29%29" class="RktValLink" data-pltdoc="x">syntax?</a></span><span class="hspace">&nbsp;</span><span class="RktPn">. </span><span class="RktSym"><a href="function-contracts.html#%28form._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._-~3e%29%29" class="RktStxLink" data-pltdoc="x"><span class="nobreak">-&gt;</span></a></span><span class="RktPn"> .</span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="stxops.html#%28def._%28%28quote._~23~25kernel%29._syntax~3f%29%29" class="RktValLink" data-pltdoc="x">syntax?</a></span><span class="RktPn">)</span></td></tr></table></blockquote></div><div class="SIntrapara">Creates an <a href="syntax-model.html#%28tech._assignment._transformer%29" class="techoutside" data-pltdoc="x"><span class="techinside">assignment transformer</span></a> that cooperates with
<span class="RktSym"><a href="set_.html#%28form._%28%28quote._~23~25kernel%29._set%21%29%29" class="RktStxLink" data-pltdoc="x">set!</a></span>. If the result of <span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._make-set%21-transformer%29%29" class="RktValLink" data-pltdoc="x">make-set!-transformer</a></span> is
bound to <span class="RktVar">id</span> as a <a href="syntax-model.html#%28tech._transformer%29" class="techoutside" data-pltdoc="x"><span class="techinside">transformer</span></a> binding, then
<span class="RktVar">proc</span> is applied as a transformer when <span class="RktVar">id</span> is
used in an expression position, or when it is used as the target of a
<span class="RktSym"><a href="set_.html#%28form._%28%28quote._~23~25kernel%29._set%21%29%29" class="RktStxLink" data-pltdoc="x">set!</a></span> assignment as <span class="RktPn">(</span><span class="RktSym"><a href="set_.html#%28form._%28%28quote._~23~25kernel%29._set%21%29%29" class="RktStxLink" data-pltdoc="x">set!</a></span><span class="stt"> </span><span class="RktVar">id</span><span class="stt"> </span><span class="RktVar">expr</span><span class="RktPn">)</span>. When the
identifier appears as a <span class="RktSym"><a href="set_.html#%28form._%28%28quote._~23~25kernel%29._set%21%29%29" class="RktStxLink" data-pltdoc="x">set!</a></span> target, the entire <span class="RktSym"><a href="set_.html#%28form._%28%28quote._~23~25kernel%29._set%21%29%29" class="RktStxLink" data-pltdoc="x">set!</a></span>
expression is provided to the transformer.</div></p><p><div class="SIntrapara">Example:</div><div class="SIntrapara"><blockquote class="SCodeFlow"><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="let.html#%28form._%28%28lib._racket%2Fprivate%2Fletstx-scheme..rkt%29._let%29%29" class="RktStxLink" data-pltdoc="x">let</a></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktPn">[</span><span class="RktSym">x</span><span class="hspace">&nbsp;</span><span class="RktVal">1</span><span class="RktPn">]</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="RktPn">[</span><span class="RktSym">y</span><span class="hspace">&nbsp;</span><span class="RktVal">2</span><span class="RktPn">]</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="hspace">&nbsp;&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="let.html#%28form._%28%28lib._racket%2Fprivate%2Fletstx-scheme..rkt%29._let-syntax%29%29" class="RktStxLink" data-pltdoc="x">let-syntax</a></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktPn">[</span><span class="RktSym">x</span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._make-set%21-transformer%29%29" class="RktValLink" data-pltdoc="x">make-set!-transformer</a></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="lambda.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._lambda%29%29" class="RktStxLink" data-pltdoc="x">lambda</a></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym">stx</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="stx-patterns.html#%28form._%28%28lib._racket%2Fprivate%2Fstxcase-scheme..rkt%29._syntax-case%29%29" class="RktStxLink" data-pltdoc="x">syntax-case</a></span><span class="hspace">&nbsp;</span><span class="RktSym">stx</span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="set_.html#%28form._%28%28quote._~23~25kernel%29._set%21%29%29" class="RktStxLink" data-pltdoc="x">set!</a></span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="RktCmt">;</span><span class="RktCmt">&nbsp;</span><span class="RktCmt">Redirect mutation of x to y</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="RktPn">[</span><span class="RktPn">(</span><span class="RktSym"><a href="set_.html#%28form._%28%28quote._~23~25kernel%29._set%21%29%29" class="RktStxLink" data-pltdoc="x">set!</a></span><span class="hspace">&nbsp;</span><span class="RktSym">id</span><span class="hspace">&nbsp;</span><span class="RktSym">v</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span><span class="RktRdr">#'</span><span class="RktPn">(</span><span class="RktSym"><a href="set_.html#%28form._%28%28quote._~23~25kernel%29._set%21%29%29" class="RktStxLink" data-pltdoc="x">set!</a></span><span class="hspace">
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._make-set%21-transformer%29%29" class="RktValLink" data-pltdoc="x">make-set!-transformer</a></span> to create <span class="RktVar">transformer</span> or that
is identified by the <span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._prop~3aset%21-transformer%29%29" class="RktValLink" data-pltdoc="x">prop:set!-transformer</a></span> property of
<span class="RktVar">transformer</span>.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>value</p></div></div><p class="RForeground"><a name="(def._((quote._~23~25kernel)._prop~3aset!-transformer))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._prop~3aset%21-transformer%29%29" class="RktValDef RktValLink" data-pltdoc="x">prop:set!-transformer</a></span></span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="structprops.html#%28def._%28%28quote._~23~25kernel%29._struct-type-property~3f%29%29" class="RktValLink" data-pltdoc="x">struct-type-property?</a></span></p></blockquote></td></tr></table></blockquote></div><div class="SIntrapara">A <a href="structprops.html#%28tech._structure._type._property%29" class="techoutside" data-pltdoc="x"><span class="techinside">structure type property</span></a> to identify structure types that act
as <a href="syntax-model.html#%28tech._assignment._transformer%29" class="techoutside" data-pltdoc="x"><span class="techinside">assignment transformers</span></a> like the ones created by
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._make-set%21-transformer%29%29" class="RktValLink" data-pltdoc="x">make-set!-transformer</a></span>.</div></p><p>The property value must be an exact integer or procedure of one or two
arguments. In the former case, the integer designates a field within
the structure that should contain a procedure; the integer must be
between <span class="RktVal">0</span> (inclusive) and the number of non-automatic fields
in the structure type (exclusive, not counting supertype fields), and
the designated field must also be specified as immutable.</p><p>If the property value is a procedure of one argument, then the
procedure serves as a <a href="syntax-model.html#%28tech._syntax._transformer%29" class="techoutside" data-pltdoc="x"><span class="techinside">syntax transformer</span></a> and for <span class="RktSym"><a href="set_.html#%28form._%28%28quote._~23~25kernel%29._set%21%29%29" class="RktStxLink" data-pltdoc="x">set!</a></span>
transformations. If the property value is a procedure of two
arguments, then the first argument is the structure whose type has
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._prop~3aset%21-transformer%29%29" class="RktValLink" data-pltdoc="x">prop:set!-transformer</a></span> property, and the second argument is a
syntax object as for a <a href="syntax-model.html#%28tech._syntax._transformer%29" class="techoutside" data-pltdoc="x"><span class="techinside">syntax transformer</span></a> and for <span class="RktSym"><a href="set_.html#%28form._%28%28quote._~23~25kernel%29._set%21%29%29" class="RktStxLink" data-pltdoc="x">set!</a></span>
transformations; <span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._set%21-transformer-procedure%29%29" class="RktValLink" data-pltdoc="x">set!-transformer-procedure</a></span> applied to the
structure produces a new function that accepts just the syntax object
and calls the procedure associated through the property. Finally, if the
property value is an integer, the target identifier is extracted from
the structure instance; if the field value is not a procedure of one
argument, then a procedure that always calls
<span class="RktSym"><a href="exns.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._raise-syntax-error%29%29" class="RktValLink" data-pltdoc="x">raise-syntax-error</a></span> is used, instead.</p><p>If a value has both the <span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._prop~3aset%21-transformer%29%29" class="RktValLink" data-pltdoc="x">prop:set!-transformer</a></span> and
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._prop~3arename-transformer%29%29" class="RktValLink" data-pltdoc="x">prop:rename-transformer</a></span> properties, then the latter takes
precedence. If a structure type has the <span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._prop~3aset%21-transformer%29%29" class="RktValLink" data-pltdoc="x">prop:set!-transformer</a></span>
and <span class="RktSym"><a href="procedures.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._prop~3aprocedure%29%29" class="RktValLink" data-pltdoc="x">prop:procedure</a></span> properties, then the former takes
precedence for the purposes of macro expansion.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((quote._~23~25kernel)._rename-transformer~3f))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._rename-transformer~3f%29%29" class="RktValDef RktValLink" data-pltdoc="x">rename-transformer?</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">v</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="booleans.html#%28def._%28%28quote._~23~25kernel%29._boolean~3f%29%29" class="RktValLink" data-pltdoc="x">boolean?</a></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">v</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%2Fc%29%29" class="RktValLink" data-pltdoc="x">any/c</a></span></td></tr></table></blockquote></div><div class="SIntrapara">Returns <span class="RktVal">#t</span> if <span class="RktVar">v</span> is a value created by
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._make-rename-transformer%29%29" class="RktValLink" data-pltdoc="x">make-rename-transformer</a></span> or an instance of a structure type
with the <span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._prop~3arename-transformer%29%29" class="RktValLink" data-pltdoc="x">prop:rename-transformer</a></span> property, <span class="RktVal">#f</span>
otherwise.</div></p><p><div class="SIntrapara">Examples:</div><div class="SIntrapara"><blockquote class="SCodeFlow"><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._rename-transformer~3f%29%29" class="RktValLink" data-pltdoc="x">rename-transformer?</a></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._make-rename-transformer%29%29" class="RktValLink" data-pltdoc="x">make-rename-transformer</a></span><span class="hspace">&nbsp;</span><span class="RktRdr">#'</span><span class="RktSym"><a href="values.html#%28def._%28%28quote._~23~25kernel%29._values%29%29" class="RktValLink" data-pltdoc="x">values</a></span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">#t</span></p></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._rename-transformer~3f%29%29" class="RktValLink" data-pltdoc="x">rename-transformer?</a></span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">not-a-rename-transformer</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">#f</span></p></td></tr></table></blockquote></div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((quote._~23~25kernel)._make-rename-transformer))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._make-rename-transformer%29%29" class="RktValDef RktValLink" data-pltdoc="x">make-rename-transformer</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">id-stx</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._rename-transformer~3f%29%29" class="RktValLink" data-pltdoc="x">rename-transformer?</a></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">id-stx</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="stxops.html#%28def._%28%28quote._~23~25kernel%29._syntax~3f%29%29" class="RktValLink" data-pltdoc="x">syntax?</a></span></td></tr></table></blockquote></div><div class="SIntrapara">Creates a <a href="syntax-model.html#%28tech._rename._transformer%29" class="techoutside" data-pltdoc="x"><span class="techinside">rename transformer</span></a> that, when used as a
<a href="syntax-model.html#%28tech._transformer%29" class="techoutside" data-pltdoc="x"><span class="techinside">transformer</span></a> binding, acts as a transformer that inserts the
identifier <span class="RktVar">id-stx</span> in place of whatever identifier binds the
transformer, including in non-application positions, in <span class="RktSym"><a href="set_.html#%28form._%28%28quote._~23~25kernel%29._set%21%29%29" class="RktStxLink" data-pltdoc="x">set!</a></span>
expressions.</div></p><p>Such a transformer could be written manually, but the one created by
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._make-rename-transformer%29%29" class="RktValLink" data-pltdoc="x">make-rename-transformer</a></span> triggers special cooperation with the
parser and other syntactic forms when <span class="RktVar">id</span> is bound to the
rename transformer:</p><ul><li><p>The parser installs a <span class="RktSym"><a href="stxcmp.html#%28def._%28%28quote._~23~25kernel%29._free-identifier~3d~3f%29%29" class="RktValLink" data-pltdoc="x">free-identifier=?</a></span> and
<span class="RktSym"><a href="stxcmp.html#%28def._%28%28quote._~23~25kernel%29._identifier-binding%29%29" class="RktValLink" data-pltdoc="x">identifier-binding</a></span> equivalence between <span class="RktVar">id</span>
and <span class="RktVar">id-stx</span>, as long as <span class="RktVar">id-stx</span> does not have
a true value for the <a name="(idx._(gentag._232._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktVal">'</span><span class="RktVal">not-free-identifier=?</span>
<a href="stxprops.html#%28tech._syntax._property%29" class="techoutside" data-pltdoc="x"><span class="techinside">syntax property</span></a>.</p></li><li><p>A <span class="RktSym"><a href="require.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._provide%29%29" class="RktStxLink" data-pltdoc="x">provide</a></span> of <span class="RktVar">id</span> provides the binding
indicated by <span class="RktVar">id-stx</span> instead of <span class="RktVar">id</span>, as long
as <span class="RktVar">id-stx</span> does not have a true value for the
<span class="RktVal">'</span><span class="RktVal">not-free-identifier=?</span> <a href="stxprops.html#%28tech._syntax._property%29" class="techoutside" data-pltdoc="x"><span class="techinside">syntax property</span></a>
and as long as <span class="RktVar">id-stx</span> has a binding.</p></li><li><p>If <span class="RktSym"><a href="require.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._provide%29%29" class="RktStxLink" data-pltdoc="x">provide</a></span> exports <span class="RktVar">id</span>, it uses a
symbol-valued <a name="(idx._(gentag._233._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktVal">'</span><span class="RktVal">nominal-id</span> property of
<span class="RktVar">id-stx</span> to specify the &ldquo;nominal source identifier&rdquo; of
the binding as reported by <span class="RktSym"><a href="stxcmp.html#%28def._%28%28quote._~23~25kernel%29._identifier-binding%29%29" class="RktValLink" data-pltdoc="x">identifier-binding</a></span>.</p></li><li><p>If <span class="RktVar">id-stx</span> has a true value for the
<a name="(idx._(gentag._234._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktVal">'</span><span class="RktVal">not-provide-all-defined</span> <a href="stxprops.html#%28tech._syntax._property%29" class="techoutside" data-pltdoc="x"><span class="techinside">syntax
property</span></a>, then <span class="RktVar">id</span> (or its target) is not exported by
<span class="RktSym"><a href="require.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._all-defined-out%29%29" class="RktStxLink" data-pltdoc="x">all-defined-out</a></span>.</p></li><li><p>The <span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-local-value%29%29" class="RktValLink" data-pltdoc="x">syntax-local-value</a></span> function recognizes
rename-transformer bindings and consult their targets.</p></li></ul><p><div class="SIntrapara">Examples:</div><div class="SIntrapara"><blockquote class="SCodeFlow"><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="define.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._define-syntax%29%29" class="RktStxLink" data-pltdoc="x">define-syntax</a></span><span class="hspace">&nbsp;</span><span class="RktSym">my-or</span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._make-rename-transformer%29%29" class="RktValLink" data-pltdoc="x">make-rename-transformer</a></span><span class="hspace">&nbsp;</span><span class="RktRdr">#'</span><span class="RktSym"><a href="if.html#%28form._%28%28lib._racket%2Fprivate%2Fletstx-scheme..rkt%29._or%29%29" class="RktStxLink" data-pltdoc="x">or</a></span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym">my-or</span><span class="hspace">&nbsp;</span><span class="RktVal">#f</span><span class="hspace">&nbsp;</span><span class="RktVal">#t</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">#t</span></p></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="stxcmp.html#%28def._%28%28quote._~23~25kernel%29._free-identifier~3d~3f%29%29" class="RktValLink" data-pltdoc="x">free-identifier=?</a></span><span class="hspace">&nbsp;</span><span class="RktRdr">#'</span><span class="RktSym">my-or</span><span class="hspace">&nbsp;</span><span class="RktRdr">#'</span><span class="RktSym"><a href="if.html#%28form._%28%28lib._racket%2Fprivate%2Fletstx-scheme..rkt%29._or%29%29" class="RktStxLink" data-pltdoc="x">or</a></span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">#t</span></p></td></tr></table></blockquote></div></p><p class="SHistory">Changed in version 6.3 of package <span class="stt">base</span>: Removed an optional second argument.<br/>Changed in version 7.4.0.10: Adjust rename-transformer expansion
to add a macro-introduction scope, the
same as regular macro expansion.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((quote._~23~25kernel)._rename-transformer-target))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._rename-transformer-target%29%29" class="RktValDef RktValLink" data-pltdoc="x">rename-transformer-target</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">transformer</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="stxops.html#%28def._%28%28lib._racket%2Fprivate%2Fstx..rkt%29._identifier~3f%29%29" class="RktValLink" data-pltdoc="x">identifier?</a></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">transformer</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._rename-transformer~3f%29%29" class="RktValLink" data-pltdoc="x">rename-transformer?</a></span></td></tr></table></blockquote></div><div class="SIntrapara">Returns the identifier passed to <span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._make-rename-transformer%29%29" class="RktValLink" data-pltdoc="x">make-rename-transformer</a></span> to
create <span class="RktVar">transformer</span> or as indicated by a
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._prop~3arename-transformer%29%29" class="RktValLink" data-pltdoc="x">prop:rename-transformer</a></span> property on <span class="RktVar">transformer</span>.</div></p><p><div class="SIntrapara">Example:</div><div class="SIntrapara"><blockquote class="SCodeFlow"><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._rename-transformer-target%29%29" class="RktValLink" data-pltdoc="x">rename-transformer-target</a></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._make-rename-transformer%29%29" class="RktValLink" data-pltdoc="x">make-rename-transformer</a></span><span class="hspace">&nbsp;</span><span class="RktRdr">#'</span><span class="RktSym"><a href="if.html#%28form._%28%28lib._racket%2Fprivate%2Fletstx-scheme..rkt%29._or%29%29" class="RktStxLink" data-pltdoc="x">or</a></span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">#&lt;syntax:eval:8:0 or&gt;</span></p></td></tr></table></blockquote></div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>value</p></div></div><p class="RForeground"><a name="(def._((quote._~23~25kernel)._prop~3arename-transformer))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._prop~3arename-transformer%29%29" class="RktValDef RktValLink" data-pltdoc="x">prop:rename-transformer</a></span></span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="structprops.html#%28def._%28%28quote._~23~25kernel%29._struct-type-property~3f%29%29" class="RktValLink" data-pltdoc="x">struct-type-property?</a></span></p></blockquote></td></tr></table></blockquote></div><div class="SIntrapara">A <a href="structprops.html#%28tech._structure._type._property%29" class="techoutside" data-pltdoc="x"><span class="techinside">structure type property</span></a> to identify structure types that act
as <a href="syntax-model.html#%28tech._rename._transformer%29" class="techoutside" data-pltdoc="x"><span class="techinside">rename transformers</span></a> like the ones created by
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._make-rename-transformer%29%29" class="RktValLink" data-pltdoc="x">make-rename-transformer</a></span>.</div></p><p>The property value must be an exact integer, an identifier
<a href="syntax-model.html#%28tech._syntax._object%29" class="techoutside" data-pltdoc="x"><span class="techinside">syntax object</span></a>, or a procedure that takes one argument.
In the former case, the integer designates a
field within the structure that should contain an identifier; the
integer must be between <span class="RktVal">0</span> (inclusive) and the number of
non-automatic fields in the structure type (exclusive, not counting
supertype fields), and the designated field must also be specified as
immutable.</p><p>If the property value is an identifier, the identifier serves as the
target for renaming, just like the first argument to
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._make-rename-transformer%29%29" class="RktValLink" data-pltdoc="x">make-rename-transformer</a></span>. If the property value is an integer,
the target identifier is extracted from the structure instance; if the
field value is not an identifier, then an identifier <span class="RktSym">?</span>
with an empty context is used, instead.</p><p>If the property value is a procedure that takes one argument, then the
procedure is called to obtain the identifier that the rename
transformer will use as a target identifier. The returned identifier
should probably have the <span class="RktVal">'</span><span class="RktVal">not-free-identifier=?</span> syntax
property. If the procedure returns any value that is not an
identifier, the <span class="RktSym"><a href="exns.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._exn~3afail~3acontract%29%29" class="RktValLink" data-pltdoc="x">exn:fail:contract</a></span> exception is raised.</p><p><div class="SIntrapara">Examples:</div><div class="SIntrapara"><blockquote class="SCodeFlow"><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><span class="RktCmt">;</span><span class="RktCmt">&nbsp;</span><span class="RktCmt">Example of a procedure argument for prop:rename-transformer</span></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="define.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._define-syntax%29%29" class="RktStxLink" data-pltdoc="x">define-syntax</a></span><span class="hspace">&nbsp;</span><span class="RktSym">slv-1</span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">first-transformer-binding</span><span class="RktPn">)</span></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="define.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._define-syntax%29%29" class="RktStxLink" data-pltdoc="x">define-syntax</a></span><span class="hspace">&nbsp;</span><span class="RktSym">slv-2</span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">second-transformer-binding</span><span class="RktPn">)</span></td></tr><tr><td><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="begin.html#%28form._%28%28quote._~23~25kernel%29._begin-for-syntax%29%29" class="RktStxLink" data-pltdoc="x">begin-for-syntax</a></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="hspace">&nbsp;&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="define-struct.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._struct%29%29" class="RktStxLink" data-pltdoc="x">struct</a></span><span class="hspace">&nbsp;</span><span class="RktSym">slv-cooperator</span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym">redirect-to-first?</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="RktPn">#:property</span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._prop~3arename-transformer%29%29" class="RktValLink" data-pltdoc="x">prop:rename-transformer</a></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="lambda.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._~ce~bb%29%29" class="RktStxLink" data-pltdoc="x">&#955;</a></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym">inst</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="if.html#%28form._%28%28quote._~23~25kernel%29._if%29%29" class="RktStxLink" data-pltdoc="x">if</a></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym">slv-cooperator-redirect-to-first?</span><span class="hspace">&nbsp;</span><span class="RktSym">inst</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="RktRdr">#'</span><span class="RktSym">slv-1</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="RktRdr">#'</span><span class="RktSym">slv-2</span><span class="RktPn">)</span><span class="RktPn">)</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr
currently being expanded. The <span class="RktVar">context-v</span> argument is used as
the result of <span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-local-context%29%29" class="RktValLink" data-pltdoc="x">syntax-local-context</a></span> for immediate expansions;
a list indicates an <a href="syntax-model.html#%28tech._internal._definition._context%29" class="techoutside" data-pltdoc="x"><span class="techinside">internal-definition context</span></a>, and more
information on the form of the list is below. If <span class="RktVar">stx</span> is not
already a <a href="syntax-model.html#%28tech._syntax._object%29" class="techoutside" data-pltdoc="x"><span class="techinside">syntax object</span></a>, it is coerced with
<span class="RktPn">(</span><span class="RktSym"><a href="stxops.html#%28def._%28%28quote._~23~25kernel%29._datum-~3esyntax%29%29" class="RktValLink" data-pltdoc="x">datum-&gt;syntax</a></span><span class="stt"> </span><span class="RktVal">#f</span><span class="stt"> </span><span class="RktVar">stx</span><span class="RktPn">)</span> before expansion.</div></p><p>The <span class="RktVar">stop-ids</span> argument controls how far <span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._local-expand%29%29" class="RktValLink" data-pltdoc="x">local-expand</a></span> expands <span class="RktVar">stx</span>:</p><ul><li><p>If <span class="RktVar">stop-ids</span> is an empty list, then <span class="RktVar">stx</span> is recursively expanded (i.e.
expansion proceeds to sub-expressions). The result is guaranteed to be a fully-expanded form,
which can include the bindings listed in <a href="syntax-model.html#%28part._fully-expanded%29" data-pltdoc="x">Fully Expanded Programs</a>, plus <span class="RktSym"><a href="__expression.html#%28form._%28%28quote._~23~25kernel%29._~23~25expression%29%29" class="RktStxLink" data-pltdoc="x">#%expression</a></span>
in any expression position.</p></li><li><p>If <span class="RktVar">stop-ids</span> is a list containing just <span class="RktSym"><a href="module.html#%28form._%28%28quote._~23~25kernel%29._module%2A%29%29" class="RktStxLink" data-pltdoc="x">module*</a></span>, then expansion proceeds as if
<span class="RktVar">stop-ids</span> were an empty list, except that expansion does not recur to <a href="eval-model.html#%28tech._submodule%29" class="techoutside" data-pltdoc="x"><span class="techinside">submodules</span></a>
defined with <span class="RktSym"><a href="module.html#%28form._%28%28quote._~23~25kernel%29._module%2A%29%29" class="RktStxLink" data-pltdoc="x">module*</a></span> (which are left unexpanded in the result).</p></li><li><p>If <span class="RktVar">stop-ids</span> is any other list, then <span class="RktSym"><a href="begin.html#%28form._%28%28quote._~23~25kernel%29._begin%29%29" class="RktStxLink" data-pltdoc="x">begin</a></span>, <span class="RktSym"><a href="quote.html#%28form._%28%28quote._~23~25kernel%29._quote%29%29" class="RktStxLink" data-pltdoc="x">quote</a></span>, <span class="RktSym"><a href="set_.html#%28form._%28%28quote._~23~25kernel%29._set%21%29%29" class="RktStxLink" data-pltdoc="x">set!</a></span>,
<span class="RktSym"><a href="lambda.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._~23~25plain-lambda%29%29" class="RktStxLink" data-pltdoc="x">#%plain-lambda</a></span>, <span class="RktSym"><a href="lambda.html#%28form._%28%28quote._~23~25kernel%29._case-lambda%29%29" class="RktStxLink" data-pltdoc="x">case-lambda</a></span>, <span class="RktSym"><a href="let.html#%28form._%28%28quote._~23~25kernel%29._let-values%29%29" class="RktStxLink" data-pltdoc="x">let-values</a></span>, <span class="RktSym"><a href="let.html#%28form._%28%28quote._~23~25kernel%29._letrec-values%29%29" class="RktStxLink" data-pltdoc="x">letrec-values</a></span>,
<span class="RktSym"><a href="if.html#%28form._%28%28quote._~23~25kernel%29._if%29%29" class="RktStxLink" data-pltdoc="x">if</a></span>, <span class="RktSym"><a href="begin.html#%28form._%28%28quote._~23~25kernel%29._begin0%29%29" class="RktStxLink" data-pltdoc="x">begin0</a></span>, <span class="RktSym"><a href="wcm.html#%28form._%28%28quote._~23~25kernel%29._with-continuation-mark%29%29" class="RktStxLink" data-pltdoc="x">with-continuation-mark</a></span>, <span class="RktSym"><a href="let.html#%28form._%28%28quote._~23~25kernel%29._letrec-syntaxes%2Bvalues%29%29" class="RktStxLink" data-pltdoc="x">letrec-syntaxes+values</a></span>,
<span class="RktSym"><a href="application.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._~23~25plain-app%29%29" class="RktStxLink" data-pltdoc="x">#%plain-app</a></span>, <span class="RktSym"><a href="__expression.html#%28form._%28%28quote._~23~25kernel%29._~23~25expression%29%29" class="RktStxLink" data-pltdoc="x">#%expression</a></span>, <span class="RktSym"><a href="__top.html#%28form._%28%28quote._~23~25kernel%29._~23~25top%29%29" class="RktStxLink" data-pltdoc="x">#%top</a></span>, and <span class="RktSym"><a href="Locations____variable-reference.html#%28form._%28%28quote._~23~25kernel%29._~23~25variable-reference%29%29" class="RktStxLink" data-pltdoc="x">#%variable-reference</a></span>
are implicitly added to <span class="RktVar">stop-ids</span>. Expansion proceeds recursively, stopping when the
expander encounters any of the forms in <span class="RktVar">stop-ids</span>, and the result is the
partially-expanded form.</p><p>When the expander would normally implicitly introduce a <span class="RktSym">#%app</span>, <span class="RktSym">#%datum</span>,
or <span class="RktSym">#%top</span> identifier as described in <a href="syntax-model.html#%28part._expand-steps%29" data-pltdoc="x">Expansion Steps</a>, it checks to see if an
identifier with the same <a href="syntax-model.html#%28tech._binding%29" class="techoutside" data-pltdoc="x"><span class="techinside">binding</span></a> as the one to be introduced appears in
<span class="RktVar">stop-ids</span>. If so, the identifier is <span class="emph">not</span> introduced; the result of expansion is
the bare application, literal data expression, or unbound identifier rather than one wrapped in
the respective explicit form.</p><p>When <span class="RktSym"><a href="module.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._~23~25plain-module-begin%29%29" class="RktStxLink" data-pltdoc="x">#%plain-module-begin</a></span> is not in <span class="RktVar">stop-ids</span>, the
<span class="RktSym"><a href="module.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._~23~25plain-module-begin%29%29" class="RktStxLink" data-pltdoc="x">#%plain-module-begin</a></span> transformer detects and expands sub-forms (such as
<span class="RktSym"><a href="define.html#%28form._%28%28quote._~23~25kernel%29._define-values%29%29" class="RktStxLink" data-pltdoc="x">define-values</a></span>) regardless of the identifiers presence in <span class="RktVar">stop-ids</span>.</p><p>Expansion does not replace the scopes in a local-variable
reference to match the binding identifier.</p></li><li><p>If <span class="RktVar">stop-ids</span> is <span class="RktVal">#f</span> instead of a list, then <span class="RktVar">stx</span> is expanded only as
long as the outermost form of <span class="RktVar">stx</span> is a macro (i.e. expansion does <span class="emph">not</span> proceed
to sub-expressions, and it does not replace the scopes in a local-variable reference to match the
binding identifier). The <span class="RktSym">#%app</span>, <span class="RktSym">#%datum</span>, and <span class="RktSym">#%top</span> identifiers are
never introduced.</p></li></ul><p>Independent of <span class="RktVar">stop-ids</span>, when <span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._local-expand%29%29" class="RktValLink" data-pltdoc="x">local-expand</a></span> encounters an identifier that has a local
binding but no binding in the current expansion context, the variable is left as-is (as opposed to
triggering an &ldquo;out of context&rdquo; syntax error).</p><p>When <span class="RktVar">context-v</span> is <span class="RktVal">'</span><span class="RktVal">module-begin</span>, and the result of
expansion is a <span class="RktSym"><a href="module.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._~23~25plain-module-begin%29%29" class="RktStxLink" data-pltdoc="x">#%plain-module-begin</a></span> form, then a
<span class="RktVal">'</span><span class="RktVal">submodule</span> <a href="stxprops.html#%28tech._syntax._property%29" class="techoutside" data-pltdoc="x"><span class="techinside">syntax property</span></a> is added to each enclosed
<span class="RktSym"><a href="module.html#%28form._%28%28quote._~23~25kernel%29._module%29%29" class="RktStxLink" data-pltdoc="x">module</a></span> form (but not <span class="RktSym"><a href="module.html#%28form._%28%28quote._~23~25kernel%29._module%2A%29%29" class="RktStxLink" data-pltdoc="x">module*</a></span> forms) in the same way as by
<span class="RktSym"><a href="module.html#%28form._%28%28quote._~23~25kernel%29._module%29%29" class="RktStxLink" data-pltdoc="x">module</a></span> expansion.</p><p>If the <span class="RktVar">intdef-ctx</span> argument is an internal-definition context, its <a href="syntax-model.html#%28tech._binding%29" class="techoutside" data-pltdoc="x"><span class="techinside">bindings</span></a> and
<a href="syntax-model.html#%28tech._binding%29" class="techoutside" data-pltdoc="x"><span class="techinside">bindings</span></a> from all <a href="stxtrans.html#%28tech._parent._internal._definition._context%29" class="techoutside" data-pltdoc="x"><span class="techinside">parent internal-definition contexts</span></a> are added to the
<a href="syntax-model.html#%28tech._local._binding._context%29" class="techoutside" data-pltdoc="x"><span class="techinside">local binding context</span></a> during the dynamic extent of the call to <span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._local-expand%29%29" class="RktValLink" data-pltdoc="x">local-expand</a></span>.
Additionally, unless <span class="RktVal">#f</span> was provided for the <span class="RktVar">add-scope?</span> argument to
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-local-make-definition-context%29%29" class="RktValLink" data-pltdoc="x">syntax-local-make-definition-context</a></span> when the internal-definition context was created,
its <a href="syntax-model.html#%28tech._inside._edge._scope%29" class="techoutside" data-pltdoc="x"><span class="techinside">inside-edge scope</span></a> (but <span class="emph">not</span> the scopes of any <a href="stxtrans.html#%28tech._parent._internal._definition._context%29" class="techoutside" data-pltdoc="x"><span class="techinside">parent internal-definition contexts</span></a>) is
added to the <a href="syntax-model.html#%28tech._lexical._information%29" class="techoutside" data-pltdoc="x"><span class="techinside">lexical information</span></a> for both <span class="RktVar">stx</span> prior to its expansion and the expansion
result (because the expansion might introduce bindings or references to internal-definition bindings).</p><p>For backwards compatibility, when <span class="RktVar">intdef-ctx</span> is a list all <a href="syntax-model.html#%28tech._binding%29" class="techoutside" data-pltdoc="x"><span class="techinside">bindings</span></a> from all of the provided internal-definition
contexts and their parents are added to the <a href="syntax-model.html#%28tech._local._binding._context%29" class="techoutside" data-pltdoc="x"><span class="techinside">local binding context</span></a>, and the <a href="syntax-model.html#%28tech._inside._edge._scope%29" class="techoutside" data-pltdoc="x"><span class="techinside">inside-edge scope</span></a> from
each context for which <span class="RktVar">add-scope?</span> was not <span class="RktVal">#f</span> is added in the same way.</p><p>Expansion records <a href="syntax-model.html#%28tech._use._site._scope%29" class="techoutside" data-pltdoc="x"><span class="techinside">use-site scopes</span></a> for removal from definition bindings. When the
<span class="RktVar">intdef-ctx</span> argument is an internal-definition context, use-site scopes are recorded
with that context. When <span class="RktVar">intdef-ctx</span> is <span class="RktVal">#f</span> or (for backwards compatibility) a list,
use-site scopes are recorded with the current expand context.</p><p>For a particular <a href="syntax-model.html#%28tech._internal._definition._context%29" class="techoutside" data-pltdoc="x"><span class="techinside">internal-definition context</span></a>, generate a unique
value and put it into a list for <span class="RktVar">context-v</span>. To allow
<a href="stxtrans.html#%28tech._liberal._expansion%29" class="techoutside" data-pltdoc="x"><span class="techinside">liberal expansion</span></a> of <span class="RktSym"><a href="define.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._define%29%29" class="RktStxLink" data-pltdoc="x">define</a></span> forms, the generated value
should be an instance of a structure with a true value for
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._prop~3aliberal-define-context%29%29" class="RktValLink" data-pltdoc="x">prop:liberal-define-context</a></span>. If the internal-definition
context is meant to be self-contained, the list for <span class="RktVar">context-v</span>
should contain only the generated value; if the internal-definition
context is meant to splice into an immediately enclosing context, then
when <span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-local-context%29%29" class="RktValLink" data-pltdoc="x">syntax-local-context</a></span> produces a list, <span class="RktSym"><a href="pairs.html#%28def._%28%28quote._~23~25kernel%29._cons%29%29" class="RktValLink" data-pltdoc="x">cons</a></span> the
generated value onto that list.</p><p>When expressions are expanded via <span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._local-expand%29%29" class="RktValLink" data-pltdoc="x">local-expand</a></span> with an
internal-definition context <span class="RktVar">intdef-ctx</span>, and when the expanded
expressions are incorporated into an overall form <span class="RktVar">new-stx</span>,
then typically <span class="RktSym"><a href="https://download.racket-lang.org/releases/8.6/doc/local-redirect/index.html?doc=syntax&amp;rel=intdef.html%23%2528def._%2528%2528lib._syntax%252Fintdef..rkt%2529._internal-definition-context-track%2529%2529&amp;version=8.6" class="RktValLink Sq" data-pltdoc="x">internal-definition-context-track</a></span> should be
applied to <span class="RktVar">intdef-ctx</span> and <span class="RktVar">new-stx</span> to provide
expansion history to external tools.</p><p>This procedure must be called during the
dynamic extent of a <a href="syntax-model.html#%28tech._syntax._transformer%29" class="techoutside" data-pltdoc="x"><span class="techinside">syntax transformer</span></a> application by the
expander or while a module is <a href="syntax-model.html#%28tech._visit%29" class="techoutside" data-pltdoc="x"><span class="techinside">visit</span></a>ed (see
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-transforming~3f%29%29" class="RktValLink" data-pltdoc="x">syntax-transforming?</a></span>), otherwise the
<span class="RktSym"><a href="exns.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._exn~3afail~3acontract%29%29" class="RktValLink" data-pltdoc="x">exn:fail:contract</a></span> exception is raised.</p><p><div class="SIntrapara">Examples:</div><div class="SIntrapara"><blockquote class="SCodeFlow"><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="stx-patterns.html#%28form._%28%28lib._racket%2Fprivate%2Fmisc..rkt%29._define-syntax-rule%29%29" class="RktStxLink" data-pltdoc="x">define-syntax-rule</a></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym">do-print</span><span class="hspace">&nbsp;</span><span class="RktSym">x</span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="stx-patterns.html#%28form._%28%28lib._racket%2Fprivate%2Fstxcase-scheme..rkt%29._......%29%29" class="RktStxLink" data-pltdoc="x">...</a></span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="hspace">&nbsp;&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="Writing.html#%28def._%28%28quote._~23~25kernel%29._printf%29%29" class="RktValLink" data-pltdoc="x">printf</a></span><span class="hspace">&nbsp;</span><span class="RktSym">x</span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="stx-patterns.html#%28form._%28%28lib._racket%2Fprivate%2Fstxcase-scheme..rkt%29._......%29%29" class="RktStxLink" data-pltdoc="x">...</a></span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr></table></td></tr><tr><td><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="stx-patterns.html#%28form._%28%28lib._racket%2Fprivate%2Fmisc..rkt%29._define-syntax-rule%29%29" class="RktStxLink" data-pltdoc="x">define-syntax-rule</a></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym">hello</span><span class="hspace">&nbsp;</span><span class="RktSym">x</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="hspace">&nbsp;&nbsp;</span><span class="RktPn">(</span><span class="RktSym">do-print</span><span class="hspace">&nbsp;</span><span class="RktVal">"hello ~a"</span><span class="hspace">&nbsp;</span><span class="RktSym">x</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr></table></td></tr><tr><td><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="define.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._define-syntax%29%29" class="RktStxLink" data-pltdoc="x">define-syntax</a></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym">show</span><span class="hspace">&nbsp;</span><span class="RktVar">stx</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="hspace">&nbsp;&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="stx-patterns.html#%28form._%28%28lib._racket%2Fprivate%2Fstxcase-scheme..rkt%29._syntax-case%29%29" class="RktStxLink" data-pltdoc="x">syntax-case</a></span><span class="hspace">&nbsp;</span><span class="RktVar">stx</span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="RktPn">[</span><span class="RktPn">(</span><span class="RktSym"><a href="stx-patterns.html#%28form._%28%28lib._racket%2Fprivate%2Fstxcase-scheme..rkt%29.__%29%29" class="RktStxLink" data-pltdoc="x">_</a></span><span class="hspace">&nbsp;</span><span class="RktSym">x</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span cl
<a href="modprotect.html#%28tech._protected%29" class="techoutside" data-pltdoc="x"><span class="techinside">protected</span></a> in the sense of <span class="RktSym"><a href="require.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._protect-out%29%29" class="RktStxLink" data-pltdoc="x">protect-out</a></span>.</p><p class="SHistory">Changed in version 6.0.1.3 of package <span class="stt">base</span>: Changed treatment of <span class="RktSym"><a href="__top.html#%28form._%28%28quote._~23~25kernel%29._~23~25top%29%29" class="RktStxLink" data-pltdoc="x">#%top</a></span>
so that it is never introduced as
an explicit wrapper.<br/>Changed in version 6.0.90.27: Loosened the contract on the <span class="RktVar">intdef-ctx</span> argument to
allow an empty list.<br/>Changed in version 8.2.0.4: Changined binding to protected.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><table cellspacing="0" cellpadding="0" class="prototype RForeground"><tr><td valign="top"><span class="RktPn">(</span><a name="(def._((quote._~23~25kernel)._syntax-local-expand-expression))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-local-expand-expression%29%29" class="RktValDef RktValLink" data-pltdoc="x">syntax-local-expand-expression</a></span></span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="RktVar">stx</span></td><td valign="top"><span class="hspace">&nbsp;</span></td></tr><tr><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span><span class="RktOpt">[</span></td><td valign="top"><span class="RktVar">opaque-only?</span><span class="RktOpt">]</span><span class="RktPn">)</span></td><td valign="top"><span class="hspace">&nbsp;</span></td></tr></table></blockquote></td></tr><tr><td><table cellspacing="0" cellpadding="0" class="prototype"><tr><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top">&rarr;</td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><table cellspacing="0" cellpadding="0"><tr><td><span class="RktPn">(</span><span class="RktSym"><a href="if.html#%28form._%28%28quote._~23~25kernel%29._if%29%29" class="RktStxLink" data-pltdoc="x">if</a></span><span class="hspace">&nbsp;</span><span class="RktVar">opaque-only?</span><span class="hspace">&nbsp;</span><span class="RktVal">#f</span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="stxops.html#%28def._%28%28quote._~23~25kernel%29._syntax~3f%29%29" class="RktValLink" data-pltdoc="x">syntax?</a></span><span class="RktPn">)</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="RktSym"><a href="stxops.html#%28def._%28%28quote._~23~25kernel%29._syntax~3f%29%29" class="RktValLink" data-pltdoc="x">syntax?</a></span></td></tr></table></td></tr></table></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">stx</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%2Fc%29%29" class="RktValLink" data-pltdoc="x">any/c</a></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">opaque-only?</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%2Fc%29%29" class="RktValLink" data-pltdoc="x">any/c</a></span><span class="hspace">&nbsp;</span>=<span class="hspace">&nbsp;</span><span class="RktVal">#f</span></td></tr></table></blockquote></div><div class="SIntrapara">Like <span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._local-expand%29%29" class="RktValLink" data-pltdoc="x">local-expand</a></span> given <span class="RktVal">'</span><span class="RktVal">expression</span> and an empty
stop list, but with two results: a syntax object for the fully
expanded expression, and a syntax object whose content is opaque.</div></p><p>The latter can be used in place of the former (perhaps in a larger
expression produced by a macro transformer), and when the macro
expander encounters the opaque object, it substitutes the fully
expanded expression without re-expanding it; the
<span class="RktSym"><a href="exns.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._exn~3afail~3asyntax%29%29" class="RktValLink" data-pltdoc="x">exn:fail:syntax</a></span> exception is raised if the expansion context includes
<a href="syntax-model.html#%28tech._scope%29" class="techoutside" data-pltdoc="x"><span class="techinside">scopes</span></a> that were not present for the original expansion, in
which case re-expansion might produce different results. Consistent
use of <span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-local-expand-expression%29%29" class="RktValLink" data-pltdoc="x">syntax-local-expand-expression</a></span> and the opaque object
thus avoids quadratic expansion times when local expansions are
nested.</p><p>If <span class="RktVar">opaque-only?</span> is true, then the first result is <span class="RktVal">#f</span>
instead of the expanded expression. Obtaining only the second, opaque
result can be more efficient in some expansion contexts.</p><p>Unlike <span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._local-expand%29%29" class="RktValLink" data-pltdoc="x">local-expand</a></span>, <span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-local-expand-expression%29%29" class="RktValLink" data-pltdoc="x">syntax-local-expand-expression</a></span>
normally produces an expanded expression that contains no
<span class="RktSym"><a href="__expression.html#%28form._%28%28quote._~23~25kernel%29._~23~25expression%29%29" class="RktStxLink" data-pltdoc="x">#%expression</a></span> forms. However, if
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-local-expand-expression%29%29" class="RktValLink" data-pltdoc="x">syntax-local-expand-expression</a></span> is used within an expansion
that is triggered by an enclosing <span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._local-expand%29%29" class="RktValLink" data-pltdoc="x">local-expand</a></span> call, then the
result of <span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-local-expand-expression%29%29" class="RktValLink" data-pltdoc="x">syntax-local-expand-expression</a></span> can include
<span class="RktSym"><a href="__expression.html#%28form._%28%28quote._~23~25kernel%29._~23~25expression%29%29" class="RktStxLink" data-pltdoc="x">#%expression</a></span> forms.</p><p><div class="SIntrapara">This procedure must be called during the
dynamic extent of a <a href="syntax-model.html#%28tech._syntax._transformer%29" class="techoutside" data-pltdoc="x"><span class="techinside">syntax transformer</span></a> application by the
expander or while a module is <a href="syntax-model.html#%28tech._visit%29" class="techoutside" data-pltdoc="x"><span class="techinside">visit</span></a>ed (see
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-transforming~3f%29%29" class="RktValLink" data-pltdoc="x">syntax-transforming?</a></span>), otherwise the
<span class="RktSym"><a href="exns.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._exn~3afail~3acontract%29%29" class="RktValLink" data-pltdoc="x">exn:fail:contract</a></span> exception is raised.</div><div class="SIntrapara">This procedure&rsquo;s binding is provided as
<a href="modprotect.html#%28tech._protected%29" class="techoutside" data-pltdoc="x"><span class="techinside">protected</span></a> in the sense of <span class="RktSym"><a href="require.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._protect-out%29%29" class="RktStxLink" data-pltdoc="x">protect-out</a></span>.</div></p><p class="SHistory">Changed in version 6.90.0.13 of package <span class="stt">base</span>: Added the <span class="RktVar">opaque-only?</span> argument.<br/>Changed in version 8.2.0.4: Changined binding to protected.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><table cellspacing="0" cellpadding="0" class="prototype RForeground"><tr><td valign="top"><span class="RktPn">(</span><a name="(def._((quote._~23~25kernel)._local-transformer-expand))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._local-transformer-expand%29%29" class="RktValDef RktValLink" data-pltdoc="x">local-transformer-expand</a></span></span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="RktVar">stx</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td></tr><tr><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="RktVar">context-v</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td></tr><tr><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="RktVar">stop-ids</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td></tr><tr><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span><span class="RktOpt">[</span></td><td valign="top"><span class="RktVar">intdef-ctx</span><span class="RktOpt">]</span><span class="RktPn">)</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top">&rarr;</td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="RktSym"><a href="stxops.html#%28def._%28%28quote._~23~25kernel%29._syntax~3f%29%29" class="RktValLink" data-pltdoc="x">syntax?</a></span></td></tr></table></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">stx</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%2Fc%29%29" class="RktValLink" data-pltdoc="x">any/c</a></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">context-v</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._or%2Fc%29%29" class="RktValLink" data-pltdoc="x">or/c</a></span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">expression</span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">top-level</span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="pairs.html#%28def._%28%28quote._~23~25kernel%29._list~3f%29%29" class="RktValLink" data-pltdoc="x">list
transformer expression instead of a run-time expression.</div></p><p>Any lifted expressions&#8212;<wbr></wbr>from calls to
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-local-lift-expression%29%29" class="RktValLink" data-pltdoc="x">syntax-local-lift-expression</a></span> during the expansion of
<span class="RktVar">stx</span>&#8212;<wbr></wbr>are captured in the result. If <span class="RktVar">context-v</span> is
<span class="RktVal">'</span><span class="RktVal">top-level</span>, then lifts are captured in a <span class="RktSym"><a href="begin.html#%28form._%28%28quote._~23~25kernel%29._begin%29%29" class="RktStxLink" data-pltdoc="x">begin</a></span> form,
otherwise lifts are captured in <span class="RktSym"><a href="let.html#%28form._%28%28quote._~23~25kernel%29._let-values%29%29" class="RktStxLink" data-pltdoc="x">let-values</a></span> forms. If no
expressions are lifted during expansion, then no <span class="RktSym"><a href="begin.html#%28form._%28%28quote._~23~25kernel%29._begin%29%29" class="RktStxLink" data-pltdoc="x">begin</a></span>
or <span class="RktSym"><a href="let.html#%28form._%28%28quote._~23~25kernel%29._let-values%29%29" class="RktStxLink" data-pltdoc="x">let-values</a></span> wrapper is added.</p><p>This procedure&rsquo;s binding is provided as
<a href="modprotect.html#%28tech._protected%29" class="techoutside" data-pltdoc="x"><span class="techinside">protected</span></a> in the sense of <span class="RktSym"><a href="require.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._protect-out%29%29" class="RktStxLink" data-pltdoc="x">protect-out</a></span>.</p><p class="SHistory">Changed in version 6.5.0.3 of package <span class="stt">base</span>: Allow and capture lifts in a
<span class="RktVal">'</span><span class="RktVal">top-level</span> context.<br/>Changed in version 8.2.0.4: Changined binding to protected.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><table cellspacing="0" cellpadding="0" class="prototype RForeground"><tr><td valign="top"><span class="RktPn">(</span><a name="(def._((quote._~23~25kernel)._local-expand/capture-lifts))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._local-expand%2Fcapture-lifts%29%29" class="RktValDef RktValLink" data-pltdoc="x">local-expand/capture-lifts</a></span></span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="RktVar">stx</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td></tr><tr><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="RktVar">context-v</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td></tr><tr><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="RktVar">stop-ids</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td></tr><tr><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span><span class="RktOpt">[</span></td><td valign="top"><span class="RktVar">intdef-ctx</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td></tr><tr><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="RktVar">lift-ctx</span><span class="RktOpt">]</span><span class="RktPn">)</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top">&rarr;</td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="RktSym"><a href="stxops.html#%28def._%28%28quote._~23~25kernel%29._syntax~3f%29%29" class="RktValLink" data-pltdoc="x">syntax?</a></span></td></tr></table></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">stx</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%2Fc%29%29" class="RktValLink" data-pltdoc="x">any/c</a></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">context-v</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._or%2Fc%29%29" class="RktValLink" data-pltdoc="x">or/c</a></span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">expression</span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">top-level</span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">module</span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><
represents a <span class="RktSym"><a href="begin.html#%28form._%28%28quote._~23~25kernel%29._begin%29%29" class="RktStxLink" data-pltdoc="x">begin</a></span> expression. Lifted expressions&#8212;<wbr></wbr>from
calls to <span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-local-lift-expression%29%29" class="RktValLink" data-pltdoc="x">syntax-local-lift-expression</a></span> during the expansion of
<span class="RktVar">stx</span>&#8212;<wbr></wbr>appear with their identifiers in <span class="RktSym"><a href="define.html#%28form._%28%28quote._~23~25kernel%29._define-values%29%29" class="RktStxLink" data-pltdoc="x">define-values</a></span>
forms, and the expansion of <span class="RktVar">stx</span> is the last expression in the
<span class="RktSym"><a href="begin.html#%28form._%28%28quote._~23~25kernel%29._begin%29%29" class="RktStxLink" data-pltdoc="x">begin</a></span>. The <span class="RktVar">lift-ctx</span> value is reported by
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-local-lift-context%29%29" class="RktValLink" data-pltdoc="x">syntax-local-lift-context</a></span> during local expansion. The lifted
expressions are not expanded, but instead left as provided in the
<span class="RktSym"><a href="begin.html#%28form._%28%28quote._~23~25kernel%29._begin%29%29" class="RktStxLink" data-pltdoc="x">begin</a></span> form.</div></p><p>If <span class="RktVar">context-v</span> is <span class="RktVal">'</span><span class="RktVal">top-level</span> or <span class="RktVal">'</span><span class="RktVal">module</span>, then
<span class="RktSym"><a href="module.html#%28form._%28%28quote._~23~25kernel%29._module%29%29" class="RktStxLink" data-pltdoc="x">module</a></span> forms can appear in the result as added via
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-local-lift-module%29%29" class="RktValLink" data-pltdoc="x">syntax-local-lift-module</a></span>. If <span class="RktVar">context-v</span> is
<span class="RktVal">'</span><span class="RktVal">module</span>, then <span class="RktSym"><a href="module.html#%28form._%28%28quote._~23~25kernel%29._module%2A%29%29" class="RktStxLink" data-pltdoc="x">module*</a></span> forms can appear, too.</p><p>This procedure&rsquo;s binding is provided as
<a href="modprotect.html#%28tech._protected%29" class="techoutside" data-pltdoc="x"><span class="techinside">protected</span></a> in the sense of <span class="RktSym"><a href="require.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._protect-out%29%29" class="RktStxLink" data-pltdoc="x">protect-out</a></span>.</p><p class="SHistory">Changed in version 8.2.0.4 of package <span class="stt">base</span>: Changined binding to protected.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><table cellspacing="0" cellpadding="0" class="prototype RForeground"><tr><td valign="top"><span class="RktPn">(</span><a name="(def._((quote._~23~25kernel)._local-transformer-expand/capture-lifts))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._local-transformer-expand%2Fcapture-lifts%29%29" class="RktValDef RktValLink" data-pltdoc="x">local-transformer-expand/capture-lifts</a></span></span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="RktVar">stx</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td></tr><tr><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="RktVar">context-v</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td></tr><tr><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="RktVar">stop-ids</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td></tr><tr><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span><span class="RktOpt">[</span></td><td valign="top"><span class="RktVar">intdef-ctx</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td></tr><tr><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="RktVar">lift-ctx</span><span class="RktOpt">]</span><span class="RktPn">)</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top">&rarr;</td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="RktSym"><a href="stxops.html#%28def._%28%28quote._~23~25kernel%29._syntax~3f%29%29" class="RktValLink" data-pltdoc="x">syntax?</a></span></td></tr></table></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">stx</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%2Fc%29%29" class="RktValLink" data-pltdoc="x">any/c</a></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">context-v</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._or%2Fc%29%29" class="RktValLink" data-pltdoc="x">or/c</a></span><span class="hspace">&
as a transformer expression instead of a run-time expression. Lifted
expressions are reported as <span class="RktSym"><a href="define.html#%28form._%28%28quote._~23~25kernel%29._define-values%29%29" class="RktStxLink" data-pltdoc="x">define-values</a></span> forms (in the
transformer environment).</div></p><p>This procedure&rsquo;s binding is provided as
<a href="modprotect.html#%28tech._protected%29" class="techoutside" data-pltdoc="x"><span class="techinside">protected</span></a> in the sense of <span class="RktSym"><a href="require.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._protect-out%29%29" class="RktStxLink" data-pltdoc="x">protect-out</a></span>.</p><p class="SHistory">Changed in version 8.2.0.4 of package <span class="stt">base</span>: Changined binding to protected.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><table cellspacing="0" cellpadding="0" class="prototype RForeground"><tr><td valign="top"><span class="RktPn">(</span><a name="(def._((quote._~23~25kernel)._syntax-local-apply-transformer))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-local-apply-transformer%29%29" class="RktValDef RktValLink" data-pltdoc="x">syntax-local-apply-transformer</a></span></span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="RktVar">transformer</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td></tr><tr><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="RktVar">binding-id</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td></tr><tr><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="RktVar">context-v</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td></tr><tr><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="RktVar">intdef-ctx</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td></tr><tr><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="RktVar">v</span><span class="hspace">&nbsp;</span><span class="RktMeta">...</span><span class="RktPn">)</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top">&rarr;</td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="RktSym"><a href="data-structure-contracts.html#%28form._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%29%29" class="RktStxLink" data-pltdoc="x">any</a></span></td></tr></table></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">transformer</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="procedures.html#%28def._%28%28quote._~23~25kernel%29._procedure~3f%29%29" class="RktValLink" data-pltdoc="x">procedure?</a></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">binding-id</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._or%2Fc%29%29" class="RktValLink" data-pltdoc="x">or/c</a></span><span class="hspace">&n
expansion <a href="syntax-model.html#%28tech._context%29" class="techoutside" data-pltdoc="x"><span class="techinside">context</span></a> and <a href="syntax-model.html#%28tech._local._binding._context%29" class="techoutside" data-pltdoc="x"><span class="techinside">local binding context</span></a>. Adds and flips
<a href="syntax-model.html#%28tech._macro._introduction._scope%29" class="techoutside" data-pltdoc="x"><span class="techinside">macro-introduction scopes</span></a> and <a href="syntax-model.html#%28tech._use._site._scope%29" class="techoutside" data-pltdoc="x"><span class="techinside">use-site scopes</span></a> on the arguments
and return values in the same manner as <a href="syntax-model.html#%28tech._syntax._transformer%29" class="techoutside" data-pltdoc="x"><span class="techinside">syntax transformer</span></a> application.
The arguments and returns may be any value; scopes are manipulated only for
those that are syntax objects.</div></p><p>The <span class="RktVar">context-v</span> argument is as in <span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._local-expand%29%29" class="RktValLink" data-pltdoc="x">local-expand</a></span>, and the
<span class="RktVar">intdef-ctx</span> is an <a href="syntax-model.html#%28tech._internal._definition._context%29" class="techoutside" data-pltdoc="x"><span class="techinside">internal-definition context</span></a> value or
<span class="RktVal">#f</span>. The <span class="RktVar">binding-id</span> specifies a <a href="syntax-model.html#%28tech._binding%29" class="techoutside" data-pltdoc="x"><span class="techinside">binding</span></a> associated with
the <span class="RktVar">transformer</span>, which the expander uses to determine whether to add
<a href="syntax-model.html#%28tech._use._site._scope%29" class="techoutside" data-pltdoc="x"><span class="techinside">use-site scopes</span></a> and which <a href="modprotect.html#%28tech._code._inspector%29" class="techoutside" data-pltdoc="x"><span class="techinside">code inspector</span></a> to use during
expansion.</p><p>This procedure must be called during the
dynamic extent of a <a href="syntax-model.html#%28tech._syntax._transformer%29" class="techoutside" data-pltdoc="x"><span class="techinside">syntax transformer</span></a> application by the
expander or while a module is <a href="syntax-model.html#%28tech._visit%29" class="techoutside" data-pltdoc="x"><span class="techinside">visit</span></a>ed (see
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-transforming~3f%29%29" class="RktValLink" data-pltdoc="x">syntax-transforming?</a></span>), otherwise the
<span class="RktSym"><a href="exns.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._exn~3afail~3acontract%29%29" class="RktValLink" data-pltdoc="x">exn:fail:contract</a></span> exception is raised.</p><p class="SHistory">Added in version 8.2.0.7 of package <span class="stt">base</span>.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((quote._~23~25kernel)._internal-definition-context~3f))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._internal-definition-context~3f%29%29" class="RktValDef RktValLink" data-pltdoc="x">internal-definition-context?</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">v</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="booleans.html#%28def._%28%28quote._~23~25kernel%29._boolean~3f%29%29" class="RktValLink" data-pltdoc="x">boolean?</a></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">v</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%2Fc%29%29" class="RktValLink" data-pltdoc="x">any/c</a></span></td></tr></table></blockquote></div><div class="SIntrapara">Returns <span class="RktVal">#t</span> if <span class="RktVar">v</span> is an <a href="syntax-model.html#%28tech._internal._definition._context%29" class="techoutside" data-pltdoc="x"><span class="techinside">internal-definition
context</span></a>, <span class="RktVal">#f</span> otherwise.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><table cellspacing="0" cellpadding="0" class="prototype RForeground"><tr><td valign="top"><span class="RktPn">(</span><a name="(def._((quote._~23~25kernel)._syntax-local-make-definition-context))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-local-make-definition-context%29%29" class="RktValDef RktValLink" data-pltdoc="x">syntax-local-make-definition-context</a></span></span></td><td valign="top"><span class="hspace">&nbsp;</span><span class="RktOpt">[</span></td><td valign="top"><span class="RktVar">parent-ctx</span></td><td valign="top"><span class="hspace">&nbsp;</span></td></tr><tr><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="RktVar">add-scope?</span><span class="RktOpt">]</span><span class="RktPn">)</span></td><td valign="top"><span class="hspace">&nbsp;</span></td></tr></table></blockquote></td></tr><tr><td><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._internal-definition-context~3f%29%29" class="RktValLink" data-pltdoc="x">internal-definition-context?</a></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">parent-ctx</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._or%2Fc%29%29" class="RktValLink" data-pltdoc="x">or/c</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._internal-definition-context~3f%29%29" class="RktValLink" data-pltdoc="x">internal-definition-context?</a></span><span class="hspace">&nbsp;</span><span class="RktVal">#f</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>=<span class="hspace">&nbsp;</span><span class="RktVal">#f</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">add-scope?</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%2Fc%29%29" class="RktValLink" data-pltdoc="x">any/c</a></span><span class="hspace">&nbsp;</span>=<span class="hspace">&nbsp;</span><span class="RktVal">#t</span></td></tr></table></blockquote></div><div class="SIntrapara">Creates an opaque <a href="syntax-model.html#%28tech._internal._definition._context%29" class="techoutside" data-pltdoc="x"><span class="techinside">internal-definition context</span></a> value to be used with <span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._local-expand%29%29" class="RktValLink" data-pltdoc="x">local-expand</a></span> and
other functions. A transformer should create one context for each set of internal definitions to be
expanded.</div></p><p>Before expanding forms whose lexical context should include the definitions, the transformer
should use <span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._internal-definition-context-add-scopes%29%29" class="RktValLink" data-pltdoc="x">internal-definition-context-add-scopes</a></span> to apply the context&rsquo;s scopes to the syntax.
Calls to procedures such as <span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._local-expand%29%29" class="RktValLink" data-pltdoc="x">local-expand</a></span> to expand the forms should
provide the <a href="syntax-model.html#%28tech._internal._definition._context%29" class="techoutside" data-pltdoc="x"><span class="techinside">internal-definition context</span></a> value as an argument.</p><p>After discovering an internal <span class="RktSym"><a href="define.html#%28form._%28%28quote._~23~25kernel%29._define-values%29%29" class="RktStxLink" data-pltdoc="x">define-values</a></span> or <span class="RktSym"><a href="define.html#%28form._%28%28quote._~23~25kernel%29._define-syntaxes%29%29" class="RktStxLink" data-pltdoc="x">define-syntaxes</a></span> form, use
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-local-bind-syntaxes%29%29" class="RktValLink" data-pltdoc="x">syntax-local-bind-syntaxes</a></span> to add <a href="syntax-model.html#%28tech._binding%29" class="techoutside" data-pltdoc="x"><span class="techinside">bindings</span></a> to the context.</p><p>An <a href="syntax-model.html#%28tech._internal._definition._context%29" class="techoutside" data-pltdoc="x"><span class="techinside">internal-definition context</span></a> internally creates an <a href="syntax-model.html#%28tech._outside._edge._scope%29" class="techoutside" data-pltdoc="x"><span class="techinside">outside-edge
scope</span></a> and an <a href="syntax-model.html#%28tech._inside._edge._scope%29" class="techoutside" data-pltdoc="x"><span class="techinside">inside-edge scope</span></a> to represent the context. The
<a href="syntax-model.html#%28tech._inside._edge._scope%29" class="techoutside" data-pltdoc="x"><span class="techinside">inside-edge scope</span></a> is added to any form that is expanded within the
context or that appears as the result of a (partial) expansion within the
context. For backward compatibility, providing <span class="RktVal">#f</span> for
<span class="RktVar">add-scope?</span> disables this behavior.</p><p>If <span class="RktVar">parent-ctx</span> is not <span class="RktVal">#f</span>, then <span class="RktVar">parent-ctx</span> is made the <a name="(tech._parent._internal._definition._context)"></a><span style="font-style: italic">parent
internal-definition context</span> for the new internal-definition context. Whenever the new context&#8217;s
<a href="syntax-model.html#%28tech._binding%29" class="techoutside" data-pltdoc="x"><span class="techinside">bindings</span></a> are added to the <a href="syntax-model.html#%28tech._local._binding._context%29" class="techoutside" data-pltdoc="x"><span class="techinside">local binding context</span></a> (e.g. by providing the context to
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._local-expand%29%29" class="RktValLink" data-pltdoc="x">local-expand</a></span>, <span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-local-bind-syntaxes%29%29" class="RktValLink" data-pltdoc="x">syntax-local-bind-syntaxes</a></span>, or <span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-local-value%29%29" class="RktValLink" data-pltdoc="x">syntax-local-value</a></span>), then the
bindings from <span class="RktVar">parent-ctx</span> are also added as well. If <span class="RktVar">parent-ctx</span> was also created with a
<a href="stxtrans.html#%28tech._parent._internal._definition._context%29" class="techoutside" data-pltdoc="x"><span class="techinside">parent internal-definition context</span></a>, <a href="syntax-model.html#%28tech._binding%29" class="techoutside" data-pltdoc="x"><span class="techinside">bindings</span></a> from its parent are also added, and so on
recursively. Note that the <a href="syntax-model.html#%28tech._scope%29" class="techoutside" data-pltdoc="x"><span class="techinside">scopes</span></a> of parent contexts are <span class="emph">not</span> added implicitly, only the
<a href="syntax-model.html#%28tech._binding%29" class="techoutside" data-pltdoc="x"><span class="techinside">bindings</span></a>, even when the <a href="syntax-model.html#%28tech._inside._edge._scope%29" class="techoutside" data-pltdoc="x"><span class="techinside">inside-edge scope</span></a> of the child context would be implicitly added. If the
<a href="syntax-model.html#%28tech._scope%29" class="techoutside" data-pltdoc="x"><span class="techinside">scopes</span></a> of parent definition contexts should be added, the parent contexts must be provided
explicitly.</p><p>Additionally, if the created definition context is intended to be spliced into a surrounding
definition context, the surrounding context should always be provided for the <span class="RktVar">parent-ctx</span>
argument to ensure the necessary <a href="syntax-model.html#%28tech._use._site._scope%29" class="techoutside" data-pltdoc="x"><span class="techinside">use-site scopes</span></a> are added to macros expanded in the context.
Otherwise, expansion of nested definitions can be inconsistent with the expansion of definitions in
the surrounding context.</p><p>An <a href="syntax-model.html#%28tech._internal._definition._context%29" class="techoutside" data-pltdoc="x"><span class="techinside">internal-definition context</span></a> also tracks <a href="syntax-model.html#%28tech._use._site._scope%29" class="techoutside" data-pltdoc="x"><span class="techinside">use-site scopes</span></a> created during expansion
within the definition context, so that they can be removed from bindings created in the context,
at <span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-local-identifier-as-binding%29%29" class="RktValLink" data-pltdoc="x">syntax-local-identifier-as-binding</a></span>, and at <span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._internal-definition-context-splice-binding-identifier%29%29" class="RktValLink" data-pltdoc="x">internal-definition-context-splice-binding-identifier</a></span>.</p><p>The scopes associated with a new definition context are pruned from
<span class="RktSym"><a href="Syntax_Quoting__quote-syntax.html#%28form._%28%28quote._~23~25kernel%29._quote-syntax%29%29" class="RktStxLink" data-pltdoc="x">quote-syntax</a></span> forms only when it is created during the dynamic
extent of a <a href="syntax-model.html#%28tech._syntax._transformer%29" class="techoutside" data-pltdoc="x"><span class="techinside">syntax transformer</span></a> application or in a
<span class="RktSym"><a href="begin.html#%28form._%28%28quote._~23~25kernel%29._begin-for-syntax%29%29" class="RktStxLink" data-pltdoc="x">begin-for-syntax</a></span> form (potentially nested) within a module
being expanded.</p><p>This procedure must be called during the
dynamic extent of a <a href="syntax-model.html#%28tech._syntax._transformer%29" class="techoutside" data-pltdoc="x"><span class="techinside">syntax transformer</span></a> application by the
expander or while a module is <a href="syntax-model.html#%28tech._visit%29" class="techoutside" data-pltdoc="x"><span class="techinside">visit</span></a>ed (see
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-transforming~3f%29%29" class="RktValLink" data-pltdoc="x">syntax-transforming?</a></span>), otherwise the
<span class="RktSym"><a href="exns.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._exn~3afail~3acontract%29%29" class="RktValLink" data-pltdoc="x">exn:fail:contract</a></span> exception is raised.</p><p class="SHistory">Changed in version 6.3 of package <span class="stt">base</span>: Added the <span class="RktVar">add-scope?</span> argument,
and made calling
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._internal-definition-context-seal%29%29" class="RktValLink" data-pltdoc="x">internal-definition-context-seal</a></span>
no longer necessary.<br/>Changed in version 8.2.0.7: Added the <a href="syntax-model.html#%28tech._outside._edge._scope%29" class="techoutside" data-pltdoc="x"><span class="techinside">outside-edge scope</span></a> and <a href="syntax-model.html#%28tech._use._site._scope%29" class="techoutside" data-pltdoc="x"><span class="techinside">use-site scope</span></a>
tracking behaviors.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><table cellspacing="0" cellpadding="0" class="prototype RForeground"><tr><td valign="top"><span class="RktPn">(</span><a name="(def._((quote._~23~25kernel)._internal-definition-context-add-scopes))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._internal-definition-context-add-scopes%29%29" class="RktValDef RktValLink" data-pltdoc="x">internal-definition-context-add-scopes</a></span></span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="RktVar">intdef-ctx</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td></tr><tr><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="RktVar">stx</span><span class="RktPn">)</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top">&rarr;</td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="RktSym"><a href="stxops.html#%28def._%28%28quote._~23~25kernel%29._syntax~3f%29%29" class="RktValLink" data-pltdoc="x">syntax?</a></span></td></tr></table></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">intdef-ctx</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._internal-definition-context~3f%29%29" class="RktValLink" data-pltdoc="x">internal-definition-context?</a></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">stx</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="stxops.html#%28def._%28%28quote._~23~25kernel%29._syntax~3f%29%29" class="RktValLink" data-pltdoc="x">syntax?</a></span></td></tr></table></blockquote></div><div class="SIntrapara">Adds the <a href="syntax-model.html#%28tech._outside._edge._scope%29" class="techoutside" data-pltdoc="x"><span class="techinside">outside-edge scope</span></a> and <a href="syntax-model.html#%28tech._inside._edge._scope%29" class="techoutside" data-pltdoc="x"><span class="techinside">inside-edge scope</span></a> for
<span class="RktVar">intdef-ctx</span> to <span class="RktVar">stx</span>.</div></p><p>Use this function to apply the definition context scopes to syntax that
originates within the definition context before expansion.</p><p class="SHistory">Added in version 8.2.0.7 of package <span class="stt">base</span>.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><table cellspacing="0" cellpadding="0" class="prototype RForeground"><tr><td valign="top" colspan="3"><span class="RktPn">(</span><a name="(def._((quote._~23~25kernel)._internal-definition-context-splice-binding-identifier))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._internal-definition-context-splice-binding-identifier%29%29" class="RktValDef RktValLink" data-pltdoc="x">internal-definition-context-splice-binding-identifier</a></span></span></td><td valign="top"><span class="hspace">&nbsp;</span></td></tr><tr><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="RktVar">intdef-ctx</span></td><td valign="top"><span class="hspace">&nbsp;</span></td></tr><tr><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="RktVar">id</span><span class="RktPn">)</span></td><td valign="top"><span class="hspace">&nbsp;</span></td></tr></table></blockquote></td></tr><tr><td><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="stxops.html#%28def._%28%28quote._~23~25kernel%29._syntax~3f%29%29" class="RktValLink" data-pltdoc="x">syntax?</a></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">intdef-ctx</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._internal-definition-context~3f%29%29" class="RktValLink" data-pltdoc="x">internal-definition-context?</a></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">id</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="stxops.html#%28def._%28%28lib._racket%2Fprivate%2Fstx..rkt%29._identifier~3f%29%29" class="RktValLink" data-pltdoc="x">identifier?</a></span></td></tr></table></blockquote></div><div class="SIntrapara">Removes scopes associated with the <span class="RktVar">intdef-ctx</span> from <span class="RktVar">id</span>: the
<a href="syntax-model.html#%28tech._outside._edge._scope%29" class="techoutside" data-pltdoc="x"><span class="techinside">outside-edge scope</span></a>, the <a href="syntax-model.html#%28tech._inside._edge._scope%29" class="techoutside" data-pltdoc="x"><span class="techinside">inside-edge scope</span></a>, and <a href="syntax-model.html#%28tech._use._site._scope%29" class="techoutside" data-pltdoc="x"><span class="techinside">use-site
scopes</span></a> created by expansions within the definition context.</div></p><p>Use when splicing a binding originating within the <span class="RktVar">intdef-ctx</span> into a
surrounding context.</p><p class="SHistory">Added in version 8.2.0.7 of package <span class="stt">base</span>.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><table cellspacing="0" cellpadding="0" class="prototype RForeground"><tr><td valign="top"><span class="RktPn">(</span><a name="(def._((quote._~23~25kernel)._syntax-local-bind-syntaxes))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-local-bind-syntaxes%29%29" class="RktValDef RktValLink" data-pltdoc="x">syntax-local-bind-syntaxes</a></span></span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="RktVar">id-list</span></td><td valign="top"><span class="hspace">&nbsp;</span></td></tr><tr><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="RktVar">expr</span></td><td valign="top"><span class="hspace">&nbsp;</span></td></tr><tr><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="RktVar">intdef-ctx</span></td><td valign="top"><span class="hspace">&nbsp;</span></td></tr><tr><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span><span class="RktOpt">[</span></td><td valign="top"><span class="RktVar">extra-intdef-ctxs</span><span class="RktOpt">]</span><span class="RktPn">)</span></td><td valign="top"><span class="hspace">&nbsp;</span></td></tr></table></blockquote></td></tr><tr><td><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._listof%29%29" class="RktValLink" data-pltdoc="x">listof</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="stxops.html#%28def._%28%28lib._racket%2Fprivate%2Fstx..rkt%29._identifier~3f%29%29" class="RktValLink" data-pltdoc="x">identifier?</a></span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">id-list</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._listof%29%29" class="RktValLink" data-pltdoc="x">listof</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="stxops.html#%28def._%28%28lib._racket%2Fprivate%2Fstx..rkt%29._identifier~3f%29%29" class="RktValLink" data-pltdoc="x">identifier?</a></span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">expr</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._or%2Fc%29%29" class="RktValLink" data-pltdoc="x">or/c</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="stxops.html#%28def._%28%28quote._~23~25kernel%29._syntax~3f%29%29" class="RktValLink" data-pltdoc="x">syntax?</a></span><span class="hspace">&nbsp;</span><span class="RktVal">#f</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">intdef-ctx</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._internal-definition-context~3f%29%29" class="RktValLink" data-pltdoc="x">internal-definition-context?</a></span></td></tr><tr><td><table cellspacing="0" cellpadding="0" class="argcontract"><tr><td valign="top"><span class="hspace">&nbsp;&nbsp;
<a href="syntax-model.html#%28tech._internal._definition._context%29" class="techoutside" data-pltdoc="x"><span class="techinside">internal-definition context</span></a> represented by <span class="RktVar">intdef-ctx</span>, where
<span class="RktVar">intdef-ctx</span> is the result of
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-local-make-definition-context%29%29" class="RktValLink" data-pltdoc="x">syntax-local-make-definition-context</a></span>.
Returns identifiers with <a href="syntax-model.html#%28tech._lexical._information%29" class="techoutside" data-pltdoc="x"><span class="techinside">lexical information</span></a> matching the new bindings.</div></p><p>For backwards compatibility, the <a href="syntax-model.html#%28tech._lexical._information%29" class="techoutside" data-pltdoc="x"><span class="techinside">lexical information</span></a> of each element of <span class="RktVar">extra-intdef-ctxs</span>
is also added to each identifier in <span class="RktVar">id-list</span> before binding.</p><p>Supply <span class="RktVal">#f</span> for
<span class="RktVar">expr</span> when the identifiers correspond to
<span class="RktSym"><a href="define.html#%28form._%28%28quote._~23~25kernel%29._define-values%29%29" class="RktStxLink" data-pltdoc="x">define-values</a></span> bindings, and supply a compile-time expression
when the identifiers correspond to <span class="RktSym"><a href="define.html#%28form._%28%28quote._~23~25kernel%29._define-syntaxes%29%29" class="RktStxLink" data-pltdoc="x">define-syntaxes</a></span> bindings.
In the latter case, the number of values produced by the expression should
match the number of identifiers, otherwise the
<span class="RktSym"><a href="exns.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._exn~3afail~3acontract~3aarity%29%29" class="RktValLink" data-pltdoc="x">exn:fail:contract:arity</a></span> exception is raised.</p><p>When <span class="RktVar">expr</span> is not <span class="RktVal">#f</span>, it is expanded in an <a href="syntax-model.html#%28tech._expression._context%29" class="techoutside" data-pltdoc="x"><span class="techinside">expression context</span></a> and evaluated in
the current <a href="syntax-model.html#%28tech._transformer._environment%29" class="techoutside" data-pltdoc="x"><span class="techinside">transformer environment</span></a>. In this case, the <a href="syntax-model.html#%28tech._binding%29" class="techoutside" data-pltdoc="x"><span class="techinside">bindings</span></a> and <a href="syntax-model.html#%28tech._lexical._information%29" class="techoutside" data-pltdoc="x"><span class="techinside">lexical
information</span></a> from both <span class="RktVar">intdef-ctx</span> and <span class="RktVar">extra-intdef-ctxs</span> are used to enrich
<span class="RktVar">expr</span>&#8217;s <a href="syntax-model.html#%28tech._lexical._information%29" class="techoutside" data-pltdoc="x"><span class="techinside">lexical information</span></a> and extend the <a href="syntax-model.html#%28tech._local._binding._context%29" class="techoutside" data-pltdoc="x"><span class="techinside">local binding context</span></a> in the same way
as the fourth argument to <span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._local-expand%29%29" class="RktValLink" data-pltdoc="x">local-expand</a></span>. If <span class="RktVar">expr</span> is <span class="RktVal">#f</span>, the value provided
for <span class="RktVar">extra-intdef-ctxs</span> is ignored.</p><p>This procedure must be called during the
dynamic extent of a <a href="syntax-model.html#%28tech._syntax._transformer%29" class="techoutside" data-pltdoc="x"><span class="techinside">syntax transformer</span></a> application by the
expander or while a module is <a href="syntax-model.html#%28tech._visit%29" class="techoutside" data-pltdoc="x"><span class="techinside">visit</span></a>ed (see
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-transforming~3f%29%29" class="RktValLink" data-pltdoc="x">syntax-transforming?</a></span>), otherwise the
<span class="RktSym"><a href="exns.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._exn~3afail~3acontract%29%29" class="RktValLink" data-pltdoc="x">exn:fail:contract</a></span> exception is raised.</p><p class="SHistory">Changed in version 6.90.0.27 of package <span class="stt">base</span>: Added the <span class="RktVar">extra-intdef-ctxs</span> argument.<br/>Changed in version 8.2.0.7: Changed the return value from <a href="https://download.racket-lang.org/releases/8.6/doc/local-redirect/index.html?doc=guide&amp;rel=void_undefined.html&amp;version=8.6" class="RktModLink Sq" data-pltdoc="x"><span class="nobreak"><span class="RktRes">#&lt;void&gt;</span></span></a> to the list of bound identifiers.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((quote._~23~25kernel)._internal-definition-context-binding-identifiers))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._internal-definition-context-binding-identifiers%29%29" class="RktValDef RktValLink" data-pltdoc="x">internal-definition-context-binding-identifiers</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">intdef-ctx</span><span class="RktPn">)</span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._listof%29%29" class="RktValLink" data-pltdoc="x">listof</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="stxops.html#%28def._%28%28lib._racket%2Fprivate%2Fstx..rkt%29._identifier~3f%29%29" class="RktValLink" data-pltdoc="x">identifier?</a></span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">intdef-ctx</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._internal-definition-context~3f%29%29" class="RktValLink" data-pltdoc="x">internal-definition-context?</a></span></td></tr></table></blockquote></div><div class="SIntrapara">Returns a list of all binding identifiers registered for
<span class="RktVar">intdef-ctx</span> through <span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-local-bind-syntaxes%29%29" class="RktValLink" data-pltdoc="x">syntax-local-bind-syntaxes</a></span>. Each
identifier in the returned list includes the <a href="syntax-model.html#%28tech._internal._definition._context%29" class="techoutside" data-pltdoc="x"><span class="techinside">internal-definition
context</span></a>&rsquo;s <a href="syntax-model.html#%28tech._scope%29" class="techoutside" data-pltdoc="x"><span class="techinside">scope</span></a>.</div></p><p class="SHistory">Added in version 6.3.0.4 of package <span class="stt">base</span>.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><table cellspacing="0" cellpadding="0" class="prototype RForeground"><tr><td valign="top"><span class="RktPn">(</span><a name="(def._((quote._~23~25kernel)._internal-definition-context-introduce))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._internal-definition-context-introduce%29%29" class="RktValDef RktValLink" data-pltdoc="x">internal-definition-context-introduce</a></span></span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="RktVar">intdef-ctx</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td></tr><tr><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="RktVar">stx</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td></tr><tr><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span><span class="RktOpt">[</span></td><td valign="top"><span class="RktVar">mode</span><span class="RktOpt">]</span><span class="RktPn">)</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top">&rarr;</td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="RktSym"><a href="stxops.html#%28def._%28%28quote._~23~25kernel%29._syntax~3f%29%29" class="RktValLink" data-pltdoc="x">syntax?</a></span></td></tr></table></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">intdef-ctx</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._internal-definition-context~3f%29%29" class="RktValLink" data-pltdoc="x">internal-definition-context?</a></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">stx</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="stxops.html#%28def._%28%28quote._~23~25kernel%29._syntax~3f%29%29" class="RktValLink" data-pltdoc="x">syntax?</a></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">mode</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._or%2Fc%29%29" class="RktValLink" data-pltdoc="x">or/c</a></span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">flip</span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">add</span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">remove</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>=<span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">flip</span></td></tr></table></blockquote></div><div class="SIntrapara">Flips, adds, or removes (depending on <span class="RktVar">mode</span>) the <a href="syntax-model.html#%28tech._scope%29" class="techoutside" data-pltdoc="x"><span class="techinside">scope</span></a>
for <span class="RktVar">intdef-ctx</span> for all parts of <span class="RktVar">stx</span>.</div></p><p>This function is provided for backwards compatibility;
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._internal-definition-context-add-scopes%29%29" class="RktValLink" data-pltdoc="x">internal-definition-context-add-scopes</a></span> and
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._internal-definition-context-splice-binding-identifier%29%29" class="RktValLink" data-pltdoc="x">internal-definition-context-splice-binding-identifier</a></span> are preferred.</p><p class="SHistory">Added in version 6.3 of package <span class="stt">base</span>.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((quote._~23~25kernel)._internal-definition-context-seal))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._internal-definition-context-seal%29%29" class="RktValDef RktValLink" data-pltdoc="x">internal-definition-context-seal</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">intdef-ctx</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="void.html#%28def._%28%28quote._~23~25kernel%29._void~3f%29%29" class="RktValLink" data-pltdoc="x">void?</a></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">intdef-ctx</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._internal-definition-context~3f%29%29" class="RktValLink" data-pltdoc="x">internal-definition-context?</a></span></td></tr></table></blockquote></div><div class="SIntrapara">For backward compatibility only; has no effect.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><table cellspacing="0" cellpadding="0" class="prototype RForeground"><tr><td valign="top"><span class="RktPn">(</span><a name="(def._((quote._~23~25kernel)._identifier-remove-from-definition-context))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._identifier-remove-from-definition-context%29%29" class="RktValDef RktValLink" data-pltdoc="x">identifier-remove-from-definition-context</a></span></span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="RktVar">id-stx</span></td><td valign="top"><span class="hspace">&nbsp;</span></td></tr><tr><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="RktVar">intdef-ctx</span><span class="RktPn">)</span></td><td valign="top"><span class="hspace">&nbsp;</span></td></tr></table></blockquote></td></tr><tr><td><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="stxops.html#%28def._%28%28lib._racket%2Fprivate%2Fstx..rkt%29._identifier~3f%29%29" class="RktValLink" data-pltdoc="x">identifier?</a></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">id-stx</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="stxops.html#%28def._%28%28lib._racket%2Fprivate%2Fstx..rkt%29._identifier~3f%29%29" class="RktValLink" data-pltdoc="x">identifier?</a></span></td></tr><tr><td><table cellspacing="0" cellpadding="0" class="argcontract"><tr><td valign="top"><span class="hspace">&nbsp;&nbsp;</span></td><td valign="top"><span class="RktVar">intdef-ctx</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top">:</td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><span class="RktPn">(</spa
element in a list <span class="RktVar">intdef-ctx</span>) from <span class="RktVar">id-stx</span>.</div></p><p>The <span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._identifier-remove-from-definition-context%29%29" class="RktValLink" data-pltdoc="x">identifier-remove-from-definition-context</a></span> function is
provided for backward compatibility; the
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._internal-definition-context-splice-binding-identifier%29%29" class="RktValLink" data-pltdoc="x">internal-definition-context-splice-binding-identifier</a></span> function is preferred.</p><p class="SHistory">Changed in version 6.3 of package <span class="stt">base</span>: Simplified the operation to <a href="syntax-model.html#%28tech._scope%29" class="techoutside" data-pltdoc="x"><span class="techinside">scope</span></a> removal.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>value</p></div></div><p class="RForeground"><a name="(def._((quote._~23~25kernel)._prop~3aexpansion-contexts))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._prop~3aexpansion-contexts%29%29" class="RktValDef RktValLink" data-pltdoc="x">prop:expansion-contexts</a></span></span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="structprops.html#%28def._%28%28quote._~23~25kernel%29._struct-type-property~3f%29%29" class="RktValLink" data-pltdoc="x">struct-type-property?</a></span></p></blockquote></td></tr></table></blockquote></div><div class="SIntrapara">A <a href="structprops.html#%28tech._structure._type._property%29" class="techoutside" data-pltdoc="x"><span class="techinside">structure type property</span></a> to constrain the use of macro
<a href="syntax-model.html#%28tech._transformer%29" class="techoutside" data-pltdoc="x"><span class="techinside">transformers</span></a> and <a href="syntax-model.html#%28tech._rename._transformer%29" class="techoutside" data-pltdoc="x"><span class="techinside">rename transformers</span></a>. The property&rsquo;s
value must be a list of symbols, where the allowed symbols are
<span class="RktVal">'</span><span class="RktVal">expression</span>, <span class="RktVal">'</span><span class="RktVal">top-level</span>, <span class="RktVal">'</span><span class="RktVal">module</span>,
<span class="RktVal">'</span><span class="RktVal">module-begin</span>, and <span class="RktVal">'</span><span class="RktVal">definition-context</span>. Each symbol
corresponds to an expansion context in the same way as for
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._local-expand%29%29" class="RktValLink" data-pltdoc="x">local-expand</a></span> or as reported by <span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-local-context%29%29" class="RktValLink" data-pltdoc="x">syntax-local-context</a></span>,
except that <span class="RktVal">'</span><span class="RktVal">definition-context</span> is used (instead of a list)
to represent an <a href="syntax-model.html#%28tech._internal._definition._context%29" class="techoutside" data-pltdoc="x"><span class="techinside">internal-definition context</span></a>.</div></p><p><div class="SIntrapara">If an identifier is bound to a transformer whose list does not include
a symbol for a particular use of the identifier, then the use is
adjusted as follows:
</div><div class="SIntrapara"><ul><li><p>In a <span class="RktVal">'</span><span class="RktVal">module-begin</span> context, then the use is wrapped in
a <span class="RktSym"><a href="begin.html#%28form._%28%28quote._~23~25kernel%29._begin%29%29" class="RktStxLink" data-pltdoc="x">begin</a></span> form.</p></li><li><p>In a <span class="RktVal">'</span><span class="RktVal">module</span>, <span class="RktVal">'</span><span class="RktVal">top-level</span>,
<span class="RktVal">'</span><span class="RktVal">internal-definition</span> or context, if
<span class="RktVal">'</span><span class="RktVal">expression</span> is present in the list, then the use is
wrapped in an <span class="RktSym"><a href="__expression.html#%28form._%28%28quote._~23~25kernel%29._~23~25expression%29%29" class="RktStxLink" data-pltdoc="x">#%expression</a></span> form.</p></li><li><p>Otherwise, a syntax error is reported.</p></li></ul></div></p><p>The <span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._prop~3aexpansion-contexts%29%29" class="RktValLink" data-pltdoc="x">prop:expansion-contexts</a></span> property is most useful in
combination with <span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._prop~3arename-transformer%29%29" class="RktValLink" data-pltdoc="x">prop:rename-transformer</a></span>, since a general
<a href="syntax-model.html#%28tech._transformer%29" class="techoutside" data-pltdoc="x"><span class="techinside">transformer</span></a> procedure can use <span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-local-context%29%29" class="RktValLink" data-pltdoc="x">syntax-local-context</a></span>.
Furthermore, a <span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._prop~3aexpansion-contexts%29%29" class="RktValLink" data-pltdoc="x">prop:expansion-contexts</a></span> property makes the
most sense when a <a href="syntax-model.html#%28tech._rename._transformer%29" class="techoutside" data-pltdoc="x"><span class="techinside">rename transformer</span></a>&rsquo;s identifier has the
<span class="RktVal">'</span><span class="RktVal">not-free-identifier=?</span> property, otherwise a definition of
the binding creates a binding alias that effectively routes around the
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._prop~3aexpansion-contexts%29%29" class="RktValLink" data-pltdoc="x">prop:expansion-contexts</a></span> property.</p><p class="SHistory">Added in version 6.3 of package <span class="stt">base</span>.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><table cellspacing="0" cellpadding="0" class="prototype RForeground"><tr><td valign="top"><span class="RktPn">(</span><a name="(def._((quote._~23~25kernel)._syntax-local-value))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-local-value%29%29" class="RktValDef RktValLink" data-pltdoc="x">syntax-local-value</a></span></span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="RktVar">id-stx</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td></tr><tr><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span><span class="RktOpt">[</span></td><td valign="top"><span class="RktVar">failure-thunk</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td></tr><tr><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="RktVar">intdef-ctx</span><span class="RktOpt">]</span><span class="RktPn">)</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top">&rarr;</td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="RktSym"><a href="data-structure-contracts.html#%28form._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%29%29" class="RktStxLink" data-pltdoc="x">any</a></span></td></tr></table></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">id-stx</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="stxops.html#%28def._%28%28lib._racket%2Fprivate%2Fstx..rkt%29._identifier~3f%29%29" class="RktValLink" data-pltdoc="x">identifier?</a></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">failure-thunk</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._or%2Fc%29%29" class="RktValLink" data-pltdoc="x">or/c</a></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="function-contracts.html#%28form._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._-~3e%29%29" class="RktStxLink" data-pltdoc="x"><span class="nobreak">-&gt;</span></a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="data-structure-contracts.html#%28form._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%29%29" class="RktStxLink" data-pltdoc="x">any</a></span><span class="RktPn">)</span><span class="hspace">&nbsp;</span><span class="RktVal">#f</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>=<span class="hspace">&nbsp;</span><span class="RktVal">#f</span></td></tr><tr><td><table cellspacing="0" cellpadding="0" class="argcontract"><tr><td valign="top"><span class="hspace">&nbsp;&nbsp;</span></td><td valign="top"><span class="RktVar">intdef-ctx</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top">:</td><td valign="top"><span class="hspace">&nbs
current expansion. If <span class="RktVar">intdef-ctx</span> is not <span class="RktVal">#f</span>, bindings from all provided definition
contexts are also considered. Unlike the fourth argument to <span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._local-expand%29%29" class="RktValLink" data-pltdoc="x">local-expand</a></span>, the
<a href="syntax-model.html#%28tech._scope%29" class="techoutside" data-pltdoc="x"><span class="techinside">scopes</span></a> associated with the provided definition contexts are <span class="emph">not</span> used to enrich
<span class="RktVar">id-stx</span>&#8217;s <a href="syntax-model.html#%28tech._lexical._information%29" class="techoutside" data-pltdoc="x"><span class="techinside">lexical information</span></a>.</div></p><p>If <span class="RktVar">id-stx</span> is bound to a <a href="syntax-model.html#%28tech._rename._transformer%29" class="techoutside" data-pltdoc="x"><span class="techinside">rename transformer</span></a> created
with <span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._make-rename-transformer%29%29" class="RktValLink" data-pltdoc="x">make-rename-transformer</a></span>, <span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-local-value%29%29" class="RktValLink" data-pltdoc="x">syntax-local-value</a></span>
effectively calls itself with the target of the rename and returns
that result, instead of the <a href="syntax-model.html#%28tech._rename._transformer%29" class="techoutside" data-pltdoc="x"><span class="techinside">rename transformer</span></a>.</p><p>If <span class="RktVar">id-stx</span> has no <a href="syntax-model.html#%28tech._transformer%29" class="techoutside" data-pltdoc="x"><span class="techinside">transformer</span></a> binding (via
<span class="RktSym"><a href="define.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._define-syntax%29%29" class="RktStxLink" data-pltdoc="x">define-syntax</a></span>, <span class="RktSym"><a href="let.html#%28form._%28%28lib._racket%2Fprivate%2Fletstx-scheme..rkt%29._let-syntax%29%29" class="RktStxLink" data-pltdoc="x">let-syntax</a></span>, etc.) in that
environment, the result is obtained by applying <span class="RktVar">failure-thunk</span>
if not <span class="RktVal">#f</span>. If <span class="RktVar">failure-thunk</span> is <span class="RktSym"><a href="booleans.html#%28def._%28%28lib._racket%2Fbool..rkt%29._false%29%29" class="RktValLink" data-pltdoc="x">false</a></span>, the
<span class="RktSym"><a href="exns.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._exn~3afail~3acontract%29%29" class="RktValLink" data-pltdoc="x">exn:fail:contract</a></span> exception is raised.</p><p>This procedure must be called during the
dynamic extent of a <a href="syntax-model.html#%28tech._syntax._transformer%29" class="techoutside" data-pltdoc="x"><span class="techinside">syntax transformer</span></a> application by the
expander or while a module is <a href="syntax-model.html#%28tech._visit%29" class="techoutside" data-pltdoc="x"><span class="techinside">visit</span></a>ed (see
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-transforming~3f%29%29" class="RktValLink" data-pltdoc="x">syntax-transforming?</a></span>), otherwise the
<span class="RktSym"><a href="exns.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._exn~3afail~3acontract%29%29" class="RktValLink" data-pltdoc="x">exn:fail:contract</a></span> exception is raised.</p><p><div class="SIntrapara"><p><div class="SIntrapara">Examples:</div><div class="SIntrapara"><blockquote class="SCodeFlow"><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="define.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._define-syntax%29%29" class="RktStxLink" data-pltdoc="x">define-syntax</a></span><span class="hspace">&nbsp;</span><span class="RktSym">swiss-cheeses?</span><span class="hspace">&nbsp;</span><span class="RktVal">#t</span><span class="RktPn">)</span></td></tr><tr><td><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="define.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._define-syntax%29%29" class="RktStxLink" data-pltdoc="x">define-syntax</a></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym">transformer</span><span class="hspace">&nbsp;</span><span class="RktSym">stx</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="hspace">&nbsp;&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="if.html#%28form._%28%28quote._~23~25kernel%29._if%29%29" class="RktStxLink" data-pltdoc="x">if</a></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-local-value%29%29" class="RktValLink" data-pltdoc="x">syntax-local-value</a></span><span class="hspace">&nbsp;</span><span class="RktRdr">#'</span><span class="RktSym">swiss-cheeses?</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="RktRdr">#'</span><span class="RktVal">'</span><span class="RktVal">(</span><span class="RktVal">gruy&#232;re</span><span class="hspace">&nbsp;</span><span class="RktVal">emmental</span><span class="hspace">&nbsp;</span><span class="RktVal">raclette</span><span class="RktVal">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="RktRdr">#'</span><span class="RktVal">'</span><span class="RktVal">(</span><span class="RktVal">roquefort</span><span class="hspace">&nbsp;</span><span class="RktVal">camembert</span><span class="hspace">&nbsp;</span><span class="RktVal">boursin</span><span class="RktVal">)</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr></table></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym">transformer</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">'(gruy&#232;re emmental raclette)</span></p></td></tr></table></blockquote></div></p></div><div class="SIntrapara"><p><div class="SIntrapara">Examples:</div><div class="SIntrapara"><blockquote class="SCodeFlow"><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="define.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._define-syntax%29%29" class="RktStxLink" data-pltdoc="x">define-syntax</a></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym">transformer-2</span><span class="hspace">&nbsp;</span><span class="RktSym">stx</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="hspace">&nbsp;&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-local-value%29%29" class="RktValLink" data-pltdoc="x">syntax-local-value</a></span><span cl
<a href="modprotect.html#%28tech._protected%29" class="techoutside" data-pltdoc="x"><span class="techinside">protected</span></a> in the sense of <span class="RktSym"><a href="require.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._protect-out%29%29" class="RktStxLink" data-pltdoc="x">protect-out</a></span>.</p><p class="SHistory">Changed in version 6.90.0.27 of package <span class="stt">base</span>: Changed <span class="RktVar">intdef-ctx</span> to accept a list of internal-definition
contexts in addition to a single internal-definition context or
<span class="RktVal">#f</span>.<br/>Changed in version 8.2.0.4: Changed binding to protected.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><table cellspacing="0" cellpadding="0" class="prototype RForeground"><tr><td valign="top"><span class="RktPn">(</span><a name="(def._((quote._~23~25kernel)._syntax-local-value/immediate))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-local-value%2Fimmediate%29%29" class="RktValDef RktValLink" data-pltdoc="x">syntax-local-value/immediate</a></span></span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="RktVar">id-stx</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td></tr><tr><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span><span class="RktOpt">[</span></td><td valign="top"><span class="RktVar">failure-thunk</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td></tr><tr><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="RktVar">intdef-ctx</span><span class="RktOpt">]</span><span class="RktPn">)</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top">&rarr;</td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="RktSym"><a href="data-structure-contracts.html#%28form._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%29%29" class="RktStxLink" data-pltdoc="x">any</a></span></td></tr></table></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">id-stx</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="stxops.html#%28def._%28%28quote._~23~25kernel%29._syntax~3f%29%29" class="RktValLink" data-pltdoc="x">syntax?</a></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">failure-thunk</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._or%2Fc%29%29" class="RktValLink" data-pltdoc="x">or/c</a></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="function-contracts.html#%28form._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._-~3e%29%29" class="RktStxLink" data-pltdoc="x"><span class="nobreak">-&gt;</span></a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="data-structure-contracts.html#%28form._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%29%29" class="RktStxLink" data-pltdoc="x">any</a></span><span class="RktPn">)</span><span class="hspace">&nbsp;</span><span class="RktVal">#f</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>=<span class="hspace">&nbsp;</span><span class="RktVal">#f</span></td></tr><tr><td><table cellspacing="0" cellpadding="0" class="argcontract"><tr><td valign="top"><span class="hspace">&nbsp;&nbsp;</span></td><td valign="top"><span class="RktVar">intdef-ctx</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top">:</td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.
values. If <span class="RktVar">id-stx</span> is bound to a <a href="syntax-model.html#%28tech._rename._transformer%29" class="techoutside" data-pltdoc="x"><span class="techinside">rename transformer</span></a>,
the results are the rename transformer and the identifier in the
transformer. <span class="refelem"><span class="refcolumn"><span class="refcontent">Beware that <span class="RktSym"><a href="require.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._provide%29%29" class="RktStxLink" data-pltdoc="x">provide</a></span> on an
<span class="RktVar">id</span> bound to a <a href="syntax-model.html#%28tech._rename._transformer%29" class="techoutside" data-pltdoc="x"><span class="techinside">rename transformer</span></a> may export the
target of the rename instead of <span class="RktVar">id</span>. See
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._make-rename-transformer%29%29" class="RktValLink" data-pltdoc="x">make-rename-transformer</a></span> for more information.</span></span></span> If
<span class="RktVar">id-stx</span> is not bound to a <a href="syntax-model.html#%28tech._rename._transformer%29" class="techoutside" data-pltdoc="x"><span class="techinside">rename transformer</span></a>, then the
results are the value that <span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-local-value%29%29" class="RktValLink" data-pltdoc="x">syntax-local-value</a></span> would produce
and <span class="RktVal">#f</span>.</div></p><p>If <span class="RktVar">id-stx</span> has no transformer binding, then
<span class="RktVar">failure-thunk</span> is called (and it can return any number of
values), or an exception is raised if <span class="RktVar">failure-thunk</span> is
<span class="RktVal">#f</span>.</p><p><div class="SIntrapara">Examples:</div><div class="SIntrapara"><blockquote class="SCodeFlow"><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="define.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._define-syntax%29%29" class="RktStxLink" data-pltdoc="x">define-syntax</a></span><span class="hspace">&nbsp;</span><span class="RktSym">agent-007</span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._make-rename-transformer%29%29" class="RktValLink" data-pltdoc="x">make-rename-transformer</a></span><span class="hspace">&nbsp;</span><span class="RktRdr">#'</span><span class="RktSym">james-bond</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr><tr><td><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="define.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._define-syntax%29%29" class="RktStxLink" data-pltdoc="x">define-syntax</a></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym">show-secret-identity</span><span class="hspace">&nbsp;</span><span class="RktSym">stx</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="hspace">&nbsp;&nbsp;</span><span class="RktPn">(</span><span class="RktSym">syntax-parse</span><span class="hspace">&nbsp;</span><span class="RktSym">stx</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="RktPn">[</span><span class="RktPn">(</span><span class="RktSym"><a href="stx-patterns.html#%28form._%28%28lib._racket%2Fprivate%2Fstxcase-scheme..rkt%29.__%29%29" class="RktStxLink" data-pltdoc="x">_</a></span><span class="hspace">&nbsp;</span><span class="RktSym">name:id</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="define.html#%28form._%28%28quote._~23~25kernel%29._define-values%29%29" class="RktStxLink" data-pltdoc="x">define-values</a></span><span class="hspace">&nbsp;</span><span class="RktPn">[</span><span class="RktSym"><a href="stx-patterns.html#%28form._%28%28lib._racket%2Fprivate%2Fstxcase-scheme..rkt%29.__%29%29" class="RktStxLink" data-pltdoc="x">_</a></span><span class="hspace">&nbsp;</span><span class="RktSym">orig-name</span><span class="RktPn">]</span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-local-value%2Fimmediate%29%29" class="RktValLink" data-pltdoc="x">syntax-local-value/immediate</a></span><span class="hspace">&nbsp;</span><span class="RktRdr">#'</span><span class="RktSym">name</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="RktRdr">#`</span><span class="RktVal">'</span><span class="RktVal">(</span><span class="RktVal">name</span><span class="hspace">&nbsp;</span><span class="RktVal">#,</span><span class="RktVal">orig-name</span><span class="RktVal">)</span><span class="RktPn">]</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr></table></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym">show-secret-identity</span><span class="hspace">&nbsp;</span><span class="RktSym">agent-007</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">'(agent-007 james-bond)</span></p></td></tr></table></blockquote></div></p><p>This procedure&rsquo;s binding is provided as
<a href="modprotect.html#%28tech._protected%29" class="techoutside" data-pltdoc="x"><span class="techinside">protected</span></a> in the sense of <span class="RktSym"><a href="require.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._protect-out%29%29" class="RktStxLink" data-pltdoc="x">protect-out</a></span>.</p><p class="SHistory">Changed in version 8.2.0.4 of package <span class="stt">base</span>: Changined binding to protected.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((quote._~23~25kernel)._syntax-local-lift-expression))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-local-lift-expression%29%29" class="RktValDef RktValLink" data-pltdoc="x">syntax-local-lift-expression</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">stx</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="stxops.html#%28def._%28%28lib._racket%2Fprivate%2Fstx..rkt%29._identifier~3f%29%29" class="RktValLink" data-pltdoc="x">identifier?</a></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">stx</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="stxops.html#%28def._%28%28quote._~23~25kernel%29._syntax~3f%29%29" class="RktValLink" data-pltdoc="x">syntax?</a></span></td></tr></table></blockquote></div><div class="SIntrapara">Returns a fresh identifier, and cooperates with the <span class="RktSym"><a href="module.html#%28form._%28%28quote._~23~25kernel%29._module%29%29" class="RktStxLink" data-pltdoc="x">module</a></span>,
<span class="RktSym"><a href="let.html#%28form._%28%28quote._~23~25kernel%29._letrec-syntaxes%2Bvalues%29%29" class="RktStxLink" data-pltdoc="x">letrec-syntaxes+values</a></span>, <span class="RktSym"><a href="define.html#%28form._%28%28quote._~23~25kernel%29._define-syntaxes%29%29" class="RktStxLink" data-pltdoc="x">define-syntaxes</a></span>,
<span class="RktSym"><a href="begin.html#%28form._%28%28quote._~23~25kernel%29._begin-for-syntax%29%29" class="RktStxLink" data-pltdoc="x">begin-for-syntax</a></span>, and top-level expanders to bind the
generated identifier to the expression <span class="RktVar">stx</span>.</div></p><p>A run-time expression within a module is lifted to the module&rsquo;s top
level, just before the expression whose expansion requests the
lift. Similarly, a run-time expression outside of a module is lifted
to a top-level definition. A compile-time expression in a
<span class="RktSym"><a href="let.html#%28form._%28%28quote._~23~25kernel%29._letrec-syntaxes%2Bvalues%29%29" class="RktStxLink" data-pltdoc="x">letrec-syntaxes+values</a></span> or <span class="RktSym"><a href="define.html#%28form._%28%28quote._~23~25kernel%29._define-syntaxes%29%29" class="RktStxLink" data-pltdoc="x">define-syntaxes</a></span> binding is
lifted to a <span class="RktSym"><a href="let.html#%28form._%28%28lib._racket%2Fprivate%2Fletstx-scheme..rkt%29._let%29%29" class="RktStxLink" data-pltdoc="x">let</a></span> wrapper around the corresponding right-hand
side of the binding. A compile-time expression within
<span class="RktSym"><a href="begin.html#%28form._%28%28quote._~23~25kernel%29._begin-for-syntax%29%29" class="RktStxLink" data-pltdoc="x">begin-for-syntax</a></span> is lifted to a <span class="RktSym"><a href="define.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._define%29%29" class="RktStxLink" data-pltdoc="x">define</a></span>
declaration just before the requesting expression within the
<span class="RktSym"><a href="begin.html#%28form._%28%28quote._~23~25kernel%29._begin-for-syntax%29%29" class="RktStxLink" data-pltdoc="x">begin-for-syntax</a></span>.</p><p>Other syntactic forms can capture lifts by using
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._local-expand%2Fcapture-lifts%29%29" class="RktValLink" data-pltdoc="x">local-expand/capture-lifts</a></span> or
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._local-transformer-expand%2Fcapture-lifts%29%29" class="RktValLink" data-pltdoc="x">local-transformer-expand/capture-lifts</a></span>.</p><p><div class="SIntrapara">This procedure must be called during the
dynamic extent of a <a href="syntax-model.html#%28tech._syntax._transformer%29" class="techoutside" data-pltdoc="x"><span class="techinside">syntax transformer</span></a> application by the
expander or while a module is <a href="syntax-model.html#%28tech._visit%29" class="techoutside" data-pltdoc="x"><span class="techinside">visit</span></a>ed (see
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-transforming~3f%29%29" class="RktValLink" data-pltdoc="x">syntax-transforming?</a></span>), otherwise the
<span class="RktSym"><a href="exns.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._exn~3afail~3acontract%29%29" class="RktValLink" data-pltdoc="x">exn:fail:contract</a></span> exception is raised.</div><div class="SIntrapara"> In addition, this procedure can be called only when
a lift target is available, as indicated by
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-transforming-with-lifts~3f%29%29" class="RktValLink" data-pltdoc="x">syntax-transforming-with-lifts?</a></span>.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((quote._~23~25kernel)._syntax-local-lift-values-expression))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-local-lift-values-expression%29%29" class="RktValDef RktValLink" data-pltdoc="x">syntax-local-lift-values-expression</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">n</span><span class="hspace">&nbsp;</span><span class="RktVar">stx</span><span class="RktPn">)</span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._listof%29%29" class="RktValLink" data-pltdoc="x">listof</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="stxops.html#%28def._%28%28lib._racket%2Fprivate%2Fstx..rkt%29._identifier~3f%29%29" class="RktValLink" data-pltdoc="x">identifier?</a></span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">n</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="number-types.html#%28def._%28%28quote._~23~25kernel%29._exact-nonnegative-integer~3f%29%29" class="RktValLink" data-pltdoc="x">exact-nonnegative-integer?</a></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">stx</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="stxops.html#%28def._%28%28quote._~23~25kernel%29._syntax~3f%29%29" class="RktValLink" data-pltdoc="x">syntax?</a></span></td></tr></table></blockquote></div><div class="SIntrapara">Like <span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-local-lift-expression%29%29" class="RktValLink" data-pltdoc="x">syntax-local-lift-expression</a></span>, but binds the result to
<span class="RktVar">n</span> identifiers, and returns a list of the <span class="RktVar">n</span>
identifiers.</div></p><p>This procedure must be called during the
dynamic extent of a <a href="syntax-model.html#%28tech._syntax._transformer%29" class="techoutside" data-pltdoc="x"><span class="techinside">syntax transformer</span></a> application by the
expander or while a module is <a href="syntax-model.html#%28tech._visit%29" class="techoutside" data-pltdoc="x"><span class="techinside">visit</span></a>ed (see
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-transforming~3f%29%29" class="RktValLink" data-pltdoc="x">syntax-transforming?</a></span>), otherwise the
<span class="RktSym"><a href="exns.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._exn~3afail~3acontract%29%29" class="RktValLink" data-pltdoc="x">exn:fail:contract</a></span> exception is raised.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((quote._~23~25kernel)._syntax-local-lift-context))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-local-lift-context%29%29" class="RktValDef RktValLink" data-pltdoc="x">syntax-local-lift-context</a></span></span><span class="RktPn"></span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%2Fc%29%29" class="RktValLink" data-pltdoc="x">any/c</a></span></p></blockquote></td></tr></table></blockquote></div><div class="SIntrapara">Returns a value that represents the target for expressions lifted via
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-local-lift-expression%29%29" class="RktValLink" data-pltdoc="x">syntax-local-lift-expression</a></span>. That is, for different
transformer calls for which this procedure returns the same value (as
determined by <span class="RktSym"><a href="Equality.html#%28def._%28%28quote._~23~25kernel%29._eq~3f%29%29" class="RktValLink" data-pltdoc="x">eq?</a></span>), lifted expressions for the two
transformer are moved to the same place. Thus, the result is useful
for caching lift information to avoid redundant lifts.</div></p><p>This procedure must be called during the
dynamic extent of a <a href="syntax-model.html#%28tech._syntax._transformer%29" class="techoutside" data-pltdoc="x"><span class="techinside">syntax transformer</span></a> application by the
expander or while a module is <a href="syntax-model.html#%28tech._visit%29" class="techoutside" data-pltdoc="x"><span class="techinside">visit</span></a>ed (see
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-transforming~3f%29%29" class="RktValLink" data-pltdoc="x">syntax-transforming?</a></span>), otherwise the
<span class="RktSym"><a href="exns.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._exn~3afail~3acontract%29%29" class="RktValLink" data-pltdoc="x">exn:fail:contract</a></span> exception is raised.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((quote._~23~25kernel)._syntax-local-lift-module))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-local-lift-module%29%29" class="RktValDef RktValLink" data-pltdoc="x">syntax-local-lift-module</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">stx</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="void.html#%28def._%28%28quote._~23~25kernel%29._void~3f%29%29" class="RktValLink" data-pltdoc="x">void?</a></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">stx</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="stxops.html#%28def._%28%28quote._~23~25kernel%29._syntax~3f%29%29" class="RktValLink" data-pltdoc="x">syntax?</a></span></td></tr></table></blockquote></div><div class="SIntrapara">Cooperates with the <span class="RktSym"><a href="module.html#%28form._%28%28quote._~23~25kernel%29._module%29%29" class="RktStxLink" data-pltdoc="x">module</a></span> form or top-level expansion to add
<span class="RktVar">stx</span> as a module declaration in the enclosing module or top-level.
The <span class="RktVar">stx</span> form must start with <span class="RktSym"><a href="module.html#%28form._%28%28quote._~23~25kernel%29._module%29%29" class="RktStxLink" data-pltdoc="x">module</a></span> or <span class="RktSym"><a href="module.html#%28form._%28%28quote._~23~25kernel%29._module%2A%29%29" class="RktStxLink" data-pltdoc="x">module*</a></span>,
where the latter is only allowed within the expansion of a module.</div></p><p>The module is not immediately declared when
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-local-lift-module%29%29" class="RktValLink" data-pltdoc="x">syntax-local-lift-module</a></span> returns. Instead, the module
declaration is recorded for processing when expansion returns to the
enclosing module body or top-level sequence.</p><p><div class="SIntrapara">This procedure must be called during the
dynamic extent of a <a href="syntax-model.html#%28tech._syntax._transformer%29" class="techoutside" data-pltdoc="x"><span class="techinside">syntax transformer</span></a> application by the
expander or while a module is <a href="syntax-model.html#%28tech._visit%29" class="techoutside" data-pltdoc="x"><span class="techinside">visit</span></a>ed (see
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-transforming~3f%29%29" class="RktValLink" data-pltdoc="x">syntax-transforming?</a></span>), otherwise the
<span class="RktSym"><a href="exns.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._exn~3afail~3acontract%29%29" class="RktValLink" data-pltdoc="x">exn:fail:contract</a></span> exception is raised.</div><div class="SIntrapara"> If the current expression being transformed is not
within a <span class="RktSym"><a href="module.html#%28form._%28%28quote._~23~25kernel%29._module%29%29" class="RktStxLink" data-pltdoc="x">module</a></span> form or within a top-level expansion, then
the <span class="RktSym"><a href="exns.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._exn~3afail~3acontract%29%29" class="RktValLink" data-pltdoc="x">exn:fail:contract</a></span> exception is raised. If <span class="RktVar">stx</span> form does not start with
<span class="RktSym"><a href="module.html#%28form._%28%28quote._~23~25kernel%29._module%29%29" class="RktStxLink" data-pltdoc="x">module</a></span> or <span class="RktSym"><a href="module.html#%28form._%28%28quote._~23~25kernel%29._module%2A%29%29" class="RktStxLink" data-pltdoc="x">module*</a></span>, or if it starts with <span class="RktSym"><a href="module.html#%28form._%28%28quote._~23~25kernel%29._module%2A%29%29" class="RktStxLink" data-pltdoc="x">module*</a></span>
in a top-level context, the <span class="RktSym"><a href="exns.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._exn~3afail~3acontract%29%29" class="RktValLink" data-pltdoc="x">exn:fail:contract</a></span> exception is raised.</div></p><p class="SHistory">Added in version 6.3 of package <span class="stt">base</span>.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((quote._~23~25kernel)._syntax-local-lift-module-end-declaration))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-local-lift-module-end-declaration%29%29" class="RktValDef RktValLink" data-pltdoc="x">syntax-local-lift-module-end-declaration</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">stx</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="void.html#%28def._%28%28quote._~23~25kernel%29._void~3f%29%29" class="RktValLink" data-pltdoc="x">void?</a></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">stx</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="stxops.html#%28def._%28%28quote._~23~25kernel%29._syntax~3f%29%29" class="RktValLink" data-pltdoc="x">syntax?</a></span></td></tr></table></blockquote></div><div class="SIntrapara">Cooperates with the <span class="RktSym"><a href="module.html#%28form._%28%28quote._~23~25kernel%29._module%29%29" class="RktStxLink" data-pltdoc="x">module</a></span> form to insert <span class="RktVar">stx</span> as
a top-level declaration at the end of the module currently being
expanded. If the current expression being
transformed is in <a href="syntax-model.html#%28tech._phase._level%29" class="techoutside" data-pltdoc="x"><span class="techinside">phase level</span></a> 0 and not in the module top-level, then <span class="RktVar">stx</span> is
eventually expanded in an expression context. If the current expression being
transformed is in a higher <a href="syntax-model.html#%28tech._phase._level%29" class="techoutside" data-pltdoc="x"><span class="techinside">phase level</span></a> (i.e., nested within some
number of <span class="RktSym"><a href="begin.html#%28form._%28%28quote._~23~25kernel%29._begin-for-syntax%29%29" class="RktStxLink" data-pltdoc="x">begin-for-syntax</a></span>es within a module top-level), then the lifted declaration
is placed at the very end of the module (under a suitable number of
<span class="RktSym"><a href="begin.html#%28form._%28%28quote._~23~25kernel%29._begin-for-syntax%29%29" class="RktStxLink" data-pltdoc="x">begin-for-syntax</a></span>es), instead of merely the end of the
enclosing <span class="RktSym"><a href="begin.html#%28form._%28%28quote._~23~25kernel%29._begin-for-syntax%29%29" class="RktStxLink" data-pltdoc="x">begin-for-syntax</a></span>.</div></p><p><div class="SIntrapara">This procedure must be called during the
dynamic extent of a <a href="syntax-model.html#%28tech._syntax._transformer%29" class="techoutside" data-pltdoc="x"><span class="techinside">syntax transformer</span></a> application by the
expander or while a module is <a href="syntax-model.html#%28tech._visit%29" class="techoutside" data-pltdoc="x"><span class="techinside">visit</span></a>ed (see
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-transforming~3f%29%29" class="RktValLink" data-pltdoc="x">syntax-transforming?</a></span>), otherwise the
<span class="RktSym"><a href="exns.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._exn~3afail~3acontract%29%29" class="RktValLink" data-pltdoc="x">exn:fail:contract</a></span> exception is raised.</div><div class="SIntrapara"> If the current expression being transformed is not
within a <span class="RktSym"><a href="module.html#%28form._%28%28quote._~23~25kernel%29._module%29%29" class="RktStxLink" data-pltdoc="x">module</a></span> form (see <span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-transforming-module-expression~3f%29%29" class="RktValLink" data-pltdoc="x">syntax-transforming-module-expression?</a></span>),
then the <span class="RktSym"><a href="exns.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._exn~3afail~3acontract%29%29" class="RktValLink" data-pltdoc="x">exn:fail:contract</a></span> exception is raised.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><table cellspacing="0" cellpadding="0" class="prototype RForeground"><tr><td valign="top"><span class="RktPn">(</span><a name="(def._((quote._~23~25kernel)._syntax-local-lift-require))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-local-lift-require%29%29" class="RktValDef RktValLink" data-pltdoc="x">syntax-local-lift-require</a></span></span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="RktVar">raw-require-spec</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td></tr><tr><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="RktVar">stx</span><span class="RktPn">)</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top">&rarr;</td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="RktSym"><a href="stxops.html#%28def._%28%28quote._~23~25kernel%29._syntax~3f%29%29" class="RktValLink" data-pltdoc="x">syntax?</a></span></td></tr></table></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">raw-require-spec</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%2Fc%29%29" class="RktValLink" data-pltdoc="x">any/c</a></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">stx</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="stxops.html#%28def._%28%28quote._~23~25kernel%29._syntax~3f%29%29" class="RktValLink" data-pltdoc="x">syntax?</a></span></td></tr></table></blockquote></div><div class="SIntrapara">Lifts a <span class="RktSym"><a href="require.html#%28form._%28%28quote._~23~25kernel%29._~23~25require%29%29" class="RktStxLink" data-pltdoc="x">#%require</a></span> form corresponding to
<span class="RktVar">raw-require-spec</span> (either as a <a href="syntax-model.html#%28tech._syntax._object%29" class="techoutside" data-pltdoc="x"><span class="techinside">syntax object</span></a> or datum)
to the top-level or to the top of the module currently being expanded
or to an enclosing <span class="RktSym"><a href="begin.html#%28form._%28%28quote._~23~25kernel%29._begin-for-syntax%29%29" class="RktStxLink" data-pltdoc="x">begin-for-syntax</a></span>.</div></p><p>The resulting syntax object is the same as <span class="RktVar">stx</span>, except that a
fresh <a href="syntax-model.html#%28tech._scope%29" class="techoutside" data-pltdoc="x"><span class="techinside">scope</span></a> is added. The same <a href="syntax-model.html#%28tech._scope%29" class="techoutside" data-pltdoc="x"><span class="techinside">scope</span></a> is
added to the lifted <span class="RktSym"><a href="require.html#%28form._%28%28quote._~23~25kernel%29._~23~25require%29%29" class="RktStxLink" data-pltdoc="x">#%require</a></span> form, so that the
<span class="RktSym"><a href="require.html#%28form._%28%28quote._~23~25kernel%29._~23~25require%29%29" class="RktStxLink" data-pltdoc="x">#%require</a></span> form can bind uses of imported identifiers in the
resulting syntax object (assuming that the lexical information of
<span class="RktVar">stx</span> includes the binding environment into which the
<span class="RktSym"><a href="require.html#%28form._%28%28quote._~23~25kernel%29._~23~25require%29%29" class="RktStxLink" data-pltdoc="x">#%require</a></span> is lifted).</p><p>If <span class="RktVar">raw-require-spec</span> and <span class="RktVar">stx</span> are part of the input to
a transformer, then typically <span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-local-introduce%29%29" class="RktValLink" data-pltdoc="x">syntax-local-introduce</a></span> should be
applied to each before passing them to
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-local-lift-require%29%29" class="RktValLink" data-pltdoc="x">syntax-local-lift-require</a></span>, and then
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-local-introduce%29%29" class="RktValLink" data-pltdoc="x">syntax-local-introduce</a></span> should be applied to the result of
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-local-lift-require%29%29" class="RktValLink" data-pltdoc="x">syntax-local-lift-require</a></span>. Otherwise, marks added
by the macro expander can prevent access to the new imports.</p><p>This procedure must be called during the
dynamic extent of a <a href="syntax-model.html#%28tech._syntax._transformer%29" class="techoutside" data-pltdoc="x"><span class="techinside">syntax transformer</span></a> application by the
expander or while a module is <a href="syntax-model.html#%28tech._visit%29" class="techoutside" data-pltdoc="x"><span class="techinside">visit</span></a>ed (see
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-transforming~3f%29%29" class="RktValLink" data-pltdoc="x">syntax-transforming?</a></span>), otherwise the
<span class="RktSym"><a href="exns.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._exn~3afail~3acontract%29%29" class="RktValLink" data-pltdoc="x">exn:fail:contract</a></span> exception is raised.</p><p class="SHistory">Changed in version 6.90.0.27 of package <span class="stt">base</span>: Changed the <a href="syntax-model.html#%28tech._scope%29" class="techoutside" data-pltdoc="x"><span class="techinside">scope</span></a> added to inputs from a
macro-introduction scope to one that does not affect whether or
not the resulting syntax is considered original as reported by
<span class="RktSym"><a href="stxops.html#%28def._%28%28quote._~23~25kernel%29._syntax-original~3f%29%29" class="RktValLink" data-pltdoc="x">syntax-original?</a></span>.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((quote._~23~25kernel)._syntax-local-lift-provide))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-local-lift-provide%29%29" class="RktValDef RktValLink" data-pltdoc="x">syntax-local-lift-provide</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">raw-provide-spec-stx</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="void.html#%28def._%28%28quote._~23~25kernel%29._void~3f%29%29" class="RktValLink" data-pltdoc="x">void?</a></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">raw-provide-spec-stx</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="stxops.html#%28def._%28%28quote._~23~25kernel%29._syntax~3f%29%29" class="RktValLink" data-pltdoc="x">syntax?</a></span></td></tr></table></blockquote></div><div class="SIntrapara">Lifts a <span class="RktSym"><a href="require.html#%28form._%28%28quote._~23~25kernel%29._~23~25provide%29%29" class="RktStxLink" data-pltdoc="x">#%provide</a></span> form corresponding to
<span class="RktVar">raw-provide-spec-stx</span> to the top of the module currently being
expanded or to an enclosing <span class="RktSym"><a href="begin.html#%28form._%28%28quote._~23~25kernel%29._begin-for-syntax%29%29" class="RktStxLink" data-pltdoc="x">begin-for-syntax</a></span>.</div></p><p><div class="SIntrapara">This procedure must be called during the
dynamic extent of a <a href="syntax-model.html#%28tech._syntax._transformer%29" class="techoutside" data-pltdoc="x"><span class="techinside">syntax transformer</span></a> application by the
expander or while a module is <a href="syntax-model.html#%28tech._visit%29" class="techoutside" data-pltdoc="x"><span class="techinside">visit</span></a>ed (see
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-transforming~3f%29%29" class="RktValLink" data-pltdoc="x">syntax-transforming?</a></span>), otherwise the
<span class="RktSym"><a href="exns.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._exn~3afail~3acontract%29%29" class="RktValLink" data-pltdoc="x">exn:fail:contract</a></span> exception is raised.</div><div class="SIntrapara"> If the current expression being transformed is not
within a <span class="RktSym"><a href="module.html#%28form._%28%28quote._~23~25kernel%29._module%29%29" class="RktStxLink" data-pltdoc="x">module</a></span> form (see <span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-transforming-module-expression~3f%29%29" class="RktValLink" data-pltdoc="x">syntax-transforming-module-expression?</a></span>),
then the <span class="RktSym"><a href="exns.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._exn~3afail~3acontract%29%29" class="RktValLink" data-pltdoc="x">exn:fail:contract</a></span> exception is raised.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((quote._~23~25kernel)._syntax-local-name))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-local-name%29%29" class="RktValDef RktValLink" data-pltdoc="x">syntax-local-name</a></span></span><span class="RktPn"></span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%2Fc%29%29" class="RktValLink" data-pltdoc="x">any/c</a></span></p></blockquote></td></tr></table></blockquote></div><div class="SIntrapara">Returns an inferred name for the expression position being
transformed, or <span class="RktVal">#f</span> if no such name is available. A name is
normally a symbol or an identifier. See also <a href="syntax-model.html#%28part._infernames%29" data-pltdoc="x">Inferred Value Names</a>.</div></p><p>This procedure must be called during the
dynamic extent of a <a href="syntax-model.html#%28tech._syntax._transformer%29" class="techoutside" data-pltdoc="x"><span class="techinside">syntax transformer</span></a> application by the
expander or while a module is <a href="syntax-model.html#%28tech._visit%29" class="techoutside" data-pltdoc="x"><span class="techinside">visit</span></a>ed (see
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-transforming~3f%29%29" class="RktValLink" data-pltdoc="x">syntax-transforming?</a></span>), otherwise the
<span class="RktSym"><a href="exns.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._exn~3afail~3acontract%29%29" class="RktValLink" data-pltdoc="x">exn:fail:contract</a></span> exception is raised.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((quote._~23~25kernel)._syntax-local-context))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-local-context%29%29" class="RktValDef RktValLink" data-pltdoc="x">syntax-local-context</a></span></span><span class="RktPn"></span><span class="RktPn">)</span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._or%2Fc%29%29" class="RktValLink" data-pltdoc="x">or/c</a></span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">expression</span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">top-level</span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">module</span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">module-begin</span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="pairs.html#%28def._%28%28quote._~23~25kernel%29._list~3f%29%29" class="RktValLink" data-pltdoc="x">list?</a></span><span class="RktPn">)</span></td></tr></table></blockquote></div><div class="SIntrapara">Returns an indication of the context for expansion that triggered a
<a href="syntax-model.html#%28tech._syntax._transformer%29" class="techoutside" data-pltdoc="x"><span class="techinside">syntax transformer</span></a> call. See <a href="syntax-model.html#%28part._expand-context-model%29" data-pltdoc="x">Expansion Context</a>
for more information on contexts.</div></p><p>The symbol results indicate that the expression is being expanded for
an <a href="syntax-model.html#%28tech._expression._context%29" class="techoutside" data-pltdoc="x"><span class="techinside">expression context</span></a>, a <a href="syntax-model.html#%28tech._top._level._context%29" class="techoutside" data-pltdoc="x"><span class="techinside">top-level context</span></a>, a
<a href="syntax-model.html#%28tech._module._context%29" class="techoutside" data-pltdoc="x"><span class="techinside">module context</span></a>, or a <a href="syntax-model.html#%28tech._module._begin._context%29" class="techoutside" data-pltdoc="x"><span class="techinside">module-begin context</span></a>.</p><p>A list result indicates expansion in an <a href="syntax-model.html#%28tech._internal._definition._context%29" class="techoutside" data-pltdoc="x"><span class="techinside">internal-definition
context</span></a>. The identity of the list&rsquo;s first element (i.e., its
<span class="RktSym"><a href="Equality.html#%28def._%28%28quote._~23~25kernel%29._eq~3f%29%29" class="RktValLink" data-pltdoc="x">eq?</a></span>ness) reflects the identity of the internal-definition
context; in particular two transformer expansions receive the same
first value if and only if they are invoked for the same
<a href="syntax-model.html#%28tech._internal._definition._context%29" class="techoutside" data-pltdoc="x"><span class="techinside">internal-definition context</span></a>. Later values in the list similarly
identify <a href="syntax-model.html#%28tech._internal._definition._context%29" class="techoutside" data-pltdoc="x"><span class="techinside">internal-definition contexts</span></a> that are still being expanded,
and that required the expansion of nested internal-definition
contexts.</p><p>This procedure must be called during the
dynamic extent of a <a href="syntax-model.html#%28tech._syntax._transformer%29" class="techoutside" data-pltdoc="x"><span class="techinside">syntax transformer</span></a> application by the
expander or while a module is <a href="syntax-model.html#%28tech._visit%29" class="techoutside" data-pltdoc="x"><span class="techinside">visit</span></a>ed (see
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-transforming~3f%29%29" class="RktValLink" data-pltdoc="x">syntax-transforming?</a></span>), otherwise the
<span class="RktSym"><a href="exns.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._exn~3afail~3acontract%29%29" class="RktValLink" data-pltdoc="x">exn:fail:contract</a></span> exception is raised.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((quote._~23~25kernel)._syntax-local-phase-level))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-local-phase-level%29%29" class="RktValDef RktValLink" data-pltdoc="x">syntax-local-phase-level</a></span></span><span class="RktPn"></span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="number-types.html#%28def._%28%28quote._~23~25kernel%29._exact-integer~3f%29%29" class="RktValLink" data-pltdoc="x">exact-integer?</a></span></p></blockquote></td></tr></table></blockquote></div><div class="SIntrapara">During the dynamic extent of a <a href="syntax-model.html#%28tech._syntax._transformer%29" class="techoutside" data-pltdoc="x"><span class="techinside">syntax transformer</span></a> application
by the expander, the result is the <a href="syntax-model.html#%28tech._phase._level%29" class="techoutside" data-pltdoc="x"><span class="techinside">phase level</span></a> of the form
being expanded. Otherwise, the result is <span class="RktVal">0</span>.</div></p><p><div class="SIntrapara">Examples:</div><div class="SIntrapara"><blockquote class="SCodeFlow"><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><span class="RktCmt">;</span><span class="RktCmt">&nbsp;</span><span class="RktCmt">a macro bound at phase 0</span></td></tr><tr><td><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="define.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._define-syntax%29%29" class="RktStxLink" data-pltdoc="x">define-syntax</a></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym">print-phase-level</span><span class="hspace">&nbsp;</span><span class="RktSym">stx</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="hspace">&nbsp;&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="Writing.html#%28def._%28%28quote._~23~25kernel%29._printf%29%29" class="RktValLink" data-pltdoc="x">printf</a></span><span class="hspace">&nbsp;</span><span class="RktVal">"phase level: ~a~n"</span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-local-phase-level%29%29" class="RktValLink" data-pltdoc="x">syntax-local-phase-level</a></span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="hspace">&nbsp;&nbsp;</span><span class="RktRdr">#'</span><span class="RktPn">(</span><span class="RktSym"><a href="void.html#%28def._%28%28quote._~23~25kernel%29._void%29%29" class="RktValLink" data-pltdoc="x">void</a></span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr></table></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="require.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._require%29%29" class="RktStxLink" data-pltdoc="x">require</a></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="require.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._for-meta%29%29" class="RktStxLink" data-pltdoc="x">for-meta</a></span><span class="hspace">&nbsp;</span><span class="RktVal">2</span><span class="hspace">&nbsp;</span><span class="RktSym">racket/base</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr><tr><td><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="begin.html#%28form._%28%28quote._~23~25kernel%29._begin-for-syntax%29%29" class="RktStxLink" data-pltdoc="x">begin-for-syntax</a></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="hspace">&nbsp;&nbsp;</span><span class="RktCmt">;</span><span class="RktCmt">&nbsp;</span><span class="RktCmt">a macro bound at phase 1</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="hspace">&nbsp;&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="define.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._define-syntax%29%29" class="RktStxLink" data-pltdoc="x">define-syntax</a></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym">print-phase-level</span><span class="hspace">&nbsp;</span><span class="RktSym">stx</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="Writing.html#%28def._%28%28quote._~23~25kernel%29._printf%29%29" class="RktValLink" data-pltdoc="x">printf</a></span><span class="hspace">&nbsp;</span><span class="RktVal">"phase level: ~a~n"</span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-local-p
<a href="syntax-model.html#%28tech._binding._space%29" class="techoutside" data-pltdoc="x"><span class="techinside">binding space</span></a> combinations to lists of symbols,
where the symbols are the names of <span class="RktSym"><a href="require.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._provide%29%29" class="RktStxLink" data-pltdoc="x">provide</a></span>d
bindings from <span class="RktVar">mod-path</span> at the corresponding <a href="syntax-model.html#%28tech._phase._level%29" class="techoutside" data-pltdoc="x"><span class="techinside">phase level</span></a>.</div></p><p>This procedure must be called during the
dynamic extent of a <a href="syntax-model.html#%28tech._syntax._transformer%29" class="techoutside" data-pltdoc="x"><span class="techinside">syntax transformer</span></a> application by the
expander or while a module is <a href="syntax-model.html#%28tech._visit%29" class="techoutside" data-pltdoc="x"><span class="techinside">visit</span></a>ed (see
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-transforming~3f%29%29" class="RktValLink" data-pltdoc="x">syntax-transforming?</a></span>), otherwise the
<span class="RktSym"><a href="exns.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._exn~3afail~3acontract%29%29" class="RktValLink" data-pltdoc="x">exn:fail:contract</a></span> exception is raised.</p><p class="SHistory">Changed in version 8.2.0.3 of package <span class="stt">base</span>: Generalized result to phase&ndash;space combinations.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((quote._~23~25kernel)._syntax-local-submodules))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-local-submodules%29%29" class="RktValDef RktValLink" data-pltdoc="x">syntax-local-submodules</a></span></span><span class="RktPn"></span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._listof%29%29" class="RktValLink" data-pltdoc="x">listof</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="symbols.html#%28def._%28%28quote._~23~25kernel%29._symbol~3f%29%29" class="RktValLink" data-pltdoc="x">symbol?</a></span><span class="RktPn">)</span></p></blockquote></td></tr></table></blockquote></div><div class="SIntrapara">Returns a list of submodule names that are declared via
<span class="RktSym"><a href="module.html#%28form._%28%28quote._~23~25kernel%29._module%29%29" class="RktStxLink" data-pltdoc="x">module</a></span> (as opposed to <span class="RktSym"><a href="module.html#%28form._%28%28quote._~23~25kernel%29._module%2A%29%29" class="RktStxLink" data-pltdoc="x">module*</a></span>) in the current
expansion context.</div></p><p>This procedure must be called during the
dynamic extent of a <a href="syntax-model.html#%28tech._syntax._transformer%29" class="techoutside" data-pltdoc="x"><span class="techinside">syntax transformer</span></a> application by the
expander or while a module is <a href="syntax-model.html#%28tech._visit%29" class="techoutside" data-pltdoc="x"><span class="techinside">visit</span></a>ed (see
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-transforming~3f%29%29" class="RktValLink" data-pltdoc="x">syntax-transforming?</a></span>), otherwise the
<span class="RktSym"><a href="exns.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._exn~3afail~3acontract%29%29" class="RktValLink" data-pltdoc="x">exn:fail:contract</a></span> exception is raised.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((quote._~23~25kernel)._syntax-local-module-interned-scope-symbols))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-local-module-interned-scope-symbols%29%29" class="RktValDef RktValLink" data-pltdoc="x">syntax-local-module-interned-scope-symbols</a></span></span><span class="RktPn"></span><span class="RktPn">)</span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._listof%29%29" class="RktValLink" data-pltdoc="x">listof</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="symbols.html#%28def._%28%28quote._~23~25kernel%29._symbol~3f%29%29" class="RktValLink" data-pltdoc="x">symbol?</a></span><span class="RktPn">)</span></td></tr></table></blockquote></div><div class="SIntrapara">Returns a list of distinct <a href="reader.html#%28tech._interned%29" class="techoutside" data-pltdoc="x"><span class="techinside">interned</span></a> symbols corresponding to
<a href="syntax-model.html#%28tech._binding._space%29" class="techoutside" data-pltdoc="x"><span class="techinside">binding spaces</span></a> that have been used, so far, for binding within
the current expansion context&rsquo;s module or top-level namespace. The
result is conservative in the sense that it may include additional
symbols that have not been used in the current module or namespace.</div></p><p>The current implementation returns all symbols for <a href="eval-model.html#%28tech._reachable%29" class="techoutside" data-pltdoc="x"><span class="techinside">reachable</span></a>
interned scopes, but that behavior may change in the future to return
a less conservative list of symbols.</p><p>This procedure must be called during the
dynamic extent of a <a href="syntax-model.html#%28tech._syntax._transformer%29" class="techoutside" data-pltdoc="x"><span class="techinside">syntax transformer</span></a> application by the
expander or while a module is <a href="syntax-model.html#%28tech._visit%29" class="techoutside" data-pltdoc="x"><span class="techinside">visit</span></a>ed (see
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-transforming~3f%29%29" class="RktValLink" data-pltdoc="x">syntax-transforming?</a></span>), otherwise the
<span class="RktSym"><a href="exns.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._exn~3afail~3acontract%29%29" class="RktValLink" data-pltdoc="x">exn:fail:contract</a></span> exception is raised.</p><p class="SHistory">Added in version 8.2.0.7 of package <span class="stt">base</span>.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><table cellspacing="0" cellpadding="0" class="prototype RForeground"><tr><td valign="top"><span class="RktPn">(</span><a name="(def._((quote._~23~25kernel)._syntax-local-get-shadower))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-local-get-shadower%29%29" class="RktValDef RktValLink" data-pltdoc="x">syntax-local-get-shadower</a></span></span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="RktVar">id-stx</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td></tr><tr><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span><span class="RktOpt">[</span></td><td valign="top"><span class="RktVar">only-generated?</span><span class="RktOpt">]</span><span class="RktPn">)</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top">&rarr;</td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="RktSym"><a href="stxops.html#%28def._%28%28lib._racket%2Fprivate%2Fstx..rkt%29._identifier~3f%29%29" class="RktValLink" data-pltdoc="x">identifier?</a></span></td></tr></table></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">id-stx</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="stxops.html#%28def._%28%28lib._racket%2Fprivate%2Fstx..rkt%29._identifier~3f%29%29" class="RktValLink" data-pltdoc="x">identifier?</a></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">only-generated?</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%2Fc%29%29" class="RktValLink" data-pltdoc="x">any/c</a></span><span class="hspace">&nbsp;</span>=<span class="hspace">&nbsp;</span><span class="RktVal">#f</span></td></tr></table></blockquote></div><div class="SIntrapara">Adds <a href="syntax-model.html#%28tech._scope%29" class="techoutside" data-pltdoc="x"><span class="techinside">scopes</span></a> to <span class="RktVar">id-stx</span> so that it refers to bindings
in the current expansion context or could bind any identifier obtained
via <span class="RktPn">(</span><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-local-get-shadower%29%29" class="RktValLink" data-pltdoc="x">syntax-local-get-shadower</a></span><span class="stt"> </span><span class="RktVar">id-stx</span><span class="RktPn">)</span> in more nested contexts.
If <span class="RktVar">only-generated?</span> is true, the phase-spanning <a href="syntax-model.html#%28tech._scope%29" class="techoutside" data-pltdoc="x"><span class="techinside">scope</span></a>
of the enclosing module or namespace is omitted from the added scopes,
however, which limits the bindings that can be referenced (and
therefore avoids certain ambiguous references).</div></p><p>This function is intended for the implementation of
<span class="RktSym"><a href="stxparam.html#%28form._%28%28lib._racket%2Fstxparam..rkt%29._syntax-parameterize%29%29" class="RktStxLink" data-pltdoc="x">syntax-parameterize</a></span> and <span class="RktSym"><a href="require.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._local-require%29%29" class="RktStxLink" data-pltdoc="x">local-require</a></span>.</p><p>This procedure must be called during the
dynamic extent of a <a href="syntax-model.html#%28tech._syntax._transformer%29" class="techoutside" data-pltdoc="x"><span class="techinside">syntax transformer</span></a> application by the
expander or while a module is <a href="syntax-model.html#%28tech._visit%29" class="techoutside" data-pltdoc="x"><span class="techinside">visit</span></a>ed (see
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-transforming~3f%29%29" class="RktValLink" data-pltdoc="x">syntax-transforming?</a></span>), otherwise the
<span class="RktSym"><a href="exns.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._exn~3afail~3acontract%29%29" class="RktValLink" data-pltdoc="x">exn:fail:contract</a></span> exception is raised.</p><p class="SHistory">Changed in version 6.3 of package <span class="stt">base</span>: Simplified to the minimal functionality
needed for <span class="RktSym"><a href="stxparam.html#%28form._%28%28lib._racket%2Fstxparam..rkt%29._syntax-parameterize%29%29" class="RktStxLink" data-pltdoc="x">syntax-parameterize</a></span>
and <span class="RktSym"><a href="require.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._local-require%29%29" class="RktStxLink" data-pltdoc="x">local-require</a></span>.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((quote._~23~25kernel)._syntax-local-make-delta-introducer))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-local-make-delta-introducer%29%29" class="RktValDef RktValLink" data-pltdoc="x">syntax-local-make-delta-introducer</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">id-stx</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="procedures.html#%28def._%28%28quote._~23~25kernel%29._procedure~3f%29%29" class="RktValLink" data-pltdoc="x">procedure?</a></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">id-stx</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="stxops.html#%28def._%28%28lib._racket%2Fprivate%2Fstx..rkt%29._identifier~3f%29%29" class="RktValLink" data-pltdoc="x">identifier?</a></span></td></tr></table></blockquote></div><div class="SIntrapara">For (limited) backward compatibility only; raises <span class="RktSym"><a href="exns.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._exn~3afail~3aunsupported%29%29" class="RktValLink" data-pltdoc="x">exn:fail:unsupported</a></span>.</div></p><p class="SHistory">Changed in version 6.3 of package <span class="stt">base</span>: changed to raise <span class="RktSym">exn:fail:supported</span>.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._racket/private/base..rkt)._syntax-local-certifier))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="stxtrans.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._syntax-local-certifier%29%29" class="RktValDef RktValLink" data-pltdoc="x">syntax-local-certifier</a></span></span><span class="hspace">&nbsp;</span><span class="RktOpt">[</span><span class="RktVar">active?</span><span class="RktOpt">]</span><span class="RktPn">)</span></p></blockquote></td></tr><tr><td><table cellspacing="0" cellpadding="0" class="prototype"><tr><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top">&rarr;</td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><span class="RktPn">(</span><span class="RktPn">(</span><span class="RktSym"><a href="stxops.html#%28def._%28%28quote._~23~25kernel%29._syntax~3f%29%29" class="RktValLink" data-pltdoc="x">syntax?</a></span><span class="RktPn">)</span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%2Fc%29%29" class="RktValLink" data-pltdoc="x">any/c</a></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._or%2Fc%29%29" class="RktValLink" data-pltdoc="x">or/c</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="procedures.html#%28def._%28%28quote._~23~25kernel%29._procedure~3f%29%29" class="RktValLink" data-pltdoc="x">procedure?</a></span><span class="hspace">&nbsp;</span><spa
first argument.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((quote._~23~25kernel)._syntax-transforming~3f))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-transforming~3f%29%29" class="RktValDef RktValLink" data-pltdoc="x">syntax-transforming?</a></span></span><span class="RktPn"></span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="booleans.html#%28def._%28%28quote._~23~25kernel%29._boolean~3f%29%29" class="RktValLink" data-pltdoc="x">boolean?</a></span></p></blockquote></td></tr></table></blockquote></div><div class="SIntrapara">Returns <span class="RktVal">#t</span> during the dynamic extent of a <a href="syntax-model.html#%28tech._syntax._transformer%29" class="techoutside" data-pltdoc="x"><span class="techinside">syntax
transformer</span></a> application by the expander and while a module is being
<a href="syntax-model.html#%28tech._visit%29" class="techoutside" data-pltdoc="x"><span class="techinside">visit</span></a>ed, <span class="RktVal">#f</span> otherwise.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((quote._~23~25kernel)._syntax-transforming-with-lifts~3f))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-transforming-with-lifts~3f%29%29" class="RktValDef RktValLink" data-pltdoc="x">syntax-transforming-with-lifts?</a></span></span><span class="RktPn"></span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="booleans.html#%28def._%28%28quote._~23~25kernel%29._boolean~3f%29%29" class="RktValLink" data-pltdoc="x">boolean?</a></span></p></blockquote></td></tr></table></blockquote></div><div class="SIntrapara">Returns <span class="RktVal">#t</span> if <span class="RktPn">(</span><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-transforming~3f%29%29" class="RktValLink" data-pltdoc="x">syntax-transforming?</a></span><span class="RktPn">)</span> produces
<span class="RktVal">#t</span> and a target context is available for lifting expressions
(via <span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-local-lift-expression%29%29" class="RktValLink" data-pltdoc="x">syntax-local-lift-expression</a></span>), <span class="RktVal">#f</span> otherwise.</div></p><p>Currently, <span class="RktPn">(</span><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-transforming~3f%29%29" class="RktValLink" data-pltdoc="x">syntax-transforming?</a></span><span class="RktPn">)</span> implies
<span class="RktPn">(</span><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-transforming-with-lifts~3f%29%29" class="RktValLink" data-pltdoc="x">syntax-transforming-with-lifts?</a></span><span class="RktPn">)</span>.</p><p class="SHistory">Added in version 6.3.0.9 of package <span class="stt">base</span>.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((quote._~23~25kernel)._syntax-transforming-module-expression~3f))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-transforming-module-expression~3f%29%29" class="RktValDef RktValLink" data-pltdoc="x">syntax-transforming-module-expression?</a></span></span><span class="RktPn"></span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="booleans.html#%28def._%28%28quote._~23~25kernel%29._boolean~3f%29%29" class="RktValLink" data-pltdoc="x">boolean?</a></span></p></blockquote></td></tr></table></blockquote></div><div class="SIntrapara">Returns <span class="RktVal">#t</span> during the dynamic extent of a <a href="syntax-model.html#%28tech._syntax._transformer%29" class="techoutside" data-pltdoc="x"><span class="techinside">syntax
transformer</span></a> application by the expander for an expression
within a <span class="RktSym"><a href="module.html#%28form._%28%28quote._~23~25kernel%29._module%29%29" class="RktStxLink" data-pltdoc="x">module</a></span> form, <span class="RktVal">#f</span> otherwise.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><table cellspacing="0" cellpadding="0" class="prototype RForeground"><tr><td valign="top"><span class="RktPn">(</span><a name="(def._((quote._~23~25kernel)._syntax-local-identifier-as-binding))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-local-identifier-as-binding%29%29" class="RktValDef RktValLink" data-pltdoc="x">syntax-local-identifier-as-binding</a></span></span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="RktVar">id-stx</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td></tr><tr><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span><span class="RktOpt">[</span></td><td valign="top"><span class="RktVar">intdef-ctx</span><span class="RktOpt">]</span><span class="RktPn">)</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top">&rarr;</td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="RktSym"><a href="stxops.html#%28def._%28%28lib._racket%2Fprivate%2Fstx..rkt%29._identifier~3f%29%29" class="RktValLink" data-pltdoc="x">identifier?</a></span></td></tr></table></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">id-stx</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="stxops.html#%28def._%28%28lib._racket%2Fprivate%2Fstx..rkt%29._identifier~3f%29%29" class="RktValLink" data-pltdoc="x">identifier?</a></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">intdef-ctx</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._or%2Fc%29%29" class="RktValLink" data-pltdoc="x">or/c</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._internal-definition-context~3f%29%29" class="RktValLink" data-pltdoc="x">internal-definition-context?</a></span><span class="hspace">&nbsp;</span><span class="RktVal">#f</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>=<span class="hspace">&nbsp;</span><span class="RktVal">#f</span></td></tr></table></blockquote></div><div class="SIntrapara">Returns an identifier like <span class="RktVar">id-stx</span>, but without <a href="syntax-model.html#%28tech._use._site._scope%29" class="techoutside" data-pltdoc="x"><span class="techinside">use-site
scopes</span></a> that were previously added to the identifier as part of a
macro expansion. When the <span class="RktVar">intdef-ctx</span> is an internal-definition
context, the function removes use-site scopes created during expansion
in that context. When it is <span class="RktVal">#f</span> (the default), it removes use-site
scopes created during expansion in the current expansion context.</div></p><p>In a <a href="syntax-model.html#%28tech._syntax._transformer%29" class="techoutside" data-pltdoc="x"><span class="techinside">syntax transformer</span></a> that runs in a non-expression context
and forces the expansion of subforms with <span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._local-expand%29%29" class="RktValLink" data-pltdoc="x">local-expand</a></span>, use
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-local-identifier-as-binding%29%29" class="RktValLink" data-pltdoc="x">syntax-local-identifier-as-binding</a></span> on an identifier from the
expansion before moving it into a binding position or comparing it
with <span class="RktSym"><a href="stxcmp.html#%28def._%28%28quote._~23~25kernel%29._bound-identifier~3d~3f%29%29" class="RktValLink" data-pltdoc="x">bound-identifier=?</a></span>. Otherwise, the results can be
inconsistent with the way that <span class="RktSym"><a href="define.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._define%29%29" class="RktStxLink" data-pltdoc="x">define</a></span> works in the same
definition context.</p><p>This procedure must be called during the
dynamic extent of a <a href="syntax-model.html#%28tech._syntax._transformer%29" class="techoutside" data-pltdoc="x"><span class="techinside">syntax transformer</span></a> application by the
expander or while a module is <a href="syntax-model.html#%28tech._visit%29" class="techoutside" data-pltdoc="x"><span class="techinside">visit</span></a>ed (see
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-transforming~3f%29%29" class="RktValLink" data-pltdoc="x">syntax-transforming?</a></span>), otherwise the
<span class="RktSym"><a href="exns.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._exn~3afail~3acontract%29%29" class="RktValLink" data-pltdoc="x">exn:fail:contract</a></span> exception is raised.</p><p class="SHistory">Added in version 6.3 of package <span class="stt">base</span>.<br/>Changed in version 8.2.0.7: Added the optional
<span class="RktVar">intdef-ctx</span> argument.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((quote._~23~25kernel)._syntax-local-introduce))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-local-introduce%29%29" class="RktValDef RktValLink" data-pltdoc="x">syntax-local-introduce</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">stx</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="stxops.html#%28def._%28%28quote._~23~25kernel%29._syntax~3f%29%29" class="RktValLink" data-pltdoc="x">syntax?</a></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">stx</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="stxops.html#%28def._%28%28quote._~23~25kernel%29._syntax~3f%29%29" class="RktValLink" data-pltdoc="x">syntax?</a></span></td></tr></table></blockquote></div><div class="SIntrapara">Produces a syntax object that is like <span class="RktVar">stx</span>, except that the
presence of <a href="syntax-model.html#%28tech._scope%29" class="techoutside" data-pltdoc="x"><span class="techinside">scopes</span></a> for the current expansion&#8212;<wbr></wbr>both the
<a href="syntax-model.html#%28tech._macro._introduction._scope%29" class="techoutside" data-pltdoc="x"><span class="techinside">macro-introduction scope</span></a> and the <a href="syntax-model.html#%28tech._use._site._scope%29" class="techoutside" data-pltdoc="x"><span class="techinside">use-site scope</span></a>, if any&#8212;<wbr></wbr>is flipped
on all parts of the syntax object. See <a href="syntax-model.html#%28part._transformer-model%29" data-pltdoc="x">Transformer Bindings</a> for information
on macro-introduction and use-site <a href="syntax-model.html#%28tech._scope%29" class="techoutside" data-pltdoc="x"><span class="techinside">scopes</span></a>.</div></p><p>This procedure must be called during the
dynamic extent of a <a href="syntax-model.html#%28tech._syntax._transformer%29" class="techoutside" data-pltdoc="x"><span class="techinside">syntax transformer</span></a> application by the
expander or while a module is <a href="syntax-model.html#%28tech._visit%29" class="techoutside" data-pltdoc="x"><span class="techinside">visit</span></a>ed (see
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-transforming~3f%29%29" class="RktValLink" data-pltdoc="x">syntax-transforming?</a></span>), otherwise the
<span class="RktSym"><a href="exns.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._exn~3afail~3acontract%29%29" class="RktValLink" data-pltdoc="x">exn:fail:contract</a></span> exception is raised.</p><p><div class="SIntrapara">Example:</div><div class="SIntrapara"><blockquote class="SCodeFlow"><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="module.html#%28form._%28%28quote._~23~25kernel%29._module%29%29" class="RktStxLink" data-pltdoc="x">module</a></span><span class="hspace">&nbsp;</span><span class="RktSym">example</span><span class="hspace">&nbsp;</span><span class="RktSym">racket</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="hspace">&nbsp;&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="define.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._define-syntax%29%29" class="RktStxLink" data-pltdoc="x">define-syntax</a></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym">require-math</span><span class="hspace">&nbsp;</span><span class="RktVar">stx</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-local-introduce%29%29" class="RktValLink" data-pltdoc="x">syntax-local-introduce</a></span><span class="hspace">&nbsp;</span><span class="RktRdr">#'</span><span class="RktPn">(</span><span class="RktSym"><a href="require.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._require%29%29" class="RktStxLink" data-pltdoc="x">require</a></span><span class="hspace">&nbsp;</span><span class="RktSym">racket/math</span><span class="RktPn">)</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="hspace">&nbsp;&nbsp;</span><span class="RktPn">(</span><span class="RktSym">require-math</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="hspace">&nbsp;&nbsp;</span><span class="RktSym"><a href="generic-numbers.html#%28def._%28%28lib._racket%2Fmath..rkt%29._pi%29%29" class="RktValLink" data-pltdoc="x">pi</a></span><span class="RktPn">)</span></td></tr></table></td></tr></table></blockquote></div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((quote._~23~25kernel)._make-syntax-introducer))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._make-syntax-introducer%29%29" class="RktValDef RktValLink" data-pltdoc="x">make-syntax-introducer</a></span></span><span class="hspace">&nbsp;</span><span class="RktOpt">[</span><span class="RktVar">as-use-site?</span><span class="RktOpt">]</span><span class="RktPn">)</span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktPn">(</span><span class="RktSym"><a href="stxops.html#%28def._%28%28quote._~23~25kernel%29._syntax~3f%29%29" class="RktValLink" data-pltdoc="x">syntax?</a></span><span class="RktPn">)</span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._or%2Fc%29%29" class="RktValLink" data-pltdoc="x">or/c</a></span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">flip</span><span class="hspace">&nbsp;</span><span class="RktVal">'</span>
adds, or removes it in a given syntax object. By default, the fresh
scope is a <a href="syntax-model.html#%28tech._macro._introduction._scope%29" class="techoutside" data-pltdoc="x"><span class="techinside">macro-introduction scope</span></a>, but providing a true value for
<span class="RktVar">as-use-site?</span> creates a scope that is like a <a href="syntax-model.html#%28tech._use._site._scope%29" class="techoutside" data-pltdoc="x"><span class="techinside">use-site scope</span></a>;
the difference is in how the scopes are treated by
<span class="RktSym"><a href="stxops.html#%28def._%28%28quote._~23~25kernel%29._syntax-original~3f%29%29" class="RktValLink" data-pltdoc="x">syntax-original?</a></span>.</div></p><p>The action of the generated procedure can be <span class="RktVal">'</span><span class="RktVal">flip</span> (the
default) to flip the presence of a scope in each part of a given
syntax object, <span class="RktVal">'</span><span class="RktVal">add</span> to add the scope to each regardless of
whether it is present already, or <span class="RktVal">'</span><span class="RktVal">remove</span> to remove the scope
when it is currently present in any part.</p><p>Multiple applications of the same
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._make-syntax-introducer%29%29" class="RktValLink" data-pltdoc="x">make-syntax-introducer</a></span> result procedure use the same scope,
and different result procedures use distinct scopes.</p><p class="SHistory">Changed in version 6.3 of package <span class="stt">base</span>: Added the optional
<span class="RktVar">as-use-site?</span> argument, and
added the optional operation argument
in the result procedure.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((quote._~23~25kernel)._make-interned-syntax-introducer))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._make-interned-syntax-introducer%29%29" class="RktValDef RktValLink" data-pltdoc="x">make-interned-syntax-introducer</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">key</span><span class="RktPn">)</span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktPn">(</span><span class="RktSym"><a href="stxops.html#%28def._%28%28quote._~23~25kernel%29._syntax~3f%29%29" class="RktValLink" data-pltdoc="x">syntax?</a></span><span class="RktPn">)</span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._or%2Fc%29%29" class="RktValLink" data-pltdoc="x">or/c</a></span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">flip</span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">add</span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">remove</span><span class="RktPn">)</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span><span class="RktPn">. </span><span class="RktSym"><a href="function-contracts.html#%28form._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._-~3e%2A%29%29" class="RktStxLink" data-pltdoc="x"><span class="nobreak">-&gt;</span>*</a></span><span class="RktPn"> .</span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="stxops.html#%28def._%28%28quote._~23~25kernel%29._syntax~3f%29%29" class="RktValLink" data-pltdoc="x">syntax?</a></span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">key</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._and%2Fc%29%29" class="RktValLink" data-pltdoc="x">and/c</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="symbols.html#%28def._%28%28quote._~23~25kernel%29._symbol~3f%29%29" class="RktValLink" data-pltdoc="x">symbol?</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="symbols.html#%28def._%28%28quote._~23~25kernel%29._symbol-interned~3f%29%29" class="RktValLink" data-pltdoc="x">symbol-interned?</a></span><span class="RktPn">)</span></td></tr></table></blockquote></div><div class="SIntrapara">Like <span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._make-syntax-introducer%29%29" class="RktValLink" data-pltdoc="x">make-syntax-introducer</a></span>, but the encapsulated <a href="syntax-model.html#%28tech._scope%29" class="techoutside" data-pltdoc="x"><span class="techinside">scope</span></a> is interned. Multiple calls to
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._make-interned-syntax-introducer%29%29" class="RktValLink" data-pltdoc="x">make-interned-syntax-introducer</a></span> with the same <span class="RktVar">key</span> will produce procedures that flip,
add, or remove the same scope, even across <a href="eval-model.html#%28tech._phase%29" class="techoutside" data-pltdoc="x"><span class="techinside">phases</span></a> and module <a href="eval-model.html#%28tech._instantiation%29" class="techoutside" data-pltdoc="x"><span class="techinside">instantiations</span></a>.
Furthermore, the scope remains consistent even when embedded in <a href="syntax-model.html#%28tech._compiled%29" class="techoutside" data-pltdoc="x"><span class="techinside">compiled</span></a> code, so a scope
created with <span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._make-interned-syntax-introducer%29%29" class="RktValLink" data-pltdoc="x">make-interned-syntax-introducer</a></span> will retain its identity in syntax objects
loaded from compiled code. (In this sense, the relationship between <span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._make-syntax-introducer%29%29" class="RktValLink" data-pltdoc="x">make-syntax-introducer</a></span>
and <span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._make-interned-syntax-introducer%29%29" class="RktValLink" data-pltdoc="x">make-interned-syntax-introducer</a></span> is analogous to the relationship between
<span class="RktSym"><a href="symbols.html#%28def._%28%28quote._~23~25kernel%29._gensym%29%29" class="RktValLink" data-pltdoc="x">gensym</a></span> and <span class="RktSym"><a href="quote.html#%28form._%28%28quote._~23~25kernel%29._quote%29%29" class="RktStxLink" data-pltdoc="x">quote</a></span>.)</div></p><p>This function is intended for the implementation of separate <a href="syntax-model.html#%28tech._binding._space%29" class="techoutside" data-pltdoc="x"><span class="techinside">binding spaces</span></a> within a single
phase, for which the scope associated with each environment must be the same across modules.</p><p>Unlike <span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._make-syntax-introducer%29%29" class="RktValLink" data-pltdoc="x">make-syntax-introducer</a></span>, the scope added by a procedure created with
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._make-interned-syntax-introducer%29%29" class="RktValLink" data-pltdoc="x">make-interned-syntax-introducer</a></span> is always treated like a <a href="syntax-model.html#%28tech._use._site._scope%29" class="techoutside" data-pltdoc="x"><span class="techinside">use-site scope</span></a>, not a
<a href="syntax-model.html#%28tech._macro._introduction._scope%29" class="techoutside" data-pltdoc="x"><span class="techinside">macro-introduction scope</span></a>, so it does not affect originalness as reported by <span class="RktSym"><a href="stxops.html#%28def._%28%28quote._~23~25kernel%29._syntax-original~3f%29%29" class="RktValLink" data-pltdoc="x">syntax-original?</a></span>.</p><p class="SHistory">Added in version 6.90.0.28 of package <span class="stt">base</span>.<br/>Changed in version 8.2.0.4: Added the constraint that <span class="RktVar">key</span> is <a href="reader.html#%28tech._interned%29" class="techoutside" data-pltdoc="x"><span class="techinside">interned</span></a>.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><table cellspacing="0" cellpadding="0" class="prototype RForeground"><tr><td valign="top"><span class="RktPn">(</span><a name="(def._((quote._~23~25kernel)._make-syntax-delta-introducer))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._make-syntax-delta-introducer%29%29" class="RktValDef RktValLink" data-pltdoc="x">make-syntax-delta-introducer</a></span></span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="RktVar">ext-stx</span></td><td valign="top"><span class="hspace">&nbsp;</span></td></tr><tr><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="RktVar">base-stx</span></td><td valign="top"><span class="hspace">&nbsp;</span></td></tr><tr><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span><span class="RktOpt">[</span></td><td valign="top"><span class="RktVar">phase-level</span><span class="RktOpt">]</span><span class="RktPn">)</span></td><td valign="top"><span class="hspace">&nbsp;</span></td></tr></table></blockquote></td></tr><tr><td><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktPn">(</span><span class="RktSym"><a href="stxops.html#%28def._%28%28quote._~23~25kernel%29._syntax~3f%29%29" class="RktValLink" data-pltdoc="x">syntax?</a></span><span class="RktPn">)</span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._or%2Fc%29%29" class="RktValLink" data-pltdoc="x">or/c</a></span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">flip</span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">add</span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">remove</span><span class="RktPn">)</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span><span class="RktPn">. </span><span class="RktSym"><a href="function-contracts.html#%28form._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._-~3e%2A%29%29" class="RktStxLink" data-pltdoc="x"><span class="nobreak">-&gt;</span>*</a></span><span class="RktPn"> .</span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="stxops.html#%28def._%28%28quote._~23~25kernel%29._syntax~3f%29%29" class="RktValLink" data-pltdoc="x">syntax?</a></span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">ext-stx</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="stxops.html#%28def._%28%28lib._racket%2Fprivate%2Fstx..rkt%29._identifier~3f%29%29" class="RktValLink" data-pltdoc="x">identifier?</a></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">base-stx</span><span class="hspace">&nbsp;</span>:<span cl
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._make-syntax-introducer%29%29" class="RktValLink" data-pltdoc="x">make-syntax-introducer</a></span>, but using a set of <a href="syntax-model.html#%28tech._scope%29" class="techoutside" data-pltdoc="x"><span class="techinside">scopes</span></a> from
<span class="RktVar">ext-stx</span> and with a default action of <span class="RktVal">'</span><span class="RktVal">add</span>.</div></p><ul><li><p>If the scopes of <span class="RktVar">base-stx</span> are a subset of the scopes
of <span class="RktVar">ext-stx</span>, then the result of
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._make-syntax-delta-introducer%29%29" class="RktValLink" data-pltdoc="x">make-syntax-delta-introducer</a></span> adds, removes, or flips
scopes that are in the set for <span class="RktVar">ext-stx</span> and not in the
set for <span class="RktVar">base-stx</span>.</p></li><li><p>If the scopes of <span class="RktVar">base-stx</span> are not a subset of the
scopes of <span class="RktVar">ext-stx</span>, but if it has a binding, then the
set of scopes associated with the binding id subtracted from
the set of scopes for <span class="RktVar">ext-stx</span>, and the result of
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._make-syntax-delta-introducer%29%29" class="RktValLink" data-pltdoc="x">make-syntax-delta-introducer</a></span> adds, removes, or flips
that difference.</p></li></ul><p>A <span class="RktVal">#f</span> value for <span class="RktVar">base-stx</span> is equivalent to a syntax
object with no <a href="syntax-model.html#%28tech._scope%29" class="techoutside" data-pltdoc="x"><span class="techinside">scopes</span></a>.</p><p>This procedure is potentially useful when some <span class="RktVar">m-id</span> has a
transformer binding that records some <span class="RktVar">orig-id</span>, and a use of
<span class="RktVar">m-id</span> introduces a binding of <span class="RktVar">orig-id</span>. In that
case, the <a href="syntax-model.html#%28tech._scope%29" class="techoutside" data-pltdoc="x"><span class="techinside">scopes</span></a> one the use of <span class="RktVar">m-id</span> added since the
binding of <span class="RktVar">m-id</span> should be transferred to the binding
instance of <span class="RktVar">orig-id</span>, so that it captures uses with the same
lexical context as the use of <span class="RktVar">m-id</span>.</p><p>If <span class="RktVar">ext-stx</span> is <a href="stxcerts.html#%28tech._tainted%29" class="techoutside" data-pltdoc="x"><span class="techinside">tainted</span></a>, then an
identifier result from the created procedure is <a href="stxcerts.html#%28tech._tainted%29" class="techoutside" data-pltdoc="x"><span class="techinside">tainted</span></a>.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((quote._~23~25kernel)._syntax-local-transforming-module-provides~3f))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-local-transforming-module-provides~3f%29%29" class="RktValDef RktValLink" data-pltdoc="x">syntax-local-transforming-module-provides?</a></span></span><span class="RktPn"></span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="booleans.html#%28def._%28%28quote._~23~25kernel%29._boolean~3f%29%29" class="RktValLink" data-pltdoc="x">boolean?</a></span></p></blockquote></td></tr></table></blockquote></div><div class="SIntrapara">Returns <span class="RktVal">#t</span> while a <a href="stxtrans.html#%28tech._provide._transformer%29" class="techoutside" data-pltdoc="x"><span class="techinside">provide transformer</span></a> is running (see
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28lib._racket%2Fprovide-transform..rkt%29._make-provide-transformer%29%29" class="RktValLink" data-pltdoc="x">make-provide-transformer</a></span>) or while an <span class="RktSym">expand</span> sub-form of
<span class="RktSym"><a href="require.html#%28form._%28%28quote._~23~25kernel%29._~23~25provide%29%29" class="RktStxLink" data-pltdoc="x">#%provide</a></span> is expanded, <span class="RktVal">#f</span> otherwise.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((quote._~23~25kernel)._syntax-local-module-defined-identifiers))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-local-module-defined-identifiers%29%29" class="RktValDef RktValLink" data-pltdoc="x">syntax-local-module-defined-identifiers</a></span></span><span class="RktPn"></span><span class="RktPn">)</span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._and%2Fc%29%29" class="RktValLink" data-pltdoc="x">and/c</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="hashtables.html#%28def._%28%28quote._~23~25kernel%29._hash~3f%29%29" class="RktValLink" data-pltdoc="x">hash?</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="booleans.html#%28def._%28%28quote._~23~25kernel%29._immutable~3f%29%29" class="RktValLink" data-pltdoc="x">immutable?</a></span><span class="RktPn">)</span></td></tr></table></blockquote></div><div class="SIntrapara">Can be called only while
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-local-transforming-module-provides~3f%29%29" class="RktValLink" data-pltdoc="x">syntax-local-transforming-module-provides?</a></span> returns
<span class="RktVal">#t</span>.</div></p><p>It returns a hash table mapping a <a href="syntax-model.html#%28tech._phase._level%29" class="techoutside" data-pltdoc="x"><span class="techinside">phase-level</span></a> number (such as
<span class="RktVal">0</span>) to a list of all definitions at that <a href="syntax-model.html#%28tech._phase._level%29" class="techoutside" data-pltdoc="x"><span class="techinside">phase level</span></a>
within the module being expanded. This information is used for
implementing <span class="RktSym"><a href="require.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._provide%29%29" class="RktStxLink" data-pltdoc="x">provide</a></span> sub-forms like <span class="RktSym"><a href="require.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._all-defined-out%29%29" class="RktStxLink" data-pltdoc="x">all-defined-out</a></span>.</p><p>Beware that the <a href="syntax-model.html#%28tech._phase._level%29" class="techoutside" data-pltdoc="x"><span class="techinside">phase-level</span></a> keys are absolute relative to the
enclosing module, and not relative to the current transformer phase
level as reported by <span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-local-phase-level%29%29" class="RktValLink" data-pltdoc="x">syntax-local-phase-level</a></span>.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><table cellspacing="0" cellpadding="0" class="prototype RForeground"><tr><td valign="top"><span class="RktPn">(</span><a name="(def._((quote._~23~25kernel)._syntax-local-module-required-identifiers))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-local-module-required-identifiers%29%29" class="RktValDef RktValLink" data-pltdoc="x">syntax-local-module-required-identifiers</a></span></span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="RktVar">mod-path</span></td><td valign="top"><span class="hspace">&nbsp;</span></td></tr><tr><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="RktVar">shift</span><span class="RktPn">)</span></td><td valign="top"><span class="hspace">&nbsp;</span></td></tr></table></blockquote></td></tr><tr><td><table cellspacing="0" cellpadding="0" class="prototype"><tr><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top">&rarr;</td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._or%2Fc%29%29" class="RktValLink" data-pltdoc="x">or/c</a></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._listof%29%29" class="RktValLink" data-pltdoc="x">listof</a></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._cons%2Fc%29%29" class="RktValLink" data-pltdoc="x">cons/c</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="phase_space.html#%28def._%28%28lib._racket%2Fphase%2Bspace..rkt%29._phase%2Bspace~3f%29%29" class="RktValLink" data-pltdoc="x">phase+space?</a></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._listof%29%29" class="RktValLink" data-pltdoc="x">listof</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="stxops.html#%28def._%28%28lib._racket%2Fprivate%2Fstx..rkt%29._identifier~3f%29%29" class="RktValLink" data-pltdoc="x">identifier?</a></span><span class="RktPn">)</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="RktVal">#f</span><span class="RktPn">)</span></td></tr></table></td></tr></table></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">mod-path</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._or%2Fc%29%29" class="RktValLink" data-pltdoc="x">or/c</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="Module_Names_and_Loading.html#%28def._%28%28quote._~23~25kernel%29._module-path~3f%29%29" class="RktValLink" data-pltdoc="x">module-path?</a></span><span class="hspace">&nbsp;</spa
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-local-transforming-module-provides~3f%29%29" class="RktValLink" data-pltdoc="x">syntax-local-transforming-module-provides?</a></span> returns
<span class="RktVal">#t</span>.</div></p><p>It returns an association list mapping <a href="syntax-model.html#%28tech._phase._level%29" class="techoutside" data-pltdoc="x"><span class="techinside">phase level</span></a> and
<a href="syntax-model.html#%28tech._binding._space%29" class="techoutside" data-pltdoc="x"><span class="techinside">binding space</span></a> combinations to lists of
identifiers. Each list of identifiers includes all bindings imported
(into the module being expanded) using the module path
<span class="RktVar">mod-path</span>, or all modules if <span class="RktVar">mod-path</span> is
<span class="RktVal">#f</span>. The association list includes all identifiers imported
with a phase level and binding space shift as represented by <span class="RktVar">shift</span>,
or all shifts if <span class="RktVar">shift</span> is <span class="RktVal">#t</span>. If <span class="RktVar">shift</span> is
not <span class="RktVal">#t</span>, the result can be <span class="RktVal">#f</span> if no identifiers
are imported at that shift.</p><p>When an identifier is renamed on import, the result association list
includes the identifier by its internal name. Use
<span class="RktSym"><a href="stxcmp.html#%28def._%28%28quote._~23~25kernel%29._identifier-binding%29%29" class="RktValLink" data-pltdoc="x">identifier-binding</a></span> to obtain more information about the
identifier.</p><p>Beware that the <a href="syntax-model.html#%28tech._phase._level%29" class="techoutside" data-pltdoc="x"><span class="techinside">phase-level</span></a> shifts are absolute relative to the
enclosing module, and not relative to the current transformer phase
level as reported by <span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-local-phase-level%29%29" class="RktValLink" data-pltdoc="x">syntax-local-phase-level</a></span>.</p><p class="SHistory">Changed in version 8.2.0.3 of package <span class="stt">base</span>: Generalized <span class="RktVar">shift</span> and result
to phase&ndash;space combinations.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><table cellspacing="0" cellpadding="0" class="together"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>value</p></div></div><p class="RForeground"><a name="(def._((quote._~23~25kernel)._prop~3aliberal-define-context))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._prop~3aliberal-define-context%29%29" class="RktValDef RktValLink" data-pltdoc="x">prop:liberal-define-context</a></span></span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="structprops.html#%28def._%28%28quote._~23~25kernel%29._struct-type-property~3f%29%29" class="RktValLink" data-pltdoc="x">struct-type-property?</a></span></p></blockquote></td></tr></table></td></tr><tr><td><table cellspacing="0" cellpadding="0" class="together"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((quote._~23~25kernel)._liberal-define-context~3f))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._liberal-define-context~3f%29%29" class="RktValDef RktValLink" data-pltdoc="x">liberal-define-context?</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">v</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="booleans.html#%28def._%28%28quote._~23~25kernel%29._boolean~3f%29%29" class="RktValLink" data-pltdoc="x">boolean?</a></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">v</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%2Fc%29%29" class="RktValLink" data-pltdoc="x">any/c</a></span></td></tr></table></td></tr></table></blockquote></div><div class="SIntrapara">An instance of a structure type with a true value for the
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._prop~3aliberal-define-context%29%29" class="RktValLink" data-pltdoc="x">prop:liberal-define-context</a></span> property can be used as an
element of an <a href="syntax-model.html#%28tech._internal._definition._context%29" class="techoutside" data-pltdoc="x"><span class="techinside">internal-definition context</span></a> representation in the
result of <span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-local-context%29%29" class="RktValLink" data-pltdoc="x">syntax-local-context</a></span> or the second argument of
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._local-expand%29%29" class="RktValLink" data-pltdoc="x">local-expand</a></span>. Such a value indicates that the context
supports <a name="(tech._liberal._expansion)"></a><span style="font-style: italic">liberal expansion</span> of <span class="RktSym"><a href="define.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._define%29%29" class="RktStxLink" data-pltdoc="x">define</a></span> forms into
potentially multiple <span class="RktSym"><a href="define.html#%28form._%28%28quote._~23~25kernel%29._define-values%29%29" class="RktStxLink" data-pltdoc="x">define-values</a></span> and
<span class="RktSym"><a href="define.html#%28form._%28%28quote._~23~25kernel%29._define-syntaxes%29%29" class="RktStxLink" data-pltdoc="x">define-syntaxes</a></span> forms. The <span class="RktVal">'</span><span class="RktVal">module</span> and
<span class="RktVal">'</span><span class="RktVal">module-body</span> contexts implicitly allow <a href="stxtrans.html#%28tech._liberal._expansion%29" class="techoutside" data-pltdoc="x"><span class="techinside">liberal
expansion</span></a>.</div></p><p>The <span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._liberal-define-context~3f%29%29" class="RktValLink" data-pltdoc="x">liberal-define-context?</a></span> predicate returns <span class="RktVal">#t</span> if
<span class="RktVar">v</span> is an instance of a structure with a true value for the
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._prop~3aliberal-define-context%29%29" class="RktValLink" data-pltdoc="x">prop:liberal-define-context</a></span> property, <span class="RktVal">#f</span> otherwise.</p><h5 x-source-module="(lib &quot;scribblings/reference/reference.scrbl&quot;)" x-source-pkg="racket-doc" x-part-tag="&quot;require-trans&quot;">12.4.1<tt>&nbsp;</tt><a name="(part._require-trans)"></a><a name="(mod-path._racket/require-transform)"></a><span class="RktSym"><a href="require.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._require%29%29" class="RktStxLink" data-pltdoc="x">require</a></span> Transformers</h5><p><div class="SIntrapara"><table cellspacing="0" cellpadding="0" class="defmodule"><tr><td align="left"><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="require.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._require%29%29" class="RktStxLink" data-pltdoc="x">require</a></span><span class="stt"> </span><a href="stxtrans.html#%28mod-path._racket%2Frequire-transform%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">racket/require-transform</span></a><span class="RktPn">)</span></td><td align="right"><span class="RpackageSpec"><span class="Smaller">&nbsp;package:</span> <a href="https://pkgs.racket-lang.org/package/base" title="Install this package using `raco pkg install base`"><span class="stt">base</span></a></span></td></tr></table></div><div class="SIntrapara">The bindings documented in this section are provided by the <a href="stxtrans.html#%28mod-path._racket%2Frequire-transform%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">racket/require-transform</span></a> library, not <a href="index.html" class="RktModLink" data-pltdoc="x"><span class="RktSym">racket/base</span></a> or <a href="index.html" class="RktModLink" data-pltdoc="x"><span class="RktSym">racket</span></a>.</div></p><p>A <a href="syntax-model.html#%28tech._transformer%29" class="techoutside" data-pltdoc="x"><span class="techinside">transformer</span></a> binding whose value is a structure with the
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28lib._racket%2Frequire-transform..rkt%29._prop~3arequire-transformer%29%29" class="RktValLink" data-pltdoc="x">prop:require-transformer</a></span> property implements a derived
<span class="RktVar">require-spec</span> for <span class="RktSym"><a href="require.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._require%29%29" class="RktStxLink" data-pltdoc="x">require</a></span> as a <a name="(tech._require._transformer)"></a><span style="font-style: italic">require
transformer</span>.</p><p>A <a href="stxtrans.html#%28tech._require._transformer%29" class="techoutside" data-pltdoc="x"><span class="techinside">require transformer</span></a> is called with the syntax object representing its use
as a <span class="RktVar">require-spec</span> within a <span class="RktSym"><a href="require.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._require%29%29" class="RktStxLink" data-pltdoc="x">require</a></span> form, and the
result must be two lists: a list of <span class="RktSym"><a href="stxtrans.html#%28def._%28%28lib._racket%2Frequire-transform..rkt%29._import%29%29" class="RktValLink" data-pltdoc="x">import</a></span>s and a list of
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28lib._racket%2Frequire-transform..rkt%29._import-source%29%29" class="RktValLink" data-pltdoc="x">import-source</a></span>s.</p><p>If the derived form contains a sub-form that is a
<span class="RktVar">require-spec</span>, then it can call <span class="RktSym"><a href="stxtrans.html#%28def._%28%28lib._racket%2Frequire-transform..rkt%29._expand-import%29%29" class="RktValLink" data-pltdoc="x">expand-import</a></span> to
transform the sub-<span class="RktVar">require-spec</span> to lists of imports and
import sources.</p><p>See also <span class="RktSym"><a href="define.html#%28form._%28%28lib._racket%2Frequire-syntax..rkt%29._define-require-syntax%29%29" class="RktStxLink" data-pltdoc="x">define-require-syntax</a></span>, which supports macro-style
<span class="RktSym"><a href="require.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._require%29%29" class="RktStxLink" data-pltdoc="x">require</a></span> transformers.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._racket/require-transform..rkt)._expand-import))"></a><span title="Provided from: racket/require-transform | Package: base"><span class="RktSym"><a href="stxtrans.html#%28def._%28%28lib._racket%2Frequire-transform..rkt%29._expand-import%29%29" class="RktValDef RktValLink" data-pltdoc="x">expand-import</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">require-spec</span><span class="RktPn">)</span></p></blockquote></td></tr><tr><td><table cellspacing="0" cellpadding="0" class="prototype"><tr><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top">&rarr;</td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><table cellspacing="0" cellpadding="0"><tr><td><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._listof%29%29" class="RktValLink" data-pltdoc="x">listof</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="stxtrans.html#%28def._%28%28lib._racket%2Frequire-transform..rkt%29._import~3f%29%29" class="RktValLink" data-pltdoc="x">import?</a></span><span class="RktPn">)</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._listof%29%29" class="RktValLink" data-pltdoc="x">listof</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="stxtrans.html#%28def._%28%28lib._racket%2Frequire-transform..rkt%29._import-source~3f%29%29" class="RktValLink" data-pltdoc="x">import-source?</a></span><span class="RktPn">)</span></td></tr></table></td></tr></table></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">require-spec</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="stxops.html#%28def._%28%28quote._~23~25kernel%29._syntax~3f%29%29" class="RktValLink" data-pltdoc="x">syntax?</a></span></td></tr></table></blockquote></div><div class="SIntrapara">Expands the given <span class="RktVar">require-spec</span> to lists of imports and
import sources. The latter specifies modules to be
<a href="eval-model.html#%28tech._instantiate%29" class="techoutside" data-pltdoc="x"><span class="techinside">instantiate</span></a>d or <a href="syntax-model.html#%28tech._visit%29" class="techoutside" data-pltdoc="x"><span class="techinside">visit</span></a>ed, so the modules that it
represents should be a superset of the modules represented in the
former list (so that a module will be <a href="eval-model.html#%28tech._instantiate%29" class="techoutside" data-pltdoc="x"><span class="techinside">instantiate</span></a>d or
<a href="syntax-model.html#%28tech._visit%29" class="techoutside" data-pltdoc="x"><span class="techinside">visit</span></a>ed even if all of imports are eventually filtered from the
former list).</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._racket/require-transform..rkt)._make-require-transformer))"></a><span title="Provided from: racket/require-transform | Package: base"><span class="RktSym"><a href="stxtrans.html#%28def._%28%28lib._racket%2Frequire-transform..rkt%29._make-require-transformer%29%29" class="RktValDef RktValLink" data-pltdoc="x">make-require-transformer</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">proc</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="stxtrans.html#%28def._%28%28lib._racket%2Frequire-transform..rkt%29._require-transformer~3f%29%29" class="RktValLink" data-pltdoc="x">require-transformer?</a></span></p></blockquote></td></tr><tr><td><table cellspacing="0" cellpadding="0" class="argcontract"><tr><td valign="top"><span class="hspace">&nbsp;&nbsp;</span></td><td valign="top"><span class="RktVar">proc</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top">:</td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><span class="RktPn">(</span><span class="RktSym"><a href="stxops.html#%28def._%28%28quote._~23~25kernel%29._syntax~3f%29%29" class="RktValLink" data-pltdoc="x">syntax?</a></span><span class="hspace">&nbsp;</span><span class="RktPn">. </span><span class="RktSym"><a href="function-contracts.html#%28form._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._-~3e%29%29" class="RktStxLink" data-pltdoc="x"><span class="nobreak">-&gt;</span></a></span><span class="RktPn"> .</span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="values.html#%28def._%28%28quote._~23~25kernel%29._values%29%29" class="RktValLink" data-pltdoc="x">values</a></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._listof%29%29" class="RktValLink" data-pltdoc="x">listof</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="stxtrans.html#%28def._%28%28lib._racket%2Frequire-transform..rkt%29._import~3f%29%29" class="RktValLink" data-pltdoc="x">import?</a></span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._listof%29%29" class="RktValLink" data-pltdoc="x">listof</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="stxtrans.html#%28def._%28%28lib._racket%2Frequire-transform..rkt%29._import-source~3f%29%29" class="RktValLink" data-pltdoc="x">import-source?</a></span><span class="RktPn">)</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr></table></td></tr></table></td></tr></table></blockquote></div><div class="SIntrapara">Creates a <a href="stxtrans.html#%28tech._require._transformer%29" class="techoutside" data-pltdoc="x"><span class="techinside">require transformer</span></a> using the given procedure as the
transformer.
Often used in combination with <span class="RktSym"><a href="stxtrans.html#%28def._%28%28lib._racket%2Frequire-transform..rkt%29._expand-import%29%29" class="RktValLink" data-pltdoc="x">expand-import</a></span>.</div></p><p><div class="SIntrapara">Examples:</div><div class="SIntrapara"><blockquote class="SCodeFlow"><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="require.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._require%29%29" class="RktStxLink" data-pltdoc="x">require</a></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="require.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._for-syntax%29%29" class="RktStxLink" data-pltdoc="x">for-syntax</a></span><span class="hspace">&nbsp;</span><span class="RktSym">racket/require-transform</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr><tr><td><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="define.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._define-syntax%29%29" class="RktStxLink" data-pltdoc="x">define-syntax</a></span><span class="hspace">&nbsp;</span><span class="RktSym">printing</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="hspace">&nbsp;&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="stxtrans.html#%28def._%28%28lib._racket%2Frequire-transform..rkt%29._make-require-transformer%29%29" class="RktValLink" data-pltdoc="x">make-require-transformer</a></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="hspace">&nbsp;&nbsp;&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="lambda.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._lambda%29%29" class="RktStxLink" data-pltdoc="x">lambda</a></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym">stx</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="stx-patterns.html#%28form._%28%28lib._racket%2Fprivate%2Fstxcase-scheme..rkt%29._syntax-case%29%29" class="RktStxLink" data-pltdoc="x">syntax-case</a></span><span class="hspace">&nbsp;</span><span class="RktSym">stx</span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="RktPn">[</span><span class="RktPn">(</span><span class="RktSym"><a href="stx-patterns.html#%28form._%28%28lib._racket%2Fprivate%2Fstxcase-scheme..rkt%29.__%29%29" class="RktStxLink" data-pltdoc="x">_</a></span><span class="hspace">&nbsp;</span><span class="RktSym">path</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="begin.html#%28form._%28%28quote._~23~25kernel%29._begin%29%29" class="RktStxLink" data-pltdoc="x">begin</a></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="Writing.html#%28def._%28%28quote._~23~25kernel%29._printf%29%29" class="RktValLink" data-pltdoc="x">printf</a></span><span class="hspace">&nbsp;</span><span class="RktVal">"Importing: ~a~n"</span><span class="hspace">&nbsp;</span><span class="RktRdr">#'</span><span class="RktSym">path</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="stxtrans.html#%28def._%28%28lib
value must be a procedure that takes the structure and returns a transformer
procedure; the returned transformer procedure takes a syntax object and returns
import and import-source lists.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._racket/require-transform..rkt)._require-transformer~3f))"></a><span title="Provided from: racket/require-transform | Package: base"><span class="RktSym"><a href="stxtrans.html#%28def._%28%28lib._racket%2Frequire-transform..rkt%29._require-transformer~3f%29%29" class="RktValDef RktValLink" data-pltdoc="x">require-transformer?</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">v</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="booleans.html#%28def._%28%28quote._~23~25kernel%29._boolean~3f%29%29" class="RktValLink" data-pltdoc="x">boolean?</a></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">v</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%2Fc%29%29" class="RktValLink" data-pltdoc="x">any/c</a></span></td></tr></table></blockquote></div><div class="SIntrapara">Returns <span class="RktVal">#t</span> if <span class="RktVar">v</span> has the
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28lib._racket%2Frequire-transform..rkt%29._prop~3arequire-transformer%29%29" class="RktValLink" data-pltdoc="x">prop:require-transformer</a></span> property, <span class="RktVal">#f</span> otherwise.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>struct</p></div></div><table cellspacing="0" cellpadding="0" class="RForeground"><tr><td><span class="RktPn">(</span><span class="RktSym"><a href="define-struct.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._struct%29%29" class="RktStxLink" data-pltdoc="x">struct</a></span></td><td><span class="hspace">&nbsp;</span></td><td><span class="nobreak"><a name="(def._((lib._racket/require-transform..rkt)._import-orig-stx))"></a><a name="(def._((lib._racket/require-transform..rkt)._import-orig-mode))"></a><a name="(def._((lib._racket/require-transform..rkt)._import-req-mode))"></a><a name="(def._((lib._racket/require-transform..rkt)._import-mode))"></a><a name="(def._((lib._racket/require-transform..rkt)._import-src-mod-path))"></a><a name="(def._((lib._racket/require-transform..rkt)._import-src-sym))"></a><a name="(def._((lib._racket/require-transform..rkt)._import-local-id))"></a><a name="(def._((lib._racket/require-transform..rkt)._make-import))"></a><a name="(def._((lib._racket/require-transform..rkt)._import~3f))"></a><a name="(def._((lib._racket/require-transform..rkt)._struct~3aimport))"></a><a name="(def._((lib._racket/require-transform..rkt)._import))"></a><span title="Provided from: racket/require-transform | Package: base"><span class="RktSym"><a href="stxtrans.html#%28def._%28%28lib._racket%2Frequire-transform..rkt%29._import%29%29" class="RktValDef RktValLink" data-pltdoc="x">import</a></span></span></span></td><td><span class="hspace">&nbsp;</span><span class="RktPn">(</span></td><td><span class="nobreak"><span class="RktSym">local-id</span></span></td></tr><tr><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="RktSym">src-sym</span></td></tr><tr><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="RktSym">src-mod-path</span></td></tr><tr><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="RktSym">mode</span></td></tr><tr><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="RktSym">req-mode</span></td></tr><tr><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="RktSym">orig-mode</span></td></tr><tr><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="RktSym">orig-stx</span><span class="RktPn">)</span></td></tr></table></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="RktPn">#:extra-constructor-name</span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="stxtrans.html#%28def._%28%28lib._racket%2Frequire-transform..rkt%29._make-import%29%29" class="RktValLink" data-pltdoc="x">make-import</a></span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktSym">local-id</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="stxops.html#%28def._%28%28lib._racket%2F
importing module, but <span class="emph">without</span> any space-specific scope
implied by <span class="RktSym">mode</span>.</p></li><li><p><span class="RktSym">src-sym</span> &#8212;<wbr></wbr> the external name of the binding as
exported from its source module.</p></li><li><p><span class="RktSym">src-mod-path</span> &#8212;<wbr></wbr> a <a href="Module_Names_and_Loading.html#%28tech._module._path%29" class="techoutside" data-pltdoc="x"><span class="techinside">module path</span></a> (relative to the
importing module) for the source of the imported binding.</p></li><li><p><span class="RktSym">mode</span> &#8212;<wbr></wbr> the <a href="syntax-model.html#%28tech._phase._level%29" class="techoutside" data-pltdoc="x"><span class="techinside">phase level</span></a> and <a href="syntax-model.html#%28tech._binding._space%29" class="techoutside" data-pltdoc="x"><span class="techinside">binding
space</span></a> of the binding in the importing module, which must be the
same as <span class="RktPn">(</span><span class="RktSym"><a href="phase_space.html#%28def._%28%28lib._racket%2Fphase%2Bspace..rkt%29._phase%2Bspace%2B%29%29" class="RktValLink" data-pltdoc="x">phase+space+</a></span><span class="stt"> </span><span class="RktSym">orig-mode</span><span class="stt"> </span><span class="RktSym">req-mode</span><span class="RktPn">)</span>.</p></li><li><p><span class="RktSym">req-mode</span> &#8212;<wbr></wbr> the <a href="syntax-model.html#%28tech._phase._level%29" class="techoutside" data-pltdoc="x"><span class="techinside">phase level</span></a> shift and
<a href="syntax-model.html#%28tech._binding._space%29" class="techoutside" data-pltdoc="x"><span class="techinside">binding space</span></a> shift of the import relative to the
exporting module.</p></li><li><p><span class="RktSym">orig-mode</span> &#8212;<wbr></wbr> the <a href="syntax-model.html#%28tech._phase._level%29" class="techoutside" data-pltdoc="x"><span class="techinside">phase level</span></a> and <a href="syntax-model.html#%28tech._binding._space%29" class="techoutside" data-pltdoc="x"><span class="techinside">binding
space</span></a> of the binding as exported by the exporting module.</p></li><li><p><span class="RktSym">orig-stx</span> &#8212;<wbr></wbr> a <a href="syntax-model.html#%28tech._syntax._object%29" class="techoutside" data-pltdoc="x"><span class="techinside">syntax object</span></a> for the source of
the import, used for error reporting.</p></li></ul><p class="SHistory">Changed in version 8.2.0.3 of package <span class="stt">base</span>: Generalized modes to phase&ndash;space combinations.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>struct</p></div></div><table cellspacing="0" cellpadding="0" class="RForeground"><tr><td><span class="RktPn">(</span><span class="RktSym"><a href="define-struct.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._struct%29%29" class="RktStxLink" data-pltdoc="x">struct</a></span></td><td><span class="hspace">&nbsp;</span></td><td><a name="(def._((lib._racket/require-transform..rkt)._import-source-mode))"></a><a name="(def._((lib._racket/require-transform..rkt)._import-source-mod-path-stx))"></a><a name="(def._((lib._racket/require-transform..rkt)._make-import-source))"></a><a name="(def._((lib._racket/require-transform..rkt)._import-source~3f))"></a><a name="(def._((lib._racket/require-transform..rkt)._struct~3aimport-source))"></a><a name="(def._((lib._racket/require-transform..rkt)._import-source))"></a><span title="Provided from: racket/require-transform | Package: base"><span class="RktSym"><a href="stxtrans.html#%28def._%28%28lib._racket%2Frequire-transform..rkt%29._import-source%29%29" class="RktValDef RktValLink" data-pltdoc="x">import-source</a></span></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym">mod-path-stx</span><span class="stt"> </span><span class="RktSym">mode</span><span class="RktPn">)</span></td></tr></table></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="RktPn">#:extra-constructor-name</span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="stxtrans.html#%28def._%28%28lib._racket%2Frequire-transform..rkt%29._make-import-source%29%29" class="RktValLink" data-pltdoc="x">make-import-source</a></span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktSym">mod-path-stx</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._syntax%2Fc%29%29" class="RktValLink" data-pltdoc="x">syntax/c</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="Module_Names_and_Loading.html#%28def._%28%28quote._~23~25kernel%29._module-path~3f%29%29" class="RktValLink" data-pltdoc="x">module-path?</a></span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktSym">mode</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="phase_space.html#%28def._%28%28lib._racket%2Fphase%2Bspace..rkt%29._phase%2Bspace-shift~3f%29%29" class="RktValLink" data-pltdoc="x">phase+space-shift?</a></span></td></tr></table></blockquote></div><div class="SIntrapara">A structure representing an imported module, which must be
<a href="eval-model.html#%28tech._instantiate%29" class="techoutside" data-pltdoc="x"><span class="techinside">instantiate</span></a>d or <a href="syntax-model.html#%28tech._visit%29" class="techoutside" data-pltdoc="x"><span class="techinside">visit</span></a>ed even if no binding is imported
into a module.</div></p><ul><li><p><span class="RktSym">mod-path-stx</span> &#8212;<wbr></wbr> a <a href="Module_Names_and_Loading.html#%28tech._module._path%29" class="techoutside" data-pltdoc="x"><span class="techinside">module path</span></a> (relative
to the importing module) for the source of the imported binding.</p></li><li><p><span class="RktSym">mode</span> &#8212;<wbr></wbr> the <a href="syntax-model.html#%28tech._phase._level%29" class="techoutside" data-pltdoc="x"><span class="techinside">phase level</span></a> shift and
<a href="syntax-model.html#%28tech._binding._space%29" class="techoutside" data-pltdoc="x"><span class="techinside">binding space</span></a> shift of the import.</p></li></ul><p class="SHistory">Changed in version 8.2.0.3 of package <span class="stt">base</span>: Generalized <span class="RktSym">mode</span> to phase&ndash;space combinations.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>parameter</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._racket/require-transform..rkt)._current-require-module-path))"></a><span title="Provided from: racket/require-transform | Package: base"><span class="RktSym"><a href="stxtrans.html#%28def._%28%28lib._racket%2Frequire-transform..rkt%29._current-require-module-path%29%29" class="RktValDef RktValLink" data-pltdoc="x">current-require-module-path</a></span></span><span class="RktPn"></span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._or%2Fc%29%29" class="RktValLink" data-pltdoc="x">or/c</a></span><span class="hspace">&nbsp;</span><span class="RktVal">#f</span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="Module_Names_and_Loading.html#%28def._%28%28quote._~23~25kernel%29._module-path-index~3f%29%29" class="RktValLink" data-pltdoc="x">module-path-index?</a></span><span class="RktPn">)</span></p></blockquote></td></tr><tr><td><span class="RktPn">(</span><span title="Provided from: racket/require-transform | Package: base"><span class="RktSym"><a href="stxtrans.html#%28def._%28%28lib._racket%2Frequire-transform..rkt%29._current-require-module-path%29%29" class="RktValDef RktValLink" data-pltdoc="x">current-require-module-path</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">module-path</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="void.html#%28def._%28%28quote._~23~25kernel%29._void~3f%29%29" class="RktValLink" data-pltdoc="x">void?</a></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">module-path</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._or%2Fc%29%29" class="RktValLink" data-pltdoc="x">or/c</a></span><span class="hspace">&nbsp;</span><span class="RktVal">#f</span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="Module_Names_and_Loading.html#%28def._%28%28quote._~23~25kernel%29._module-path-index~3f%29%29" class="RktValLink" data-pltdoc="x">module-path-index?</a></span><span class="RktPn">)</span></td></tr></table></blockquote></div><div class="SIntrapara">A <a href="eval-model.html#%28tech._parameter%29" class="techoutside" data-pltdoc="x"><span class="techinside">parameter</span></a> that determines how relative <span class="RktSym"><a href="require.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._require%29%29" class="RktStxLink" data-pltdoc="x">require</a></span>-level module
paths are expanded to <span class="RktSym"><a href="require.html#%28form._%28%28quote._~23~25kernel%29._~23~25require%29%29" class="RktStxLink" data-pltdoc="x">#%require</a></span>-level module paths by
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28lib._racket%2Frequire-transform..rkt%29._convert-relative-module-path%29%29" class="RktValLink" data-pltdoc="x">convert-relative-module-path</a></span> (which is used implicitly by all
built-in <span class="RktSym"><a href="require.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._require%29%29" class="RktStxLink" data-pltdoc="x">require</a></span> sub-forms).</div></p><p>When the value of <span class="RktSym"><a href="stxtrans.html#%28def._%28%28lib._racket%2Frequire-transform..rkt%29._current-require-module-path%29%29" class="RktValLink" data-pltdoc="x">current-require-module-path</a></span> is <span class="RktVal">#f</span>,
relative module paths are left as-is, which means that the
<span class="RktSym"><a href="require.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._require%29%29" class="RktStxLink" data-pltdoc="x">require</a></span> context determines the resolution of the module
path.</p><p>The <span class="RktSym"><a href="require.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._require%29%29" class="RktStxLink" data-pltdoc="x">require</a></span> form <span class="RktSym"><a href="parameters.html#%28form._%28%28lib._racket%2Fprivate%2Fmore-scheme..rkt%29._parameterize%29%29" class="RktStxLink" data-pltdoc="x">parameterize</a></span>s
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28lib._racket%2Frequire-transform..rkt%29._current-require-module-path%29%29" class="RktValLink" data-pltdoc="x">current-require-module-path</a></span> as <span class="RktVal">#f</span> while invoking
sub-form transformers, while <span class="RktSym"><a href="require.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._relative-in%29%29" class="RktStxLink" data-pltdoc="x">relative-in</a></span> <span class="RktSym"><a href="parameters.html#%28form._%28%28lib._racket%2Fprivate%2Fmore-scheme..rkt%29._parameterize%29%29" class="RktStxLink" data-pltdoc="x">parameterize</a></span>s
to a given module path.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._racket/require-transform..rkt)._convert-relative-module-path))"></a><span title="Provided from: racket/require-transform | Package: base"><span class="RktSym"><a href="stxtrans.html#%28def._%28%28lib._racket%2Frequire-transform..rkt%29._convert-relative-module-path%29%29" class="RktValDef RktValLink" data-pltdoc="x">convert-relative-module-path</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">module-path</span><span class="RktPn">)</span></p></blockquote></td></tr><tr><td><table cellspacing="0" cellpadding="0" class="prototype"><tr><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top">&rarr;</td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._or%2Fc%29%29" class="RktValLink" data-pltdoc="x">or/c</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="Module_Names_and_Loading.html#%28def._%28%28quote._~23~25kernel%29._module-path~3f%29%29" class="RktValLink" data-pltdoc="x">module-path?</a></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._syntax%2Fc%29%29" class="RktValLink" data-pltdoc="x">syntax/c</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="Module_Names_and_Loading.html#%28def._%28%28quote._~23~25kernel%29._module-path~3f%29%29" class="RktValLink" data-pltdoc="x">module-path?</a></span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr></table></td></tr></table></td></tr><tr><td><table cellspacing="0" cellpadding="0" class="argcontract"><tr><td valign="top"><span class="hspace">&nbsp;&nbsp;</span></td><td valign="top"><span class="RktVar">module-path</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top">:</td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._or%2Fc%29%29" class="RktValLink" data-pltdoc="x">or/c</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="Module_Names_and_Loading.html#%28def._%28%28quote._~23~25kernel%29._module-path~3f%29%29" class="RktValLink" data-pltdoc="x">module-path?</a></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._syntax%2Fc%29%29" class="RktValLink" data-pltdoc="x">syntax/c</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="Module_Names_and_Loading.html#%28def._%28%28quote._~23~25kernel%29._module-path~3f%29%29" class="RktValLink" data-pltdoc="x">module-path?</a></span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr></table></td></tr></table></td></tr></table></blockquote></div><div class="SIntrapara">Converts <span class="RktVar">module-path</span> according to <span class="RktSym"><a href="stxtrans.html#%28def._%28%28lib._racket%2Frequire-transform..rkt%29._current-require-module-path%29%29" class="RktValLink" data-pltdoc="x">current-require-module-path</a></span>.</div></p><p>If <span class="RktVar">module-path</span> is not relative or if the value of
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28lib._racket%2Frequire-transform..rkt%29._current-require-module-path%29%29" class="RktValLink" data-pltdoc="x">current-require-module-path</a></span> is <span class="RktVal">#f</span>, then
<span class="RktVar">module-path</span> is returned. Otherwise, <span class="RktVar">module-path</span> is
converted to an absolute module path that is equivalent to
<span class="RktVar">module-path</span> relative to the value of
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28lib._racket%2Frequire-transform..rkt%29._current-require-module-path%29%29" class="RktValLink" data-pltdoc="x">current-require-module-path</a></span>.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._racket/require-transform..rkt)._syntax-local-require-certifier))"></a><span title="Provided from: racket/require-transform | Package: base"><span class="RktSym"><a href="stxtrans.html#%28def._%28%28lib._racket%2Frequire-transform..rkt%29._syntax-local-require-certifier%29%29" class="RktValDef RktValLink" data-pltdoc="x">syntax-local-require-certifier</a></span></span><span class="RktPn"></span><span class="RktPn">)</span></p></blockquote></td></tr><tr><td><table cellspacing="0" cellpadding="0" class="prototype"><tr><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top">&rarr;</td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><span class="RktPn">(</span><span class="RktPn">(</span><span class="RktSym"><a href="stxops.html#%28def._%28%28quote._~23~25kernel%29._syntax~3f%29%29" class="RktValLink" data-pltdoc="x">syntax?</a></span><span class="RktPn">)</span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._or%2Fc%29%29" class="RktValLink" data-pltdoc="x">or/c</a></span><span class="hspace">&nbsp;</span><span class="RktVal">#f</span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="stxops.html#%28def._%28%28quote._~23~25kernel%29._syntax~3f%29%29" class="RktValLink" data-pltdoc="x">syntax?</a></span><span class="hspace">&nbsp;</span><span class="RktPn">. </span><span class="RktSym"><a href="function-contracts.html#%28form._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._-~3e%29%29" class="RktStxLink" data-pltdoc="x"><span class="nobreak">-&gt;</span></a></span><span class="RktPn"> .</span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="stxops.html#%28def._%28%28quote._~23~25kernel%29._syntax~3f%29%29" class="RktValLink" data-pltdoc="x">syntax?</a></span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;</span><span class="RktPn">. </span><span class="RktSym"><a href="function-contracts.html#%28form._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._-~3e%2A%29%29" class="RktStxLink" data-pltdoc="x"><span class="nobreak">-&gt;</span>*</a></span><span class="RktPn"> .</span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="stxops.html#%28def._%28%28quote._~23~25kernel%29._syntax~3f%29%29" class="RktValLink" data-pltdoc="x">syntax?</a></span><span class="RktPn">)</span></td></tr></table></td></tr></table></td></tr></table></blockquote></div><div class="SIntrapara">For backward compatibility only; returns a procedure that returns its
first argument.</div></p><h5 x-source-module="(lib &quot;scribblings/reference/reference.scrbl&quot;)" x-source-pkg="racket-doc" x-part-tag="&quot;provide-trans&quot;">12.4.2<tt>&nbsp;</tt><a name="(part._provide-trans)"></a><a name="(mod-path._racket/provide-transform)"></a><span class="RktSym"><a href="require.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._provide%29%29" class="RktStxLink" data-pltdoc="x">provide</a></span> Transformers</h5><p><div class="SIntrapara"><table cellspacing="0" cellpadding="0" class="defmodule"><tr><td align="left"><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="require.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._require%29%29" class="RktStxLink" data-pltdoc="x">require</a></span><span class="stt"> </span><a href="stxtrans.html#%28mod-path._racket%2Fprovide-transform%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">racket/provide-transform</span></a><span class="RktPn">)</span></td><td align="right"><span class="RpackageSpec"><span class="Smaller">&nbsp;package:</span> <a href="https://pkgs.racket-lang.org/package/base" title="Install this package using `raco pkg install base`"><span class="stt">base</span></a></span></td></tr></table></div><div class="SIntrapara">The bindings documented in this section are provided by the <a href="stxtrans.html#%28mod-path._racket%2Fprovide-transform%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">racket/provide-transform</span></a> library, not <a href="index.html" class="RktModLink" data-pltdoc="x"><span class="RktSym">racket/base</span></a> or <a href="index.html" class="RktModLink" data-pltdoc="x"><span class="RktSym">racket</span></a>.</div></p><p>A <a href="syntax-model.html#%28tech._transformer%29" class="techoutside" data-pltdoc="x"><span class="techinside">transformer</span></a> binding whose value is a structure with the
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28lib._racket%2Fprovide-transform..rkt%29._prop~3aprovide-transformer%29%29" class="RktValLink" data-pltdoc="x">prop:provide-transformer</a></span> property implements a derived
<span class="RktVar">provide-spec</span> for <span class="RktSym"><a href="require.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._provide%29%29" class="RktStxLink" data-pltdoc="x">provide</a></span> as a <a name="(tech._provide._transformer)"></a><span style="font-style: italic">provide transformer</span>.
A <a href="stxtrans.html#%28tech._provide._transformer%29" class="techoutside" data-pltdoc="x"><span class="techinside">provide transformer</span></a> is applied as part of the last phase of
a module&rsquo;s expansion, after all other declarations and expressions within
the module are expanded.</p><p>A <a href="syntax-model.html#%28tech._transformer%29" class="techoutside" data-pltdoc="x"><span class="techinside">transformer</span></a> binding whose value is a structure with the
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28lib._racket%2Fprovide-transform..rkt%29._prop~3aprovide-pre-transformer%29%29" class="RktValLink" data-pltdoc="x">prop:provide-pre-transformer</a></span> property implements a derived
<span class="RktVar">provide-spec</span> for <span class="RktSym"><a href="require.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._provide%29%29" class="RktStxLink" data-pltdoc="x">provide</a></span> as a <a name="(tech._provide._pre._transformer)"></a><span style="font-style: italic">provide
pre-transformer</span>. A <a href="stxtrans.html#%28tech._provide._pre._transformer%29" class="techoutside" data-pltdoc="x"><span class="techinside">provide pre-transformer</span></a> is applied as part
of the first phase of a module&rsquo;s expansion. Since it is used in the
first phase, a <a href="stxtrans.html#%28tech._provide._pre._transformer%29" class="techoutside" data-pltdoc="x"><span class="techinside">provide pre-transformer</span></a> can use functions such
as <span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-local-lift-expression%29%29" class="RktValLink" data-pltdoc="x">syntax-local-lift-expression</a></span> to introduce expressions and
definitions in the enclosing module.</p><p>An identifier can have a <a href="syntax-model.html#%28tech._transformer%29" class="techoutside" data-pltdoc="x"><span class="techinside">transformer</span></a> binding to a value that
acts both as a <a href="stxtrans.html#%28tech._provide._transformer%29" class="techoutside" data-pltdoc="x"><span class="techinside">provide transformer</span></a> and <a href="stxtrans.html#%28tech._provide._pre._transformer%29" class="techoutside" data-pltdoc="x"><span class="techinside">provide
pre-transformer</span></a>. The result of a <a href="stxtrans.html#%28tech._provide._pre._transformer%29" class="techoutside" data-pltdoc="x"><span class="techinside">provide
pre-transformer</span></a> is <span class="emph">not</span> automatically re-expanded, so a
<a href="stxtrans.html#%28tech._provide._pre._transformer%29" class="techoutside" data-pltdoc="x"><span class="techinside">provide pre-transformer</span></a> can usefully expand to itself in that case.</p><p>A transformer is called with the syntax object representing its use as
a <span class="RktVar">provide-spec</span> within a <span class="RktSym"><a href="require.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._provide%29%29" class="RktStxLink" data-pltdoc="x">provide</a></span> form and a list of
symbols representing the export modes specified by enclosing
<span class="RktVar">provide-spec</span>s. The result of a <a href="stxtrans.html#%28tech._provide._transformer%29" class="techoutside" data-pltdoc="x"><span class="techinside">provide transformer</span></a>
must be a list of <span class="RktSym"><a href="stxtrans.html#%28def._%28%28lib._racket%2Fprovide-transform..rkt%29._export%29%29" class="RktValLink" data-pltdoc="x">export</a></span>s, while the result of a
<a href="stxtrans.html#%28tech._provide._pre._transformer%29" class="techoutside" data-pltdoc="x"><span class="techinside">provide pre-transformer</span></a> is a syntax object to be used as a
<span class="RktVar">provide-spec</span> in the last phase of module expansion.</p><p>If a derived form contains a sub-form that is a
<span class="RktVar">provide-spec</span>, then it can call <span class="RktSym"><a href="stxtrans.html#%28def._%28%28lib._racket%2Fprovide-transform..rkt%29._expand-export%29%29" class="RktValLink" data-pltdoc="x">expand-export</a></span> or
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28lib._racket%2Fprovide-transform..rkt%29._pre-expand-export%29%29" class="RktValLink" data-pltdoc="x">pre-expand-export</a></span> to transform the sub-<span class="RktVar">provide-spec</span>
sub-form.</p><p>See also <span class="RktSym"><a href="define.html#%28form._%28%28lib._racket%2Fprovide-syntax..rkt%29._define-provide-syntax%29%29" class="RktStxLink" data-pltdoc="x">define-provide-syntax</a></span>, which supports macro-style
<a href="stxtrans.html#%28tech._provide._transformer%29" class="techoutside" data-pltdoc="x"><span class="techinside">provide transformers</span></a>.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._racket/provide-transform..rkt)._expand-export))"></a><span title="Provided from: racket/provide-transform | Package: base"><span class="RktSym"><a href="stxtrans.html#%28def._%28%28lib._racket%2Fprovide-transform..rkt%29._expand-export%29%29" class="RktValDef RktValLink" data-pltdoc="x">expand-export</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">provide-spec</span><span class="hspace">&nbsp;</span><span class="RktVar">modes</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._listof%29%29" class="RktValLink" data-pltdoc="x">listof</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="stxtrans.html#%28def._%28%28lib._racket%2Fprovide-transform..rkt%29._export~3f%29%29" class="RktValLink" data-pltdoc="x">export?</a></span><span class="RktPn">)</span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">provide-spec</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="stxops.html#%28def._%28%28quote._~23~25kernel%29._syntax~3f%29%29" class="RktValLink" data-pltdoc="x">syntax?</a></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">modes</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._listof%29%29" class="RktValLink" data-pltdoc="x">listof</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="phase_space.html#%28def._%28%28lib._racket%2Fphase%2Bspace..rkt%29._phase%2Bspace~3f%29%29" class="RktValLink" data-pltdoc="x">phase+space?</a></span><span class="RktPn">)</span></td></tr></table></blockquote></div><div class="SIntrapara">Expands the given <span class="RktVar">provide-spec</span> to a list of exports. The
<span class="RktVar">modes</span> list controls the expansion of
sub-<span class="RktVar">provide-specs</span>; for example, an identifier refers to a
binding in the <a href="syntax-model.html#%28tech._phase._level%29" class="techoutside" data-pltdoc="x"><span class="techinside">phase level</span></a> of the enclosing <span class="RktSym"><a href="require.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._provide%29%29" class="RktStxLink" data-pltdoc="x">provide</a></span>
form, unless the <span class="RktVar">modes</span> list specifies otherwise. Normally,
<span class="RktVar">modes</span> is either empty or contains a single element.</div></p><p class="SHistory">Changed in version 8.2.0.3 of package <span class="stt">base</span>: Generalized <span class="RktVar">modes</span> to phase&ndash;space combinations.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._racket/provide-transform..rkt)._pre-expand-export))"></a><span title="Provided from: racket/provide-transform | Package: base"><span class="RktSym"><a href="stxtrans.html#%28def._%28%28lib._racket%2Fprovide-transform..rkt%29._pre-expand-export%29%29" class="RktValDef RktValLink" data-pltdoc="x">pre-expand-export</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">provide-spec</span><span class="hspace">&nbsp;</span><span class="RktVar">modes</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="stxops.html#%28def._%28%28quote._~23~25kernel%29._syntax~3f%29%29" class="RktValLink" data-pltdoc="x">syntax?</a></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">provide-spec</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="stxops.html#%28def._%28%28quote._~23~25kernel%29._syntax~3f%29%29" class="RktValLink" data-pltdoc="x">syntax?</a></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">modes</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._listof%29%29" class="RktValLink" data-pltdoc="x">listof</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="phase_space.html#%28def._%28%28lib._racket%2Fphase%2Bspace..rkt%29._phase%2Bspace~3f%29%29" class="RktValLink" data-pltdoc="x">phase+space?</a></span><span class="RktPn">)</span></td></tr></table></blockquote></div><div class="SIntrapara">Expands the given <span class="RktVar">provide-spec</span> at the level of <a href="stxtrans.html#%28tech._provide._pre._transformer%29" class="techoutside" data-pltdoc="x"><span class="techinside">provide
pre-transformers</span></a>. The <span class="RktVar">modes</span> argument is the same as for
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28lib._racket%2Fprovide-transform..rkt%29._expand-export%29%29" class="RktValLink" data-pltdoc="x">expand-export</a></span>.</div></p><p class="SHistory">Changed in version 8.2.0.3 of package <span class="stt">base</span>: Generalized <span class="RktVar">modes</span> to phase&ndash;space combinations.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._racket/provide-transform..rkt)._make-provide-transformer))"></a><span title="Provided from: racket/provide-transform | Package: base"><span class="RktSym"><a href="stxtrans.html#%28def._%28%28lib._racket%2Fprovide-transform..rkt%29._make-provide-transformer%29%29" class="RktValDef RktValLink" data-pltdoc="x">make-provide-transformer</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">proc</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="stxtrans.html#%28def._%28%28lib._racket%2Fprovide-transform..rkt%29._provide-transformer~3f%29%29" class="RktValLink" data-pltdoc="x">provide-transformer?</a></span></p></blockquote></td></tr><tr><td><table cellspacing="0" cellpadding="0" class="argcontract"><tr><td valign="top"><span class="hspace">&nbsp;&nbsp;</span></td><td valign="top"><span class="RktVar">proc</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top">:</td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><span class="RktPn">(</span><span class="RktSym"><a href="stxops.html#%28def._%28%28quote._~23~25kernel%29._syntax~3f%29%29" class="RktValLink" data-pltdoc="x">syntax?</a></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._listof%29%29" class="RktValLink" data-pltdoc="x">listof</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="phase_space.html#%28def._%28%28lib._racket%2Fphase%2Bspace..rkt%29._phase%2Bspace~3f%29%29" class="RktValLink" data-pltdoc="x">phase+space?</a></span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;</span><span class="RktPn">. </span><span class="RktSym"><a href="function-contracts.html#%28form._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._-~3e%29%29" class="RktStxLink" data-pltdoc="x"><span class="nobreak">-&gt;</span></a></span><span class="RktPn"> .</span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._listof%29%29" class="RktValLink" data-pltdoc="x">listof</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="stxtrans.html#%28def._%28%28lib._racket%2Fprovide-transform..rkt%29._export~3f%29%29" class="RktValLink" data-pltdoc="x">export?</a></span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr></table></td></tr></table></td></tr><tr><td><span class="RktPn">(</span><span title="Provided from: racket/provide-transform | Package: base"><span class="RktSym"><a href="stxtrans.html#%28def._%28%28lib._racket%2Fprovide-transform..rkt%29._make-provide-transformer%29%29" class="RktValDef RktValLink" data-pltdoc="x">make-provide-transformer</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">proc</span><span class="hspace">&nbsp;</span><span class="RktVar">pre-proc</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._and%2Fc%29%29" class
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28lib._racket%2Fprovide-transform..rkt%29._prop~3aprovide-transformer%29%29" class="RktValLink" data-pltdoc="x">prop:provide-transformer</a></span> property) using the given procedure
as the transformer. If a <span class="RktVar">pre-proc</span> is provided, then the result is also a
<a href="stxtrans.html#%28tech._provide._pre._transformer%29" class="techoutside" data-pltdoc="x"><span class="techinside">provide pre-transformer</span></a>.
Often used in combination with <span class="RktSym"><a href="stxtrans.html#%28def._%28%28lib._racket%2Fprovide-transform..rkt%29._expand-export%29%29" class="RktValLink" data-pltdoc="x">expand-export</a></span> and/or
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28lib._racket%2Fprovide-transform..rkt%29._pre-expand-export%29%29" class="RktValLink" data-pltdoc="x">pre-expand-export</a></span>.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._racket/provide-transform..rkt)._make-provide-pre-transformer))"></a><span title="Provided from: racket/provide-transform | Package: base"><span class="RktSym"><a href="stxtrans.html#%28def._%28%28lib._racket%2Fprovide-transform..rkt%29._make-provide-pre-transformer%29%29" class="RktValDef RktValLink" data-pltdoc="x">make-provide-pre-transformer</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">pre-proc</span><span class="RktPn">)</span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="stxtrans.html#%28def._%28%28lib._racket%2Fprovide-transform..rkt%29._provide-pre-transformer~3f%29%29" class="RktValLink" data-pltdoc="x">provide-pre-transformer?</a></span></td></tr><tr><td><table cellspacing="0" cellpadding="0" class="argcontract"><tr><td valign="top"><span class="hspace">&nbsp;&nbsp;</span></td><td valign="top"><span class="RktVar">pre-proc</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top">:</td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><span class="RktPn">(</span><span class="RktSym"><a href="stxops.html#%28def._%28%28quote._~23~25kernel%29._syntax~3f%29%29" class="RktValLink" data-pltdoc="x">syntax?</a></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._listof%29%29" class="RktValLink" data-pltdoc="x">listof</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="phase_space.html#%28def._%28%28lib._racket%2Fphase%2Bspace..rkt%29._phase%2Bspace~3f%29%29" class="RktValLink" data-pltdoc="x">phase+space?</a></span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;</span><span class="RktPn">. </span><span class="RktSym"><a href="function-contracts.html#%28form._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._-~3e%29%29" class="RktStxLink" data-pltdoc="x"><span class="nobreak">-&gt;</span></a></span><span class="RktPn"> .</span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="stxops.html#%28def._%28%28quote._~23~25kernel%29._syntax~3f%29%29" class="RktValLink" data-pltdoc="x">syntax?</a></span><span class="RktPn">)</span></td></tr></table></td></tr></table></td></tr></table></blockquote></div><div class="SIntrapara">Like <span class="RktSym"><a href="stxtrans.html#%28def._%28%28lib._racket%2Fprovide-transform..rkt%29._make-provide-transformer%29%29" class="RktValLink" data-pltdoc="x">make-provide-transformer</a></span>, but for a value that is a
<a href="stxtrans.html#%28tech._provide._pre._transformer%29" class="techoutside" data-pltdoc="x"><span class="techinside">provide pre-transformer</span></a>, only.
Often used in combination with <span class="RktSym"><a href="stxtrans.html#%28def._%28%28lib._racket%2Fprovide-transform..rkt%29._pre-expand-export%29%29" class="RktValLink" data-pltdoc="x">pre-expand-export</a></span>.</div></p><p><div class="SIntrapara">Examples:</div><div class="SIntrapara"><blockquote class="SCodeFlow"><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="module.html#%28form._%28%28quote._~23~25kernel%29._module%29%29" class="RktStxLink" data-pltdoc="x">module</a></span><span class="hspace">&nbsp;</span><span class="RktSym">m</span><span class="hspace">&nbsp;</span><span class="RktSym">racket</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="hspace">&nbsp;&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="require.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._require%29%29" class="RktStxLink" data-pltdoc="x">require</a></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="require.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._for-syntax%29%29" class="RktStxLink" data-pltdoc="x">for-syntax</a></span><span class="hspace">&nbsp;</span><span class="RktSym">racket/provide-transform</span><span class="hspace">&nbsp;</span><span class="RktSym">syntax/parse</span><span class="hspace">&nbsp;</span><span class="RktSym">syntax/stx</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="hspace">&nbsp;&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="define.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._define-syntax%29%29" class="RktStxLink" data-pltdoc="x">define-syntax</a></span><span class="hspace">&nbsp;</span><span class="RktSym">wrapped-out</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="stxtrans.html#%28def._%28%28lib._racket%2Fprovide-transform..rkt%29._make-provide-pre-transformer%29%29" class="RktValLink" data-pltdoc="x">make-provide-pre-transformer</a></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="lambda.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._lambda%29%29" class="RktStxLink" data-pltdoc="x">lambda</a></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym">stx</span><span class="hspace">&nbsp;</span><span class="RktSym">modes</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="RktPn">(</span><span class="RktSym">syntax-parse</span><span class="hspace">&nbsp;</span><span class="RktSym">stx</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="RktPn">[</span><span class="RktPn">(</span><span class="RktSym"><a href="stx-patterns.html#%28form._%28%28lib._racket%2Fprivate%2Fstxcase-scheme..rkt%29.__%29%29" class="RktStxLink" data-pltdoc="x">_</a></span><span class="hspace">&nbsp;</span><span class="RktSym">f</span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="stx-patterns.html#%28form._%28%28lib._racket%2Fprivate%2Fstxcase-scheme..rkt%29._......%29%29" class="RktStxLink" data-pltdoc="x">...</a></span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="RktPn">#:with</span><span class="hspace">&nbsp;</span><span class="Rkt
value must be a procedure that takes the structure and returns a transformer
procedure; the returned transformer procedure takes a syntax object and mode list and
returns an export list.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>value</p></div></div><p class="RForeground"><a name="(def._((lib._racket/provide-transform..rkt)._prop~3aprovide-pre-transformer))"></a><span title="Provided from: racket/provide-transform | Package: base"><span class="RktSym"><a href="stxtrans.html#%28def._%28%28lib._racket%2Fprovide-transform..rkt%29._prop~3aprovide-pre-transformer%29%29" class="RktValDef RktValLink" data-pltdoc="x">prop:provide-pre-transformer</a></span></span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="structprops.html#%28def._%28%28quote._~23~25kernel%29._struct-type-property~3f%29%29" class="RktValLink" data-pltdoc="x">struct-type-property?</a></span></p></blockquote></td></tr></table></blockquote></div><div class="SIntrapara">A property to identify <a href="stxtrans.html#%28tech._provide._pre._transformer%29" class="techoutside" data-pltdoc="x"><span class="techinside">provide pre-transformers</span></a>. The property
value must be a procedure that takes the structure and returns a transformer
procedure; the returned transformer procedure takes a syntax object and mode list and
returns a syntax object.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._racket/provide-transform..rkt)._provide-transformer~3f))"></a><span title="Provided from: racket/provide-transform | Package: base"><span class="RktSym"><a href="stxtrans.html#%28def._%28%28lib._racket%2Fprovide-transform..rkt%29._provide-transformer~3f%29%29" class="RktValDef RktValLink" data-pltdoc="x">provide-transformer?</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">v</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="booleans.html#%28def._%28%28quote._~23~25kernel%29._boolean~3f%29%29" class="RktValLink" data-pltdoc="x">boolean?</a></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">v</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%2Fc%29%29" class="RktValLink" data-pltdoc="x">any/c</a></span></td></tr></table></blockquote></div><div class="SIntrapara">Returns <span class="RktVal">#t</span> if <span class="RktVar">v</span> has the
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28lib._racket%2Fprovide-transform..rkt%29._prop~3aprovide-transformer%29%29" class="RktValLink" data-pltdoc="x">prop:provide-transformer</a></span> property, <span class="RktVal">#f</span> otherwise.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._racket/provide-transform..rkt)._provide-pre-transformer~3f))"></a><span title="Provided from: racket/provide-transform | Package: base"><span class="RktSym"><a href="stxtrans.html#%28def._%28%28lib._racket%2Fprovide-transform..rkt%29._provide-pre-transformer~3f%29%29" class="RktValDef RktValLink" data-pltdoc="x">provide-pre-transformer?</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">v</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="booleans.html#%28def._%28%28quote._~23~25kernel%29._boolean~3f%29%29" class="RktValLink" data-pltdoc="x">boolean?</a></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">v</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%2Fc%29%29" class="RktValLink" data-pltdoc="x">any/c</a></span></td></tr></table></blockquote></div><div class="SIntrapara">Returns <span class="RktVal">#t</span> if <span class="RktVar">v</span> has the
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28lib._racket%2Fprovide-transform..rkt%29._prop~3aprovide-pre-transformer%29%29" class="RktValLink" data-pltdoc="x">prop:provide-pre-transformer</a></span> property, <span class="RktVal">#f</span> otherwise.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>struct</p></div></div><table cellspacing="0" cellpadding="0" class="RForeground"><tr><td><span class="RktPn">(</span><span class="RktSym"><a href="define-struct.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._struct%29%29" class="RktStxLink" data-pltdoc="x">struct</a></span></td><td><span class="hspace">&nbsp;</span></td><td><a name="(def._((lib._racket/provide-transform..rkt)._export-orig-stx))"></a><a name="(def._((lib._racket/provide-transform..rkt)._export-protect~3f))"></a><a name="(def._((lib._racket/provide-transform..rkt)._export-mode))"></a><a name="(def._((lib._racket/provide-transform..rkt)._export-out-sym))"></a><a name="(def._((lib._racket/provide-transform..rkt)._export-local-id))"></a><a name="(def._((lib._racket/provide-transform..rkt)._make-export))"></a><a name="(def._((lib._racket/provide-transform..rkt)._export~3f))"></a><a name="(def._((lib._racket/provide-transform..rkt)._struct~3aexport))"></a><a name="(def._((lib._racket/provide-transform..rkt)._export))"></a><span title="Provided from: racket/provide-transform | Package: base"><span class="RktSym"><a href="stxtrans.html#%28def._%28%28lib._racket%2Fprovide-transform..rkt%29._export%29%29" class="RktValDef RktValLink" data-pltdoc="x">export</a></span></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym">local-id</span><span class="stt"> </span><span class="RktSym">out-sym</span><span class="stt"> </span><span class="RktSym">mode</span><span class="stt"> </span><span class="RktSym">protect?</span><span class="stt"> </span><span class="RktSym">orig-stx</span><span class="RktPn">)</span></td></tr></table></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="RktPn">#:extra-constructor-name</span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="stxtrans.html#%28def._%28%28lib._racket%2Fprovide-transform..rkt%29._make-export%29%29" class="RktValLink" data-pltdoc="x">make-export</a></span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktSym">local-id</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="stxops.html#%28def._%28%28lib._racket%2Fprivate%2Fstx..rkt%29._identifier~3f%29%29" class="RktValLink" data-pltdoc="x">identifier?</a></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktSym">out-sym</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="symbols.html#%28def._%28%28quote._~23~25kernel%29._symbol~3f%29%29" class="RktValLink" data-pltdoc="x">symbol?</a></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktSym">mode</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="phase_space.html#%28def._%28%28lib._racket%2Fphase%2Bspace..rkt%29._phase%2Bspace~3f%29%29" class="RktValLink" data-pltdoc="x">phase+space?</a></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktSym">protect?</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%2Fc%29%29" class="RktValLink" data-pltdoc="x">any/c</a></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktSym">orig-stx</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="stxops.html#%28def._%28%28quote._~23~25k
exporting module.</p></li><li><p><span class="RktSym">out-sym</span> &#8212;<wbr></wbr> the external name of the binding.</p></li><li><p><span class="RktSym">mode</span> &#8212;<wbr></wbr> the <a href="syntax-model.html#%28tech._phase._level%29" class="techoutside" data-pltdoc="x"><span class="techinside">phase level</span></a> and <a href="syntax-model.html#%28tech._binding._space%29" class="techoutside" data-pltdoc="x"><span class="techinside">binding
space</span></a> of the export (which affects how it is imported).</p></li><li><p><span class="RktSym">protect?</span> &#8212;<wbr></wbr> indicates whether the identifier should
be protected (see <a href="modprotect.html" data-pltdoc="x">Code Inspectors</a>).</p></li><li><p><span class="RktSym">orig-stx</span> &#8212;<wbr></wbr> a <a href="syntax-model.html#%28tech._syntax._object%29" class="techoutside" data-pltdoc="x"><span class="techinside">syntax object</span></a> for the source of
the export, used for error reporting.</p></li></ul><p class="SHistory">Changed in version 8.2.0.3 of package <span class="stt">base</span>: Generalized <span class="RktSym">mode</span> to phase&ndash;space combinations.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._racket/provide-transform..rkt)._syntax-local-provide-certifier))"></a><span title="Provided from: racket/provide-transform | Package: base"><span class="RktSym"><a href="stxtrans.html#%28def._%28%28lib._racket%2Fprovide-transform..rkt%29._syntax-local-provide-certifier%29%29" class="RktValDef RktValLink" data-pltdoc="x">syntax-local-provide-certifier</a></span></span><span class="RktPn"></span><span class="RktPn">)</span></p></blockquote></td></tr><tr><td><table cellspacing="0" cellpadding="0" class="prototype"><tr><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top">&rarr;</td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><span class="RktPn">(</span><span class="RktPn">(</span><span class="RktSym"><a href="stxops.html#%28def._%28%28quote._~23~25kernel%29._syntax~3f%29%29" class="RktValLink" data-pltdoc="x">syntax?</a></span><span class="RktPn">)</span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._or%2Fc%29%29" class="RktValLink" data-pltdoc="x">or/c</a></span><span class="hspace">&nbsp;</span><span class="RktVal">#f</span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="stxops.html#%28def._%28%28quote._~23~25kernel%29._syntax~3f%29%29" class="RktValLink" data-pltdoc="x">syntax?</a></span><span class="hspace">&nbsp;</span><span class="RktPn">. </span><span class="RktSym"><a href="function-contracts.html#%28form._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._-~3e%29%29" class="RktStxLink" data-pltdoc="x"><span class="nobreak">-&gt;</span></a></span><span class="RktPn"> .</span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="stxops.html#%28def._%28%28quote._~23~25kernel%29._syntax~3f%29%29" class="RktValLink" data-pltdoc="x">syntax?</a></span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;</span><span class="RktPn">. </span><span class="RktSym"><a href="function-contracts.html#%28form._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._-~3e%2A%29%29" class="RktStxLink" data-pltdoc="x"><span class="nobreak">-&gt;</span>*</a></span><span class="RktPn"> .</span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="stxops.html#%28def._%28%28quote._~23~25kernel%29._syntax~3f%29%29" class="RktValLink" data-pltdoc="x">syntax?</a></span><span class="RktPn">)</span></td></tr></table></td></tr></table></td></tr></table></blockquote></div><div class="SIntrapara">For backward compatibility only; returns a procedure that returns its
first argument.</div></p><h5 x-source-module="(lib &quot;scribblings/reference/reference.scrbl&quot;)" x-source-pkg="racket-doc" x-part-tag="&quot;keyword-trans&quot;">12.4.3<tt>&nbsp;</tt><a name="(part._keyword-trans)"></a><a name="(mod-path._racket/keyword-transform)"></a>Keyword-Argument Conversion Introspection</h5><p><div class="SIntrapara"><table cellspacing="0" cellpadding="0" class="defmodule"><tr><td align="left"><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="require.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._require%29%29" class="RktStxLink" data-pltdoc="x">require</a></span><span class="stt"> </span><a href="stxtrans.html#%28mod-path._racket%2Fkeyword-transform%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">racket/keyword-transform</span></a><span class="RktPn">)</span></td><td align="right"><span class="RpackageSpec"><span class="Smaller">&nbsp;package:</span> <a href="https://pkgs.racket-lang.org/package/base" title="Install this package using `raco pkg install base`"><span class="stt">base</span></a></span></td></tr></table></div><div class="SIntrapara">The bindings documented in this section are provided by the <a href="stxtrans.html#%28mod-path._racket%2Fkeyword-transform%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">racket/keyword-transform</span></a> library, not <a href="index.html" class="RktModLink" data-pltdoc="x"><span class="RktSym">racket/base</span></a> or <a href="index.html" class="RktModLink" data-pltdoc="x"><span class="RktSym">racket</span></a>.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><table cellspacing="0" cellpadding="0" class="together"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._racket/keyword-transform..rkt)._syntax-procedure-alias-property))"></a><span title="Provided from: racket/keyword-transform | Package: base"><span class="RktSym"><a href="stxtrans.html#%28def._%28%28lib._racket%2Fkeyword-transform..rkt%29._syntax-procedure-alias-property%29%29" class="RktValDef RktValLink" data-pltdoc="x">syntax-procedure-alias-property</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">stx</span><span class="RktPn">)</span></p></blockquote></td></tr><tr><td><table cellspacing="0" cellpadding="0" class="prototype"><tr><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top">&rarr;</td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._or%2Fc%29%29" class="RktValLink" data-pltdoc="x">or/c</a></span><span class="hspace">&nbsp;</span><span class="RktVal">#f</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="let.html#%28form._%28%28lib._racket%2Fprivate%2Fletstx-scheme..rkt%29._letrec%29%29" class="RktStxLink" data-pltdoc="x">letrec</a></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktPn">[</span><span class="RktSym">val?</span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="contract-utilities.html#%28form._%28%28lib._racket%2Fcontract%2Fprivate%2Fbase..rkt%29._recursive-contract%29%29" class="RktStxLink" data-pltdoc="x">recursive-contract</a></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._or%2Fc%29%29" class="RktValLink" data-pltdoc="x">or/c</a></span>
attached to an identifier by the expansion of a keyword-application
form. See <span class="RktSym"><a href="lambda.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._lambda%29%29" class="RktStxLink" data-pltdoc="x">lambda</a></span> for more
information about the property.</div></p><p>The property value is normally a pair consisting of the original
identifier and an identifier that appears in the
expansion. Property-value merging via <span class="RktSym"><a href="stxprops.html#%28def._%28%28quote._~23~25kernel%29._syntax-track-origin%29%29" class="RktValLink" data-pltdoc="x">syntax-track-origin</a></span> can make
the value a pair of such values, and so on.</p><h5 x-source-module="(lib &quot;scribblings/reference/reference.scrbl&quot;)" x-source-pkg="racket-doc" x-part-tag="&quot;portal-syntax&quot;">12.4.4<tt>&nbsp;</tt><a name="(part._portal-syntax)"></a>Portal Syntax Bindings</h5><p>An identifier bound to <a name="(tech._portal._syntax)"></a><span style="font-style: italic">portal syntax</span> value created by
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._make-portal-syntax%29%29" class="RktValLink" data-pltdoc="x">make-portal-syntax</a></span> does not act as a transformer, but it
encapsulates a syntax object that can be accessed in inspected even
without instantiating the enclosing module. Portal syntax is also bound
using the <span class="RktSym">portal</span> form of <span class="RktSym"><a href="require.html#%28form._%28%28quote._~23~25kernel%29._~23~25require%29%29" class="RktStxLink" data-pltdoc="x">#%require</a></span>.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((quote._~23~25kernel)._portal-syntax~3f))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._portal-syntax~3f%29%29" class="RktValDef RktValLink" data-pltdoc="x">portal-syntax?</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">v</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="booleans.html#%28def._%28%28quote._~23~25kernel%29._boolean~3f%29%29" class="RktValLink" data-pltdoc="x">boolean?</a></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">v</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%2Fc%29%29" class="RktValLink" data-pltdoc="x">any/c</a></span></td></tr></table></blockquote></div><div class="SIntrapara">Returns <span class="RktVal">#t</span> if <span class="RktVar">v</span> is a value created by
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._make-portal-syntax%29%29" class="RktValLink" data-pltdoc="x">make-portal-syntax</a></span>, <span class="RktVal">#f</span> otherwise.</div></p><p class="SHistory">Added in version 8.3.0.8 of package <span class="stt">base</span>.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((quote._~23~25kernel)._make-portal-syntax))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._make-portal-syntax%29%29" class="RktValDef RktValLink" data-pltdoc="x">make-portal-syntax</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">stx</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._portal-syntax~3f%29%29" class="RktValLink" data-pltdoc="x">portal-syntax?</a></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">stx</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="stxops.html#%28def._%28%28quote._~23~25kernel%29._syntax~3f%29%29" class="RktValLink" data-pltdoc="x">syntax?</a></span></td></tr></table></blockquote></div><div class="SIntrapara">Creates <a href="stxtrans.html#%28tech._portal._syntax%29" class="techoutside" data-pltdoc="x"><span class="techinside">portal syntax</span></a> with the content <span class="RktVar">stx</span>.</div></p><p>When <span class="RktSym"><a href="define.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._define-syntax%29%29" class="RktStxLink" data-pltdoc="x">define-syntax</a></span> or <span class="RktSym"><a href="define.html#%28form._%28%28quote._~23~25kernel%29._define-syntaxes%29%29" class="RktStxLink" data-pltdoc="x">define-syntaxes</a></span> binds an
identifier to portal syntax immediately in a module body, then in
addition to being accessible via <span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._syntax-local-value%29%29" class="RktValLink" data-pltdoc="x">syntax-local-value</a></span> while
expanding, the portal syntax content is accessible via
<span class="RktSym"><a href="stxcmp.html#%28def._%28%28quote._~23~25kernel%29._identifier-binding-portal-syntax%29%29" class="RktValLink" data-pltdoc="x">identifier-binding-portal-syntax</a></span>.</p><p class="SHistory">Added in version 8.3.0.8 of package <span class="stt">base</span>.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((quote._~23~25kernel)._portal-syntax-content))"></a><span title="Provided from: racket/base, racket | Package: base"><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._portal-syntax-content%29%29" class="RktValDef RktValLink" data-pltdoc="x">portal-syntax-content</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">portal</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="stxops.html#%28def._%28%28quote._~23~25kernel%29._syntax~3f%29%29" class="RktValLink" data-pltdoc="x">syntax?</a></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">portal</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._portal-syntax~3f%29%29" class="RktValLink" data-pltdoc="x">portal-syntax?</a></span></td></tr></table></blockquote></div><div class="SIntrapara">Returns the content of <a href="stxtrans.html#%28tech._portal._syntax%29" class="techoutside" data-pltdoc="x"><span class="techinside">portal syntax</span></a> created with
<span class="RktSym"><a href="stxtrans.html#%28def._%28%28quote._~23~25kernel%29._make-portal-syntax%29%29" class="RktValLink" data-pltdoc="x">make-portal-syntax</a></span>.</div></p><p class="SHistory">Added in version 8.3.0.8 of package <span class="stt">base</span>.</p><div class="navsetbottom"><span class="navleft"><form class="searchform"><input class="searchbox" id="searchbox" type="text" tabindex="1" placeholder="...search manuals..." title="Enter a search string to search the manuals" onkeypress="return DoSearchKey(event, this, &quot;8.6&quot;, &quot;../&quot;);"/></form>&nbsp;&nbsp;<a href="https://docs.racket-lang.org/index.html" title="up to the documentation top" data-pltdoc="x" onclick="return GotoPLTRoot(&quot;8.6&quot;);">top</a><span class="tocsettoggle">&nbsp;&nbsp;<a href="javascript:void(0);" title="show/hide table of contents" onclick="TocsetToggle();">contents</a></span></span><span class="navright">&nbsp;&nbsp;<a href="stxcmp.html" title="backward to &quot;12.3 Syntax Object Bindings&quot;" data-pltdoc="x">&larr; prev</a>&nbsp;&nbsp;<a href="Macros.html" title="up to &quot;12 Macros&quot;" data-pltdoc="x">up</a>&nbsp;&nbsp;<a href="stxparam.html" title="forward to &quot;12.5 Syntax Parameters&quot;" data-pltdoc="x">next &rarr;</a></span>&nbsp;</div></div></div><div id="contextindicator">&nbsp;</div></body></html>