729 lines
456 KiB
HTML
729 lines
456 KiB
HTML
|
<!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 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,"tocview_0");">►</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 </td><td><a href="model.html" class="tocviewlink" data-pltdoc="x">Language Model</a></td></tr><tr><td align="right">2 </td><td><a href="notation.html" class="tocviewlink" data-pltdoc="x">Notation for Documentation</a></td></tr><tr><td align="right">3 </td><td><a href="syntax.html" class="tocviewlink" data-pltdoc="x">Syntactic Forms</a></td></tr><tr><td align="right">4 </td><td><a href="data.html" class="tocviewlink" data-pltdoc="x">Datatypes</a></td></tr><tr><td align="right">5 </td><td><a href="structures.html" class="tocviewlink" data-pltdoc="x">Structures</a></td></tr><tr><td align="right">6 </td><td><a href="mzlib_class.html" class="tocviewlink" data-pltdoc="x">Classes and Objects</a></td></tr><tr><td align="right">7 </td><td><a href="mzlib_unit.html" class="tocviewlink" data-pltdoc="x">Units</a></td></tr><tr><td align="right">8 </td><td><a href="contracts.html" class="tocviewlink" data-pltdoc="x">Contracts</a></td></tr><tr><td align="right">9 </td><td><a href="match.html" class="tocviewlink" data-pltdoc="x">Pattern Matching</a></td></tr><tr><td align="right">10 </td><td><a href="control.html" class="tocviewlink" data-pltdoc="x">Control Flow</a></td></tr><tr><td align="right">11 </td><td><a href="concurrency.html" class="tocviewlink" data-pltdoc="x">Concurrency and Parallelism</a></td></tr><tr><td align="right">12 </td><td><a href="Macros.html" class="tocviewselflink" data-pltdoc="x">Macros</a></td></tr><tr><td align="right">13 </td><td><a href="input-and-output.html" class="tocviewlink" data-pltdoc="x">Input and Output</a></td></tr><tr><td align="right">14 </td><td><a href="security.html" class="tocviewlink" data-pltdoc="x">Reflection and Security</a></td></tr><tr><td align="right">15 </td><td><a href="os.html" class="tocviewlink" data-pltdoc="x">Operating System</a></td></tr><tr><td align="right">16 </td><td><a href="memory.html" class="tocviewlink" data-pltdoc="x">Memory Management</a></td></tr><tr><td align="right">17 </td><td><a href="unsafe.html" class="tocviewlink" data-pltdoc="x">Unsafe Operations</a></td></tr><tr><td align="right">18 </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"> </span><span class="RktVar">proc</span><span class="RktPn">)</span><span class="hspace"> </span>→<span class="hspace"> </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"> </span><span class="RktVar">proc</span><span class="hspace"> </span>:<span class="hspace"> </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"> </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">-></span></a></span><span class="RktPn"> .</span><span class="hspace"> </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">> </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"> </span><span class="RktPn">(</span><span class="RktPn">[</span><span class="RktSym">x</span><span class="hspace"> </span><span class="RktVal">1</span><span class="RktPn">]</span></td></tr><tr><td><span class="hspace"> </span><span class="hspace"> </span><span class="RktPn">[</span><span class="RktSym">y</span><span class="hspace"> </span><span class="RktVal">2</span><span class="RktPn">]</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace"> </span><span class="hspace"> </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"> </span><span class="RktPn">(</span><span class="RktPn">[</span><span class="RktSym">x</span><span class="hspace"> </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"> </span><span class="hspace"> </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"> </span><span class="RktPn">(</span><span class="RktSym">stx</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace"> </span><span class="hspace"> </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"> </span><span class="RktSym">stx</span><span class="hspace"> </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"> </span><span class="hspace"> </span><span class="RktCmt">;</span><span class="RktCmt"> </span><span class="RktCmt">Redirect mutation of x to y</span></td></tr><tr><td><span class="hspace"> </span><span class="hspace"> </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"> </span><span class="RktSym">id</span><span class="hspace"> </span><span class="RktSym">v</span><span class="RktPn">)</span><span class="hspace"> </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"> </span>:<span class="hspace"> </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"> </span><span class="RktVar">v</span><span class="RktPn">)</span><span class="hspace"> </span>→<span class="hspace"> </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"> </span><span class="RktVar">v</span><span class="hspace"> </span>:<span class="hspace"> </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">> </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"> </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"> </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">> </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"> </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"> </span><span class="RktVar">id-stx</span><span class="RktPn">)</span><span class="hspace"> </span>→<span class="hspace"> </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"> </span><span class="RktVar">id-stx</span><span class="hspace"> </span>:<span class="hspace"> </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 “nominal source identifier” 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">> </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"> </span><span class="RktSym">my-or</span><span class="hspace"> </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"> </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">> </span><span class="RktPn">(</span><span class="RktSym">my-or</span><span class="hspace"> </span><span class="RktVal">#f</span><span class="hspace"> </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">> </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"> </span><span class="RktRdr">#'</span><span class="RktSym">my-or</span><span class="hspace"> </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"> </span><span class="RktVar">transformer</span><span class="RktPn">)</span><span class="hspace"> </span>→<span class="hspace"> </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"> </span><span class="RktVar">transformer</span><span class="hspace"> </span>:<span class="hspace"> </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">> </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"> </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"> </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">#<syntax:eval:8:0 or></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"> </span>:<span class="hspace"> </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"> </span><span class="RktCmt">Example of a procedure argument for prop:rename-transformer</span></td></tr><tr><td><span class="stt">> </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"> </span><span class="RktSym">slv-1</span><span class="hspace"> </span><span class="RktVal">'</span><span class="RktVal">first-transformer-binding</span><span class="RktPn">)</span></td></tr><tr><td><span class="stt">> </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"> </span><span class="RktSym">slv-2</span><span class="hspace"> </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">> </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"> </span><span class="hspace"> </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"> </span><span class="RktSym">slv-cooperator</span><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym">redirect-to-first?</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace"> </span><span class="hspace"> </span><span class="RktPn">#:property</span><span class="hspace"> </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"> </span><span class="hspace"> </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">λ</a></span><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym">inst</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace"> </span><span class="hspace"> </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"> </span><span class="RktPn">(</span><span class="RktSym">slv-cooperator-redirect-to-first?</span><span class="hspace"> </span><span class="RktSym">inst</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace"> </span><span class="hspace"> </span><span class="RktRdr">#'</span><span class="RktSym">slv-1</span></td></tr><tr><td><span class="hspace"> </span><span class="hspace"> </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->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 “out of context” 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&rel=intdef.html%23%2528def._%2528%2528lib._syntax%252Fintdef..rkt%2529._internal-definition-context-track%2529%2529&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">> </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"> </span><span class="RktPn">(</span><span class="RktSym">do-print</span><span class="hspace"> </span><span class="RktSym">x</span><span class="hspace"> </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"> </span><span class="hspace"> </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"> </span><span class="RktSym">x</span><span class="hspace"> </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">> </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"> </span><span class="RktPn">(</span><span class="RktSym">hello</span><span class="hspace"> </span><span class="RktSym">x</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace"> </span><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym">do-print</span><span class="hspace"> </span><span class="RktVal">"hello ~a"</span><span class="hspace"> </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">> </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"> </span><span class="RktPn">(</span><span class="RktSym">show</span><span class="hspace"> </span><span class="RktVar">stx</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace"> </span><span class="hspace"> </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"> </span><span class="RktVar">stx</span><span class="hspace"> </span><span class="RktPn">(</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace"> </span><span class="hspace"> </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"> </span><span class="RktSym">x</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace"> </span><span class="hspace"> </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"> </span></td><td valign="top"><span class="RktVar">stx</span></td><td valign="top"><span class="hspace"> </span></td></tr><tr><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </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"> </span></td></tr></table></blockquote></td></tr><tr><td><table cellspacing="0" cellpadding="0" class="prototype"><tr><td valign="top"><span class="hspace"> </span></td><td valign="top">→</td><td valign="top"><span class="hspace"> </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"> </span><span class="RktVar">opaque-only?</span><span class="hspace"> </span><span class="RktVal">#f</span><span class="hspace"> </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"> </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"> </span><span class="RktVar">stx</span><span class="hspace"> </span>:<span class="hspace"> </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"> </span><span class="RktVar">opaque-only?</span><span class="hspace"> </span>:<span class="hspace"> </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"> </span>=<span class="hspace"> </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’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"> </span></td><td valign="top"><span class="RktVar">stx</span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td></tr><tr><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="RktVar">context-v</span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td></tr><tr><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="RktVar">stop-ids</span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td></tr><tr><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </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"> </span></td><td valign="top">→</td><td valign="top"><span class="hspace"> </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"> </span><span class="RktVar">stx</span><span class="hspace"> </span>:<span class="hspace"> </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"> </span><span class="RktVar">context-v</span><span class="hspace"> </span>:<span class="hspace"> </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"> </span><span class="RktVal">'</span><span class="RktVal">expression</span><span class="hspace"> </span><span class="RktVal">'</span><span class="RktVal">top-level</span><span class="hspace"> </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—<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>—<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’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"> </span></td><td valign="top"><span class="RktVar">stx</span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td></tr><tr><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="RktVar">context-v</span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td></tr><tr><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="RktVar">stop-ids</span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td></tr><tr><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span><span class="RktOpt">[</span></td><td valign="top"><span class="RktVar">intdef-ctx</span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td></tr><tr><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </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"> </span></td><td valign="top">→</td><td valign="top"><span class="hspace"> </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"> </span><span class="RktVar">stx</span><span class="hspace"> </span>:<span class="hspace"> </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"> </span><span class="RktVar">context-v</span><span class="hspace"> </span>:<span class="hspace"> </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"> </span><span class="RktVal">'</span><span class="RktVal">expression</span><span class="hspace"> </span><span class="RktVal">'</span><span class="RktVal">top-level</span><span class="hspace"> </span><span class="RktVal">'</span><span class="RktVal">module</span><span class="hspace"> </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—<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>—<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’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"> </span></td><td valign="top"><span class="RktVar">stx</span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td></tr><tr><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="RktVar">context-v</span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td></tr><tr><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="RktVar">stop-ids</span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td></tr><tr><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span><span class="RktOpt">[</span></td><td valign="top"><span class="RktVar">intdef-ctx</span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td></tr><tr><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </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"> </span></td><td valign="top">→</td><td valign="top"><span class="hspace"> </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"> </span><span class="RktVar">stx</span><span class="hspace"> </span>:<span class="hspace"> </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"> </span><span class="RktVar">context-v</span><span class="hspace"> </span>:<span class="hspace"> </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’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"> </span></td><td valign="top"><span class="RktVar">transformer</span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td></tr><tr><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="RktVar">binding-id</span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td></tr><tr><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="RktVar">context-v</span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td></tr><tr><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="RktVar">intdef-ctx</span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td></tr><tr><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="RktVar">v</span><span class="hspace"> </span><span class="RktMeta">...</span><span class="RktPn">)</span></td><td valign="top"><span class="hspace"> </span></td><td valign="top">→</td><td valign="top"><span class="hspace"> </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"> </span><span class="RktVar">transformer</span><span class="hspace"> </span>:<span class="hspace"> </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"> </span><span class="RktVar">binding-id</span><span class="hspace"> </span>:<span class="hspace"> </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"> </span><span class="RktVar">v</span><span class="RktPn">)</span><span class="hspace"> </span>→<span class="hspace"> </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"> </span><span class="RktVar">v</span><span class="hspace"> </span>:<span class="hspace"> </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"> </span><span class="RktOpt">[</span></td><td valign="top"><span class="RktVar">parent-ctx</span></td><td valign="top"><span class="hspace"> </span></td></tr><tr><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </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"> </span></td></tr></table></blockquote></td></tr><tr><td><span class="hspace"> </span>→<span class="hspace"> </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"> </span><span class="RktVar">parent-ctx</span><span class="hspace"> </span>:<span class="hspace"> </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"> </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"> </span><span class="RktVal">#f</span><span class="RktPn">)</span><span class="hspace"> </span>=<span class="hspace"> </span><span class="RktVal">#f</span></td></tr><tr><td><span class="hspace"> </span><span class="RktVar">add-scope?</span><span class="hspace"> </span>:<span class="hspace"> </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"> </span>=<span class="hspace"> </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’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’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"> </span></td><td valign="top"><span class="RktVar">intdef-ctx</span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td></tr><tr><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="RktVar">stx</span><span class="RktPn">)</span></td><td valign="top"><span class="hspace"> </span></td><td valign="top">→</td><td valign="top"><span class="hspace"> </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"> </span><span class="RktVar">intdef-ctx</span><span class="hspace"> </span>:<span class="hspace"> </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"> </span><span class="RktVar">stx</span><span class="hspace"> </span>:<span class="hspace"> </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"> </span></td></tr><tr><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="RktVar">intdef-ctx</span></td><td valign="top"><span class="hspace"> </span></td></tr><tr><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="RktVar">id</span><span class="RktPn">)</span></td><td valign="top"><span class="hspace"> </span></td></tr></table></blockquote></td></tr><tr><td><span class="hspace"> </span>→<span class="hspace"> </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"> </span><span class="RktVar">intdef-ctx</span><span class="hspace"> </span>:<span class="hspace"> </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"> </span><span class="RktVar">id</span><span class="hspace"> </span>:<span class="hspace"> </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"> </span></td><td valign="top"><span class="RktVar">id-list</span></td><td valign="top"><span class="hspace"> </span></td></tr><tr><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="RktVar">expr</span></td><td valign="top"><span class="hspace"> </span></td></tr><tr><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="RktVar">intdef-ctx</span></td><td valign="top"><span class="hspace"> </span></td></tr><tr><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </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"> </span></td></tr></table></blockquote></td></tr><tr><td><span class="hspace"> </span>→<span class="hspace"> </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"> </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"> </span><span class="RktVar">id-list</span><span class="hspace"> </span>:<span class="hspace"> </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"> </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"> </span><span class="RktVar">expr</span><span class="hspace"> </span>:<span class="hspace"> </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"> </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"> </span><span class="RktVal">#f</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace"> </span><span class="RktVar">intdef-ctx</span><span class="hspace"> </span>:<span class="hspace"> </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">
|
||
|
<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>’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&rel=void_undefined.html&version=8.6" class="RktModLink Sq" data-pltdoc="x"><span class="nobreak"><span class="RktRes">#<void></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"> </span><span class="RktVar">intdef-ctx</span><span class="RktPn">)</span></p></blockquote></td></tr><tr><td><span class="hspace"> </span>→<span class="hspace"> </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"> </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"> </span><span class="RktVar">intdef-ctx</span><span class="hspace"> </span>:<span class="hspace"> </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>’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"> </span></td><td valign="top"><span class="RktVar">intdef-ctx</span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td></tr><tr><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="RktVar">stx</span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td></tr><tr><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </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"> </span></td><td valign="top">→</td><td valign="top"><span class="hspace"> </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"> </span><span class="RktVar">intdef-ctx</span><span class="hspace"> </span>:<span class="hspace"> </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"> </span><span class="RktVar">stx</span><span class="hspace"> </span>:<span class="hspace"> </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"> </span><span class="RktVar">mode</span><span class="hspace"> </span>:<span class="hspace"> </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"> </span><span class="RktVal">'</span><span class="RktVal">flip</span><span class="hspace"> </span><span class="RktVal">'</span><span class="RktVal">add</span><span class="hspace"> </span><span class="RktVal">'</span><span class="RktVal">remove</span><span class="RktPn">)</span><span class="hspace"> </span>=<span class="hspace"> </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"> </span><span class="RktVar">intdef-ctx</span><span class="RktPn">)</span><span class="hspace"> </span>→<span class="hspace"> </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"> </span><span class="RktVar">intdef-ctx</span><span class="hspace"> </span>:<span class="hspace"> </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"> </span></td><td valign="top"><span class="RktVar">id-stx</span></td><td valign="top"><span class="hspace"> </span></td></tr><tr><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="RktVar">intdef-ctx</span><span class="RktPn">)</span></td><td valign="top"><span class="hspace"> </span></td></tr></table></blockquote></td></tr><tr><td><span class="hspace"> </span>→<span class="hspace"> </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"> </span><span class="RktVar">id-stx</span><span class="hspace"> </span>:<span class="hspace"> </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"> </span></td><td valign="top"><span class="RktVar">intdef-ctx</span></td><td valign="top"><span class="hspace"> </span></td><td valign="top">:</td><td valign="top"><span class="hspace"> </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"> </span>:<span class="hspace"> </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’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>’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"> </span></td><td valign="top"><span class="RktVar">id-stx</span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td></tr><tr><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span><span class="RktOpt">[</span></td><td valign="top"><span class="RktVar">failure-thunk</span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td></tr><tr><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </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"> </span></td><td valign="top">→</td><td valign="top"><span class="hspace"> </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"> </span><span class="RktVar">id-stx</span><span class="hspace"> </span>:<span class="hspace"> </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"> </span><span class="RktVar">failure-thunk</span><span class="hspace"> </span>:<span class="hspace"> </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"> </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">-></span></a></span><span class="hspace"> </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"> </span><span class="RktVal">#f</span><span class="RktPn">)</span><span class="hspace"> </span>=<span class="hspace"> </span><span class="RktVal">#f</span></td></tr><tr><td><table cellspacing="0" cellpadding="0" class="argcontract"><tr><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="RktVar">intdef-ctx</span></td><td valign="top"><span class="hspace"> </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>’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">> </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"> </span><span class="RktSym">swiss-cheeses?</span><span class="hspace"> </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">> </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"> </span><span class="RktPn">(</span><span class="RktSym">transformer</span><span class="hspace"> </span><span class="RktSym">stx</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace"> </span><span class="hspace"> </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"> </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"> </span><span class="RktRdr">#'</span><span class="RktSym">swiss-cheeses?</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace"> </span><span class="hspace"> </span><span class="RktRdr">#'</span><span class="RktVal">'</span><span class="RktVal">(</span><span class="RktVal">gruyère</span><span class="hspace"> </span><span class="RktVal">emmental</span><span class="hspace"> </span><span class="RktVal">raclette</span><span class="RktVal">)</span></td></tr><tr><td><span class="hspace"> </span><span class="hspace"> </span><span class="RktRdr">#'</span><span class="RktVal">'</span><span class="RktVal">(</span><span class="RktVal">roquefort</span><span class="hspace"> </span><span class="RktVal">camembert</span><span class="hspace"> </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">> </span><span class="RktPn">(</span><span class="RktSym">transformer</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">'(gruyè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">> </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"> </span><span class="RktPn">(</span><span class="RktSym">transformer-2</span><span class="hspace"> </span><span class="RktSym">stx</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace"> </span><span class="hspace"> </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"> </span></td><td valign="top"><span class="RktVar">id-stx</span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td></tr><tr><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span><span class="RktOpt">[</span></td><td valign="top"><span class="RktVar">failure-thunk</span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td></tr><tr><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </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"> </span></td><td valign="top">→</td><td valign="top"><span class="hspace"> </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"> </span><span class="RktVar">id-stx</span><span class="hspace"> </span>:<span class="hspace"> </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"> </span><span class="RktVar">failure-thunk</span><span class="hspace"> </span>:<span class="hspace"> </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"> </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">-></span></a></span><span class="hspace"> </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"> </span><span class="RktVal">#f</span><span class="RktPn">)</span><span class="hspace"> </span>=<span class="hspace"> </span><span class="RktVal">#f</span></td></tr><tr><td><table cellspacing="0" cellpadding="0" class="argcontract"><tr><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="RktVar">intdef-ctx</span></td><td valign="top"><span class="hspace"> </span></td><td valign="top">:</td><td valign="top"><span class="hspace"> </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">> </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"> </span><span class="RktSym">agent-007</span><span class="hspace"> </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"> </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">> </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"> </span><span class="RktPn">(</span><span class="RktSym">show-secret-identity</span><span class="hspace"> </span><span class="RktSym">stx</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace"> </span><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym">syntax-parse</span><span class="hspace"> </span><span class="RktSym">stx</span></td></tr><tr><td><span class="hspace"> </span><span class="hspace"> </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"> </span><span class="RktSym">name:id</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace"> </span><span class="hspace"> </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"> </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"> </span><span class="RktSym">orig-name</span><span class="RktPn">]</span><span class="hspace"> </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"> </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"> </span><span class="hspace"> </span><span class="RktRdr">#`</span><span class="RktVal">'</span><span class="RktVal">(</span><span class="RktVal">name</span><span class="hspace"> </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">> </span><span class="RktPn">(</span><span class="RktSym">show-secret-identity</span><span class="hspace"> </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’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"> </span><span class="RktVar">stx</span><span class="RktPn">)</span><span class="hspace"> </span>→<span class="hspace"> </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"> </span><span class="RktVar">stx</span><span class="hspace"> </span>:<span class="hspace"> </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’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"> </span><span class="RktVar">n</span><span class="hspace"> </span><span class="RktVar">stx</span><span class="RktPn">)</span></p></blockquote></td></tr><tr><td><span class="hspace"> </span>→<span class="hspace"> </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"> </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"> </span><span class="RktVar">n</span><span class="hspace"> </span>:<span class="hspace"> </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"> </span><span class="RktVar">stx</span><span class="hspace"> </span>:<span class="hspace"> </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"> </span>→<span class="hspace"> </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"> </span><span class="RktVar">stx</span><span class="RktPn">)</span><span class="hspace"> </span>→<span class="hspace"> </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"> </span><span class="RktVar">stx</span><span class="hspace"> </span>:<span class="hspace"> </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"> </span><span class="RktVar">stx</span><span class="RktPn">)</span><span class="hspace"> </span>→<span class="hspace"> </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"> </span><span class="RktVar">stx</span><span class="hspace"> </span>:<span class="hspace"> </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"> </span></td><td valign="top"><span class="RktVar">raw-require-spec</span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td></tr><tr><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="RktVar">stx</span><span class="RktPn">)</span></td><td valign="top"><span class="hspace"> </span></td><td valign="top">→</td><td valign="top"><span class="hspace"> </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"> </span><span class="RktVar">raw-require-spec</span><span class="hspace"> </span>:<span class="hspace"> </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"> </span><span class="RktVar">stx</span><span class="hspace"> </span>:<span class="hspace"> </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"> </span><span class="RktVar">raw-provide-spec-stx</span><span class="RktPn">)</span><span class="hspace"> </span>→<span class="hspace"> </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"> </span><span class="RktVar">raw-provide-spec-stx</span><span class="hspace"> </span>:<span class="hspace"> </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"> </span>→<span class="hspace"> </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"> </span>→<span class="hspace"> </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"> </span><span class="RktVal">'</span><span class="RktVal">expression</span><span class="hspace"> </span><span class="RktVal">'</span><span class="RktVal">top-level</span><span class="hspace"> </span><span class="RktVal">'</span><span class="RktVal">module</span><span class="hspace"> </span><span class="RktVal">'</span><span class="RktVal">module-begin</span><span class="hspace"> </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’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"> </span>→<span class="hspace"> </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"> </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">> </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"> </span><span class="RktPn">(</span><span class="RktSym">print-phase-level</span><span class="hspace"> </span><span class="RktSym">stx</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace"> </span><span class="hspace"> </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"> </span><span class="RktVal">"phase level: ~a~n"</span><span class="hspace"> </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"> </span><span class="hspace"> </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">> </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"> </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"> </span><span class="RktVal">2</span><span class="hspace"> </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">> </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"> </span><span class="hspace"> </span><span class="RktCmt">;</span><span class="RktCmt"> </span><span class="RktCmt">a macro bound at phase 1</span></td></tr><tr><td><span class="hspace"> </span><span class="hspace"> </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"> </span><span class="RktPn">(</span><span class="RktSym">print-phase-level</span><span class="hspace"> </span><span class="RktSym">stx</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace"> </span><span class="hspace"> </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"> </span><span class="RktVal">"phase level: ~a~n"</span><span class="hspace"> </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–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"> </span>→<span class="hspace"> </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"> </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"> </span>→<span class="hspace"> </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"> </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’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"> </span></td><td valign="top"><span class="RktVar">id-stx</span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td></tr><tr><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </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"> </span></td><td valign="top">→</td><td valign="top"><span class="hspace"> </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"> </span><span class="RktVar">id-stx</span><span class="hspace"> </span>:<span class="hspace"> </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"> </span><span class="RktVar">only-generated?</span><span class="hspace"> </span>:<span class="hspace"> </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"> </span>=<span class="hspace"> </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"> </span><span class="RktVar">id-stx</span><span class="RktPn">)</span><span class="hspace"> </span>→<span class="hspace"> </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"> </span><span class="RktVar">id-stx</span><span class="hspace"> </span>:<span class="hspace"> </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"> </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"> </span></td><td valign="top">→</td><td valign="top"><span class="hspace"> </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"> </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"> </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"> </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"> </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"> </span>→<span class="hspace"> </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"> </span>→<span class="hspace"> </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"> </span>→<span class="hspace"> </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"> </span></td><td valign="top"><span class="RktVar">id-stx</span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td></tr><tr><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </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"> </span></td><td valign="top">→</td><td valign="top"><span class="hspace"> </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"> </span><span class="RktVar">id-stx</span><span class="hspace"> </span>:<span class="hspace"> </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"> </span><span class="RktVar">intdef-ctx</span><span class="hspace"> </span>:<span class="hspace"> </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"> </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"> </span><span class="RktVal">#f</span><span class="RktPn">)</span><span class="hspace"> </span>=<span class="hspace"> </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"> </span><span class="RktVar">stx</span><span class="RktPn">)</span><span class="hspace"> </span>→<span class="hspace"> </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"> </span><span class="RktVar">stx</span><span class="hspace"> </span>:<span class="hspace"> </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—<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—<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">> </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"> </span><span class="RktSym">example</span><span class="hspace"> </span><span class="RktSym">racket</span></td></tr><tr><td><span class="hspace"> </span><span class="hspace"> </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"> </span><span class="RktPn">(</span><span class="RktSym">require-math</span><span class="hspace"> </span><span class="RktVar">stx</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace"> </span><span class="hspace"> </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"> </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"> </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"> </span><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym">require-math</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace"> </span><span class="hspace"> </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"> </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"> </span>→<span class="hspace"> </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"> </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"> </span><span class="RktVal">'</span><span class="RktVal">flip</span><span class="hspace"> </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"> </span><span class="RktVar">key</span><span class="RktPn">)</span></p></blockquote></td></tr><tr><td><span class="hspace"> </span>→<span class="hspace"> </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"> </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"> </span><span class="RktVal">'</span><span class="RktVal">flip</span><span class="hspace"> </span><span class="RktVal">'</span><span class="RktVal">add</span><span class="hspace"> </span><span class="RktVal">'</span><span class="RktVal">remove</span><span class="RktPn">)</span><span class="RktPn">)</span><span class="hspace"> </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">-></span>*</a></span><span class="RktPn"> .</span><span class="hspace"> </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"> </span><span class="RktVar">key</span><span class="hspace"> </span>:<span class="hspace"> </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"> </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"> </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"> </span></td><td valign="top"><span class="RktVar">ext-stx</span></td><td valign="top"><span class="hspace"> </span></td></tr><tr><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="RktVar">base-stx</span></td><td valign="top"><span class="hspace"> </span></td></tr><tr><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </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"> </span></td></tr></table></blockquote></td></tr><tr><td><span class="hspace"> </span>→<span class="hspace"> </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"> </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"> </span><span class="RktVal">'</span><span class="RktVal">flip</span><span class="hspace"> </span><span class="RktVal">'</span><span class="RktVal">add</span><span class="hspace"> </span><span class="RktVal">'</span><span class="RktVal">remove</span><span class="RktPn">)</span><span class="RktPn">)</span><span class="hspace"> </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">-></span>*</a></span><span class="RktPn"> .</span><span class="hspace"> </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"> </span><span class="RktVar">ext-stx</span><span class="hspace"> </span>:<span class="hspace"> </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"> </span><span class="RktVar">base-stx</span><span class="hspace"> </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"> </span>→<span class="hspace"> </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"> </span>→<span class="hspace"> </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"> </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"> </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"> </span></td><td valign="top"><span class="RktVar">mod-path</span></td><td valign="top"><span class="hspace"> </span></td></tr><tr><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="RktVar">shift</span><span class="RktPn">)</span></td><td valign="top"><span class="hspace"> </span></td></tr></table></blockquote></td></tr><tr><td><table cellspacing="0" cellpadding="0" class="prototype"><tr><td valign="top"><span class="hspace"> </span></td><td valign="top">→</td><td valign="top"><span class="hspace"> </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"> </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"> </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"> </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"> </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"> </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"> </span><span class="RktVal">#f</span><span class="RktPn">)</span></td></tr></table></td></tr></table></td></tr><tr><td><span class="hspace"> </span><span class="RktVar">mod-path</span><span class="hspace"> </span>:<span class="hspace"> </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"> </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"> </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–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"> </span>:<span class="hspace"> </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"> </span><span class="RktVar">v</span><span class="RktPn">)</span><span class="hspace"> </span>→<span class="hspace"> </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"> </span><span class="RktVar">v</span><span class="hspace"> </span>:<span class="hspace"> </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 "scribblings/reference/reference.scrbl")" x-source-pkg="racket-doc" x-part-tag=""require-trans"">12.4.1<tt> </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"> </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"> 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"> </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"> </span></td><td valign="top">→</td><td valign="top"><span class="hspace"> </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"> </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"> </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"> </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"> </span><span class="RktVar">require-spec</span><span class="hspace"> </span>:<span class="hspace"> </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"> </span><span class="RktVar">proc</span><span class="RktPn">)</span><span class="hspace"> </span>→<span class="hspace"> </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"> </span></td><td valign="top"><span class="RktVar">proc</span></td><td valign="top"><span class="hspace"> </span></td><td valign="top">:</td><td valign="top"><span class="hspace"> </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"> </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">-></span></a></span><span class="RktPn"> .</span><span class="hspace"> </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"> </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"> </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"> </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"> </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">> </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"> </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"> </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">> </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"> </span><span class="RktSym">printing</span></td></tr><tr><td><span class="hspace"> </span><span class="hspace"> </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"> </span><span class="hspace"> </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"> </span><span class="RktPn">(</span><span class="RktSym">stx</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace"> </span><span class="hspace"> </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"> </span><span class="RktSym">stx</span><span class="hspace"> </span><span class="RktPn">(</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace"> </span><span class="hspace"> </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"> </span><span class="RktSym">path</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace"> </span><span class="hspace"> </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"> </span><span class="hspace"> </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"> </span><span class="RktVal">"Importing: ~a~n"</span><span class="hspace"> </span><span class="RktRdr">#'</span><span class="RktSym">path</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace"> </span><span class="hspace"> </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"> </span><span class="RktVar">v</span><span class="RktPn">)</span><span class="hspace"> </span>→<span class="hspace"> </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"> </span><span class="RktVar">v</span><span class="hspace"> </span>:<span class="hspace"> </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"> </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"> </span><span class="RktPn">(</span></td><td><span class="nobreak"><span class="RktSym">local-id</span></span></td></tr><tr><td><span class="hspace"> </span></td><td><span class="hspace"> </span></td><td><span class="hspace"> </span></td><td><span class="hspace"> </span></td><td><span class="RktSym">src-sym</span></td></tr><tr><td><span class="hspace"> </span></td><td><span class="hspace"> </span></td><td><span class="hspace"> </span></td><td><span class="hspace"> </span></td><td><span class="RktSym">src-mod-path</span></td></tr><tr><td><span class="hspace"> </span></td><td><span class="hspace"> </span></td><td><span class="hspace"> </span></td><td><span class="hspace"> </span></td><td><span class="RktSym">mode</span></td></tr><tr><td><span class="hspace"> </span></td><td><span class="hspace"> </span></td><td><span class="hspace"> </span></td><td><span class="hspace"> </span></td><td><span class="RktSym">req-mode</span></td></tr><tr><td><span class="hspace"> </span></td><td><span class="hspace"> </span></td><td><span class="hspace"> </span></td><td><span class="hspace"> </span></td><td><span class="RktSym">orig-mode</span></td></tr><tr><td><span class="hspace"> </span></td><td><span class="hspace"> </span></td><td><span class="hspace"> </span></td><td><span class="hspace"> </span></td><td><span class="RktSym">orig-stx</span><span class="RktPn">)</span></td></tr></table></blockquote></td></tr><tr><td><span class="hspace"> </span><span class="RktPn">#:extra-constructor-name</span><span class="hspace"> </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"> </span><span class="RktSym">local-id</span><span class="hspace"> </span>:<span class="hspace"> </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> —<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> —<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> —<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> —<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> —<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> —<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–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"> </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"> </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"> </span><span class="RktPn">#:extra-constructor-name</span><span class="hspace"> </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"> </span><span class="RktSym">mod-path-stx</span><span class="hspace"> </span>:<span class="hspace"> </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"> </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"> </span><span class="RktSym">mode</span><span class="hspace"> </span>:<span class="hspace"> </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> —<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> —<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–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"> </span>→<span class="hspace"> </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"> </span><span class="RktVal">#f</span><span class="hspace"> </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"> </span><span class="RktVar">module-path</span><span class="RktPn">)</span><span class="hspace"> </span>→<span class="hspace"> </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"> </span><span class="RktVar">module-path</span><span class="hspace"> </span>:<span class="hspace"> </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"> </span><span class="RktVal">#f</span><span class="hspace"> </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"> </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"> </span></td><td valign="top">→</td><td valign="top"><span class="hspace"> </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"> </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"> </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"> </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"> </span></td><td valign="top"><span class="RktVar">module-path</span></td><td valign="top"><span class="hspace"> </span></td><td valign="top">:</td><td valign="top"><span class="hspace"> </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"> </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"> </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"> </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"> </span></td><td valign="top">→</td><td valign="top"><span class="hspace"> </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"> </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"> </span><span class="RktVal">#f</span><span class="hspace"> </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"> </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">-></span></a></span><span class="RktPn"> .</span><span class="hspace"> </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"> </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">-></span>*</a></span><span class="RktPn"> .</span><span class="hspace"> </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 "scribblings/reference/reference.scrbl")" x-source-pkg="racket-doc" x-part-tag=""provide-trans"">12.4.2<tt> </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"> </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"> 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’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’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"> </span><span class="RktVar">provide-spec</span><span class="hspace"> </span><span class="RktVar">modes</span><span class="RktPn">)</span><span class="hspace"> </span>→<span class="hspace"> </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"> </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"> </span><span class="RktVar">provide-spec</span><span class="hspace"> </span>:<span class="hspace"> </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"> </span><span class="RktVar">modes</span><span class="hspace"> </span>:<span class="hspace"> </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"> </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–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"> </span><span class="RktVar">provide-spec</span><span class="hspace"> </span><span class="RktVar">modes</span><span class="RktPn">)</span><span class="hspace"> </span>→<span class="hspace"> </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"> </span><span class="RktVar">provide-spec</span><span class="hspace"> </span>:<span class="hspace"> </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"> </span><span class="RktVar">modes</span><span class="hspace"> </span>:<span class="hspace"> </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"> </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–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"> </span><span class="RktVar">proc</span><span class="RktPn">)</span><span class="hspace"> </span>→<span class="hspace"> </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"> </span></td><td valign="top"><span class="RktVar">proc</span></td><td valign="top"><span class="hspace"> </span></td><td valign="top">:</td><td valign="top"><span class="hspace"> </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"> </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"> </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"> </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">-></span></a></span><span class="RktPn"> .</span><span class="hspace"> </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"> </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"> </span><span class="RktVar">proc</span><span class="hspace"> </span><span class="RktVar">pre-proc</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace"> </span>→<span class="hspace"> </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"> </span><span class="RktVar">pre-proc</span><span class="RktPn">)</span></p></blockquote></td></tr><tr><td><span class="hspace"> </span>→<span class="hspace"> </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"> </span></td><td valign="top"><span class="RktVar">pre-proc</span></td><td valign="top"><span class="hspace"> </span></td><td valign="top">:</td><td valign="top"><span class="hspace"> </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"> </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"> </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"> </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">-></span></a></span><span class="RktPn"> .</span><span class="hspace"> </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">> </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"> </span><span class="RktSym">m</span><span class="hspace"> </span><span class="RktSym">racket</span></td></tr><tr><td><span class="hspace"> </span><span class="hspace"> </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"> </span><span class="hspace"> </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"> </span><span class="RktSym">racket/provide-transform</span><span class="hspace"> </span><span class="RktSym">syntax/parse</span><span class="hspace"> </span><span class="RktSym">syntax/stx</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace"> </span></td></tr><tr><td><span class="hspace"> </span><span class="hspace"> </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"> </span><span class="RktSym">wrapped-out</span></td></tr><tr><td><span class="hspace"> </span><span class="hspace"> </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"> </span><span class="hspace"> </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"> </span><span class="RktPn">(</span><span class="RktSym">stx</span><span class="hspace"> </span><span class="RktSym">modes</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace"> </span><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym">syntax-parse</span><span class="hspace"> </span><span class="RktSym">stx</span></td></tr><tr><td><span class="hspace"> </span><span class="hspace"> </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"> </span><span class="RktSym">f</span><span class="hspace"> </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"> </span><span class="hspace"> </span><span class="RktPn">#:with</span><span class="hspace"> </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"> </span>:<span class="hspace"> </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"> </span><span class="RktVar">v</span><span class="RktPn">)</span><span class="hspace"> </span>→<span class="hspace"> </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"> </span><span class="RktVar">v</span><span class="hspace"> </span>:<span class="hspace"> </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"> </span><span class="RktVar">v</span><span class="RktPn">)</span><span class="hspace"> </span>→<span class="hspace"> </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"> </span><span class="RktVar">v</span><span class="hspace"> </span>:<span class="hspace"> </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"> </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"> </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"> </span><span class="RktPn">#:extra-constructor-name</span><span class="hspace"> </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"> </span><span class="RktSym">local-id</span><span class="hspace"> </span>:<span class="hspace"> </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"> </span><span class="RktSym">out-sym</span><span class="hspace"> </span>:<span class="hspace"> </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"> </span><span class="RktSym">mode</span><span class="hspace"> </span>:<span class="hspace"> </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"> </span><span class="RktSym">protect?</span><span class="hspace"> </span>:<span class="hspace"> </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"> </span><span class="RktSym">orig-stx</span><span class="hspace"> </span>:<span class="hspace"> </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> —<wbr></wbr> the external name of the binding.</p></li><li><p><span class="RktSym">mode</span> —<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> —<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> —<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–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"> </span></td><td valign="top">→</td><td valign="top"><span class="hspace"> </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"> </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"> </span><span class="RktVal">#f</span><span class="hspace"> </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"> </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">-></span></a></span><span class="RktPn"> .</span><span class="hspace"> </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"> </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">-></span>*</a></span><span class="RktPn"> .</span><span class="hspace"> </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 "scribblings/reference/reference.scrbl")" x-source-pkg="racket-doc" x-part-tag=""keyword-trans"">12.4.3<tt> </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"> </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"> 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"> </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"> </span></td><td valign="top">→</td><td valign="top"><span class="hspace"> </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"> </span><span class="RktVal">#f</span></td></tr><tr><td><span class="hspace"> </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"> </span><span class="RktPn">(</span><span class="RktPn">[</span><span class="RktSym">val?</span><span class="hspace"> </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"> </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 "scribblings/reference/reference.scrbl")" x-source-pkg="racket-doc" x-part-tag=""portal-syntax"">12.4.4<tt> </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"> </span><span class="RktVar">v</span><span class="RktPn">)</span><span class="hspace"> </span>→<span class="hspace"> </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"> </span><span class="RktVar">v</span><span class="hspace"> </span>:<span class="hspace"> </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"> </span><span class="RktVar">stx</span><span class="RktPn">)</span><span class="hspace"> </span>→<span class="hspace"> </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"> </span><span class="RktVar">stx</span><span class="hspace"> </span>:<span class="hspace"> </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"> </span><span class="RktVar">portal</span><span class="RktPn">)</span><span class="hspace"> </span>→<span class="hspace"> </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"> </span><span class="RktVar">portal</span><span class="hspace"> </span>:<span class="hspace"> </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, "8.6", "../");"/></form> <a href="https://docs.racket-lang.org/index.html" title="up to the documentation top" data-pltdoc="x" onclick="return GotoPLTRoot("8.6");">top</a><span class="tocsettoggle"> <a href="javascript:void(0);" title="show/hide table of contents" onclick="TocsetToggle();">contents</a></span></span><span class="navright"> <a href="stxcmp.html" title="backward to "12.3 Syntax Object Bindings"" data-pltdoc="x">← prev</a> <a href="Macros.html" title="up to "12 Macros"" data-pltdoc="x">up</a> <a href="stxparam.html" title="forward to "12.5 Syntax Parameters"" data-pltdoc="x">next →</a></span> </div></div></div><div id="contextindicator"> </div></body></html>
|