/usr/share/doc/racket/macro-debugger/index.html is in racket-doc 6.7-3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 | <!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"/><title>Macro Debugger: Inspecting Macro Expansion</title><link rel="stylesheet" type="text/css" href="../scribble.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="../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="../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="" class="tocviewselflink" data-pltdoc="x">Macro Debugger:<span class="mywbr"> </span> Inspecting Macro Expansion</a></td></tr></table></div><div class="tocviewsublistonly" style="display: none;" id="tocview_0"><table cellspacing="0" cellpadding="0"><tr><td align="right">1 </td><td><a href="#%28part._.Macro_.Stepper%29" class="tocviewlink" data-pltdoc="x">Macro Stepper</a></td></tr><tr><td align="right">2 </td><td><a href="#%28part._.Macro_.Expansion_.Tools%29" class="tocviewlink" data-pltdoc="x">Macro Expansion Tools</a></td></tr><tr><td align="right">3 </td><td><a href="#%28part._.Macro_.Stepper_.A.P.I_for_.Macros%29" class="tocviewlink" data-pltdoc="x">Macro Stepper API for Macros</a></td></tr><tr><td align="right">4 </td><td><a href="#%28part._.Macro_.Stepper_.Text_.Interface%29" class="tocviewlink" data-pltdoc="x">Macro Stepper Text Interface</a></td></tr><tr><td align="right">5 </td><td><a href="#%28part._.Syntax_.Browser%29" class="tocviewlink" data-pltdoc="x">Syntax Browser</a></td></tr><tr><td align="right">6 </td><td><a href="#%28part._.Using_the_.Macro_.Stepper%29" class="tocviewlink" data-pltdoc="x">Using the Macro Stepper</a></td></tr><tr><td align="right">7 </td><td><a href="#%28part._.Using_the_.Syntax_.Browser%29" class="tocviewlink" data-pltdoc="x">Using the Syntax Browser</a></td></tr><tr><td align="right">8 </td><td><a href="#%28part._.Finding_.Useless_requires%29" class="tocviewlink" data-pltdoc="x">Finding Useless <span class="RktSym"><span class="RktStxLink">require</span></span>s</a></td></tr><tr><td align="right">9 </td><td><a href="#%28part._.Showing_.Module_.Dependencies%29" class="tocviewlink" data-pltdoc="x">Showing Module Dependencies</a></td></tr><tr><td align="right">10 </td><td><a href="#%28part._.Macro_.Profiler%29" class="tocviewlink" data-pltdoc="x">Macro Profiler</a></td></tr></table></div></div></div><div class="tocsub"><table class="tocsublist" cellspacing="0"><tr><td><span class="tocsublinknumber"></span><a href="#%28part._top%29" class="tocsubseclink" data-pltdoc="x">Macro Debugger:<span class="mywbr"> </span> Inspecting Macro Expansion</a></td></tr><tr><td><span class="tocsublinknumber">1<tt> </tt></span><a href="#%28part._.Macro_.Stepper%29" class="tocsubseclink" data-pltdoc="x">Macro Stepper</a></td></tr><tr><td><a href="#%28def._%28%28lib._macro-debugger%2Fstepper..rkt%29._expand%2Fstep%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">expand/<span class="mywbr"> </span>step</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._macro-debugger%2Fstepper..rkt%29._expand-module%2Fstep%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">expand-<wbr></wbr>module/<span class="mywbr"> </span>step</span></span></a></td></tr><tr><td><span class="tocsublinknumber">2<tt> </tt></span><a href="#%28part._.Macro_.Expansion_.Tools%29" class="tocsubseclink" data-pltdoc="x">Macro Expansion Tools</a></td></tr><tr><td><a href="#%28def._%28%28lib._macro-debugger%2Fexpand..rkt%29._expand-only%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">expand-<wbr></wbr>only</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._macro-debugger%2Fexpand..rkt%29._expand%2Fhide%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">expand/<span class="mywbr"> </span>hide</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._macro-debugger%2Fexpand..rkt%29._expand%2Fshow-predicate%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">expand/<span class="mywbr"> </span>show-<wbr></wbr>predicate</span></span></a></td></tr><tr><td><span class="tocsublinknumber">3<tt> </tt></span><a href="#%28part._.Macro_.Stepper_.A.P.I_for_.Macros%29" class="tocsubseclink" data-pltdoc="x">Macro Stepper API for Macros</a></td></tr><tr><td><a href="#%28def._%28%28lib._macro-debugger%2Femit..rkt%29._emit-remark%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">emit-<wbr></wbr>remark</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._macro-debugger%2Femit..rkt%29._emit-local-step%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">emit-<wbr></wbr>local-<wbr></wbr>step</span></span></a></td></tr><tr><td><span class="tocsublinknumber">4<tt> </tt></span><a href="#%28part._.Macro_.Stepper_.Text_.Interface%29" class="tocsubseclink" data-pltdoc="x">Macro Stepper Text Interface</a></td></tr><tr><td><a href="#%28def._%28%28lib._macro-debugger%2Fstepper-text..rkt%29._expand%2Fstep-text%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">expand/<span class="mywbr"> </span>step-<wbr></wbr>text</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._macro-debugger%2Fstepper-text..rkt%29._stepper-text%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">stepper-<wbr></wbr>text</span></span></a></td></tr><tr><td><span class="tocsublinknumber">5<tt> </tt></span><a href="#%28part._.Syntax_.Browser%29" class="tocsubseclink" data-pltdoc="x">Syntax Browser</a></td></tr><tr><td><a href="#%28def._%28%28lib._macro-debugger%2Fsyntax-browser..rkt%29._browse-syntax%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">browse-<wbr></wbr>syntax</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._macro-debugger%2Fsyntax-browser..rkt%29._browse-syntaxes%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">browse-<wbr></wbr>syntaxes</span></span></a></td></tr><tr><td><span class="tocsublinknumber">6<tt> </tt></span><a href="#%28part._.Using_the_.Macro_.Stepper%29" class="tocsubseclink" data-pltdoc="x">Using the Macro Stepper</a></td></tr><tr><td><span class="tocsublinknumber">6.1<tt> </tt></span><a href="#%28part._.Navigation%29" class="tocsubseclink" data-pltdoc="x">Navigation</a></td></tr><tr><td><span class="tocsublinknumber">6.2<tt> </tt></span><a href="#%28part._.Macro_.Hiding%29" class="tocsubseclink" data-pltdoc="x">Macro Hiding</a></td></tr><tr><td><span class="tocsublinknumber">7<tt> </tt></span><a href="#%28part._.Using_the_.Syntax_.Browser%29" class="tocsubseclink" data-pltdoc="x">Using the Syntax Browser</a></td></tr><tr><td><span class="tocsublinknumber">7.1<tt> </tt></span><a href="#%28part._.Selection%29" class="tocsubseclink" data-pltdoc="x">Selection</a></td></tr><tr><td><span class="tocsublinknumber">7.2<tt> </tt></span><a href="#%28part._.Primary_.Partition%29" class="tocsubseclink" data-pltdoc="x">Primary Partition</a></td></tr><tr><td><span class="tocsublinknumber">7.3<tt> </tt></span><a href="#%28part._.Secondary_.Partitioning%29" class="tocsubseclink" data-pltdoc="x">Secondary Partitioning</a></td></tr><tr><td><span class="tocsublinknumber">7.4<tt> </tt></span><a href="#%28part._.Properties%29" class="tocsubseclink" data-pltdoc="x">Properties</a></td></tr><tr><td><span class="tocsublinknumber">7.5<tt> </tt></span><a href="#%28part._.Interpreting_.Syntax%29" class="tocsubseclink" data-pltdoc="x">Interpreting Syntax</a></td></tr><tr><td><span class="tocsublinknumber">8<tt> </tt></span><a href="#%28part._.Finding_.Useless_requires%29" class="tocsubseclink" data-pltdoc="x">Finding Useless <span class="RktSym"><span class="RktStxLink">require</span></span>s</a></td></tr><tr><td><a href="#%28def._%28%28lib._macro-debugger%2Fanalysis%2Fcheck-requires..rkt%29._check-requires%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">check-<wbr></wbr>requires</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._macro-debugger%2Fanalysis%2Fcheck-requires..rkt%29._show-requires%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">show-<wbr></wbr>requires</span></span></a></td></tr><tr><td><span class="tocsublinknumber">9<tt> </tt></span><a href="#%28part._.Showing_.Module_.Dependencies%29" class="tocsubseclink" data-pltdoc="x">Showing Module Dependencies</a></td></tr><tr><td><a href="#%28def._%28%28lib._macro-debugger%2Fanalysis%2Fshow-dependencies..rkt%29._show-dependencies%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">show-<wbr></wbr>dependencies</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._macro-debugger%2Fanalysis%2Fshow-dependencies..rkt%29._get-dependencies%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">get-<wbr></wbr>dependencies</span></span></a></td></tr><tr><td><span class="tocsublinknumber">10<tt> </tt></span><a href="#%28part._.Macro_.Profiler%29" class="tocsubseclink" data-pltdoc="x">Macro Profiler</a></td></tr></table></div></div><div class="maincolumn"><div class="main"><div class="versionbox"><span class="version">6.7</span></div><div class="navsettop"><span class="navleft"><form class="searchform"><input class="searchbox" style="color: #888;" type="text" value="...search manuals..." title="Enter a search string to search the manuals" onkeypress="return DoSearchKey(event, this, "6.7", "../");" onfocus="this.style.color="black"; this.style.textAlign="left"; if (this.value == "...search manuals...") this.value="";" onblur="if (this.value.match(/^ *$/)) { this.style.color="#888"; this.style.textAlign="center"; this.value="...search manuals..."; }"/></form> <a href="../index.html" title="up to the documentation top" data-pltdoc="x" onclick="return GotoPLTRoot("6.7");">top</a></span><span class="navright"> <span class="nonavigation">← prev</span> <a href="../index.html" title="up to the documentation top" data-pltdoc="x" onclick="return GotoPLTRoot("6.7");">up</a> <span class="nonavigation">next →</span></span> </div><h2 x-source-module="(lib "macro-debugger/macro-debugger.scrbl")" x-source-pkg="macro-debugger" x-part-tag=""top""><a name="(part._top)"></a><a name="(part._.Macro_.Debugger__.Inspecting_.Macro_.Expansion)"></a>Macro Debugger: Inspecting Macro Expansion</h2><div class="SAuthorListBox"><span class="SAuthorList"><p class="author">Ryan Culpepper</p></span></div><p>The macro-debugger collection contains two tools: a stepper for macro
expansion and a standalone syntax browser. The macro stepper shows the
programmer the expansion of a program as a sequence of rewriting
steps, using the syntax browser to display the individual terms. The
syntax browser uses colors and a properties panel to show the term’s
syntax properties, such as lexical binding information and source
location.</p><h3 x-source-module="(lib "macro-debugger/macro-debugger.scrbl")" x-source-pkg="macro-debugger" x-part-tag=""Macro_Stepper"">1<tt> </tt><a name="(part._.Macro_.Stepper)"></a><a name="(mod-path._macro-debugger/stepper)"></a>Macro Stepper</h3><p><table cellspacing="0" cellpadding="0" class="defmodule"><tr><td align="left" colspan="2"><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=require.html%23%2528form._%2528%2528lib._racket%252Fprivate%252Fbase..rkt%2529._require%2529%2529&version=6.7" class="RktStxLink Sq" data-pltdoc="x">require</a></span><span class="stt"> </span><a href="#%28mod-path._macro-debugger%2Fstepper%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">macro-debugger/stepper</span></a><span class="RktPn">)</span></td></tr><tr><td align="left"> </td><td align="right"><span class="RpackageSpec"><span class="Smaller"> package:</span> <span class="stt">macro-debugger</span></span></td></tr></table></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._macro-debugger/stepper..rkt)._expand/step))"></a><span title="Provided from: macro-debugger/stepper | Package: macro-debugger"><span class="RktSym"><a href="#%28def._%28%28lib._macro-debugger%2Fstepper..rkt%29._expand%2Fstep%29%29" class="RktValDef RktValLink" data-pltdoc="x">expand/step</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="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=void.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._void%7E3f%2529%2529&version=6.7" class="RktValLink Sq" 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="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=data-structure-contracts.html%23%2528def._%2528%2528lib._racket%252Fcontract%252Fprivate%252Fmisc..rkt%2529._any%252Fc%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">any/c</a></span></td></tr></table></blockquote></div><div class="SIntrapara">Expands the syntax (or S-expression) and opens a macro stepper frame
for stepping through the expansion.</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._macro-debugger/stepper..rkt)._expand-module/step))"></a><span title="Provided from: macro-debugger/stepper | Package: macro-debugger"><span class="RktSym"><a href="#%28def._%28%28lib._macro-debugger%2Fstepper..rkt%29._expand-module%2Fstep%29%29" class="RktValDef RktValLink" data-pltdoc="x">expand-module/step</a></span></span><span class="hspace"> </span><span class="RktVar">mod</span><span class="RktPn">)</span><span class="hspace"> </span>→<span class="hspace"> </span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=void.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._void%7E3f%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">void?</a></span></p></blockquote></td></tr><tr><td><span class="hspace"> </span><span class="RktVar">mod</span><span class="hspace"> </span>:<span class="hspace"> </span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=Module_Names_and_Loading.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._module-path%7E3f%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">module-path?</a></span></td></tr></table></blockquote></div><div class="SIntrapara">Expands the source file named by <span class="RktVar">mod</span>, which must contains a
single module declaration, and opens a macro stepper frame for
stepping through the expansion.</div></p><h3 x-source-module="(lib "macro-debugger/macro-debugger.scrbl")" x-source-pkg="macro-debugger" x-part-tag=""Macro_Expansion_Tools"">2<tt> </tt><a name="(part._.Macro_.Expansion_.Tools)"></a><a name="(mod-path._macro-debugger/expand)"></a>Macro Expansion Tools</h3><p><table cellspacing="0" cellpadding="0" class="defmodule"><tr><td align="left" colspan="2"><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=require.html%23%2528form._%2528%2528lib._racket%252Fprivate%252Fbase..rkt%2529._require%2529%2529&version=6.7" class="RktStxLink Sq" data-pltdoc="x">require</a></span><span class="stt"> </span><a href="#%28mod-path._macro-debugger%2Fexpand%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">macro-debugger/expand</span></a><span class="RktPn">)</span></td></tr><tr><td align="left"> </td><td align="right"><span class="RpackageSpec"><span class="Smaller"> package:</span> <span class="stt">macro-debugger-text-lib</span></span></td></tr></table></p><p>This module provides <span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=Expanding_Top-Level_Forms.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._expand%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">expand</a></span>-like procedures that allow the
user to specify macros whose expansions should be hidden.</p><p>Warning: because of limitations in the way macro expansion is
selectively hidden, the resulting syntax may not evaluate to the same
result as the original syntax.</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._macro-debugger/expand..rkt)._expand-only))"></a><span title="Provided from: macro-debugger/expand | Package: macro-debugger-text-lib"><span class="RktSym"><a href="#%28def._%28%28lib._macro-debugger%2Fexpand..rkt%29._expand-only%29%29" class="RktValDef RktValLink" data-pltdoc="x">expand-only</a></span></span><span class="hspace"> </span><span class="RktVar">stx</span><span class="hspace"> </span><span class="RktVar">transparent-macros</span><span class="RktPn">)</span><span class="hspace"> </span>→<span class="hspace"> </span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=stxops.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._syntax%7E3f%2529%2529&version=6.7" class="RktValLink Sq" 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="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=data-structure-contracts.html%23%2528def._%2528%2528lib._racket%252Fcontract%252Fprivate%252Fmisc..rkt%2529._any%252Fc%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">any/c</a></span></td></tr><tr><td><span class="hspace"> </span><span class="RktVar">transparent-macros</span><span class="hspace"> </span>:<span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=data-structure-contracts.html%23%2528def._%2528%2528lib._racket%252Fcontract%252Fbase..rkt%2529._listof%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">listof</a></span><span class="hspace"> </span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=stxops.html%23%2528def._%2528%2528lib._racket%252Fprivate%252Fstx..rkt%2529._identifier%7E3f%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">identifier?</a></span><span class="RktPn">)</span></td></tr></table></blockquote></div><div class="SIntrapara">Expands the given syntax <span class="RktVar">stx</span>, but only shows the expansion
of macros whose names occur in <span class="RktVar">transparent-macros</span>.</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="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=stxops.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._syntax-%7E3edatum%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">syntax->datum</a></span></td></tr><tr><td><span class="hspace"> </span><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="#%28def._%28%28lib._macro-debugger%2Fexpand..rkt%29._expand-only%29%29" class="RktValLink" data-pltdoc="x">expand-only</a></span><span class="hspace"> </span><span class="RktRdr">#'</span><span class="RktPn">(</span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=let.html%23%2528form._%2528%2528lib._racket%252Fprivate%252Fletstx-scheme..rkt%2529._let%2529%2529&version=6.7" class="RktStxLink Sq" 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><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><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=if.html%23%2528form._%2528%2528lib._racket%252Fprivate%252Fletstx-scheme..rkt%2529._or%2529%2529&version=6.7" class="RktStxLink Sq" data-pltdoc="x">or</a></span><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=number-types.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._even%7E3f%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">even?</a></span><span class="hspace"> </span><span class="RktSym">x</span><span class="RktPn">)</span><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=number-types.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._even%7E3f%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">even?</a></span><span class="hspace"> </span><span class="RktSym">y</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"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=pairs.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._list%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">list</a></span><span class="hspace"> </span><span class="RktRdr">#'</span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=if.html%23%2528form._%2528%2528lib._racket%252Fprivate%252Fletstx-scheme..rkt%2529._or%2529%2529&version=6.7" class="RktStxLink Sq" data-pltdoc="x">or</a></span><span class="RktPn">)</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr></table></td></tr><tr><td><p><span class="RktRes">'(let ((x 1) (y 2)) (let ((or-part (even? x))) (if or-part or-part (even? y))))</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._((lib._macro-debugger/expand..rkt)._expand/hide))"></a><span title="Provided from: macro-debugger/expand | Package: macro-debugger-text-lib"><span class="RktSym"><a href="#%28def._%28%28lib._macro-debugger%2Fexpand..rkt%29._expand%2Fhide%29%29" class="RktValDef RktValLink" data-pltdoc="x">expand/hide</a></span></span><span class="hspace"> </span><span class="RktVar">stx</span><span class="hspace"> </span><span class="RktVar">hidden-macros</span><span class="RktPn">)</span><span class="hspace"> </span>→<span class="hspace"> </span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=stxops.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._syntax%7E3f%2529%2529&version=6.7" class="RktValLink Sq" 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="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=data-structure-contracts.html%23%2528def._%2528%2528lib._racket%252Fcontract%252Fprivate%252Fmisc..rkt%2529._any%252Fc%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">any/c</a></span></td></tr><tr><td><span class="hspace"> </span><span class="RktVar">hidden-macros</span><span class="hspace"> </span>:<span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=data-structure-contracts.html%23%2528def._%2528%2528lib._racket%252Fcontract%252Fbase..rkt%2529._listof%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">listof</a></span><span class="hspace"> </span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=stxops.html%23%2528def._%2528%2528lib._racket%252Fprivate%252Fstx..rkt%2529._identifier%7E3f%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">identifier?</a></span><span class="RktPn">)</span></td></tr></table></blockquote></div><div class="SIntrapara">Expands the given syntax <span class="RktVar">stx</span>, but hides the expansion of macros in the
given identifier list (conceptually, the complement of expand-only).</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="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=stxops.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._syntax-%7E3edatum%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">syntax->datum</a></span></td></tr><tr><td><span class="hspace"> </span><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="#%28def._%28%28lib._macro-debugger%2Fexpand..rkt%29._expand%2Fhide%29%29" class="RktValLink" data-pltdoc="x">expand/hide</a></span><span class="hspace"> </span><span class="RktRdr">#'</span><span class="RktPn">(</span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=let.html%23%2528form._%2528%2528lib._racket%252Fprivate%252Fletstx-scheme..rkt%2529._let%2529%2529&version=6.7" class="RktStxLink Sq" 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><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><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=if.html%23%2528form._%2528%2528lib._racket%252Fprivate%252Fletstx-scheme..rkt%2529._or%2529%2529&version=6.7" class="RktStxLink Sq" data-pltdoc="x">or</a></span><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=number-types.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._even%7E3f%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">even?</a></span><span class="hspace"> </span><span class="RktSym">x</span><span class="RktPn">)</span><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=number-types.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._even%7E3f%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">even?</a></span><span class="hspace"> </span><span class="RktSym">y</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"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=pairs.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._list%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">list</a></span><span class="hspace"> </span><span class="RktRdr">#'</span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=if.html%23%2528form._%2528%2528lib._racket%252Fprivate%252Fletstx-scheme..rkt%2529._or%2529%2529&version=6.7" class="RktStxLink Sq" data-pltdoc="x">or</a></span><span class="RktPn">)</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr></table></td></tr><tr><td><p><span class="RktRes">'(let-values (((x) '1) ((y) '2)) (or (even? x) (even? y)))</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._((lib._macro-debugger/expand..rkt)._expand/show-predicate))"></a><span title="Provided from: macro-debugger/expand | Package: macro-debugger-text-lib"><span class="RktSym"><a href="#%28def._%28%28lib._macro-debugger%2Fexpand..rkt%29._expand%2Fshow-predicate%29%29" class="RktValDef RktValLink" data-pltdoc="x">expand/show-predicate</a></span></span><span class="hspace"> </span><span class="RktVar">stx</span><span class="hspace"> </span><span class="RktVar">show?</span><span class="RktPn">)</span><span class="hspace"> </span>→<span class="hspace"> </span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=stxops.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._syntax%7E3f%2529%2529&version=6.7" class="RktValLink Sq" 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="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=data-structure-contracts.html%23%2528def._%2528%2528lib._racket%252Fcontract%252Fprivate%252Fmisc..rkt%2529._any%252Fc%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">any/c</a></span></td></tr><tr><td><span class="hspace"> </span><span class="RktVar">show?</span><span class="hspace"> </span>:<span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=function-contracts.html%23%2528form._%2528%2528lib._racket%252Fcontract%252Fbase..rkt%2529._-%7E3e%2529%2529&version=6.7" class="RktStxLink Sq" data-pltdoc="x"><span class="nobreak">-></span></a></span><span class="hspace"> </span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=stxops.html%23%2528def._%2528%2528lib._racket%252Fprivate%252Fstx..rkt%2529._identifier%7E3f%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">identifier?</a></span><span class="hspace"> </span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=booleans.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._boolean%7E3f%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">boolean?</a></span><span class="RktPn">)</span></td></tr></table></blockquote></div><div class="SIntrapara">Expands the given syntax <span class="RktVar">stx</span>, but only shows the expansion of macros
whose names satisfy the predicate <span class="RktVar">show?</span>.</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="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=stxops.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._syntax-%7E3edatum%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">syntax->datum</a></span></td></tr><tr><td><span class="hspace"> </span><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="#%28def._%28%28lib._macro-debugger%2Fexpand..rkt%29._expand%2Fshow-predicate%29%29" class="RktValLink" data-pltdoc="x">expand/show-predicate</a></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="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=let.html%23%2528form._%2528%2528lib._racket%252Fprivate%252Fletstx-scheme..rkt%2529._let%2529%2529&version=6.7" class="RktStxLink Sq" 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><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><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=if.html%23%2528form._%2528%2528lib._racket%252Fprivate%252Fletstx-scheme..rkt%2529._or%2529%2529&version=6.7" class="RktStxLink Sq" data-pltdoc="x">or</a></span><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=number-types.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._even%7E3f%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">even?</a></span><span class="hspace"> </span><span class="RktSym">x</span><span class="RktPn">)</span><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=number-types.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._even%7E3f%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">even?</a></span><span class="hspace"> </span><span class="RktSym">y</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"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=lambda.html%23%2528form._%2528%2528lib._racket%252Fprivate%252Fbase..rkt%2529._lambda%2529%2529&version=6.7" class="RktStxLink Sq" data-pltdoc="x">lambda</a></span><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym">id</span><span class="RktPn">)</span><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=pairs.html%23%2528def._%2528%2528lib._racket%252Fprivate%252Fbase..rkt%2529._memq%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">memq</a></span><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=stxops.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._syntax-e%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">syntax-e</a></span><span class="hspace"> </span><span class="RktSym">id</span><span class="RktPn">)</span><span class="hspace"> </span><span class="RktVal">'</span><span class="RktVal">(</span><span class="RktVal">or</span><span class="hspace"> </span><span class="RktVal">#%app</span><span class="RktVal">)</span><span class="RktPn">)</span><span class="RktPn">)</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr></table></td></tr><tr><td><table cellspacing="0" cellpadding="0"><tr><td><p><span class="RktRes">'(let ((x 1) (y 2))</span></p></td></tr><tr><td><p><span class="RktRes"></span><span class="hspace"> </span><span class="RktRes"></span><span class="hspace"> </span><span class="RktRes">(let ((or-part (#%app even? x))) (if or-part or-part (#%app even? y))))</span></p></td></tr></table></td></tr></table></blockquote></div></p><h3 x-source-module="(lib "macro-debugger/macro-debugger.scrbl")" x-source-pkg="macro-debugger" x-part-tag=""Macro_Stepper_API_for_Macros"">3<tt> </tt><a name="(part._.Macro_.Stepper_.A.P.I_for_.Macros)"></a><a name="(mod-path._macro-debugger/emit)"></a>Macro Stepper API for Macros</h3><p><table cellspacing="0" cellpadding="0" class="defmodule"><tr><td align="left"><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=require.html%23%2528form._%2528%2528lib._racket%252Fprivate%252Fbase..rkt%2529._require%2529%2529&version=6.7" class="RktStxLink Sq" data-pltdoc="x">require</a></span><span class="stt"> </span><a href="#%28mod-path._macro-debugger%2Femit%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">macro-debugger/emit</span></a><span class="RktPn">)</span></td><td align="right"><span class="RpackageSpec"><span class="Smaller"> package:</span> <span class="stt">macro-debugger</span></span></td></tr></table></p><p>Macros can explicitly send information to a listening macro stepper by
using the procedures in this module.</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._macro-debugger/emit..rkt)._emit-remark))"></a><span title="Provided from: macro-debugger/emit | Package: macro-debugger"><span class="RktSym"><a href="#%28def._%28%28lib._macro-debugger%2Femit..rkt%29._emit-remark%29%29" class="RktValDef RktValLink" data-pltdoc="x">emit-remark</a></span></span><span class="hspace"> </span><span class="RktVar">fragment</span><span class="hspace"> </span><span class="RktMeta">...</span><span class="hspace"> </span>[<span class="RktPn">#:unmark?</span><span class="hspace"> </span><span class="RktVar">unmark?</span>]<span class="RktPn">)</span><span class="hspace"> </span>→<span class="hspace"> </span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=void.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._void%7E3f%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">void?</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">fragment</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="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=let.html%23%2528form._%2528%2528lib._racket%252Fprivate%252Fletstx-scheme..rkt%2529._letrec%2529%2529&version=6.7" class="RktStxLink Sq" data-pltdoc="x">letrec</a></span><span class="hspace"> </span><span class="RktPn">(</span><span class="RktPn">[</span><span class="RktSym">emit-arg/c</span></td></tr><tr><td><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=contract-utilities.html%23%2528form._%2528%2528lib._racket%252Fcontract%252Fprivate%252Fbase..rkt%2529._recursive-contract%2529%2529&version=6.7" class="RktStxLink Sq" data-pltdoc="x">recursive-contract</a></span></td></tr><tr><td><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=data-structure-contracts.html%23%2528def._%2528%2528lib._racket%252Fcontract%252Fbase..rkt%2529._or%252Fc%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">or/c</a></span><span class="hspace"> </span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=strings.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._string%7E3f%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">string?</a></span></td></tr><tr><td><span class="hspace"> </span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=stxops.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._syntax%7E3f%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">syntax?</a></span></td></tr><tr><td><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=data-structure-contracts.html%23%2528def._%2528%2528lib._racket%252Fcontract%252Fbase..rkt%2529._listof%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">listof</a></span><span class="hspace"> </span><span class="RktSym">emit-arg/c</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=function-contracts.html%23%2528form._%2528%2528lib._racket%252Fcontract%252Fbase..rkt%2529._-%7E3e%2529%2529&version=6.7" class="RktStxLink Sq" data-pltdoc="x"><span class="nobreak">-></span></a></span><span class="hspace"> </span><span class="RktSym">emit-arg/c</span><span class="RktPn">)</span><span class="RktPn">)</span><span class="RktPn">)</span><span class="RktPn">]</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace"> </span><span class="RktSym">emit-arg/c</span><span class="RktPn">)</span></td></tr></table></td></tr></table></td></tr><tr><td><span class="hspace"> </span><span class="RktVar">unmark?</span><span class="hspace"> </span>:<span class="hspace"> </span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=booleans.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._boolean%7E3f%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">boolean?</a></span><span class="hspace"> </span>=<span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=stxtrans.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._syntax-transforming%7E3f%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">syntax-transforming?</a></span><span class="RktPn">)</span></td></tr></table></blockquote></div><div class="SIntrapara">Emits an event to the macro stepper (if one is listening) containing
the given strings and syntax objects. The macro stepper displays a
remark by printing the strings and syntax objects above a rendering of
the macro’s context. The remark is only displayed if the macro that
emits it is considered transparent by the hiding policy.</div></p><p>By default, syntax objects in remarks have the transformer’s mark
applied (using <span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=stxtrans.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._syntax-local-introduce%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">syntax-local-introduce</a></span>) so that their
appearance in the macro stepper matches their appearance after the
transformer returns. Unmarking is suppressed if <span class="RktVar">unmark?</span> is
<span class="RktVal">#f</span>.</p><blockquote class="SCodeFlow"><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><span class="RktPn">(</span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=define.html%23%2528form._%2528%2528lib._racket%252Fprivate%252Fbase..rkt%2529._define-syntax%2529%2529&version=6.7" class="RktStxLink Sq" data-pltdoc="x">define-syntax</a></span><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym">mymac</span><span class="hspace"> </span><span class="RktSym">stx</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=stx-patterns.html%23%2528form._%2528%2528lib._racket%252Fprivate%252Fstxcase-scheme..rkt%2529._syntax-case%2529%2529&version=6.7" class="RktStxLink Sq" 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="RktPn">[</span><span class="RktPn">(</span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=stx-patterns.html%23%2528form._%2528%2528lib._racket%252Fprivate%252Fstxcase-scheme..rkt%2529.__%2529%2529&version=6.7" class="RktStxLink Sq" data-pltdoc="x">_</a></span><span class="hspace"> </span><span class="RktSym">x</span><span class="hspace"> </span><span class="RktSym">y</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="#%28def._%28%28lib._macro-debugger%2Femit..rkt%29._emit-remark%29%29" class="RktValLink" data-pltdoc="x">emit-remark</a></span><span class="hspace"> </span><span class="RktVal">"I got some arguments!"</span></td></tr><tr><td><span class="hspace"> </span><span class="RktRdr">#'</span><span class="RktSym">x</span></td></tr><tr><td><span class="hspace"> </span><span class="RktVal">"and"</span></td></tr><tr><td><span class="hspace"> </span><span class="RktRdr">#'</span><span class="RktSym">y</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace"> </span><span class="RktRdr">#'</span><span class="RktPn">(</span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=pairs.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._list%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">list</a></span><span class="hspace"> </span><span class="RktVal">'</span><span class="RktVal">x</span><span class="hspace"> </span><span class="RktVal">'</span><span class="RktVal">y</span><span class="RktPn">)</span><span class="RktPn">]</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr><tr><td><span class="RktPn">(</span><span class="RktSym">mymac</span><span class="hspace"> </span><span class="RktVal">37</span><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=generic-numbers.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._%252B%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">+</a></span><span class="hspace"> </span><span class="RktVal">1</span><span class="hspace"> </span><span class="RktVal">2</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr></table></blockquote><p>(Run the fragment above in the macro stepper.)</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._macro-debugger/emit..rkt)._emit-local-step))"></a><span title="Provided from: macro-debugger/emit | Package: macro-debugger"><span class="RktSym"><a href="#%28def._%28%28lib._macro-debugger%2Femit..rkt%29._emit-local-step%29%29" class="RktValDef RktValLink" data-pltdoc="x">emit-local-step</a></span></span><span class="hspace"> </span><span class="RktVar">before</span><span class="hspace"> </span><span class="RktVar">after</span><span class="hspace"> </span><span class="RktPn">#:id</span><span class="hspace"> </span><span class="RktVar">id</span><span class="RktPn">)</span><span class="hspace"> </span>→<span class="hspace"> </span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=void.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._void%7E3f%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">void?</a></span></p></blockquote></td></tr><tr><td><span class="hspace"> </span><span class="RktVar">before</span><span class="hspace"> </span>:<span class="hspace"> </span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=stxops.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._syntax%7E3f%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">syntax?</a></span></td></tr><tr><td><span class="hspace"> </span><span class="RktVar">after</span><span class="hspace"> </span>:<span class="hspace"> </span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=stxops.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._syntax%7E3f%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">syntax?</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="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=stxops.html%23%2528def._%2528%2528lib._racket%252Fprivate%252Fstx..rkt%2529._identifier%7E3f%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">identifier?</a></span></td></tr></table></blockquote></div><div class="SIntrapara">Emits an event that simulates a local expansion step from
<span class="RktVar">before</span> to <span class="RktVar">after</span>.</div></p><p>The <span class="RktVar">before</span> and <span class="RktVar">after</span> terms are marked with
<span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=stxtrans.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._syntax-local-introduce%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">syntax-local-introduce</a></span> so they appear in the macro stepper
like they would if the step were truly generated from a local
expansion.</p><p>The <span class="RktVar">id</span> argument acts as the step’s “macro” for the purposes
of macro hiding.</p><h3 x-source-module="(lib "macro-debugger/macro-debugger.scrbl")" x-source-pkg="macro-debugger" x-part-tag=""Macro_Stepper_Text_Interface"">4<tt> </tt><a name="(part._.Macro_.Stepper_.Text_.Interface)"></a><a name="(mod-path._macro-debugger/stepper-text)"></a>Macro Stepper Text Interface</h3><p><table cellspacing="0" cellpadding="0" class="defmodule"><tr><td align="left" colspan="2"><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=require.html%23%2528form._%2528%2528lib._racket%252Fprivate%252Fbase..rkt%2529._require%2529%2529&version=6.7" class="RktStxLink Sq" data-pltdoc="x">require</a></span><span class="stt"> </span><a href="#%28mod-path._macro-debugger%2Fstepper-text%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">macro-debugger/stepper-text</span></a><span class="RktPn">)</span></td></tr><tr><td align="left"> </td><td align="right"><span class="RpackageSpec"><span class="Smaller"> package:</span> <span class="stt">macro-debugger-text-lib</span></span></td></tr></table></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._macro-debugger/stepper-text..rkt)._expand/step-text))"></a><span title="Provided from: macro-debugger/stepper-text | Package: macro-debugger-text-lib"><span class="RktSym"><a href="#%28def._%28%28lib._macro-debugger%2Fstepper-text..rkt%29._expand%2Fstep-text%29%29" class="RktValDef RktValLink" data-pltdoc="x">expand/step-text</a></span></span><span class="hspace"> </span><span class="RktVar">stx</span><span class="hspace"> </span>[<span class="RktVar">show?</span>]<span class="RktPn">)</span><span class="hspace"> </span>→<span class="hspace"> </span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=void.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._void%7E3f%2529%2529&version=6.7" class="RktValLink Sq" 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="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=data-structure-contracts.html%23%2528def._%2528%2528lib._racket%252Fcontract%252Fprivate%252Fmisc..rkt%2529._any%252Fc%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">any/c</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">show?</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="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=data-structure-contracts.html%23%2528def._%2528%2528lib._racket%252Fcontract%252Fbase..rkt%2529._or%252Fc%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">or/c</a></span><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=function-contracts.html%23%2528form._%2528%2528lib._racket%252Fcontract%252Fbase..rkt%2529._-%7E3e%2529%2529&version=6.7" class="RktStxLink Sq" data-pltdoc="x"><span class="nobreak">-></span></a></span><span class="hspace"> </span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=stxops.html%23%2528def._%2528%2528lib._racket%252Fprivate%252Fstx..rkt%2529._identifier%7E3f%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">identifier?</a></span><span class="hspace"> </span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=booleans.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._boolean%7E3f%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">boolean?</a></span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=data-structure-contracts.html%23%2528def._%2528%2528lib._racket%252Fcontract%252Fbase..rkt%2529._listof%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">listof</a></span><span class="hspace"> </span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=stxops.html%23%2528def._%2528%2528lib._racket%252Fprivate%252Fstx..rkt%2529._identifier%7E3f%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">identifier?</a></span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr></table></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="RktPn">(</span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=lambda.html%23%2528form._%2528%2528lib._racket%252Fprivate%252Fbase..rkt%2529._lambda%2529%2529&version=6.7" class="RktStxLink Sq" data-pltdoc="x">lambda</a></span><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym">x</span><span class="RktPn">)</span><span class="hspace"> </span><span class="RktVal">#t</span><span class="RktPn">)</span></td></tr></table></td></tr></table></blockquote></div><div class="SIntrapara">Expands the syntax and prints the macro expansion steps. If the
identifier predicate is given, it determines which macros are shown
(if absent, all macros are shown). A list of identifiers is also
accepted.</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="#%28def._%28%28lib._macro-debugger%2Fstepper-text..rkt%29._expand%2Fstep-text%29%29" class="RktValLink" data-pltdoc="x">expand/step-text</a></span><span class="hspace"> </span><span class="RktRdr">#'</span><span class="RktPn">(</span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=let.html%23%2528form._%2528%2528lib._racket%252Fprivate%252Fletstx-scheme..rkt%2529._let%2529%2529&version=6.7" class="RktStxLink Sq" 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><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><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=if.html%23%2528form._%2528%2528lib._racket%252Fprivate%252Fletstx-scheme..rkt%2529._or%2529%2529&version=6.7" class="RktStxLink Sq" data-pltdoc="x">or</a></span><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=number-types.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._even%7E3f%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">even?</a></span><span class="hspace"> </span><span class="RktSym">x</span><span class="RktPn">)</span><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=number-types.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._even%7E3f%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">even?</a></span><span class="hspace"> </span><span class="RktSym">y</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"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=pairs.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._list%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">list</a></span><span class="hspace"> </span><span class="RktRdr">#'</span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=if.html%23%2528form._%2528%2528lib._racket%252Fprivate%252Fletstx-scheme..rkt%2529._or%2529%2529&version=6.7" class="RktStxLink Sq" data-pltdoc="x">or</a></span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr></table></td></tr><tr><td><table cellspacing="0" cellpadding="0"><tr><td><p><span class="RktOut">Macro transformation</span></p></td></tr><tr><td><p><span class="RktOut">(let ((x 1) (y 2)) (or (even? x) (even? y)))</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">==></span></p></td></tr><tr><td><p><span class="RktOut">(let</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">((x 1) (y 2))</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">(let:1 ((or-part:1 (even? x))) (if:1 or-part:1 or-part:1 (or:1 (even? y)))))</span></p></td></tr><tr><td><p><span class="RktOut"></span></p></td></tr><tr><td><p><span class="RktOut">Resolve variable (remove extra marks)</span></p></td></tr><tr><td><p><span class="RktOut">(let</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">((x 1) (y 2))</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">(let:1 ((or-part:1 (even? x))) (if:1 or-part:1 or-part:1 (or:1 (even? y)))))</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">==></span></p></td></tr><tr><td><p><span class="RktOut">(let</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">((x 1) (y 2))</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">(let:1 ((or-part:1 (even? x))) (if:1 or-part:1 or-part:1 (or:1 (even? y)))))</span></p></td></tr><tr><td><p><span class="RktOut"></span></p></td></tr><tr><td><p><span class="RktOut">Resolve variable (remove extra marks)</span></p></td></tr><tr><td><p><span class="RktOut">(let</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">((x 1) (y 2))</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">(let:1 ((or-part:1 (even? x))) (if:1 or-part:1 or-part:1 (or:1 (even? y)))))</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">==></span></p></td></tr><tr><td><p><span class="RktOut">(let</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">((x 1) (y 2))</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">(let:1 ((or-part:1 (even? x))) (if:1 or-part:1 or-part:1 (or:1 (even? y)))))</span></p></td></tr><tr><td><p><span class="RktOut"></span></p></td></tr><tr><td><p><span class="RktOut">Resolve variable (remove extra marks)</span></p></td></tr><tr><td><p><span class="RktOut">(let</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">((x 1) (y 2))</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">(let:1 ((or-part:1 (even? x))) (if:1 or-part:1 or-part:1 (or:1 (even? y)))))</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">==></span></p></td></tr><tr><td><p><span class="RktOut">(let</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">((x 1) (y 2))</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">(let:1 ((or-part:1 (even? x))) (if:1 or-part:1 or-part:1 (or:1 (even? y)))))</span></p></td></tr><tr><td><p><span class="RktOut"></span></p></td></tr><tr><td><p><span class="RktOut">Macro transformation</span></p></td></tr><tr><td><p><span class="RktOut">(let</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">((x 1) (y 2))</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">(let:1 ((or-part:1 (even? x))) (if:1 or-part:1 or-part:1 (or:1 (even? y)))))</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">==></span></p></td></tr><tr><td><p><span class="RktOut">(let</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">((x 1) (y 2))</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">(let:1</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">((or-part:1 (even? x)))</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">(if:1 or-part:1 or-part:1 (#%expression:2 (even? y)))))</span></p></td></tr><tr><td><p><span class="RktOut"></span></p></td></tr><tr><td><p><span class="RktOut">Resolve variable (remove extra marks)</span></p></td></tr><tr><td><p><span class="RktOut">(let</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">((x 1) (y 2))</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">(let:1</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">((or-part:1 (even? x)))</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">(if:1 or-part:1 or-part:1 (#%expression:2 (even? y)))))</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">==></span></p></td></tr><tr><td><p><span class="RktOut">(let</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">((x 1) (y 2))</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">(let:1</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">((or-part:1 (even? x)))</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">(if:1 or-part:1 or-part:1 (#%expression:2 (even? y)))))</span></p></td></tr><tr><td><p><span class="RktOut"></span></p></td></tr><tr><td><p><span class="RktOut">Macro transformation</span></p></td></tr><tr><td><p><span class="RktOut">(let</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">((x 1) (y 2))</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">(let:1</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">((or-part:1 (even? x)))</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">(if:1 or-part:1 or-part:1 (#%expression:2 (even? y)))))</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">==></span></p></td></tr><tr><td><p><span class="RktOut">(let</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">((x 1) (y 2))</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">(let:1 ((or-part:1 (even? x))) (if:1 or-part:1 or-part:1 (even? y))))</span></p></td></tr><tr><td><p><span class="RktOut"></span></p></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._((lib._macro-debugger/stepper-text..rkt)._stepper-text))"></a><span title="Provided from: macro-debugger/stepper-text | Package: macro-debugger-text-lib"><span class="RktSym"><a href="#%28def._%28%28lib._macro-debugger%2Fstepper-text..rkt%29._stepper-text%29%29" class="RktValDef RktValLink" data-pltdoc="x">stepper-text</a></span></span><span class="hspace"> </span><span class="RktVar">stx</span><span class="hspace"> </span>[<span class="RktVar">show?</span>]<span class="RktPn">)</span><span class="hspace"> </span>→<span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=symbols.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._symbol%7E3f%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">symbol?</a></span><span class="hspace"> </span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=function-contracts.html%23%2528form._%2528%2528lib._racket%252Fcontract%252Fbase..rkt%2529._-%7E3e%2529%2529&version=6.7" class="RktStxLink Sq" data-pltdoc="x"><span class="nobreak">-></span></a></span><span class="hspace"> </span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=void.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._void%7E3f%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">void?</a></span><span class="RktPn">)</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="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=data-structure-contracts.html%23%2528def._%2528%2528lib._racket%252Fcontract%252Fprivate%252Fmisc..rkt%2529._any%252Fc%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">any/c</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">show?</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="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=data-structure-contracts.html%23%2528def._%2528%2528lib._racket%252Fcontract%252Fbase..rkt%2529._or%252Fc%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">or/c</a></span><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=function-contracts.html%23%2528form._%2528%2528lib._racket%252Fcontract%252Fbase..rkt%2529._-%7E3e%2529%2529&version=6.7" class="RktStxLink Sq" data-pltdoc="x"><span class="nobreak">-></span></a></span><span class="hspace"> </span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=stxops.html%23%2528def._%2528%2528lib._racket%252Fprivate%252Fstx..rkt%2529._identifier%7E3f%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">identifier?</a></span><span class="hspace"> </span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=booleans.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._boolean%7E3f%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">boolean?</a></span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=data-structure-contracts.html%23%2528def._%2528%2528lib._racket%252Fcontract%252Fbase..rkt%2529._listof%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">listof</a></span><span class="hspace"> </span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=stxops.html%23%2528def._%2528%2528lib._racket%252Fprivate%252Fstx..rkt%2529._identifier%7E3f%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">identifier?</a></span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr></table></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="RktPn">(</span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=lambda.html%23%2528form._%2528%2528lib._racket%252Fprivate%252Fbase..rkt%2529._lambda%2529%2529&version=6.7" class="RktStxLink Sq" data-pltdoc="x">lambda</a></span><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym">x</span><span class="RktPn">)</span><span class="hspace"> </span><span class="RktVal">#t</span><span class="RktPn">)</span></td></tr></table></td></tr></table></blockquote></div><div class="SIntrapara">Returns a procedure that can be called on the symbol
<span class="RktVal">'</span><span class="RktVal">next</span> to print the next step or on the symbol
<span class="RktVal">'</span><span class="RktVal">all</span> to print out all remaining steps.</div></p><h3 x-source-module="(lib "macro-debugger/macro-debugger.scrbl")" x-source-pkg="macro-debugger" x-part-tag=""Syntax_Browser"">5<tt> </tt><a name="(part._.Syntax_.Browser)"></a><a name="(mod-path._macro-debugger/syntax-browser)"></a>Syntax Browser</h3><p><table cellspacing="0" cellpadding="0" class="defmodule"><tr><td align="left" colspan="2"><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=require.html%23%2528form._%2528%2528lib._racket%252Fprivate%252Fbase..rkt%2529._require%2529%2529&version=6.7" class="RktStxLink Sq" data-pltdoc="x">require</a></span><span class="stt"> </span><a href="#%28mod-path._macro-debugger%2Fsyntax-browser%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">macro-debugger/syntax-browser</span></a><span class="RktPn">)</span></td></tr><tr><td align="left"> </td><td align="right"><span class="RpackageSpec"><span class="Smaller"> package:</span> <span class="stt">macro-debugger</span></span></td></tr></table></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._macro-debugger/syntax-browser..rkt)._browse-syntax))"></a><span title="Provided from: macro-debugger/syntax-browser | Package: macro-debugger"><span class="RktSym"><a href="#%28def._%28%28lib._macro-debugger%2Fsyntax-browser..rkt%29._browse-syntax%29%29" class="RktValDef RktValLink" data-pltdoc="x">browse-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="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=void.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._void%7E3f%2529%2529&version=6.7" class="RktValLink Sq" 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="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=stxops.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._syntax%7E3f%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">syntax?</a></span></td></tr></table></blockquote></div><div class="SIntrapara">Creates a frame with the given syntax object shown. More information
on using the GUI is available below.</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._macro-debugger/syntax-browser..rkt)._browse-syntaxes))"></a><span title="Provided from: macro-debugger/syntax-browser | Package: macro-debugger"><span class="RktSym"><a href="#%28def._%28%28lib._macro-debugger%2Fsyntax-browser..rkt%29._browse-syntaxes%29%29" class="RktValDef RktValLink" data-pltdoc="x">browse-syntaxes</a></span></span><span class="hspace"> </span><span class="RktVar">stxs</span><span class="RktPn">)</span><span class="hspace"> </span>→<span class="hspace"> </span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=void.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._void%7E3f%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">void?</a></span></p></blockquote></td></tr><tr><td><span class="hspace"> </span><span class="RktVar">stxs</span><span class="hspace"> </span>:<span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=data-structure-contracts.html%23%2528def._%2528%2528lib._racket%252Fcontract%252Fbase..rkt%2529._listof%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">listof</a></span><span class="hspace"> </span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=stxops.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._syntax%7E3f%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">syntax?</a></span><span class="RktPn">)</span></td></tr></table></blockquote></div><div class="SIntrapara">Like <span class="RktSym"><a href="#%28def._%28%28lib._macro-debugger%2Fsyntax-browser..rkt%29._browse-syntax%29%29" class="RktValLink" data-pltdoc="x">browse-syntax</a></span>, but shows multiple syntax objects in
the same frame. The coloring partitions are shared between the two,
showing the relationships between subterms in different syntax
objects.</div></p><h3 x-source-module="(lib "macro-debugger/macro-debugger.scrbl")" x-source-pkg="macro-debugger" x-part-tag=""Using_the_Macro_Stepper"">6<tt> </tt><a name="(part._.Using_the_.Macro_.Stepper)"></a>Using the Macro Stepper</h3><h4 x-source-module="(lib "macro-debugger/macro-debugger.scrbl")" x-source-pkg="macro-debugger" x-part-tag=""Navigation"">6.1<tt> </tt><a name="(part._.Navigation)"></a>Navigation</h4><p>The stepper presents expansion as a linear sequence of rewriting
process, and it gives the user controls to step forward or backwards
as well as to jump to the beginning or end of the expansion process.</p><p>If the macro stepper is showing multiple expansions, then it also
provides “Previous term” and “Next term” buttons to go up and down in
the list of expansions. Horizontal lines delimit the current expansion
from the others.</p><h4 x-source-module="(lib "macro-debugger/macro-debugger.scrbl")" x-source-pkg="macro-debugger" x-part-tag=""Macro_Hiding"">6.2<tt> </tt><a name="(part._.Macro_.Hiding)"></a>Macro Hiding</h4><p>Macro hiding lets one see how expansion would look if certain macros
were actually primitive syntactic forms. The macro stepper skips over
the expansion of the macros you designate as opaque, but it still
shows the expansion of their subterms.</p><p>The bottom panel of the macro stepper controls the macro hiding
policy. The user changes the policy by selecting an identifier in the
syntax browser pane and then clicking one of “Hide module”, “Hide
macro”, or “Show macro”. The new rule appears in the policy display,
and the user may later remove it using the "Delete" button.</p><p>The stepper also offers coarser-grained options that can hide
collections of modules at once. These options have lower precedence
than the rules above.</p><p>Macro hiding, even with no macros marked opaque, also hides certain
other kinds of steps: internal defines are not rewritten to letrecs,
begin forms are not spliced into module or block bodies, etc.</p><h3 x-source-module="(lib "macro-debugger/macro-debugger.scrbl")" x-source-pkg="macro-debugger" x-part-tag=""Using_the_Syntax_Browser"">7<tt> </tt><a name="(part._.Using_the_.Syntax_.Browser)"></a>Using the Syntax Browser</h3><h4 x-source-module="(lib "macro-debugger/macro-debugger.scrbl")" x-source-pkg="macro-debugger" x-part-tag=""Selection"">7.1<tt> </tt><a name="(part._.Selection)"></a>Selection</h4><p>The selection is indicated by bold text.</p><p>The user can click on any part of a subterm to select it. To select a
parenthesized subterm, click on either of the parentheses. The
selected syntax is bolded. Since one syntax object may occur inside of
multiple other syntax objects, clicking on one occurrence will cause
all occurrences to be bolded.</p><p>The syntax browser displays information about the selected syntax
object in the properties panel on the right, when that panel is
shown. The selected syntax also determines the highlighting done by
the secondary partitioning (see below).</p><h4 x-source-module="(lib "macro-debugger/macro-debugger.scrbl")" x-source-pkg="macro-debugger" x-part-tag=""Primary_Partition"">7.2<tt> </tt><a name="(part._.Primary_.Partition)"></a>Primary Partition</h4><p>The primary partition is indicated by foreground color.</p><p>The primary partitioning always assigns two syntax subterms the same
color if they have the same marks. In the absence of unhygienic
macros, this means that subterms with the same foreground color were
either present in the original pre-expansion syntax or generated by
the same macro transformation step.</p><p>Syntax colored in black always corresponds to unmarked syntax. Such
syntax may be original, or it may be produced by the expansion of a
nonhygienic macro.</p><p>Note: even terms that have the same marks might not be
<span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=stxcmp.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._bound-identifier%7E3d%7E3f%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">bound-identifier=?</a></span> to each other, because they might occur in
different environments.</p><h4 x-source-module="(lib "macro-debugger/macro-debugger.scrbl")" x-source-pkg="macro-debugger" x-part-tag=""Secondary_Partitioning"">7.3<tt> </tt><a name="(part._.Secondary_.Partitioning)"></a>Secondary Partitioning</h4><p>The user may select a secondary partitioning through the Syntax
menu. This partitioning applies only to identifiers. When the user
selects an identifier, all terms in the same equivalence class as the
selected term are highlighted in yellow.</p><p><div class="SIntrapara">The available secondary partitionings are:
</div><div class="SIntrapara"><ul><li><p><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=stxcmp.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._bound-identifier%7E3d%7E3f%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">bound-identifier=?</a></span></p></li><li><p><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=stxcmp.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._free-identifier%7E3d%7E3f%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">free-identifier=?</a></span></p></li></ul></div></p><h4 x-source-module="(lib "macro-debugger/macro-debugger.scrbl")" x-source-pkg="macro-debugger" x-part-tag=""Properties"">7.4<tt> </tt><a name="(part._.Properties)"></a>Properties</h4><p>When the properties pane is shown, it displays properties of the
selected syntax object. The properties pane has two tabbed pages:</p><ul><li><p><span style="font-weight: bold">Term</span>:</p><p>If the selection is an identifier, shows the binding information
associated with the syntax object. For more information, see
<span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=stxcmp.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._identifier-binding%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">identifier-binding</a></span>, etc.</p></li><li><p><span style="font-weight: bold">Syntax Object</span>:</p><p>Displays source location information and other properties (see
<span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=stxprops.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._syntax-property%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">syntax-property</a></span>) carried by the syntax object.</p></li></ul><h4 x-source-module="(lib "macro-debugger/macro-debugger.scrbl")" x-source-pkg="macro-debugger" x-part-tag=""Interpreting_Syntax"">7.5<tt> </tt><a name="(part._.Interpreting_.Syntax)"></a>Interpreting Syntax</h4><p>The binding information of a syntax object may not be the same as
the binding structure of the program it represents. The binding
structure of a program is only determined after macro expansion is
complete.</p><h3 x-source-module="(lib "macro-debugger/macro-debugger.scrbl")" x-source-pkg="macro-debugger" x-part-tag=""Finding_Useless_requires"">8<tt> </tt><a name="(part._.Finding_.Useless_requires)"></a><a name="(mod-path._macro-debugger/analysis/check-requires)"></a><a name="(idx._(gentag._0._(lib._macro-debugger/macro-debugger..scrbl)))"></a>Finding Useless <span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=require.html%23%2528form._%2528%2528lib._racket%252Fprivate%252Fbase..rkt%2529._require%2529%2529&version=6.7" class="RktStxLink Sq" data-pltdoc="x">require</a></span>s</h3><p><table cellspacing="0" cellpadding="0" class="defmodule"><tr><td align="left" colspan="2"><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=require.html%23%2528form._%2528%2528lib._racket%252Fprivate%252Fbase..rkt%2529._require%2529%2529&version=6.7" class="RktStxLink Sq" data-pltdoc="x">require</a></span><span class="stt"> </span><a href="#%28mod-path._macro-debugger%2Fanalysis%2Fcheck-requires%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">macro-debugger/analysis/check-requires</span></a><span class="RktPn">)</span></td></tr><tr><td align="left"> </td><td align="right"><span class="RpackageSpec"><span class="Smaller"> package:</span> <span class="stt">macro-debugger-text-lib</span></span></td></tr></table></p><p>The “Check Requires” utility can be run as a raco subcommand. For
example (from racket root directory):</p><p><span class="hspace"> </span><span class="stt">raco check-requires racket/collects/syntax/*.rkt</span></p><p><span class="hspace"> </span><span class="stt">raco check-requires -kbu openssl</span></p><p>Each argument is interpreted as a file path if it exists; otherwise,
it is interpreted as a module path. See <span class="RktSym"><a href="#%28def._%28%28lib._macro-debugger%2Fanalysis%2Fcheck-requires..rkt%29._check-requires%29%29" class="RktValLink" data-pltdoc="x">check-requires</a></span> for a
description of the output format, known limitations in the script’s
recommendations, etc.</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._((lib._macro-debugger/analysis/check-requires..rkt)._check-requires))"></a><span title="Provided from: macro-debugger/analysis/check-requires | Package: macro-debugger-text-lib"><span class="RktSym"><a href="#%28def._%28%28lib._macro-debugger%2Fanalysis%2Fcheck-requires..rkt%29._check-requires%29%29" class="RktValDef RktValLink" data-pltdoc="x">check-requires</a></span></span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="RktVar">module-to-analyze</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="RktPn">#:show-keep?</span><span class="hspace"> </span><span class="RktVar">show-keep?</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="RktPn">#:show-bypass?</span><span class="hspace"> </span><span class="RktVar">show-bypass?</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="RktPn">#:show-drop?</span><span class="hspace"> </span><span class="RktVar">show-drop?</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="RktPn">#:show-uses?</span><span class="hspace"> </span><span class="RktVar">show-uses?</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="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=void.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._void%7E3f%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">void?</a></span></td></tr></table></blockquote></td></tr><tr><td><span class="hspace"> </span><span class="RktVar">module-to-analyze</span><span class="hspace"> </span>:<span class="hspace"> </span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=Module_Names_and_Loading.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._module-path%7E3f%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">module-path?</a></span></td></tr><tr><td><span class="hspace"> </span><span class="RktVar">show-keep?</span><span class="hspace"> </span>:<span class="hspace"> </span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=booleans.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._boolean%7E3f%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">boolean?</a></span><span class="hspace"> </span>=<span class="hspace"> </span><span class="RktVal">#t</span></td></tr><tr><td><span class="hspace"> </span><span class="RktVar">show-bypass?</span><span class="hspace"> </span>:<span class="hspace"> </span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=booleans.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._boolean%7E3f%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">boolean?</a></span><span class="hspace"> </span>=<span class="hspace"> </span><span class="RktVal">#t</span></td></tr><tr><td><span class="hspace"> </span><span class="RktVar">show-drop?</span><span class="hspace"> </span>:<span class="hspace"> </span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=booleans.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._boolean%7E3f%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">boolean?</a></span><span class="hspace"> </span>=<span class="hspace"> </span><span class="RktVal">#t</span></td></tr><tr><td><span class="hspace"> </span><span class="RktVar">show-uses?</span><span class="hspace"> </span>:<span class="hspace"> </span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=booleans.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._boolean%7E3f%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">boolean?</a></span><span class="hspace"> </span>=<span class="hspace"> </span><span class="RktVal">#f</span></td></tr></table></blockquote></div><div class="SIntrapara">Analyzes <span class="RktVar">module-to-analyze</span>, detecting useless requires. Each
module imported by <span class="RktVar">module-to-analyze</span> is classified as one of
KEEP, BYPASS, or DROP. For each required module, one or more lines is
printed with the module’s classification and supporting
information. Output may be suppressed based on classification via
<span class="RktVar">show-keep?</span>, <span class="RktVar">show-bypass?</span>, and <span class="RktVar">show-drop?</span>;
by default, only DROP recommendations are printed.</div></p><p>Modules required <span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=require.html%23%2528form._%2528%2528lib._racket%252Fprivate%252Fbase..rkt%2529._for-label%2529%2529&version=6.7" class="RktStxLink Sq" data-pltdoc="x">for-label</a></span> are not analyzed.</p><blockquote class="leftindent"><table cellspacing="0" cellpadding="0" class="boxed"><tr><td><p><span class="stt">KEEP </span><span class="RktVar">req-module</span><span class="stt"> at </span><span class="RktVar">req-phase</span></p></td></tr></table><p>The require of module <span class="RktVar">req-module</span> at phase
<span class="RktVar">req-phase</span> must be kept because bindings defined within it
are used.</p><p>If <span class="RktVar">show-uses?</span> is true, the dependencies of
<span class="RktVar">module-to-analyze</span> on <span class="RktVar">req-module</span> are enumerated,
one per line, in the following format:</p><blockquote class="leftindent"><table cellspacing="0" cellpadding="0" class="boxed"><tr><td><p><span class="RktVar">exp-name</span><span class="stt"> at </span><span class="RktVar">use-phase</span><span class="stt"> (</span><span class="RktVar">mode</span><span class="stt"> </span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=stx-patterns.html%23%2528form._%2528%2528lib._racket%252Fprivate%252Fstxcase-scheme..rkt%2529._......%2529%2529&version=6.7" class="RktStxLink Sq" data-pltdoc="x">...</a></span><span class="stt">) [RENAMED TO </span><span class="RktVar">ref-name</span><span class="stt">]</span></p></td></tr></table><p>Indicates an export named <span class="RktVar">exp-name</span> is used at phase
<span class="RktVar">use-phase</span> (not necessarily the phase it was provided at,
if <span class="RktVar">req-phase</span> is non-zero).</p><p>The <span class="RktVar">modes</span> indicate what kind(s) of dependencies were
observed: used as a <span class="stt">reference</span>, appeared in a syntax template
(<span class="stt">quote-syntax</span>), etc.</p><p>If the <span class="stt">RENAMED TO</span> clause is present, it indicates that the
binding is renamed on import into the module, and
<span class="RktVar">ref-name</span> gives the local name used (<span class="RktVar">exp-name</span>
is the name under which <span class="RktVar">req-module</span> provides the
binding).</p></blockquote></blockquote><blockquote class="leftindent"><table cellspacing="0" cellpadding="0" class="boxed"><tr><td><p><span class="stt">BYPASS </span><span class="RktVar">req-module</span><span class="stt"> at </span><span class="RktVar">req-phase</span></p></td></tr></table><p>The require is used, but only for bindings that could be more
directly obtained via one or more other modules. For example, a use
of <a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=index.html&version=6.7" class="RktModLink Sq" data-pltdoc="x"><span class="RktSym">racket</span></a> might be bypassed in favor of
<a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=index.html&version=6.7" class="RktModLink Sq" data-pltdoc="x"><span class="RktSym">racket/base</span></a>, <a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=match.html&version=6.7" class="RktModLink Sq" data-pltdoc="x"><span class="RktSym">racket/match</span></a>, and
<a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=contracts.html&version=6.7" class="RktModLink Sq" data-pltdoc="x"><span class="RktSym">racket/contract</span></a>, etc.</p><p>A list of replacement requires is given, one per line, in the
following format:</p><blockquote class="leftindent"><table cellspacing="0" cellpadding="0" class="boxed"><tr><td><p><span class="stt">TO </span><span class="RktVar">repl-module</span><span class="stt"> at </span><span class="RktVar">repl-phase</span><span class="stt"> [WITH RENAMING]</span></p></td></tr></table><p>Add a require of <span class="RktVar">repl-module</span> at phase
<span class="RktVar">repl-phase</span>. If <span class="RktVar">show-uses?</span> is true, then
following each <span class="stt">TO</span> line is an enumeration of the dependencies
that would be satisfied by <span class="RktVar">repl-module</span> in the same
format as described under <span class="stt">KEEP</span> below.</p><p>If the <span class="stt">WITH RENAMING</span> clause is present, it indicates that at
least one of the replacement modules provides a binding under a
different name from the one used locally in the module. Either the
references should be changed or <span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=require.html%23%2528form._%2528%2528lib._racket%252Fprivate%252Fbase..rkt%2529._rename-in%2529%2529&version=6.7" class="RktStxLink Sq" data-pltdoc="x">rename-in</a></span> should be used
with the replacement modules as necessary.</p></blockquote><p><div class="SIntrapara">Bypass recommendations are restricted by the following rules:
</div><div class="SIntrapara"><ul><li><p><span class="RktVar">repl-module</span> must not involve crossing a new
<span class="stt">private</span> directory from <span class="RktVar">req-module</span></p></li><li><p><span class="RktVar">repl-module</span> is never a built-in (“<span class="RktInBG"><span class="hspace"></span><span class="RktIn">#%</span><span class="hspace"></span></span>”)
module</p></li><li><p><span class="RktVar">req-module</span> must not be in the “no-bypass”
whitelist</p></li></ul></div></p></blockquote><blockquote class="leftindent"><table cellspacing="0" cellpadding="0" class="boxed"><tr><td><p><span class="stt">DROP </span><span class="RktVar">req-module</span><span class="stt"> at </span><span class="RktVar">req-phase</span></p></td></tr></table><p>The require appears to be unused, and it can probably be dropped
entirely.</p></blockquote><p>Due to limitations in its implementation strategy,
<span class="RktSym"><a href="#%28def._%28%28lib._macro-debugger%2Fanalysis%2Fcheck-requires..rkt%29._check-requires%29%29" class="RktValLink" data-pltdoc="x">check-requires</a></span> occasionally suggests dropping or bypassing a
module that should not be dropped or bypassed. The following are
typical reasons for such bad suggestions:</p><ul><li><p>The module’s invocation has side-effects. For example, the
module body may update a shared table or perform I/O, or it might
transitively require a module that does. (Consider adding the module
to the whitelist.)</p></li><li><p>Bindings from the module are used in identifier comparisons by a
macro, such as appearing in the macro’s “literals list.” In such
cases, a macro should annotate its expansion with the
<span class="RktVal">'</span><span class="RktVal">disappeared-use</span> property containing the identifier(s)
compared with its literals; however, most casually-written macros do
not do so. On the other hand, macros and their literal identifiers
are typically provided by the same module, so this problem is
somewhat uncommon.</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="#%28def._%28%28lib._macro-debugger%2Fanalysis%2Fcheck-requires..rkt%29._check-requires%29%29" class="RktValLink" data-pltdoc="x">check-requires</a></span><span class="hspace"> </span><span class="RktVal">'</span><span class="RktVal">framework</span><span class="RktPn">)</span></td></tr><tr><td><table cellspacing="0" cellpadding="0"><tr><td><p><span class="RktOut">BYPASS scheme/base at 1</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">TO racket/base at 1</span></p></td></tr><tr><td><p><span class="RktOut">KEEP "private/scheme.rkt" at 1</span></p></td></tr><tr><td><p><span class="RktOut">KEEP racket/base at 0</span></p></td></tr><tr><td><p><span class="RktOut">KEEP racket/contract/base at 0</span></p></td></tr><tr><td><p><span class="RktOut">KEEP racket/unit at 0</span></p></td></tr><tr><td><p><span class="RktOut">KEEP racket/class at 0</span></p></td></tr><tr><td><p><span class="RktOut">KEEP racket/gui/base at 0</span></p></td></tr><tr><td><p><span class="RktOut">KEEP racket/set at 0</span></p></td></tr><tr><td><p><span class="RktOut">KEEP mred/mred-unit at 0</span></p></td></tr><tr><td><p><span class="RktOut">KEEP framework/framework-unit at 0</span></p></td></tr><tr><td><p><span class="RktOut">KEEP framework/private/sig at 0</span></p></td></tr><tr><td><p><span class="RktOut">KEEP scribble/srcdoc at 0</span></p></td></tr><tr><td><p><span class="RktOut">KEEP framework/private/focus-table at 0</span></p></td></tr><tr><td><p><span class="RktOut">KEEP framework/preferences at 0</span></p></td></tr><tr><td><p><span class="RktOut">KEEP framework/test at 0</span></p></td></tr><tr><td><p><span class="RktOut">KEEP framework/gui-utils at 0</span></p></td></tr><tr><td><p><span class="RktOut">KEEP framework/decorated-editor-snip at 0</span></p></td></tr><tr><td><p><span class="RktOut">KEEP framework/private/decorated-editor-snip at 0</span></p></td></tr></table></td></tr><tr><td><span class="stt">> </span><span class="RktPn">(</span><span class="RktSym"><a href="#%28def._%28%28lib._macro-debugger%2Fanalysis%2Fcheck-requires..rkt%29._check-requires%29%29" class="RktValLink" data-pltdoc="x">check-requires</a></span><span class="hspace"> </span><span class="RktVal">'</span><span class="RktVal">openssl</span><span class="hspace"> </span><span class="RktPn">#:show-uses?</span><span class="hspace"> </span><span class="RktVal">#t</span><span class="RktPn">)</span></td></tr><tr><td><table cellspacing="0" cellpadding="0"><tr><td><p><span class="RktOut">KEEP racket/base at 0</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">#%module-begin at 0 (reference)</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">all-from-out at 0 (syntax-local-value disappeared-use)</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">provide at 0 (reference)</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">require at 0 (reference)</span></p></td></tr><tr><td><p><span class="RktOut">KEEP "mzssl.rkt" at 0</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">ports->ssl-ports at 0 (provide)</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">ssl-abandon-port at 0 (provide)</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">ssl-accept at 0 (provide)</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">ssl-accept/enable-break at 0 (provide)</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">ssl-addresses at 0 (provide)</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">ssl-available? at 0 (provide)</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">ssl-client-context? at 0 (provide)</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">ssl-close at 0 (provide)</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">ssl-connect at 0 (provide)</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">ssl-connect/enable-break at 0 (provide)</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">ssl-context? at 0 (provide)</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">ssl-default-verify-sources at 0 (provide)</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">ssl-dh4096-param-path at 0 (provide)</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">ssl-listen at 0 (provide)</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">ssl-listener? at 0 (provide)</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">ssl-load-certificate-chain! at 0 (provide)</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">ssl-load-default-verify-sources! at 0 (provide)</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">ssl-load-fail-reason at 0 (provide)</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">ssl-load-private-key! at 0 (provide)</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">ssl-load-suggested-certificate-authorities! at 0 (provide)</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">ssl-load-verify-root-certificates! at 0 (provide)</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">ssl-load-verify-source! at 0 (provide)</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">ssl-make-client-context at 0 (provide)</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">ssl-make-server-context at 0 (provide)</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">ssl-max-client-protocol at 0 (provide)</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">ssl-max-server-protocol at 0 (provide)</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">ssl-peer-certificate-hostnames at 0 (provide)</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">ssl-peer-check-hostname at 0 (provide)</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">ssl-peer-issuer-name at 0 (provide)</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">ssl-peer-subject-name at 0 (provide)</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">ssl-peer-verified? at 0 (provide)</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">ssl-port? at 0 (provide)</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">ssl-seal-context! at 0 (provide)</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">ssl-secure-client-context at 0 (provide)</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">ssl-server-context-enable-dhe! at 0 (provide)</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">ssl-server-context-enable-ecdhe! at 0 (provide)</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">ssl-server-context? at 0 (provide)</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">ssl-set-ciphers! at 0 (provide)</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">ssl-set-server-name-identification-callback! at 0 (provide)</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">ssl-set-verify! at 0 (provide)</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">ssl-set-verify-hostname! at 0 (provide)</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">ssl-try-verify! at 0 (provide)</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">supported-client-protocols at 0 (provide)</span></p></td></tr><tr><td><p><span class="RktOut"></span><span class="hspace"> </span><span class="RktOut">supported-server-protocols at 0 (provide)</span></p></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._((lib._macro-debugger/analysis/check-requires..rkt)._show-requires))"></a><span title="Provided from: macro-debugger/analysis/check-requires | Package: macro-debugger-text-lib"><span class="RktSym"><a href="#%28def._%28%28lib._macro-debugger%2Fanalysis%2Fcheck-requires..rkt%29._show-requires%29%29" class="RktValDef RktValLink" data-pltdoc="x">show-requires</a></span></span><span class="hspace"> </span><span class="RktVar">module-name</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="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=data-structure-contracts.html%23%2528def._%2528%2528lib._racket%252Fcontract%252Fbase..rkt%2529._listof%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">listof</a></span><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=data-structure-contracts.html%23%2528def._%2528%2528lib._racket%252Fcontract%252Fbase..rkt%2529._list%252Fc%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">list/c</a></span><span class="hspace"> </span><span class="RktVal">'</span><span class="RktVal">keep</span><span class="hspace"> </span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=Module_Names_and_Loading.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._module-path%7E3f%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">module-path?</a></span><span class="hspace"> </span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=number-types.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._number%7E3f%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">number?</a></span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=data-structure-contracts.html%23%2528def._%2528%2528lib._racket%252Fcontract%252Fbase..rkt%2529._list%252Fc%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">list/c</a></span><span class="hspace"> </span><span class="RktVal">'</span><span class="RktVal">bypass</span><span class="hspace"> </span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=Module_Names_and_Loading.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._module-path%7E3f%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">module-path?</a></span><span class="hspace"> </span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=number-types.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._number%7E3f%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">number?</a></span><span class="hspace"> </span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=pairs.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._list%7E3f%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">list?</a></span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=data-structure-contracts.html%23%2528def._%2528%2528lib._racket%252Fcontract%252Fbase..rkt%2529._list%252Fc%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">list/c</a></span><span class="hspace"> </span><span class="RktVal">'</span><span class="RktVal">drop</span><span class="hspace"> </span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=Module_Names_and_Loading.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._module-path%7E3f%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">module-path?</a></span><span class="hspace"> </span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=number-types.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._number%7E3f%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">number?</a></span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr></table></td></tr></table></td></tr><tr><td><span class="hspace"> </span><span class="RktVar">module-name</span><span class="hspace"> </span>:<span class="hspace"> </span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=Module_Names_and_Loading.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._module-path%7E3f%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">module-path?</a></span></td></tr></table></blockquote></div><div class="SIntrapara">Like <span class="RktSym"><a href="#%28def._%28%28lib._macro-debugger%2Fanalysis%2Fcheck-requires..rkt%29._check-requires%29%29" class="RktValLink" data-pltdoc="x">check-requires</a></span>, but returns the analysis as a list
instead of printing it. The procedure
returns one element per (non-label) require in the following format:
</div><div class="SIntrapara"><ul><li><p><span class="RktPn">(</span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=pairs.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._list%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">list</a></span><span class="stt"> </span><span class="RktVal">'</span><span class="RktVal">keep</span><span class="stt"> </span><span class="RktVar">req-module</span><span class="stt"> </span><span class="RktVar">req-phase</span><span class="RktPn">)</span></p></li><li><p><span class="RktPn">(</span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=pairs.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._list%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">list</a></span><span class="stt"> </span><span class="RktVal">'</span><span class="RktVal">bypass</span><span class="stt"> </span><span class="RktVar">req-module</span><span class="stt"> </span><span class="RktVar">req-phase</span><span class="stt"> </span><span class="RktVar">replacements</span><span class="RktPn">)</span></p></li><li><p><span class="RktPn">(</span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=pairs.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._list%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">list</a></span><span class="stt"> </span><span class="RktVal">'</span><span class="RktVal">drop</span><span class="stt"> </span><span class="RktVar">req-module</span><span class="stt"> </span><span class="RktVar">req-phase</span><span class="RktPn">)</span></p></li></ul></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="#%28def._%28%28lib._macro-debugger%2Fanalysis%2Fcheck-requires..rkt%29._show-requires%29%29" class="RktValLink" data-pltdoc="x">show-requires</a></span><span class="hspace"> </span><span class="RktVal">'</span><span class="RktVal">framework</span><span class="RktPn">)</span></td></tr><tr><td><table cellspacing="0" cellpadding="0"><tr><td><p><span class="RktRes">'((bypass scheme/base 1 ((racket/base 1 #f)))</span></p></td></tr><tr><td><p><span class="RktRes"></span><span class="hspace"> </span><span class="RktRes">(keep "private/scheme.rkt" 1)</span></p></td></tr><tr><td><p><span class="RktRes"></span><span class="hspace"> </span><span class="RktRes">(keep racket/base 0)</span></p></td></tr><tr><td><p><span class="RktRes"></span><span class="hspace"> </span><span class="RktRes">(keep racket/contract/base 0)</span></p></td></tr><tr><td><p><span class="RktRes"></span><span class="hspace"> </span><span class="RktRes">(keep racket/unit 0)</span></p></td></tr><tr><td><p><span class="RktRes"></span><span class="hspace"> </span><span class="RktRes">(keep racket/class 0)</span></p></td></tr><tr><td><p><span class="RktRes"></span><span class="hspace"> </span><span class="RktRes">(keep racket/gui/base 0)</span></p></td></tr><tr><td><p><span class="RktRes"></span><span class="hspace"> </span><span class="RktRes">(keep racket/set 0)</span></p></td></tr><tr><td><p><span class="RktRes"></span><span class="hspace"> </span><span class="RktRes">(keep mred/mred-unit 0)</span></p></td></tr><tr><td><p><span class="RktRes"></span><span class="hspace"> </span><span class="RktRes">(keep framework/framework-unit 0)</span></p></td></tr><tr><td><p><span class="RktRes"></span><span class="hspace"> </span><span class="RktRes">(keep framework/private/sig 0)</span></p></td></tr><tr><td><p><span class="RktRes"></span><span class="hspace"> </span><span class="RktRes">(keep scribble/srcdoc 0)</span></p></td></tr><tr><td><p><span class="RktRes"></span><span class="hspace"> </span><span class="RktRes">(keep framework/private/focus-table 0)</span></p></td></tr><tr><td><p><span class="RktRes"></span><span class="hspace"> </span><span class="RktRes">(keep framework/preferences 0)</span></p></td></tr><tr><td><p><span class="RktRes"></span><span class="hspace"> </span><span class="RktRes">(keep framework/test 0)</span></p></td></tr><tr><td><p><span class="RktRes"></span><span class="hspace"> </span><span class="RktRes">(keep framework/gui-utils 0)</span></p></td></tr><tr><td><p><span class="RktRes"></span><span class="hspace"> </span><span class="RktRes">(keep framework/decorated-editor-snip 0)</span></p></td></tr><tr><td><p><span class="RktRes"></span><span class="hspace"> </span><span class="RktRes">(keep framework/private/decorated-editor-snip 0))</span></p></td></tr></table></td></tr></table></blockquote></div></p><h3 x-source-module="(lib "macro-debugger/macro-debugger.scrbl")" x-source-pkg="macro-debugger" x-part-tag=""Showing_Module_Dependencies"">9<tt> </tt><a name="(part._.Showing_.Module_.Dependencies)"></a><a name="(mod-path._macro-debugger/analysis/show-dependencies)"></a><a name="(idx._(gentag._1._(lib._macro-debugger/macro-debugger..scrbl)))"></a>Showing Module Dependencies</h3><p><table cellspacing="0" cellpadding="0" class="defmodule"><tr><td align="left" colspan="2"><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=require.html%23%2528form._%2528%2528lib._racket%252Fprivate%252Fbase..rkt%2529._require%2529%2529&version=6.7" class="RktStxLink Sq" data-pltdoc="x">require</a></span><span class="stt"> </span><a href="#%28mod-path._macro-debugger%2Fanalysis%2Fshow-dependencies%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">macro-debugger/analysis/show-dependencies</span></a><span class="RktPn">)</span></td></tr><tr><td align="left"> </td><td align="right"><span class="RpackageSpec"><span class="Smaller"> package:</span> <span class="stt">macro-debugger-text-lib</span></span></td></tr></table></p><p>The “Show Dependencies” utility can be run as a raco subcommand. For
example (from racket root directory):</p><p><span class="hspace"> </span><span class="stt">raco show-dependencies -bc racket/collects/openssl/main.rkt</span></p><p><span class="hspace"> </span><span class="stt">raco show-dependencies -c --exclude racket openssl</span></p><p>Each argument is interpreted as a file path if it exists; otherwise it
is interpreted as a module path. See <span class="RktSym"><a href="#%28def._%28%28lib._macro-debugger%2Fanalysis%2Fshow-dependencies..rkt%29._show-dependencies%29%29" class="RktValLink" data-pltdoc="x">show-dependencies</a></span> for a
description of the output format.</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._((lib._macro-debugger/analysis/show-dependencies..rkt)._show-dependencies))"></a><span title="Provided from: macro-debugger/analysis/show-dependencies | Package: macro-debugger-text-lib"><span class="RktSym"><a href="#%28def._%28%28lib._macro-debugger%2Fanalysis%2Fshow-dependencies..rkt%29._show-dependencies%29%29" class="RktValDef RktValLink" data-pltdoc="x">show-dependencies</a></span></span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="RktVar">root</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="RktMeta">...</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="RktPn">#:exclude</span><span class="hspace"> </span><span class="RktVar">exclude</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="RktPn">#:exclude-deps</span><span class="hspace"> </span><span class="RktVar">exclude-deps</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="RktPn">#:show-context?</span><span class="hspace"> </span><span class="RktVar">show-context?</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="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=void.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._void%7E3f%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">void?</a></span></td></tr></table></blockquote></td></tr><tr><td><span class="hspace"> </span><span class="RktVar">root</span><span class="hspace"> </span>:<span class="hspace"> </span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=Module_Names_and_Loading.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._module-path%7E3f%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">module-path?</a></span></td></tr><tr><td><span class="hspace"> </span><span class="RktVar">exclude</span><span class="hspace"> </span>:<span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=data-structure-contracts.html%23%2528def._%2528%2528lib._racket%252Fcontract%252Fbase..rkt%2529._listof%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">listof</a></span><span class="hspace"> </span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=Module_Names_and_Loading.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._module-path%7E3f%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">module-path?</a></span><span class="RktPn">)</span><span class="hspace"> </span>=<span class="hspace"> </span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=pairs.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._null%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">null</a></span></td></tr><tr><td><span class="hspace"> </span><span class="RktVar">exclude-deps</span><span class="hspace"> </span>:<span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=data-structure-contracts.html%23%2528def._%2528%2528lib._racket%252Fcontract%252Fbase..rkt%2529._listof%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">listof</a></span><span class="hspace"> </span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=Module_Names_and_Loading.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._module-path%7E3f%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">module-path?</a></span><span class="RktPn">)</span><span class="hspace"> </span>=<span class="hspace"> </span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=pairs.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._null%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">null</a></span></td></tr><tr><td><span class="hspace"> </span><span class="RktVar">show-context?</span><span class="hspace"> </span>:<span class="hspace"> </span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=booleans.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._boolean%7E3f%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">boolean?</a></span><span class="hspace"> </span>=<span class="hspace"> </span><span class="RktVal">#f</span></td></tr></table></blockquote></div><div class="SIntrapara">Computes the set of modules transitively required by the <span class="RktVar">root</span>
module(s). A <span class="RktVar">root</span> module is included in the output
only if it is a dependency of another <span class="RktVar">root</span> module. The
computed dependencies do not include modules reached through
<span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=Module_Names_and_Loading.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._dynamic-require%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">dynamic-require</a></span> or <span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=lazy-require.html%23%2528form._%2528%2528lib._racket%252Flazy-require..rkt%2529._lazy-require%2529%2529&version=6.7" class="RktStxLink Sq" data-pltdoc="x">lazy-require</a></span> or referenced by
<span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=Filesystem.html%23%2528form._%2528%2528lib._racket%252Fruntime-path..rkt%2529._define-runtime-module-path-index%2529%2529&version=6.7" class="RktStxLink Sq" data-pltdoc="x">define-runtime-module-path-index</a></span> but do include modules
referenced by <span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=Filesystem.html%23%2528form._%2528%2528lib._racket%252Fruntime-path..rkt%2529._define-runtime-module-path%2529%2529&version=6.7" class="RktStxLink Sq" data-pltdoc="x">define-runtime-module-path</a></span> (since that
implicitly creates a <span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=require.html%23%2528form._%2528%2528lib._racket%252Fprivate%252Fbase..rkt%2529._for-label%2529%2529&version=6.7" class="RktStxLink Sq" data-pltdoc="x">for-label</a></span> dependency).</div></p><p>Dependencies are printed, one per line, in the following format:</p><blockquote class="leftindent"><table cellspacing="0" cellpadding="0" class="boxed"><tr><td><p><span class="RktVar">dep-module</span><span class="stt"> [<- </span><span class="RktPn">(</span><span class="RktVar">direct-dependent</span><span class="stt"> </span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=stx-patterns.html%23%2528form._%2528%2528lib._racket%252Fprivate%252Fstxcase-scheme..rkt%2529._......%2529%2529&version=6.7" class="RktStxLink Sq" data-pltdoc="x">...</a></span><span class="RktPn">)</span><span class="stt">]</span></p></td></tr></table><p>Indicates that <span class="RktVar">dep-module</span> is transitively required by one or
more <span class="RktVar">root</span> modules. If <span class="RktVar">show-context?</span> is true, then
the <span class="RktVar">direct-dependent</span>s are shown; they are the modules
reachable from (and including) the <span class="RktVar">root</span> modules that directly
require <span class="RktVar">dep-module</span>.</p></blockquote><p>The dependencies are trimmed by removing any module reachable from (or
equal to) a module in <span class="RktVar">exclude</span> as well as any module
reachable from (but not equal to) a module in <span class="RktVar">exclude-deps</span>.</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="#%28def._%28%28lib._macro-debugger%2Fanalysis%2Fshow-dependencies..rkt%29._show-dependencies%29%29" class="RktValLink" data-pltdoc="x">show-dependencies</a></span><span class="hspace"> </span><span class="RktVal">'</span><span class="RktVal">openssl</span></td></tr><tr><td><span class="hspace"> </span><span class="hspace"> </span><span class="RktPn">#:exclude</span><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=pairs.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._list%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">list</a></span><span class="hspace"> </span><span class="RktVal">'</span><span class="RktVal">racket</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr></table></td></tr><tr><td><table cellspacing="0" cellpadding="0"><tr><td><p><span class="RktOut">ffi/file</span></p></td></tr><tr><td><p><span class="RktOut">ffi/unsafe/alloc</span></p></td></tr><tr><td><p><span class="RktOut">ffi/unsafe/atomic</span></p></td></tr><tr><td><p><span class="RktOut">ffi/unsafe/define</span></p></td></tr><tr><td><p><span class="RktOut">openssl/libcrypto</span></p></td></tr><tr><td><p><span class="RktOut">openssl/libssl</span></p></td></tr><tr><td><p><span class="RktOut">openssl/mzssl</span></p></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="#%28def._%28%28lib._macro-debugger%2Fanalysis%2Fshow-dependencies..rkt%29._show-dependencies%29%29" class="RktValLink" data-pltdoc="x">show-dependencies</a></span><span class="hspace"> </span><span class="RktVal">'</span><span class="RktVal">openssl</span></td></tr><tr><td><span class="hspace"> </span><span class="hspace"> </span><span class="RktPn">#:show-context?</span><span class="hspace"> </span><span class="RktVal">#t</span></td></tr><tr><td><span class="hspace"> </span><span class="hspace"> </span><span class="RktPn">#:exclude</span><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=pairs.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._list%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">list</a></span><span class="hspace"> </span><span class="RktVal">'</span><span class="RktVal">racket</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr></table></td></tr><tr><td><table cellspacing="0" cellpadding="0"><tr><td><p><span class="RktOut">ffi/file <- (openssl/mzssl)</span></p></td></tr><tr><td><p><span class="RktOut">ffi/unsafe/alloc <- (openssl/mzssl)</span></p></td></tr><tr><td><p><span class="RktOut">ffi/unsafe/atomic <- (ffi/unsafe/alloc openssl/mzssl)</span></p></td></tr><tr><td><p><span class="RktOut">ffi/unsafe/define <- (openssl/mzssl)</span></p></td></tr><tr><td><p><span class="RktOut">openssl/libcrypto <- (openssl/libssl openssl/mzssl)</span></p></td></tr><tr><td><p><span class="RktOut">openssl/libssl <- (openssl/mzssl)</span></p></td></tr><tr><td><p><span class="RktOut">openssl/mzssl <- (openssl)</span></p></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><table cellspacing="0" cellpadding="0" class="prototype RForeground"><tr><td valign="top"><span class="RktPn">(</span><a name="(def._((lib._macro-debugger/analysis/show-dependencies..rkt)._get-dependencies))"></a><span title="Provided from: macro-debugger/analysis/show-dependencies | Package: macro-debugger-text-lib"><span class="RktSym"><a href="#%28def._%28%28lib._macro-debugger%2Fanalysis%2Fshow-dependencies..rkt%29._get-dependencies%29%29" class="RktValDef RktValLink" data-pltdoc="x">get-dependencies</a></span></span></td><td valign="top"><span class="hspace"> </span></td><td valign="top"><span class="RktVar">root</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="RktMeta">...</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="RktPn">#:exclude</span><span class="hspace"> </span><span class="RktVar">exclude</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="RktPn">#:exclude-deps</span><span class="hspace"> </span><span class="RktVar">exclude-deps</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="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=data-structure-contracts.html%23%2528def._%2528%2528lib._racket%252Fcontract%252Fbase..rkt%2529._listof%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">listof</a></span><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=pairs.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._list%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">list</a></span><span class="hspace"> </span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=Module_Names_and_Loading.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._module-path%7E3f%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">module-path?</a></span><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=data-structure-contracts.html%23%2528def._%2528%2528lib._racket%252Fcontract%252Fbase..rkt%2529._listof%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">listof</a></span><span class="hspace"> </span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=Module_Names_and_Loading.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._module-path%7E3f%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">module-path?</a></span><span class="RktPn">)</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace"> </span><span class="RktVar">root</span><span class="hspace"> </span>:<span class="hspace"> </span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=Module_Names_and_Loading.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._module-path%7E3f%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">module-path?</a></span></td></tr><tr><td><span class="hspace"> </span><span class="RktVar">exclude</span><span class="hspace"> </span>:<span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=data-structure-contracts.html%23%2528def._%2528%2528lib._racket%252Fcontract%252Fbase..rkt%2529._listof%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">listof</a></span><span class="hspace"> </span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=Module_Names_and_Loading.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._module-path%7E3f%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">module-path?</a></span><span class="RktPn">)</span><span class="hspace"> </span>=<span class="hspace"> </span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=pairs.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._null%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">null</a></span></td></tr><tr><td><span class="hspace"> </span><span class="RktVar">exclude-deps</span><span class="hspace"> </span>:<span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=data-structure-contracts.html%23%2528def._%2528%2528lib._racket%252Fcontract%252Fbase..rkt%2529._listof%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">listof</a></span><span class="hspace"> </span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=Module_Names_and_Loading.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._module-path%7E3f%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">module-path?</a></span><span class="RktPn">)</span><span class="hspace"> </span>=<span class="hspace"> </span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=pairs.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._null%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">null</a></span></td></tr></table></blockquote></div><div class="SIntrapara">Like <span class="RktSym"><a href="#%28def._%28%28lib._macro-debugger%2Fanalysis%2Fshow-dependencies..rkt%29._show-dependencies%29%29" class="RktValLink" data-pltdoc="x">show-dependencies</a></span>, but returns a list instead of
producing output. Each element of the list is a list containing a
module path and the module paths of its immediate dependents.</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="#%28def._%28%28lib._macro-debugger%2Fanalysis%2Fshow-dependencies..rkt%29._get-dependencies%29%29" class="RktValLink" data-pltdoc="x">get-dependencies</a></span><span class="hspace"> </span><span class="RktVal">'</span><span class="RktVal">openssl</span><span class="hspace"> </span><span class="RktPn">#:exclude</span><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=pairs.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._list%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">list</a></span><span class="hspace"> </span><span class="RktVal">'</span><span class="RktVal">racket</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr><tr><td><table cellspacing="0" cellpadding="0"><tr><td><p><span class="RktRes">'((ffi/file (openssl/mzssl))</span></p></td></tr><tr><td><p><span class="RktRes"></span><span class="hspace"> </span><span class="RktRes">(ffi/unsafe/alloc (openssl/mzssl))</span></p></td></tr><tr><td><p><span class="RktRes"></span><span class="hspace"> </span><span class="RktRes">(ffi/unsafe/atomic (ffi/unsafe/alloc openssl/mzssl))</span></p></td></tr><tr><td><p><span class="RktRes"></span><span class="hspace"> </span><span class="RktRes">(ffi/unsafe/define (openssl/mzssl))</span></p></td></tr><tr><td><p><span class="RktRes"></span><span class="hspace"> </span><span class="RktRes">(openssl/libcrypto (openssl/libssl openssl/mzssl))</span></p></td></tr><tr><td><p><span class="RktRes"></span><span class="hspace"> </span><span class="RktRes">(openssl/libssl (openssl/mzssl))</span></p></td></tr><tr><td><p><span class="RktRes"></span><span class="hspace"> </span><span class="RktRes">(openssl/mzssl (openssl)))</span></p></td></tr></table></td></tr></table></blockquote></div></p><h3 x-source-module="(lib "macro-debugger/macro-debugger.scrbl")" x-source-pkg="macro-debugger" x-part-tag=""Macro_Profiler"">10<tt> </tt><a name="(part._.Macro_.Profiler)"></a><a name="(idx._(gentag._2._(lib._macro-debugger/macro-debugger..scrbl)))"></a>Macro Profiler</h3><p>The Macro Profiler shows what macros contribute most to the
<span style="font-style: italic">expanded code size</span> of programs. Use the Macro Profiler when
your program has compiled files that are larger than expected. (The
Macro Profiler does not report expansion time, but expansion time is
generally proportional to code size.)</p><p><span class="hspace"> </span><span class="stt">raco macro-profiler </span><span style="font-style: italic">module-path ...</span></p><p>The Macro Profiler works by expanding the files using the Macro
Debugger and recording the difference in term sizes for each macro
expansion step. The size of a term is computed by counting its pairs,
atoms, etc.</p><p>Consider the following partial macro expansion:</p><blockquote class="SCodeFlow"><p><span class="RktPn">(</span><span class="RktSym">m</span><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym">n</span><span class="hspace"> </span><span class="RktSym">x</span><span class="RktPn">)</span><span class="RktPn">)</span><span class="hspace"> </span><span class="RktSym">⇒</span><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym">o</span><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym">p</span><span class="hspace"> </span><span class="RktSym">y</span><span class="RktPn">)</span><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym">n</span><span class="hspace"> </span><span class="RktSym">x</span><span class="RktPn">)</span><span class="RktPn">)</span><span class="hspace"> </span><span class="RktSym">⇒</span><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym">f</span><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym">p</span><span class="hspace"> </span><span class="RktSym">y</span><span class="RktPn">)</span><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym">n</span><span class="hspace"> </span><span class="RktSym">x</span><span class="RktPn">)</span><span class="hspace"> </span><span class="RktSym">z</span><span class="RktPn">)</span><span class="hspace"> </span><span class="RktSym">⇒</span><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym">f</span><span class="hspace"> </span><span class="RktSym">y</span><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym">n</span><span class="hspace"> </span><span class="RktSym">x</span><span class="RktPn">)</span><span class="hspace"> </span><span class="RktSym">z</span><span class="RktPn">)</span></p></blockquote><p>The <span style="font-style: italic">direct</span> cost of <span class="RktSym">m</span> is 6—<wbr></wbr>the size of the new term
<span class="RktPn">(</span><span class="RktSym">p</span><span class="stt"> </span><span class="RktSym">y</span><span class="RktPn">)</span> plus one for the additional pair to include it in the
<span class="RktSym">o</span> arguments. Likewise, the direct cost of <span class="RktSym">o</span> is
2. The direct cost of <span class="RktSym">p</span> is -4, because the macro’s result is
smaller than its use.</p><p>The <span style="font-style: italic">total</span> cost of a macro consists of its direct cost
<span style="font-style: italic">plus</span> the costs of any macros in the code introduced by
<span class="RktSym">m</span>, but <span style="font-style: italic">not</span> including the costs from macro arguments
like <span class="RktPn">(</span><span class="RktSym">n</span><span class="stt"> </span><span class="RktSym">x</span><span class="RktPn">)</span>. So the total cost of <span class="RktSym">m</span> is 6 + 2 - 4 = 4,
because the <span class="RktSym">o</span> and <span class="RktSym">p</span> terms were introduced by
<span class="RktSym">m</span>. In contrast, the total cost of <span class="RktSym">o</span> is just 2, the
same as the direct cost.</p><p><div class="SIntrapara">Here are some known limitations:
</div><div class="SIntrapara"><ul><li><p>Term size is an imperfect proxy for compiled code size. For
example, a macro might generate a large expression that it knows the
compiler will turn into a small expression via constant propagation
and dead code elimination (see the “Macro-Writer’s Bill of
Rights”). The profiler will overestimate the code-size cost of such a
macro.</p></li><li><p>The Macro Profiler uses scopes to determine what terms were
introduced by a macro, so it can be confused by certain kinds of
hygiene-breaking macros.</p></li><li><p>The profiler calculates the costs of <span class="RktSym"><a href="https://download.racket-lang.org/docs/6.7/html/local-redirect/index.html?doc=reference&rel=stxtrans.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._local-expand%2529%2529&version=6.7" class="RktValLink Sq" data-pltdoc="x">local-expand</a></span>
assuming that is used only on macro arguments, and that the result is
used in the macro’s result. Macros that violate this assumption will
have correspondingly incorrect profile costs.</p></li></ul></div></p><div class="navsetbottom"><span class="navleft"><form class="searchform"><input class="searchbox" style="color: #888;" type="text" value="...search manuals..." title="Enter a search string to search the manuals" onkeypress="return DoSearchKey(event, this, "6.7", "../");" onfocus="this.style.color="black"; this.style.textAlign="left"; if (this.value == "...search manuals...") this.value="";" onblur="if (this.value.match(/^ *$/)) { this.style.color="#888"; this.style.textAlign="center"; this.value="...search manuals..."; }"/></form> <a href="../index.html" title="up to the documentation top" data-pltdoc="x" onclick="return GotoPLTRoot("6.7");">top</a></span><span class="navright"> <span class="nonavigation">← prev</span> <a href="../index.html" title="up to the documentation top" data-pltdoc="x" onclick="return GotoPLTRoot("6.7");">up</a> <span class="nonavigation">next →</span></span> </div></div></div><div id="contextindicator"> </div></body></html>
|