1
0
Fork 0
mirror of https://github.com/ganelson/inform.git synced 2024-07-03 07:24:58 +03:00

Refactored enclosure and packaging

This commit is contained in:
Graham Nelson 2019-04-19 18:15:12 +01:00
parent 46f3e3e320
commit 24ec91a807
69 changed files with 542 additions and 442 deletions

View file

@ -2355,8 +2355,7 @@ then expand it into the output.
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">K</span><span class="plain">) &amp;&amp; (</span><span class="identifier">parent_optimised</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">)) { </span> <span class="comment">parent optimisation is stronger, so we prefer that</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Calculus::Deferrals::write_loop_schema</span><span class="plain">(&amp;</span><span class="identifier">loop_schema</span><span class="plain">, </span><span class="identifier">K</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">pdef</span><span class="plain">-</span><span class="element">&gt;rtp_iname</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
<span class="reserved">package_request</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain"> = </span><span class="functiontext">Packaging::home_of</span><span class="plain">(</span><span class="identifier">pdef</span><span class="plain">-</span><span class="element">&gt;ppd_iname</span><span class="plain">);</span>
<span class="identifier">pdef</span><span class="plain">-</span><span class="element">&gt;rtp_iname</span><span class="plain"> = </span><span class="functiontext">Hierarchy::make_iname_in</span><span class="plain">(</span><span class="constant">RTP_HL</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">);</span>
<span class="identifier">pdef</span><span class="plain">-</span><span class="element">&gt;rtp_iname</span><span class="plain"> = </span><span class="functiontext">Hierarchy::make_iname_in</span><span class="plain">(</span><span class="constant">RTP_HL</span><span class="plain">, </span><span class="identifier">pdef</span><span class="plain">-</span><span class="element">&gt;ppd_package</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="functiontext">Calculus::Schemas::modify</span><span class="plain">(&amp;</span><span class="identifier">loop_schema</span><span class="plain">, </span><span class="string">"if (RunTimeProblem(RTP_CANTITERATE, %n))"</span><span class="plain">,</span>
<span class="identifier">pdef</span><span class="plain">-</span><span class="element">&gt;rtp_iname</span><span class="plain">);</span>

View file

@ -43,6 +43,7 @@ for a number of different reasons, enumerated as follows:
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">deferred_from</span><span class="plain">; </span> <span class="comment">remember where it came from, for Problem reports</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">general_pointer</span><span class="plain"> </span><span class="identifier">defn_ref</span><span class="plain">; </span> <span class="comment">sometimes we must remember other things too</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">cinder_kinds</span><span class="plain">[16]; </span> <span class="comment">the kinds of value being cindered (see below)</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">package_request</span><span class="plain"> *</span><span class="identifier">ppd_package</span><span class="plain">; </span> <span class="comment">where to put both of the following:</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">ppd_iname</span><span class="plain">; </span> <span class="comment">routine to implement this</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">rtp_iname</span><span class="plain">; </span> <span class="comment">compile a string of the origin text for run-time problems?</span>
<span class="identifier">MEMORY_MANAGEMENT</span>
@ -80,8 +81,8 @@ all deferral requests are redeemed &mdash; they would then never be reached.
<span class="identifier">pdef</span><span class="plain">-</span><span class="element">&gt;reason</span><span class="plain"> = </span><span class="identifier">reason</span><span class="plain">;</span>
<span class="identifier">pdef</span><span class="plain">-</span><span class="element">&gt;deferred_from</span><span class="plain"> = </span><span class="identifier">current_sentence</span><span class="plain">;</span>
<span class="identifier">pdef</span><span class="plain">-</span><span class="element">&gt;rtp_iname</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">package_request</span><span class="plain"> *</span><span class="identifier">PR</span><span class="plain"> = </span><span class="functiontext">Hierarchy::package_in_enclosure</span><span class="plain">(</span><span class="constant">PROPOSITIONS_HAP</span><span class="plain">);</span>
<span class="identifier">pdef</span><span class="plain">-</span><span class="element">&gt;ppd_iname</span><span class="plain"> = </span><span class="functiontext">Hierarchy::make_iname_in</span><span class="plain">(</span><span class="constant">PROPOSITION_HL</span><span class="plain">, </span><span class="identifier">PR</span><span class="plain">);</span>
<span class="identifier">pdef</span><span class="plain">-</span><span class="element">&gt;ppd_package</span><span class="plain"> = </span><span class="functiontext">Hierarchy::package_in_enclosure</span><span class="plain">(</span><span class="constant">PROPOSITIONS_HAP</span><span class="plain">);</span>
<span class="identifier">pdef</span><span class="plain">-</span><span class="element">&gt;ppd_iname</span><span class="plain"> = </span><span class="functiontext">Hierarchy::make_iname_in</span><span class="plain">(</span><span class="constant">PROPOSITION_HL</span><span class="plain">, </span><span class="identifier">pdef</span><span class="plain">-</span><span class="element">&gt;ppd_package</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">no_further_deferrals</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"Too late now to defer propositions"</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">pdef</span><span class="plain">;</span>

View file

@ -11,7 +11,7 @@
<!--Weave of '13/rsfk' generated by 7-->
<ul class="crumbs"><li><a href="../webs.html">&#9733;</a></li><li><a href="index.html">core</a></li><li><a href="index.html#13">Chapter 13: Bridge to Kinds Module</a></li><li><b>Runtime Support for Kinds</b></li></ul><p class="purpose">To compile I6 material needed at runtime to enable kinds to function as they should.</p>
<ul class="toc"><li><a href="#SP1">&#167;1. Definitions</a></li><li><a href="#SP3">&#167;3. Kinds as I6 classes</a></li><li><a href="#SP4">&#167;4. Default values</a></li><li><a href="#SP6">&#167;6. Equality tests</a></li><li><a href="#SP7">&#167;7. Casts at runtime</a></li><li><a href="#SP8">&#167;8. IDs</a></li><li><a href="#SP17">&#167;17. The heap</a></li><li><a href="#SP21">&#167;21. Run-time support for units and enumerations</a></li><li><a href="#SP25_6">&#167;25.6. Further runtime support</a></li></ul><hr class="tocbar">
<ul class="toc"><li><a href="#SP1">&#167;1. Definitions</a></li><li><a href="#SP3">&#167;3. Kinds as I6 classes</a></li><li><a href="#SP4">&#167;4. Default values</a></li><li><a href="#SP6">&#167;6. Equality tests</a></li><li><a href="#SP7">&#167;7. Casts at runtime</a></li><li><a href="#SP8">&#167;8. IDs</a></li><li><a href="#SP17">&#167;17. The heap</a></li><li><a href="#SP21">&#167;21. Run-time support for units and enumerations</a></li><li><a href="#SP24_6">&#167;24.6. Further runtime support</a></li></ul><hr class="tocbar">
<p class="inwebparagraph"><a id="SP1"></a><b>&#167;1. Definitions. </b></p>
@ -60,9 +60,9 @@ kinds being compiled to an I6 <code class="display"><span class="extract">Class<
<p class="inwebparagraph"></p>
<p class="endnote">The function Kinds::RunTime::I6_classname is used in <a href="#SP26">&#167;26</a>, 6/bp (<a href="6-bp.html#SP25">&#167;25</a>), 6/rlt (<a href="6-rlt.html#SP29_2">&#167;29.2</a>, <a href="6-rlt.html#SP29_3">&#167;29.3</a>, <a href="6-rlt.html#SP29_4">&#167;29.4</a>, <a href="6-rlt.html#SP29_5">&#167;29.5</a>, <a href="6-rlt.html#SP29_6">&#167;29.6</a>), 12/ter (<a href="12-ter.html#SP8_6">&#167;8.6</a>), 12/ca (<a href="12-ca.html#SP6_2">&#167;6.2</a>), 12/dtd (<a href="12-dtd.html#SP24">&#167;24</a>), 13/kak (<a href="13-kak.html#SP2">&#167;2</a>), 25/cii (<a href="25-cii.html#SP3_1_1_4_7_1">&#167;3.1.1.4.7.1</a>), 26/iti (<a href="26-iti.html#SP9">&#167;9</a>), 27/hr (<a href="27-hr.html#SP4">&#167;4</a>), 27/is (<a href="27-is.html#SP31_8_1">&#167;31.8.1</a>).</p>
<p class="endnote">The function Kinds::RunTime::I6_classname is used in <a href="#SP25">&#167;25</a>, 6/bp (<a href="6-bp.html#SP25">&#167;25</a>), 6/rlt (<a href="6-rlt.html#SP29_2">&#167;29.2</a>, <a href="6-rlt.html#SP29_3">&#167;29.3</a>, <a href="6-rlt.html#SP29_4">&#167;29.4</a>, <a href="6-rlt.html#SP29_5">&#167;29.5</a>, <a href="6-rlt.html#SP29_6">&#167;29.6</a>), 12/ter (<a href="12-ter.html#SP8_6">&#167;8.6</a>), 12/ca (<a href="12-ca.html#SP6_2">&#167;6.2</a>), 12/dtd (<a href="12-dtd.html#SP24">&#167;24</a>), 13/kak (<a href="13-kak.html#SP2">&#167;2</a>), 25/cii (<a href="25-cii.html#SP3_1_1_4_7_1">&#167;3.1.1.4.7.1</a>), 26/iti (<a href="26-iti.html#SP9">&#167;9</a>), 27/hr (<a href="27-hr.html#SP4">&#167;4</a>), 27/is (<a href="27-is.html#SP31_8_1">&#167;31.8.1</a>).</p>
<p class="endnote">The function Kinds::RunTime::I6_classnumber is used in <a href="#SP24">&#167;24</a>, 16/ic (<a href="16-ic.html#SP6">&#167;6</a>, <a href="16-ic.html#SP10">&#167;10</a>).</p>
<p class="endnote">The function Kinds::RunTime::I6_classnumber is used in <a href="#SP23">&#167;23</a>, 16/ic (<a href="16-ic.html#SP6">&#167;6</a>, <a href="16-ic.html#SP10">&#167;10</a>).</p>
<p class="inwebparagraph"><a id="SP4"></a><b>&#167;4. Default values. </b>When we create a new variable (or other storage object) of a given kind, but
never say what its value is to be, Inform tries to initialise it to the
@ -185,7 +185,7 @@ chosen), but no problem message has been issued about this, or
<p class="endnote">The function Kinds::RunTime::emit_default_value is used in 19/rsft (<a href="19-rsft.html#SP1_1_1_1_1_5">&#167;1.1.1.1.1.5</a>).</p>
<p class="endnote">The function Kinds::RunTime::emit_default_value_as_val is used in <a href="#SP25_6_2">&#167;25.6.2</a>, 22/pav (<a href="22-pav.html#SP9_2">&#167;9.2</a>), 24/lv (<a href="24-lv.html#SP43">&#167;43</a>), 25/cii (<a href="25-cii.html#SP3_2_1">&#167;3.2.1</a>, <a href="25-cii.html#SP3_5_3">&#167;3.5.3</a>), 25/cp (<a href="25-cp.html#SP3_3_1">&#167;3.3.1</a>).</p>
<p class="endnote">The function Kinds::RunTime::emit_default_value_as_val is used in <a href="#SP24_6_2">&#167;24.6.2</a>, 22/pav (<a href="22-pav.html#SP9_2">&#167;9.2</a>), 24/lv (<a href="24-lv.html#SP43">&#167;43</a>), 25/cii (<a href="25-cii.html#SP3_2_1">&#167;3.2.1</a>, <a href="25-cii.html#SP3_5_3">&#167;3.5.3</a>), 25/cp (<a href="25-cp.html#SP3_3_1">&#167;3.3.1</a>).</p>
<p class="endnote">The function Kinds::RunTime::compile_default_value_vh is used in 5/nv (<a href="5-nv.html#SP25_1">&#167;25.1</a>), 15/vp (<a href="15-vp.html#SP11">&#167;11</a>).</p>
@ -534,7 +534,7 @@ like variables. That's what makes them intermediate.)
<p class="inwebparagraph"></p>
<p class="endnote">The function Kinds::RunTime::weak_id is used in <a href="#SP9">&#167;9</a>, <a href="#SP25">&#167;25</a>, <a href="#SP25_1">&#167;25.1</a>, 4/am (<a href="4-am.html#SP20">&#167;20</a>, <a href="4-am.html#SP29_1">&#167;29.1</a>, <a href="4-am.html#SP30">&#167;30</a>, <a href="4-am.html#SP34_2">&#167;34.2</a>).</p>
<p class="endnote">The function Kinds::RunTime::weak_id is used in <a href="#SP9">&#167;9</a>, <a href="#SP24">&#167;24</a>, <a href="#SP24_1">&#167;24.1</a>, 4/am (<a href="4-am.html#SP20">&#167;20</a>, <a href="4-am.html#SP29_1">&#167;29.1</a>, <a href="4-am.html#SP30">&#167;30</a>, <a href="4-am.html#SP34_2">&#167;34.2</a>).</p>
<p class="inwebparagraph"><a id="SP9"></a><b>&#167;9. </b>And the following compiles an easier-on-the-eye form of the weak ID, but
which might occupy up to 31 characters, the maximum length of an I6 identifier:
@ -572,7 +572,7 @@ which might occupy up to 31 characters, the maximum length of an I6 identifier:
<p class="endnote">The function Kinds::RunTime::emit_weak_id is used in <a href="#SP12">&#167;12</a>, <a href="#SP16_1">&#167;16.1</a>, <a href="#SP20">&#167;20</a>.</p>
<p class="endnote">The function Kinds::RunTime::emit_weak_id_as_val is used in <a href="#SP12">&#167;12</a>, <a href="#SP25_6_1">&#167;25.6.1</a>, <a href="#SP25_6_2">&#167;25.6.2</a>, <a href="#SP25_6_3">&#167;25.6.3</a>, <a href="#SP25_6_4">&#167;25.6.4</a>, <a href="#SP25_6_5">&#167;25.6.5</a>, <a href="#SP25_6_6">&#167;25.6.6</a>, 12/is (<a href="12-is.html#SP8">&#167;8</a>), 14/lv (<a href="14-lv.html#SP14_3">&#167;14.3</a>), 21/fao (<a href="21-fao.html#SP10">&#167;10</a>), 25/cii (<a href="25-cii.html#SP3_2_8">&#167;3.2.8</a>).</p>
<p class="endnote">The function Kinds::RunTime::emit_weak_id_as_val is used in <a href="#SP12">&#167;12</a>, <a href="#SP24_6_1">&#167;24.6.1</a>, <a href="#SP24_6_2">&#167;24.6.2</a>, <a href="#SP24_6_3">&#167;24.6.3</a>, <a href="#SP24_6_4">&#167;24.6.4</a>, <a href="#SP24_6_5">&#167;24.6.5</a>, <a href="#SP24_6_6">&#167;24.6.6</a>, 12/is (<a href="12-is.html#SP8">&#167;8</a>), 14/lv (<a href="14-lv.html#SP14_3">&#167;14.3</a>), 21/fao (<a href="21-fao.html#SP10">&#167;10</a>), 25/cii (<a href="25-cii.html#SP3_2_8">&#167;3.2.8</a>).</p>
<p class="inwebparagraph"><a id="SP10"></a><b>&#167;10. </b>The strong ID is a faithful representation of the <code class="display"><span class="extract">kind</span></code> structure,
so we don't need access to its value for comparison purposes; we just need
@ -791,7 +791,7 @@ values for kinds, since both involve tracking constructions uniquely.
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">K</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">kind_constructor</span><span class="plain"> *</span><span class="identifier">con</span><span class="plain"> = </span><span class="identifier">Kinds::get_construct</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">con</span><span class="plain">-&gt;</span><span class="identifier">kind_GPR_iname</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
<span class="reserved">package_request</span><span class="plain"> *</span><span class="identifier">R</span><span class="plain"> = </span><span class="functiontext">Kinds::RunTime::package</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">);</span>
<span class="reserved">package_request</span><span class="plain"> *</span><span class="identifier">R</span><span class="plain"> = </span><span class="identifier">Kinds::Behaviour::package</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">);</span>
<span class="identifier">con</span><span class="plain">-&gt;</span><span class="identifier">kind_GPR_iname</span><span class="plain"> = </span><span class="functiontext">Hierarchy::make_iname_in</span><span class="plain">(</span><span class="constant">GPR_FN_HL</span><span class="plain">, </span><span class="identifier">R</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">con</span><span class="plain">-&gt;</span><span class="identifier">kind_GPR_iname</span><span class="plain">;</span>
@ -801,7 +801,7 @@ values for kinds, since both involve tracking constructions uniquely.
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">K</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">kind_constructor</span><span class="plain"> *</span><span class="identifier">con</span><span class="plain"> = </span><span class="identifier">Kinds::get_construct</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">con</span><span class="plain">-&gt;</span><span class="identifier">instance_GPR_iname</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
<span class="reserved">package_request</span><span class="plain"> *</span><span class="identifier">R</span><span class="plain"> = </span><span class="functiontext">Kinds::RunTime::package</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">);</span>
<span class="reserved">package_request</span><span class="plain"> *</span><span class="identifier">R</span><span class="plain"> = </span><span class="identifier">Kinds::Behaviour::package</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">);</span>
<span class="identifier">con</span><span class="plain">-&gt;</span><span class="identifier">instance_GPR_iname</span><span class="plain"> = </span><span class="functiontext">Hierarchy::make_iname_in</span><span class="plain">(</span><span class="constant">INSTANCE_GPR_FN_HL</span><span class="plain">, </span><span class="identifier">R</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">con</span><span class="plain">-&gt;</span><span class="identifier">instance_GPR_iname</span><span class="plain">;</span>
@ -945,7 +945,6 @@ K, we have also seen its bases.
<pre class="displaydefn">
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">identifier</span><span class="plain"> = </span><span class="identifier">rks</span><span class="plain">-</span><span class="element">&gt;rks_dv_iname</span><span class="plain">;</span>
<span class="identifier">current_sentence</span><span class="plain"> = </span><span class="identifier">rks</span><span class="plain">-</span><span class="element">&gt;default_requested_here</span><span class="plain">;</span>
<span class="reserved">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="functiontext">Packaging::enter_home_of</span><span class="plain">(</span><span class="identifier">identifier</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Kinds::get_construct</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">) == </span><span class="identifier">CON_phrase</span><span class="plain">) {</span>
<span class="functiontext">Phrases::Constants::compile_default_closure</span><span class="plain">(</span><span class="identifier">identifier</span><span class="plain">, </span><span class="identifier">K</span><span class="plain">);</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Kinds::get_construct</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">) == </span><span class="identifier">CON_relation</span><span class="plain">) {</span>
@ -961,7 +960,6 @@ K, we have also seen its bases.
<span class="string">"for the kind '%2', but there's no obvious way to make one."</span><span class="plain">);</span>
<span class="identifier">Problems::issue_problem_end</span><span class="plain">();</span>
<span class="plain">}</span>
<span class="functiontext">Packaging::exit</span><span class="plain">(</span><span class="identifier">save</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
@ -1197,27 +1195,13 @@ each such kind, and needed at run-time.
<p class="inwebparagraph"></p>
<p class="endnote">The function Kinds::RunTime::base_represented_in_inter is used in <a href="#SP23">&#167;23</a>, <a href="#SP24">&#167;24</a>, <a href="#SP25">&#167;25</a>.</p>
<p class="endnote">The function Kinds::RunTime::base_represented_in_inter is used in <a href="#SP22">&#167;22</a>, <a href="#SP23">&#167;23</a>, <a href="#SP24">&#167;24</a>.</p>
<p class="endnote">The structure kind_interaction is private to this section.</p>
<p class="inwebparagraph"><a id="SP22"></a><b>&#167;22. </b></p>
<pre class="display">
<span class="reserved">package_request</span><span class="plain"> *</span><span class="functiontext">Kinds::RunTime::package</span><span class="plain">(</span><span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">K</span><span class="plain">) {</span>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain"> = </span><span class="functiontext">Kinds::RunTime::iname</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">Packaging::home_of</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function Kinds::RunTime::package is used in <a href="#SP15">&#167;15</a>, 15/epv (<a href="15-epv.html#SP2">&#167;2</a>), 22/pav (<a href="22-pav.html#SP9">&#167;9</a>), 27/ei (<a href="27-ei.html#SP3">&#167;3</a>).</p>
<p class="inwebparagraph"><a id="SP23"></a><b>&#167;23. </b></p>
<pre class="definitions">
<span class="definitionkeyword">define</span> <span class="constant">MAX_KIND_ARITY</span><span class="plain"> 32</span>
</pre>
@ -1239,13 +1223,13 @@ each such kind, and needed at run-time.
<span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">operands</span><span class="plain">[</span><span class="constant">MAX_KIND_ARITY</span><span class="plain">];</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">icon</span><span class="plain"> = -1;</span>
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">idt</span><span class="plain"> = </span><span class="identifier">ROUTINE_IDT</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Kinds::get_construct</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">) == </span><span class="identifier">CON_description</span><span class="plain">) </span>&lt;<span class="cwebmacro">Run out inter kind for description</span> <span class="cwebmacronumber">23.2</span>&gt;
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Kinds::get_construct</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">) == </span><span class="identifier">CON_list_of</span><span class="plain">) </span>&lt;<span class="cwebmacro">Run out inter kind for list</span> <span class="cwebmacronumber">23.1</span>&gt;
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Kinds::get_construct</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">) == </span><span class="identifier">CON_phrase</span><span class="plain">) </span>&lt;<span class="cwebmacro">Run out inter kind for phrase</span> <span class="cwebmacronumber">23.5</span>&gt;
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Kinds::get_construct</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">) == </span><span class="identifier">CON_rule</span><span class="plain">) </span>&lt;<span class="cwebmacro">Run out inter kind for rule</span> <span class="cwebmacronumber">23.6</span>&gt;
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Kinds::get_construct</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">) == </span><span class="identifier">CON_rulebook</span><span class="plain">) </span>&lt;<span class="cwebmacro">Run out inter kind for rulebook</span> <span class="cwebmacronumber">23.7</span>&gt;
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Kinds::get_construct</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">) == </span><span class="identifier">CON_table_column</span><span class="plain">) </span>&lt;<span class="cwebmacro">Run out inter kind for column</span> <span class="cwebmacronumber">23.3</span>&gt;
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Kinds::get_construct</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">) == </span><span class="identifier">CON_relation</span><span class="plain">) </span>&lt;<span class="cwebmacro">Run out inter kind for relation</span> <span class="cwebmacronumber">23.4</span>&gt;
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Kinds::get_construct</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">) == </span><span class="identifier">CON_description</span><span class="plain">) </span>&lt;<span class="cwebmacro">Run out inter kind for description</span> <span class="cwebmacronumber">22.2</span>&gt;
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Kinds::get_construct</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">) == </span><span class="identifier">CON_list_of</span><span class="plain">) </span>&lt;<span class="cwebmacro">Run out inter kind for list</span> <span class="cwebmacronumber">22.1</span>&gt;
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Kinds::get_construct</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">) == </span><span class="identifier">CON_phrase</span><span class="plain">) </span>&lt;<span class="cwebmacro">Run out inter kind for phrase</span> <span class="cwebmacronumber">22.5</span>&gt;
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Kinds::get_construct</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">) == </span><span class="identifier">CON_rule</span><span class="plain">) </span>&lt;<span class="cwebmacro">Run out inter kind for rule</span> <span class="cwebmacronumber">22.6</span>&gt;
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Kinds::get_construct</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">) == </span><span class="identifier">CON_rulebook</span><span class="plain">) </span>&lt;<span class="cwebmacro">Run out inter kind for rulebook</span> <span class="cwebmacronumber">22.7</span>&gt;
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Kinds::get_construct</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">) == </span><span class="identifier">CON_table_column</span><span class="plain">) </span>&lt;<span class="cwebmacro">Run out inter kind for column</span> <span class="cwebmacronumber">22.3</span>&gt;
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Kinds::get_construct</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">) == </span><span class="identifier">CON_relation</span><span class="plain">) </span>&lt;<span class="cwebmacro">Run out inter kind for relation</span> <span class="cwebmacronumber">22.4</span>&gt;
<span class="reserved">else</span><span class="plain"> {</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"Unfortunate kind is: $u\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">K</span><span class="plain">);</span>
<span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"unable to represent kind in inter"</span><span class="plain">);</span>
@ -1259,10 +1243,10 @@ each such kind, and needed at run-time.
<p class="inwebparagraph"></p>
<p class="endnote">The function Kinds::RunTime::iname is used in <a href="#SP3">&#167;3</a>, <a href="#SP22">&#167;22</a>, <a href="#SP25">&#167;25</a>, 15/epv (<a href="15-epv.html#SP1">&#167;1</a>), 16/ic (<a href="16-ic.html#SP10">&#167;10</a>), 27/ei (<a href="27-ei.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Kinds::RunTime::iname is used in <a href="#SP3">&#167;3</a>, <a href="#SP24">&#167;24</a>, 15/epv (<a href="15-epv.html#SP1">&#167;1</a>), 16/ic (<a href="16-ic.html#SP10">&#167;10</a>), 27/ei (<a href="27-ei.html#SP2">&#167;2</a>).</p>
<p class="inwebparagraph"><a id="SP23_1"></a><b>&#167;23.1. </b><code class="display">
&lt;<span class="cwebmacrodefn">Run out inter kind for list</span> <span class="cwebmacronumber">23.1</span>&gt; =
<p class="inwebparagraph"><a id="SP22_1"></a><b>&#167;22.1. </b><code class="display">
&lt;<span class="cwebmacrodefn">Run out inter kind for list</span> <span class="cwebmacronumber">22.1</span>&gt; =
</code></p>
@ -1275,10 +1259,10 @@ each such kind, and needed at run-time.
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP23">&#167;23</a>.</p>
<p class="endnote">This code is used in <a href="#SP22">&#167;22</a>.</p>
<p class="inwebparagraph"><a id="SP23_2"></a><b>&#167;23.2. </b><code class="display">
&lt;<span class="cwebmacrodefn">Run out inter kind for description</span> <span class="cwebmacronumber">23.2</span>&gt; =
<p class="inwebparagraph"><a id="SP22_2"></a><b>&#167;22.2. </b><code class="display">
&lt;<span class="cwebmacrodefn">Run out inter kind for description</span> <span class="cwebmacronumber">22.2</span>&gt; =
</code></p>
@ -1290,10 +1274,10 @@ each such kind, and needed at run-time.
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP23">&#167;23</a>.</p>
<p class="endnote">This code is used in <a href="#SP22">&#167;22</a>.</p>
<p class="inwebparagraph"><a id="SP23_3"></a><b>&#167;23.3. </b><code class="display">
&lt;<span class="cwebmacrodefn">Run out inter kind for column</span> <span class="cwebmacronumber">23.3</span>&gt; =
<p class="inwebparagraph"><a id="SP22_3"></a><b>&#167;22.3. </b><code class="display">
&lt;<span class="cwebmacrodefn">Run out inter kind for column</span> <span class="cwebmacronumber">22.3</span>&gt; =
</code></p>
@ -1305,10 +1289,10 @@ each such kind, and needed at run-time.
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP23">&#167;23</a>.</p>
<p class="endnote">This code is used in <a href="#SP22">&#167;22</a>.</p>
<p class="inwebparagraph"><a id="SP23_4"></a><b>&#167;23.4. </b><code class="display">
&lt;<span class="cwebmacrodefn">Run out inter kind for relation</span> <span class="cwebmacronumber">23.4</span>&gt; =
<p class="inwebparagraph"><a id="SP22_4"></a><b>&#167;22.4. </b><code class="display">
&lt;<span class="cwebmacrodefn">Run out inter kind for relation</span> <span class="cwebmacronumber">22.4</span>&gt; =
</code></p>
@ -1320,10 +1304,10 @@ each such kind, and needed at run-time.
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP23">&#167;23</a>.</p>
<p class="endnote">This code is used in <a href="#SP22">&#167;22</a>.</p>
<p class="inwebparagraph"><a id="SP23_5"></a><b>&#167;23.5. </b><code class="display">
&lt;<span class="cwebmacrodefn">Run out inter kind for phrase</span> <span class="cwebmacronumber">23.5</span>&gt; =
<p class="inwebparagraph"><a id="SP22_5"></a><b>&#167;22.5. </b><code class="display">
&lt;<span class="cwebmacrodefn">Run out inter kind for phrase</span> <span class="cwebmacronumber">22.5</span>&gt; =
</code></p>
@ -1344,10 +1328,10 @@ each such kind, and needed at run-time.
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP23">&#167;23</a>.</p>
<p class="endnote">This code is used in <a href="#SP22">&#167;22</a>.</p>
<p class="inwebparagraph"><a id="SP23_6"></a><b>&#167;23.6. </b><code class="display">
&lt;<span class="cwebmacrodefn">Run out inter kind for rule</span> <span class="cwebmacronumber">23.6</span>&gt; =
<p class="inwebparagraph"><a id="SP22_6"></a><b>&#167;22.6. </b><code class="display">
&lt;<span class="cwebmacrodefn">Run out inter kind for rule</span> <span class="cwebmacronumber">22.6</span>&gt; =
</code></p>
@ -1359,10 +1343,10 @@ each such kind, and needed at run-time.
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP23">&#167;23</a>.</p>
<p class="endnote">This code is used in <a href="#SP22">&#167;22</a>.</p>
<p class="inwebparagraph"><a id="SP23_7"></a><b>&#167;23.7. </b><code class="display">
&lt;<span class="cwebmacrodefn">Run out inter kind for rulebook</span> <span class="cwebmacronumber">23.7</span>&gt; =
<p class="inwebparagraph"><a id="SP22_7"></a><b>&#167;22.7. </b><code class="display">
&lt;<span class="cwebmacrodefn">Run out inter kind for rulebook</span> <span class="cwebmacronumber">22.7</span>&gt; =
</code></p>
@ -1376,9 +1360,9 @@ each such kind, and needed at run-time.
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP23">&#167;23</a>.</p>
<p class="endnote">This code is used in <a href="#SP22">&#167;22</a>.</p>
<p class="inwebparagraph"><a id="SP24"></a><b>&#167;24. </b></p>
<p class="inwebparagraph"><a id="SP23"></a><b>&#167;23. </b></p>
<pre class="display">
@ -1418,13 +1402,13 @@ each such kind, and needed at run-time.
<p class="inwebparagraph"></p>
<p class="endnote">The function Kinds::RunTime::iname_inner is used in <a href="#SP23">&#167;23</a>.</p>
<p class="endnote">The function Kinds::RunTime::iname_inner is used in <a href="#SP22">&#167;22</a>.</p>
<p class="endnote">The function Kinds::RunTime::assure_iname_exists is used in 5/un (<a href="5-un.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Kinds::RunTime::constructed_kind_name appears nowhere else.</p>
<p class="inwebparagraph"><a id="SP25"></a><b>&#167;25. </b></p>
<p class="inwebparagraph"><a id="SP24"></a><b>&#167;24. </b></p>
<pre class="display">
@ -1498,9 +1482,9 @@ each such kind, and needed at run-time.
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Kinds::Behaviour::stored_as</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">) == </span><span class="identifier">NULL</span><span class="plain">)</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Kinds::Behaviour::is_an_enumeration</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">)) {</span>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">printing_rule_name</span><span class="plain"> = </span><span class="identifier">Kinds::Behaviour::get_iname</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">);</span>
&lt;<span class="cwebmacro">Compile I6 printing routine for an enumerated kind</span> <span class="cwebmacronumber">25.3</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Compile the A and B routines for an enumerated kind</span> <span class="cwebmacronumber">25.4</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Compile random-ranger routine for this kind</span> <span class="cwebmacronumber">25.5</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Compile I6 printing routine for an enumerated kind</span> <span class="cwebmacronumber">24.3</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Compile the A and B routines for an enumerated kind</span> <span class="cwebmacronumber">24.4</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Compile random-ranger routine for this kind</span> <span class="cwebmacronumber">24.5</span>&gt;<span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="identifier">LOOP_OVER_BASE_KINDS</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">) {</span>
@ -1510,15 +1494,15 @@ each such kind, and needed at run-time.
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Kinds::Behaviour::stored_as</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">) == </span><span class="identifier">NULL</span><span class="plain">) {</span>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">printing_rule_name</span><span class="plain"> = </span><span class="identifier">Kinds::Behaviour::get_iname</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Kinds::Behaviour::is_quasinumerical</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">)) {</span>
&lt;<span class="cwebmacro">Compile I6 printing routine for a unit kind</span> <span class="cwebmacronumber">25.2</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Compile random-ranger routine for this kind</span> <span class="cwebmacronumber">25.5</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Compile I6 printing routine for a unit kind</span> <span class="cwebmacronumber">24.2</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Compile random-ranger routine for this kind</span> <span class="cwebmacronumber">24.5</span>&gt;<span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
&lt;<span class="cwebmacro">Compile I6 printing routine for a vacant but named kind</span> <span class="cwebmacronumber">25.1</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Compile I6 printing routine for a vacant but named kind</span> <span class="cwebmacronumber">24.1</span>&gt;<span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="plain">}</span>
&lt;<span class="cwebmacro">Compile a suite of I6 routines taking kind IDs as arguments</span> <span class="cwebmacronumber">25.6</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Compile a suite of I6 routines taking kind IDs as arguments</span> <span class="cwebmacronumber">24.6</span>&gt;<span class="plain">;</span>
<span class="plain">}</span>
</pre>
@ -1534,7 +1518,7 @@ each such kind, and needed at run-time.
<p class="endnote">The function Kinds::RunTime::compile_data_type_support_routines is used in 1/mr (<a href="1-mr.html#SP4_14">&#167;4.14</a>).</p>
<p class="inwebparagraph"><a id="SP25_1"></a><b>&#167;25.1. </b>A slightly bogus case first. If the source text declares a kind but never
<p class="inwebparagraph"><a id="SP24_1"></a><b>&#167;24.1. </b>A slightly bogus case first. If the source text declares a kind but never
gives any enumerated values or literal patterns, then such values will never
appear at run-time; but we need the printing routine to exist to avoid
compilation errors.
@ -1542,7 +1526,7 @@ compilation errors.
<p class="macrodefinition"><code class="display">
&lt;<span class="cwebmacrodefn">Compile I6 printing routine for a vacant but named kind</span> <span class="cwebmacronumber">25.1</span>&gt; =
&lt;<span class="cwebmacrodefn">Compile I6 printing routine for a vacant but named kind</span> <span class="cwebmacronumber">24.1</span>&gt; =
</code></p>
@ -1562,16 +1546,16 @@ compilation errors.
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP25">&#167;25</a>.</p>
<p class="endnote">This code is used in <a href="#SP24">&#167;24</a>.</p>
<p class="inwebparagraph"><a id="SP25_2"></a><b>&#167;25.2. </b>A unit is printed back with its earliest-defined literal pattern used as
<p class="inwebparagraph"><a id="SP24_2"></a><b>&#167;24.2. </b>A unit is printed back with its earliest-defined literal pattern used as
notation. If it had no literal patterns, it would come out as decimal numbers,
but at present this can't happen.
</p>
<p class="macrodefinition"><code class="display">
&lt;<span class="cwebmacrodefn">Compile I6 printing routine for a unit kind</span> <span class="cwebmacronumber">25.2</span>&gt; =
&lt;<span class="cwebmacrodefn">Compile I6 printing routine for a unit kind</span> <span class="cwebmacronumber">24.2</span>&gt; =
</code></p>
@ -1592,10 +1576,10 @@ but at present this can't happen.
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP25">&#167;25</a>.</p>
<p class="endnote">This code is used in <a href="#SP24">&#167;24</a>.</p>
<p class="inwebparagraph"><a id="SP25_3"></a><b>&#167;25.3. </b><code class="display">
&lt;<span class="cwebmacrodefn">Compile I6 printing routine for an enumerated kind</span> <span class="cwebmacronumber">25.3</span>&gt; =
<p class="inwebparagraph"><a id="SP24_3"></a><b>&#167;24.3. </b><code class="display">
&lt;<span class="cwebmacrodefn">Compile I6 printing routine for an enumerated kind</span> <span class="cwebmacronumber">24.3</span>&gt; =
</code></p>
@ -1654,9 +1638,9 @@ but at present this can't happen.
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP25">&#167;25</a>.</p>
<p class="endnote">This code is used in <a href="#SP24">&#167;24</a>.</p>
<p class="inwebparagraph"><a id="SP25_4"></a><b>&#167;25.4. </b>The suite of standard routines provided for enumerative types is a little
<p class="inwebparagraph"><a id="SP24_4"></a><b>&#167;24.4. </b>The suite of standard routines provided for enumerative types is a little
like the one in Ada (<code class="display"><span class="extract">T'Succ</span></code>, <code class="display"><span class="extract">T'Pred</span></code>, and so on).
</p>
@ -1673,7 +1657,7 @@ to <code class="display"><span class="extract">A_T1_colour(v)</span></code>.
</li></ul>
<p class="macrodefinition"><code class="display">
&lt;<span class="cwebmacrodefn">Compile the A and B routines for an enumerated kind</span> <span class="cwebmacronumber">25.4</span>&gt; =
&lt;<span class="cwebmacrodefn">Compile the A and B routines for an enumerated kind</span> <span class="cwebmacronumber">24.4</span>&gt; =
</code></p>
@ -1684,26 +1668,26 @@ to <code class="display"><span class="extract">A_T1_colour(v)</span></code>.
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname_i</span><span class="plain"> = </span><span class="identifier">Kinds::Behaviour::get_inc_iname</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">);</span>
<span class="reserved">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="functiontext">Routines::begin</span><span class="plain">(</span><span class="identifier">iname_i</span><span class="plain">);</span>
&lt;<span class="cwebmacro">Implement the A routine</span> <span class="cwebmacronumber">25.4.1</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Implement the A routine</span> <span class="cwebmacronumber">24.4.1</span>&gt;<span class="plain">;</span>
<span class="functiontext">Routines::end</span><span class="plain">(</span><span class="identifier">save</span><span class="plain">);</span>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname_d</span><span class="plain"> = </span><span class="identifier">Kinds::Behaviour::get_dec_iname</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">);</span>
<span class="identifier">save</span><span class="plain"> = </span><span class="functiontext">Routines::begin</span><span class="plain">(</span><span class="identifier">iname_d</span><span class="plain">);</span>
&lt;<span class="cwebmacro">Implement the B routine</span> <span class="cwebmacronumber">25.4.2</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Implement the B routine</span> <span class="cwebmacronumber">24.4.2</span>&gt;<span class="plain">;</span>
<span class="functiontext">Routines::end</span><span class="plain">(</span><span class="identifier">save</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP25">&#167;25</a>.</p>
<p class="endnote">This code is used in <a href="#SP24">&#167;24</a>.</p>
<p class="inwebparagraph"><a id="SP25_4_1"></a><b>&#167;25.4.1. </b>There should be a blue historical plaque on the wall here: this was the
<p class="inwebparagraph"><a id="SP24_4_1"></a><b>&#167;24.4.1. </b>There should be a blue historical plaque on the wall here: this was the
first routine implemented by emitting Inter code, on 12 November 2017.
</p>
<p class="macrodefinition"><code class="display">
&lt;<span class="cwebmacrodefn">Implement the A routine</span> <span class="cwebmacronumber">25.4.1</span>&gt; =
&lt;<span class="cwebmacrodefn">Implement the A routine</span> <span class="cwebmacronumber">24.4.1</span>&gt; =
</code></p>
@ -1738,14 +1722,14 @@ first routine implemented by emitting Inter code, on 12 November 2017.
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP25_4">&#167;25.4</a>.</p>
<p class="endnote">This code is used in <a href="#SP24_4">&#167;24.4</a>.</p>
<p class="inwebparagraph"><a id="SP25_4_2"></a><b>&#167;25.4.2. </b>And this was the second, a few minutes later.
<p class="inwebparagraph"><a id="SP24_4_2"></a><b>&#167;24.4.2. </b>And this was the second, a few minutes later.
</p>
<p class="macrodefinition"><code class="display">
&lt;<span class="cwebmacrodefn">Implement the B routine</span> <span class="cwebmacronumber">25.4.2</span>&gt; =
&lt;<span class="cwebmacrodefn">Implement the B routine</span> <span class="cwebmacronumber">24.4.2</span>&gt; =
</code></p>
@ -1793,9 +1777,9 @@ first routine implemented by emitting Inter code, on 12 November 2017.
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP25_4">&#167;25.4</a>.</p>
<p class="endnote">This code is used in <a href="#SP24_4">&#167;24.4</a>.</p>
<p class="inwebparagraph"><a id="SP25_5"></a><b>&#167;25.5. </b>And here we add:
<p class="inwebparagraph"><a id="SP24_5"></a><b>&#167;24.5. </b>And here we add:
</p>
<p class="inwebparagraph"></p>
@ -1808,7 +1792,7 @@ and <code class="display"><span class="extract">b</span></code> inclusive.
</li></ul>
<p class="macrodefinition"><code class="display">
&lt;<span class="cwebmacrodefn">Compile random-ranger routine for this kind</span> <span class="cwebmacronumber">25.5</span>&gt; =
&lt;<span class="cwebmacrodefn">Compile random-ranger routine for this kind</span> <span class="cwebmacronumber">24.5</span>&gt; =
</code></p>
@ -1878,7 +1862,7 @@ and <code class="display"><span class="extract">b</span></code> inclusive.
<span class="functiontext">Emit::inv_primitive</span><span class="plain">(</span><span class="identifier">return_interp</span><span class="plain">);</span>
<span class="functiontext">Emit::down</span><span class="plain">();</span>
<span class="identifier">smaller</span><span class="plain"> = </span><span class="identifier">b_s</span><span class="plain">; </span><span class="identifier">larger</span><span class="plain"> = </span><span class="identifier">a_s</span><span class="plain">;</span>
&lt;<span class="cwebmacro">Formula for range</span> <span class="cwebmacronumber">25.5.1</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Formula for range</span> <span class="cwebmacronumber">24.5.1</span>&gt;<span class="plain">;</span>
<span class="functiontext">Emit::up</span><span class="plain">();</span>
<span class="functiontext">Emit::up</span><span class="plain">();</span>
<span class="functiontext">Emit::up</span><span class="plain">();</span>
@ -1886,7 +1870,7 @@ and <code class="display"><span class="extract">b</span></code> inclusive.
<span class="functiontext">Emit::inv_primitive</span><span class="plain">(</span><span class="identifier">return_interp</span><span class="plain">);</span>
<span class="functiontext">Emit::down</span><span class="plain">();</span>
<span class="identifier">smaller</span><span class="plain"> = </span><span class="identifier">a_s</span><span class="plain">; </span><span class="identifier">larger</span><span class="plain"> = </span><span class="identifier">b_s</span><span class="plain">;</span>
&lt;<span class="cwebmacro">Formula for range</span> <span class="cwebmacronumber">25.5.1</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Formula for range</span> <span class="cwebmacronumber">24.5.1</span>&gt;<span class="plain">;</span>
<span class="functiontext">Emit::up</span><span class="plain">();</span>
<span class="functiontext">Routines::end</span><span class="plain">(</span><span class="identifier">save</span><span class="plain">);</span>
@ -1894,10 +1878,10 @@ and <code class="display"><span class="extract">b</span></code> inclusive.
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP25">&#167;25</a> (twice).</p>
<p class="endnote">This code is used in <a href="#SP24">&#167;24</a> (twice).</p>
<p class="inwebparagraph"><a id="SP25_5_1"></a><b>&#167;25.5.1. </b><code class="display">
&lt;<span class="cwebmacrodefn">Formula for range</span> <span class="cwebmacronumber">25.5.1</span>&gt; =
<p class="inwebparagraph"><a id="SP24_5_1"></a><b>&#167;24.5.1. </b><code class="display">
&lt;<span class="cwebmacrodefn">Formula for range</span> <span class="cwebmacronumber">24.5.1</span>&gt; =
</code></p>
@ -1926,39 +1910,39 @@ and <code class="display"><span class="extract">b</span></code> inclusive.
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP25_5">&#167;25.5</a> (twice).</p>
<p class="endnote">This code is used in <a href="#SP24_5">&#167;24.5</a> (twice).</p>
<p class="inwebparagraph"><a id="SP25_6"></a><b>&#167;25.6. Further runtime support. </b>These last routines are synoptic: they take the ID number of the kind as an
<p class="inwebparagraph"><a id="SP24_6"></a><b>&#167;24.6. Further runtime support. </b>These last routines are synoptic: they take the ID number of the kind as an
argument, so there is only one of each routine.
</p>
<p class="macrodefinition"><code class="display">
&lt;<span class="cwebmacrodefn">Compile a suite of I6 routines taking kind IDs as arguments</span> <span class="cwebmacronumber">25.6</span>&gt; =
&lt;<span class="cwebmacrodefn">Compile a suite of I6 routines taking kind IDs as arguments</span> <span class="cwebmacronumber">24.6</span>&gt; =
</code></p>
<pre class="displaydefn">
&lt;<span class="cwebmacro">Compile PrintKindValuePair</span> <span class="cwebmacronumber">25.6.1</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Compile DefaultValueOfKOV</span> <span class="cwebmacronumber">25.6.2</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Compile KOVComparisonFunction</span> <span class="cwebmacronumber">25.6.3</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Compile KOVDomainSize</span> <span class="cwebmacronumber">25.6.4</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Compile KOVIsBlockValue</span> <span class="cwebmacronumber">25.6.5</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Compile KOVSupportFunction</span> <span class="cwebmacronumber">25.6.6</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Compile PrintKindValuePair</span> <span class="cwebmacronumber">24.6.1</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Compile DefaultValueOfKOV</span> <span class="cwebmacronumber">24.6.2</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Compile KOVComparisonFunction</span> <span class="cwebmacronumber">24.6.3</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Compile KOVDomainSize</span> <span class="cwebmacronumber">24.6.4</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Compile KOVIsBlockValue</span> <span class="cwebmacronumber">24.6.5</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Compile KOVSupportFunction</span> <span class="cwebmacronumber">24.6.6</span>&gt;<span class="plain">;</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP25">&#167;25</a>.</p>
<p class="endnote">This code is used in <a href="#SP24">&#167;24</a>.</p>
<p class="inwebparagraph"><a id="SP25_6_1"></a><b>&#167;25.6.1. </b><code class="display"><span class="extract">PrintKindValuePair(K, V)</span></code> prints out the value <code class="display"><span class="extract">V</span></code>, declaring its kind to
<p class="inwebparagraph"><a id="SP24_6_1"></a><b>&#167;24.6.1. </b><code class="display"><span class="extract">PrintKindValuePair(K, V)</span></code> prints out the value <code class="display"><span class="extract">V</span></code>, declaring its kind to
be <code class="display"><span class="extract">K</span></code>. (Since I6 is typeless and in general the kind of <code class="display"><span class="extract">V</span></code> cannot be
deduced from its value alone, <code class="display"><span class="extract">K</span></code> must explicitly be supplied.)
</p>
<p class="macrodefinition"><code class="display">
&lt;<span class="cwebmacrodefn">Compile PrintKindValuePair</span> <span class="cwebmacronumber">25.6.1</span>&gt; =
&lt;<span class="cwebmacrodefn">Compile PrintKindValuePair</span> <span class="cwebmacronumber">24.6.1</span>&gt; =
</code></p>
@ -2016,16 +2000,16 @@ deduced from its value alone, <code class="display"><span class="extract">K</spa
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP25_6">&#167;25.6</a>.</p>
<p class="endnote">This code is used in <a href="#SP24_6">&#167;24.6</a>.</p>
<p class="inwebparagraph"><a id="SP25_6_2"></a><b>&#167;25.6.2. </b><code class="display"><span class="extract">DefaultValueOfKOV(K)</span></code> returns the default value for kind <code class="display"><span class="extract">K</span></code>: it's needed,
<p class="inwebparagraph"><a id="SP24_6_2"></a><b>&#167;24.6.2. </b><code class="display"><span class="extract">DefaultValueOfKOV(K)</span></code> returns the default value for kind <code class="display"><span class="extract">K</span></code>: it's needed,
for instance, when increasing the size of a list of K to include new entries,
which have to be given some type-safe value to start out at.
</p>
<p class="macrodefinition"><code class="display">
&lt;<span class="cwebmacrodefn">Compile DefaultValueOfKOV</span> <span class="cwebmacronumber">25.6.2</span>&gt; =
&lt;<span class="cwebmacrodefn">Compile DefaultValueOfKOV</span> <span class="cwebmacronumber">24.6.2</span>&gt; =
</code></p>
@ -2093,9 +2077,9 @@ which have to be given some type-safe value to start out at.
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP25_6">&#167;25.6</a>.</p>
<p class="endnote">This code is used in <a href="#SP24_6">&#167;24.6</a>.</p>
<p class="inwebparagraph"><a id="SP25_6_3"></a><b>&#167;25.6.3. </b><code class="display"><span class="extract">KOVComparisonFunction(K)</span></code> returns either the address of a function to
<p class="inwebparagraph"><a id="SP24_6_3"></a><b>&#167;24.6.3. </b><code class="display"><span class="extract">KOVComparisonFunction(K)</span></code> returns either the address of a function to
perform a comparison between two values, or else 0 to signal that no
special sort of comparison is needed. (In which case signed numerical
comparison will be used.) The function <code class="display"><span class="extract">F</span></code> may be used in a sorting algorithm,
@ -2106,7 +2090,7 @@ unless the two values are genuinely equal.
<p class="macrodefinition"><code class="display">
&lt;<span class="cwebmacrodefn">Compile KOVComparisonFunction</span> <span class="cwebmacronumber">25.6.3</span>&gt; =
&lt;<span class="cwebmacrodefn">Compile KOVComparisonFunction</span> <span class="cwebmacronumber">24.6.3</span>&gt; =
</code></p>
@ -2168,10 +2152,10 @@ unless the two values are genuinely equal.
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP25_6">&#167;25.6</a>.</p>
<p class="endnote">This code is used in <a href="#SP24_6">&#167;24.6</a>.</p>
<p class="inwebparagraph"><a id="SP25_6_4"></a><b>&#167;25.6.4. </b><code class="display">
&lt;<span class="cwebmacrodefn">Compile KOVDomainSize</span> <span class="cwebmacronumber">25.6.4</span>&gt; =
<p class="inwebparagraph"><a id="SP24_6_4"></a><b>&#167;24.6.4. </b><code class="display">
&lt;<span class="cwebmacrodefn">Compile KOVDomainSize</span> <span class="cwebmacronumber">24.6.4</span>&gt; =
</code></p>
@ -2231,15 +2215,15 @@ unless the two values are genuinely equal.
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP25_6">&#167;25.6</a>.</p>
<p class="endnote">This code is used in <a href="#SP24_6">&#167;24.6</a>.</p>
<p class="inwebparagraph"><a id="SP25_6_5"></a><b>&#167;25.6.5. </b><code class="display"><span class="extract">KOVIsBlockValue(K)</span></code> is true if and only if <code class="display"><span class="extract">K</span></code> is the I6 ID of a kind
<p class="inwebparagraph"><a id="SP24_6_5"></a><b>&#167;24.6.5. </b><code class="display"><span class="extract">KOVIsBlockValue(K)</span></code> is true if and only if <code class="display"><span class="extract">K</span></code> is the I6 ID of a kind
storing pointers to blocks on the heap.
</p>
<p class="macrodefinition"><code class="display">
&lt;<span class="cwebmacrodefn">Compile KOVIsBlockValue</span> <span class="cwebmacronumber">25.6.5</span>&gt; =
&lt;<span class="cwebmacrodefn">Compile KOVIsBlockValue</span> <span class="cwebmacronumber">24.6.5</span>&gt; =
</code></p>
@ -2282,16 +2266,16 @@ storing pointers to blocks on the heap.
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP25_6">&#167;25.6</a>.</p>
<p class="endnote">This code is used in <a href="#SP24_6">&#167;24.6</a>.</p>
<p class="inwebparagraph"><a id="SP25_6_6"></a><b>&#167;25.6.6. </b><code class="display"><span class="extract">KOVSupportFunction(K)</span></code> returns the address of the specific support function
<p class="inwebparagraph"><a id="SP24_6_6"></a><b>&#167;24.6.6. </b><code class="display"><span class="extract">KOVSupportFunction(K)</span></code> returns the address of the specific support function
for a pointer-value kind <code class="display"><span class="extract">K</span></code>, or returns 0 if <code class="display"><span class="extract">K</span></code> is not such a kind. For what
such a function does, see "BlockValues.i6t".
</p>
<p class="macrodefinition"><code class="display">
&lt;<span class="cwebmacrodefn">Compile KOVSupportFunction</span> <span class="cwebmacronumber">25.6.6</span>&gt; =
&lt;<span class="cwebmacrodefn">Compile KOVSupportFunction</span> <span class="cwebmacronumber">24.6.6</span>&gt; =
</code></p>
@ -2353,9 +2337,9 @@ such a function does, see "BlockValues.i6t".
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP25_6">&#167;25.6</a>.</p>
<p class="endnote">This code is used in <a href="#SP24_6">&#167;24.6</a>.</p>
<p class="inwebparagraph"><a id="SP26"></a><b>&#167;26. </b>Code for printing names of kinds at run-time. This needn't run quickly, and
<p class="inwebparagraph"><a id="SP25"></a><b>&#167;25. </b>Code for printing names of kinds at run-time. This needn't run quickly, and
making it a routine rather than using an array saves a few bytes of precious
Z-machine array space.
</p>
@ -2395,7 +2379,7 @@ Z-machine array space.
<p class="endnote">The function Kinds::RunTime::I7_Kind_Name_routine is used in 1/mr (<a href="1-mr.html#SP4_14">&#167;4.14</a>).</p>
<p class="inwebparagraph"><a id="SP27"></a><b>&#167;27. </b></p>
<p class="inwebparagraph"><a id="SP26"></a><b>&#167;26. </b></p>
<pre class="display">

View file

@ -51,7 +51,7 @@
<p class="inwebparagraph"></p>
<p class="endnote">The function Holsters::new is used in 5/nv (<a href="5-nv.html#SP16">&#167;16</a>, <a href="5-nv.html#SP25">&#167;25</a>), 12/is (<a href="12-is.html#SP7">&#167;7</a>), 12/ca (<a href="12-ca.html#SP5">&#167;5</a>), 12/dtd (<a href="12-dtd.html#SP7">&#167;7</a>), 13/rsfk (<a href="13-rsfk.html#SP4">&#167;4</a>), 14/cfs (<a href="14-cfs.html#SP9">&#167;9</a>), 15/epv (<a href="15-epv.html#SP2">&#167;2</a>), 24/pb (<a href="24-pb.html#SP14">&#167;14</a>), 25/ci (<a href="25-ci.html#SP3_1_1">&#167;3.1.1</a>, <a href="25-ci.html#SP3_2_3_3_1_3">&#167;3.2.3.3.1.3</a>), 25/cp (<a href="25-cp.html#SP6">&#167;6</a>), 26/iti (<a href="26-iti.html#SP9">&#167;9</a>), 27/is (<a href="27-is.html#SP31_1">&#167;31.1</a>).</p>
<p class="endnote">The function Holsters::new is used in 5/nv (<a href="5-nv.html#SP25">&#167;25</a>), 12/is (<a href="12-is.html#SP7">&#167;7</a>), 12/ca (<a href="12-ca.html#SP5">&#167;5</a>), 12/dtd (<a href="12-dtd.html#SP7">&#167;7</a>), 13/rsfk (<a href="13-rsfk.html#SP4">&#167;4</a>), 14/cfs (<a href="14-cfs.html#SP9">&#167;9</a>), 15/epv (<a href="15-epv.html#SP2">&#167;2</a>), 24/pb (<a href="24-pb.html#SP14">&#167;14</a>), 25/ci (<a href="25-ci.html#SP3_1_1">&#167;3.1.1</a>, <a href="25-ci.html#SP3_2_3_3_1_3">&#167;3.2.3.3.1.3</a>), 25/cp (<a href="25-cp.html#SP6">&#167;6</a>), 26/iti (<a href="26-iti.html#SP9">&#167;9</a>), 27/is (<a href="27-is.html#SP31_1">&#167;31.1</a>), 27/ei (<a href="27-ei.html#SP5">&#167;5</a>).</p>
<p class="inwebparagraph"><a id="SP3"></a><b>&#167;3. Conversions. </b></p>
@ -114,7 +114,7 @@
<p class="endnote">The function Holsters::holster_pair is used in 5/nv (<a href="5-nv.html#SP25_1">&#167;25.1</a>), 13/rsfk (<a href="13-rsfk.html#SP4">&#167;4</a>), 14/rv (<a href="14-rv.html#SP24_1">&#167;24.1</a>, <a href="14-rv.html#SP24_3">&#167;24.3</a>), 15/ep (<a href="15-ep.html#SP11">&#167;11</a>), 15/vp (<a href="15-vp.html#SP11">&#167;11</a>), 17/rs (<a href="17-rs.html#SP12">&#167;12</a>), 27/ei (<a href="27-ei.html#SP5">&#167;5</a>).</p>
<p class="endnote">The function Holsters::unholster_pair is used in 5/nv (<a href="5-nv.html#SP16">&#167;16</a>, <a href="5-nv.html#SP25">&#167;25</a>), 13/rsfk (<a href="13-rsfk.html#SP4">&#167;4</a>), 14/cfs (<a href="14-cfs.html#SP9">&#167;9</a>), 15/epv (<a href="15-epv.html#SP2_1">&#167;2.1</a>), 26/iti (<a href="26-iti.html#SP9">&#167;9</a>).</p>
<p class="endnote">The function Holsters::unholster_pair is used in 5/nv (<a href="5-nv.html#SP25">&#167;25</a>), 13/rsfk (<a href="13-rsfk.html#SP4">&#167;4</a>), 14/cfs (<a href="14-cfs.html#SP9">&#167;9</a>), 15/epv (<a href="15-epv.html#SP2_1">&#167;2.1</a>), 26/iti (<a href="26-iti.html#SP9">&#167;9</a>), 27/ei (<a href="27-ei.html#SP5">&#167;5</a>).</p>
<hr class="tocbar">
<ul class="toc"><li><i>(This section begins Chapter 14: Specifications.)</i></li><li><a href="14-sp.html">Continue with 'Specifications'</a></li></ul><hr class="tocbar">

View file

@ -110,7 +110,7 @@ relies on adjectival meanings.
<span class="reserved">property</span><span class="plain"> *</span><span class="functiontext">Properties::EitherOr::new_nameless</span><span class="plain">(</span><span class="identifier">wchar_t</span><span class="plain"> *</span><span class="identifier">I6_form</span><span class="plain">) {</span>
<span class="identifier">wording</span><span class="plain"> </span><span class="identifier">W</span><span class="plain"> = </span><span class="identifier">Feeds::feed_text</span><span class="plain">(</span><span class="identifier">I6_form</span><span class="plain">);</span>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain"> = </span><span class="functiontext">Hierarchy::make_iname_with_memo</span><span class="plain">(</span><span class="constant">PROPERTY_HL</span><span class="plain">, </span><span class="functiontext">Hierarchy::template</span><span class="plain">(), </span><span class="identifier">W</span><span class="plain">);</span>
<span class="reserved">property</span><span class="plain"> *</span><span class="identifier">prn</span><span class="plain"> = </span><span class="functiontext">Properties::create</span><span class="plain">(</span><span class="identifier">EMPTY_WORDING</span><span class="plain">, </span><span class="identifier">iname</span><span class="plain">);</span>
<span class="reserved">property</span><span class="plain"> *</span><span class="identifier">prn</span><span class="plain"> = </span><span class="functiontext">Properties::create</span><span class="plain">(</span><span class="identifier">EMPTY_WORDING</span><span class="plain">, </span><span class="functiontext">Hierarchy::template</span><span class="plain">(), </span><span class="identifier">iname</span><span class="plain">);</span>
<span class="identifier">prn</span><span class="plain">-</span><span class="element">&gt;either_or</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="functiontext">Properties::exclude_from_index</span><span class="plain">(</span><span class="identifier">prn</span><span class="plain">);</span>
<span class="functiontext">Properties::set_translation</span><span class="plain">(</span><span class="identifier">prn</span><span class="plain">, </span><span class="identifier">I6_form</span><span class="plain">);</span>

View file

@ -192,7 +192,7 @@ value the property will have, and compiles a clause as appropriate.
<span class="reserved">instance</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain"> = </span><span class="functiontext">InferenceSubjects::as_instance</span><span class="plain">(</span><span class="identifier">know</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">I</span><span class="plain">) </span><span class="identifier">R</span><span class="plain"> = </span><span class="functiontext">Instances::package</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">);</span>
<span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">K</span><span class="plain"> = </span><span class="functiontext">InferenceSubjects::as_kind</span><span class="plain">(</span><span class="identifier">know</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">K</span><span class="plain">) </span><span class="identifier">R</span><span class="plain"> = </span><span class="functiontext">Kinds::RunTime::package</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">K</span><span class="plain">) </span><span class="identifier">R</span><span class="plain"> = </span><span class="identifier">Kinds::Behaviour::package</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">);</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">storage_cost</span><span class="plain"> = 0;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="functiontext">Properties::visited_in_traverse</span><span class="plain">(</span><span class="identifier">prn</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">) &amp;&amp;</span>
<span class="plain">(</span><span class="functiontext">Properties::can_be_compiled</span><span class="plain">(</span><span class="identifier">prn</span><span class="plain">))) {</span>

View file

@ -49,6 +49,7 @@ a value with the owner; it isn't that either/or properties are unloved.)
<span class="comment">runtime implementation</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">metadata_table_offset</span><span class="plain">; </span> <span class="comment">position in the <code class="display"><span class="extract">property_metadata</span></code> word array at run-time</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">package_request</span><span class="plain"> *</span><span class="identifier">prop_package</span><span class="plain">; </span> <span class="comment">where to find:</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">prop_iname</span><span class="plain">; </span> <span class="comment">the identifier we would like to use at run-time for this property</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">translated</span><span class="plain">; </span> <span class="comment">has this been given an explicit translation?</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">prn_emitted</span><span class="plain">; </span> <span class="comment">has this been emitted to Inter yet?</span>
@ -115,7 +116,7 @@ either/or property where a valued property is wanted, or vice versa.
<span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">p</span><span class="plain"> = </span><span class="identifier">ExParser::parse_excerpt</span><span class="plain">(</span><span class="constant">PROPERTY_MC</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">);</span>
<span class="reserved">property</span><span class="plain"> *</span><span class="identifier">prn</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">p</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
<span class="identifier">prn</span><span class="plain"> = </span><span class="functiontext">Properties::create</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="identifier">prn</span><span class="plain"> = </span><span class="functiontext">Properties::create</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">valued</span><span class="plain">) {</span>
<span class="functiontext">Properties::Valued::make_setting_relation</span><span class="plain">(</span><span class="identifier">prn</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">);</span>
<span class="identifier">prn</span><span class="plain">-</span><span class="element">&gt;either_or</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
@ -142,7 +143,7 @@ either/or property where a valued property is wanted, or vice versa.
<pre class="display">
<span class="reserved">property</span><span class="plain"> *</span><span class="functiontext">Properties::create</span><span class="plain">(</span><span class="identifier">wording</span><span class="plain"> </span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">using_iname</span><span class="plain">) {</span>
<span class="reserved">property</span><span class="plain"> *</span><span class="functiontext">Properties::create</span><span class="plain">(</span><span class="identifier">wording</span><span class="plain"> </span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">package_request</span><span class="plain"> *</span><span class="identifier">using_package</span><span class="plain">, </span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">using_iname</span><span class="plain">) {</span>
<span class="identifier">W</span><span class="plain"> = </span><span class="identifier">Articles::remove_article</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">);</span>
&lt;<span class="cwebmacro">Ensure that the new property name is one we can live with</span> <span class="cwebmacronumber">5.1</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">See if the property name already has a meaning, which may or may not be okay</span> <span class="cwebmacronumber">5.2</span>&gt;<span class="plain">;</span>
@ -263,6 +264,7 @@ something.
<span class="identifier">prn</span><span class="plain">-</span><span class="element">&gt;ambiguous_name</span><span class="plain"> = &lt;</span><span class="identifier">name</span><span class="plain">-</span><span class="identifier">looking</span><span class="plain">-</span><span class="identifier">like</span><span class="plain">-</span><span class="reserved">property</span><span class="plain">-</span><span class="identifier">test</span><span class="plain">&gt;(</span><span class="identifier">W</span><span class="plain">);</span>
<span class="identifier">prn</span><span class="plain">-</span><span class="element">&gt;applicable_to</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">prn</span><span class="plain">-</span><span class="element">&gt;either_or</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="identifier">prn</span><span class="plain">-</span><span class="element">&gt;prop_package</span><span class="plain"> = </span><span class="identifier">using_package</span><span class="plain">;</span>
<span class="identifier">prn</span><span class="plain">-</span><span class="element">&gt;prop_iname</span><span class="plain"> = </span><span class="identifier">using_iname</span><span class="plain">;</span>
<span class="identifier">prn</span><span class="plain">-</span><span class="element">&gt;prn_emitted</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="identifier">prn</span><span class="plain">-</span><span class="element">&gt;translated</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
@ -975,12 +977,20 @@ we find it, we compile it and return <code class="display"><span class="extract"
<span class="reserved">if</span><span class="plain"> ((</span><span class="functiontext">Properties::is_either_or</span><span class="plain">(</span><span class="identifier">prn</span><span class="plain">)) &amp;&amp; (</span><span class="identifier">prn</span><span class="plain">-</span><span class="element">&gt;stored_in_negation</span><span class="plain">))</span>
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">Properties::iname</span><span class="plain">(</span><span class="functiontext">Properties::EitherOr::get_negation</span><span class="plain">(</span><span class="identifier">prn</span><span class="plain">));</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">prn</span><span class="plain">-</span><span class="element">&gt;prop_iname</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
<span class="reserved">package_request</span><span class="plain"> *</span><span class="identifier">R</span><span class="plain"> = </span><span class="functiontext">Hierarchy::package</span><span class="plain">(</span><span class="identifier">prn</span><span class="plain">-</span><span class="element">&gt;owning_module</span><span class="plain">, </span><span class="constant">PROPERTIES_HAP</span><span class="plain">);</span>
<span class="identifier">prn</span><span class="plain">-</span><span class="element">&gt;prop_iname</span><span class="plain"> = </span><span class="functiontext">Hierarchy::make_iname_with_memo</span><span class="plain">(</span><span class="constant">PROPERTY_HL</span><span class="plain">, </span><span class="identifier">R</span><span class="plain">, </span><span class="identifier">prn</span><span class="plain">-</span><span class="element">&gt;name</span><span class="plain">);</span>
<span class="identifier">prn</span><span class="plain">-</span><span class="element">&gt;prop_package</span><span class="plain"> = </span><span class="functiontext">Hierarchy::package</span><span class="plain">(</span><span class="identifier">prn</span><span class="plain">-</span><span class="element">&gt;owning_module</span><span class="plain">, </span><span class="constant">PROPERTIES_HAP</span><span class="plain">);</span>
<span class="identifier">prn</span><span class="plain">-</span><span class="element">&gt;prop_iname</span><span class="plain"> = </span><span class="functiontext">Hierarchy::make_iname_with_memo</span><span class="plain">(</span><span class="constant">PROPERTY_HL</span><span class="plain">, </span><span class="identifier">prn</span><span class="plain">-</span><span class="element">&gt;prop_package</span><span class="plain">, </span><span class="identifier">prn</span><span class="plain">-</span><span class="element">&gt;name</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">prn</span><span class="plain">-</span><span class="element">&gt;prop_iname</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">package_request</span><span class="plain"> *</span><span class="functiontext">Properties::package</span><span class="plain">(</span><span class="reserved">property</span><span class="plain"> *</span><span class="identifier">prn</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">prn</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"tried to find package for null property"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="functiontext">Properties::is_either_or</span><span class="plain">(</span><span class="identifier">prn</span><span class="plain">)) &amp;&amp; (</span><span class="identifier">prn</span><span class="plain">-</span><span class="element">&gt;stored_in_negation</span><span class="plain">))</span>
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">Properties::package</span><span class="plain">(</span><span class="functiontext">Properties::EitherOr::get_negation</span><span class="plain">(</span><span class="identifier">prn</span><span class="plain">));</span>
<span class="functiontext">Properties::iname</span><span class="plain">(</span><span class="identifier">prn</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">prn</span><span class="plain">-</span><span class="element">&gt;prop_package</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Properties::emit_single</span><span class="plain">(</span><span class="reserved">property</span><span class="plain"> *</span><span class="identifier">prn</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">prn</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"tried to find emit single for null property"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="functiontext">Properties::is_either_or</span><span class="plain">(</span><span class="identifier">prn</span><span class="plain">)) &amp;&amp; (</span><span class="identifier">prn</span><span class="plain">-</span><span class="element">&gt;stored_in_negation</span><span class="plain">)) {</span>
@ -1068,6 +1078,8 @@ we find it, we compile it and return <code class="display"><span class="extract"
<p class="endnote">The function Properties::iname is used in <a href="#SP21">&#167;21</a>, <a href="#SP22_1">&#167;22.1</a>, 5/ins (<a href="5-ins.html#SP38_3">&#167;38.3</a>), 6/rlt (<a href="6-rlt.html#SP9_3_8">&#167;9.3.8</a>, <a href="6-rlt.html#SP15_1_3">&#167;15.1.3</a>), 12/ter (<a href="12-ter.html#SP8_1">&#167;8.1</a>), 12/dtd (<a href="12-dtd.html#SP19">&#167;19</a>, <a href="12-dtd.html#SP22">&#167;22</a>), 12/cdp (<a href="12-cdp.html#SP2_1_6_1_2_2_5">&#167;2.1.6.1.2.2.5</a>, <a href="12-cdp.html#SP2_1_6_1_2_2_6_1">&#167;2.1.6.1.2.2.6.1</a>), 14/rv (<a href="14-rv.html#SP24_3_1">&#167;24.3.1</a>), 15/ep (<a href="15-ep.html#SP15_1">&#167;15.1</a>, <a href="15-ep.html#SP15_2">&#167;15.2</a>), 15/ma (<a href="15-ma.html#SP14_1">&#167;14.1</a>), 15/cr (<a href="15-cr.html#SP7_1">&#167;7.1</a>), 15/spr (<a href="15-spr.html#SP2">&#167;2</a>), 15/spr2 (<a href="15-spr2.html#SP8">&#167;8</a>, <a href="15-spr2.html#SP11">&#167;11</a>), 15/epv (<a href="15-epv.html#SP4">&#167;4</a>), 16/ic (<a href="16-ic.html#SP13">&#167;13</a>), 26/iti (<a href="26-iti.html#SP9">&#167;9</a>), 27/ei (<a href="27-ei.html#SP3">&#167;3</a>).</p>
<p class="endnote">The function Properties::package appears nowhere else.</p>
<p class="endnote">The function Properties::emit_single is used in 27/ei (<a href="27-ei.html#SP3">&#167;3</a>).</p>
<p class="endnote">The function Properties::emit is used in 1/mr (<a href="1-mr.html#SP4_11">&#167;4.11</a>).</p>

View file

@ -98,7 +98,7 @@ to the end user.
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">K</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"new nameless property without kind"</span><span class="plain">);</span>
<span class="reserved">package_request</span><span class="plain"> *</span><span class="identifier">R</span><span class="plain"> = </span><span class="functiontext">Hierarchy::package</span><span class="plain">(</span><span class="functiontext">Modules::find</span><span class="plain">(</span><span class="identifier">current_sentence</span><span class="plain">), </span><span class="constant">PROPERTIES_HAP</span><span class="plain">);</span>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">using_iname</span><span class="plain"> = </span><span class="functiontext">Hierarchy::make_iname_with_memo</span><span class="plain">(</span><span class="constant">PROPERTY_HL</span><span class="plain">, </span><span class="identifier">R</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">);</span>
<span class="reserved">property</span><span class="plain"> *</span><span class="identifier">prn</span><span class="plain"> = </span><span class="functiontext">Properties::create</span><span class="plain">(</span><span class="identifier">EMPTY_WORDING</span><span class="plain">, </span><span class="identifier">using_iname</span><span class="plain">);</span>
<span class="reserved">property</span><span class="plain"> *</span><span class="identifier">prn</span><span class="plain"> = </span><span class="functiontext">Properties::create</span><span class="plain">(</span><span class="identifier">EMPTY_WORDING</span><span class="plain">, </span><span class="identifier">R</span><span class="plain">, </span><span class="identifier">using_iname</span><span class="plain">);</span>
<span class="functiontext">Properties::exclude_from_index</span><span class="plain">(</span><span class="identifier">prn</span><span class="plain">);</span>
<span class="identifier">prn</span><span class="plain">-</span><span class="element">&gt;either_or</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="functiontext">Properties::set_translation_S</span><span class="plain">(</span><span class="identifier">prn</span><span class="plain">, </span><span class="identifier">I6_form</span><span class="plain">);</span>
@ -109,9 +109,9 @@ to the end user.
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">prn</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">property</span><span class="plain"> *</span><span class="functiontext">Properties::Valued::new_nameless_using</span><span class="plain">(</span><span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">K</span><span class="plain">, </span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">using</span><span class="plain">) {</span>
<span class="reserved">property</span><span class="plain"> *</span><span class="functiontext">Properties::Valued::new_nameless_using</span><span class="plain">(</span><span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">K</span><span class="plain">, </span><span class="reserved">package_request</span><span class="plain"> *</span><span class="identifier">R</span><span class="plain">, </span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">using</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">K</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"new nameless property without kind"</span><span class="plain">);</span>
<span class="reserved">property</span><span class="plain"> *</span><span class="identifier">prn</span><span class="plain"> = </span><span class="functiontext">Properties::create</span><span class="plain">(</span><span class="identifier">EMPTY_WORDING</span><span class="plain">, </span><span class="identifier">using</span><span class="plain">);</span>
<span class="reserved">property</span><span class="plain"> *</span><span class="identifier">prn</span><span class="plain"> = </span><span class="functiontext">Properties::create</span><span class="plain">(</span><span class="identifier">EMPTY_WORDING</span><span class="plain">, </span><span class="identifier">R</span><span class="plain">, </span><span class="identifier">using</span><span class="plain">);</span>
<span class="functiontext">Properties::exclude_from_index</span><span class="plain">(</span><span class="identifier">prn</span><span class="plain">);</span>
<span class="identifier">prn</span><span class="plain">-</span><span class="element">&gt;either_or</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="identifier">prn</span><span class="plain">-</span><span class="element">&gt;property_value_kind</span><span class="plain"> = </span><span class="identifier">K</span><span class="plain">;</span>

View file

@ -400,11 +400,11 @@ for the relation-route-finding code at run time.
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">count_iname</span><span class="plain"> = </span><span class="functiontext">PL::Counting::instance_count_iname</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">);</span>
<span class="identifier">PF_S</span><span class="plain">(</span><span class="identifier">counting</span><span class="plain">, </span><span class="identifier">subj</span><span class="plain">)-</span><span class="element">&gt;instance_count_prop</span><span class="plain"> =</span>
<span class="functiontext">Properties::Valued::new_nameless_using</span><span class="plain">(</span><span class="identifier">K_number</span><span class="plain">, </span><span class="identifier">count_iname</span><span class="plain">);</span>
<span class="functiontext">Properties::Valued::new_nameless_using</span><span class="plain">(</span><span class="identifier">K_number</span><span class="plain">, </span><span class="identifier">Kinds::Behaviour::package</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">), </span><span class="identifier">count_iname</span><span class="plain">);</span>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">next_iname</span><span class="plain"> = </span><span class="functiontext">PL::Counting::next_instance</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">);</span>
<span class="identifier">PF_S</span><span class="plain">(</span><span class="identifier">counting</span><span class="plain">, </span><span class="identifier">subj</span><span class="plain">)-</span><span class="element">&gt;instance_link_prop</span><span class="plain"> =</span>
<span class="functiontext">Properties::Valued::new_nameless_using</span><span class="plain">(</span><span class="identifier">K_object</span><span class="plain">, </span><span class="identifier">next_iname</span><span class="plain">);</span>
<span class="functiontext">Properties::Valued::new_nameless_using</span><span class="plain">(</span><span class="identifier">K_object</span><span class="plain">, </span><span class="identifier">Kinds::Behaviour::package</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">), </span><span class="identifier">next_iname</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="identifier">P_KD_Count</span><span class="plain"> = </span><span class="functiontext">Properties::Valued::new_nameless</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"KD_Count"</span><span class="plain">, </span><span class="identifier">K_number</span><span class="plain">);</span>
</pre>

View file

@ -391,19 +391,16 @@ different for compilation purposes.
<p class="endnote">The function Strings::TextLiterals::compile_quotation is used in 17/rs (<a href="17-rs.html#SP12">&#167;12</a>).</p>
<p class="endnote">The function Strings::TextLiterals::CCOUNT_QUOTATIONS is used in 13/rsfk (<a href="13-rsfk.html#SP25">&#167;25</a>).</p>
<p class="endnote">The function Strings::TextLiterals::CCOUNT_QUOTATIONS is used in 13/rsfk (<a href="13-rsfk.html#SP24">&#167;24</a>).</p>
<p class="inwebparagraph"><a id="SP13"></a><b>&#167;13. </b>A version from fixed text:
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Strings::TextLiterals::compile_literal_from_text</span><span class="plain">(</span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> *</span><span class="identifier">v1</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> *</span><span class="identifier">v2</span><span class="plain">, </span><span class="identifier">wchar_t</span><span class="plain"> *</span><span class="identifier">p</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Strings::TextLiterals::compile_literal_from_text</span><span class="plain">(</span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">context</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> *</span><span class="identifier">v1</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> *</span><span class="identifier">v2</span><span class="plain">, </span><span class="identifier">wchar_t</span><span class="plain"> *</span><span class="identifier">p</span><span class="plain">) {</span>
<span class="reserved">literal_text</span><span class="plain"> *</span><span class="identifier">lt</span><span class="plain"> = </span><span class="functiontext">Strings::TextLiterals::compile_literal</span><span class="plain">(</span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">, </span><span class="identifier">Feeds::feed_text</span><span class="plain">(</span><span class="identifier">p</span><span class="plain">));</span>
<span class="reserved">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="functiontext">Packaging::enter_home_of</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">);</span>
<span class="identifier">inter_reading_state</span><span class="plain"> *</span><span class="identifier">IRS</span><span class="plain"> = </span><span class="functiontext">Emit::IRS</span><span class="plain">();</span>
<span class="functiontext">Emit::to_ival</span><span class="plain">(</span><span class="identifier">IRS</span><span class="plain">-&gt;</span><span class="identifier">read_into</span><span class="plain">, </span><span class="identifier">IRS</span><span class="plain">-&gt;</span><span class="identifier">current_package</span><span class="plain">, </span><span class="identifier">v1</span><span class="plain">, </span><span class="identifier">v2</span><span class="plain">, </span><span class="identifier">lt</span><span class="plain">-</span><span class="element">&gt;lt_sba_iname</span><span class="plain">);</span>
<span class="functiontext">Packaging::exit</span><span class="plain">(</span><span class="identifier">save</span><span class="plain">);</span>
<span class="functiontext">Emit::to_ival_in_context</span><span class="plain">(</span><span class="identifier">context</span><span class="plain">, </span><span class="identifier">v1</span><span class="plain">, </span><span class="identifier">v2</span><span class="plain">, </span><span class="identifier">lt</span><span class="plain">-</span><span class="element">&gt;lt_sba_iname</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>

View file

@ -214,7 +214,7 @@ that routine later. This appearance of the routine name is called the "cue".
<span class="functiontext">Frames::emit_allocation</span><span class="plain">(</span><span class="identifier">K_text</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">text_substitution</span><span class="plain"> *</span><span class="identifier">ts</span><span class="plain"> = </span><span class="functiontext">Strings::TextSubstitutions::new_text_substitution</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">, </span><span class="identifier">phsf</span><span class="plain">,</span>
<span class="identifier">adopted_rule_for_compilation</span><span class="plain">, </span><span class="identifier">adopted_marker_for_compilation</span><span class="plain">, </span><span class="functiontext">Packaging::current_enclosure</span><span class="plain">());</span>
<span class="identifier">adopted_rule_for_compilation</span><span class="plain">, </span><span class="identifier">adopted_marker_for_compilation</span><span class="plain">, </span><span class="functiontext">Emit::current_enclosure</span><span class="plain">());</span>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">tin</span><span class="plain"> = </span><span class="functiontext">Strings::TextSubstitutions::text_substitution_iname</span><span class="plain">(</span><span class="identifier">ts</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">VH</span><span class="plain">-</span><span class="element">&gt;vhmode_wanted</span><span class="plain"> == </span><span class="constant">INTER_DATA_VHMODE</span><span class="plain">)</span>
<span class="functiontext">Emit::holster</span><span class="plain">(</span><span class="identifier">VH</span><span class="plain">, </span><span class="identifier">tin</span><span class="plain">);</span>
@ -240,7 +240,7 @@ that routine later. This appearance of the routine name is called the "cue".
<pre class="displaydefn">
<span class="reserved">text_substitution</span><span class="plain"> *</span><span class="identifier">ts</span><span class="plain"> = </span><span class="functiontext">Strings::TextSubstitutions::new_text_substitution</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">, </span><span class="identifier">phsf</span><span class="plain">,</span>
<span class="identifier">adopted_rule_for_compilation</span><span class="plain">, </span><span class="identifier">adopted_marker_for_compilation</span><span class="plain">, </span><span class="functiontext">Packaging::current_enclosure</span><span class="plain">());</span>
<span class="identifier">adopted_rule_for_compilation</span><span class="plain">, </span><span class="identifier">adopted_marker_for_compilation</span><span class="plain">, </span><span class="functiontext">Emit::current_enclosure</span><span class="plain">());</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">TEST_COMPILATION_MODE</span><span class="plain">(</span><span class="constant">CONSTANT_CMODE</span><span class="plain">)) {</span>
<span class="reserved">package_request</span><span class="plain"> *</span><span class="identifier">PR</span><span class="plain"> = </span><span class="functiontext">Hierarchy::package_in_enclosure</span><span class="plain">(</span><span class="constant">BLOCK_CONSTANTS_HAP</span><span class="plain">);</span>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">N</span><span class="plain"> = </span><span class="functiontext">Hierarchy::make_iname_in</span><span class="plain">(</span><span class="constant">BLOCK_CONSTANT_HL</span><span class="plain">, </span><span class="identifier">PR</span><span class="plain">);</span>

View file

@ -116,7 +116,7 @@ with a call to:
<span class="identifier">ll</span><span class="plain">-</span><span class="element">&gt;ll_iname</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">ll</span><span class="plain">-</span><span class="element">&gt;first_llist_entry</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">ll</span><span class="plain">-</span><span class="element">&gt;list_text</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">ll</span><span class="plain">-</span><span class="element">&gt;ll_package</span><span class="plain"> = </span><span class="functiontext">Packaging::current_enclosure</span><span class="plain">();</span>
<span class="identifier">ll</span><span class="plain">-</span><span class="element">&gt;ll_package</span><span class="plain"> = </span><span class="functiontext">Emit::current_enclosure</span><span class="plain">();</span>
<span class="functiontext">Kinds::RunTime::ensure_basic_heap_present</span><span class="plain">();</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">ll</span><span class="plain">;</span>
<span class="plain">}</span>

View file

@ -164,7 +164,7 @@ this as some kind of marginal will-never-happen case.
<p class="inwebparagraph"></p>
<p class="endnote">The function Problems::quote_kind is used in <a href="#SP4">&#167;4</a>, 5/lp (<a href="5-lp.html#SP34_5">&#167;34.5</a>, <a href="5-lp.html#SP34_6">&#167;34.6</a>), 5/ins (<a href="5-ins.html#SP19_1">&#167;19.1</a>), 5/nv (<a href="5-nv.html#SP7_1">&#167;7.1</a>, <a href="5-nv.html#SP23">&#167;23</a>, <a href="5-nv.html#SP25_2">&#167;25.2</a>), 6/tur (<a href="6-tur.html#SP5">&#167;5</a>), 9/tc (<a href="9-tc.html#SP5_4_2_6">&#167;5.4.2.6</a>, <a href="9-tc.html#SP5_4_2_7">&#167;5.4.2.7</a>, <a href="9-tc.html#SP5_4_2_8">&#167;5.4.2.8</a>, <a href="9-tc.html#SP8_1">&#167;8.1</a>), 9/ma (<a href="9-ma.html#SP3_3_39_1">&#167;3.3.39.1</a>), 9/pk (<a href="9-pk.html#SP2_1">&#167;2.1</a>, <a href="9-pk.html#SP4_4">&#167;4.4</a>), 9/pd (<a href="9-pd.html#SP5_6_1">&#167;5.6.1</a>, <a href="9-pd.html#SP7_1_3">&#167;7.1.3</a>), 11/tc (<a href="11-tc.html#SP7_1">&#167;7.1</a>), 11/tcp (<a href="11-tcp.html#SP6_9">&#167;6.9</a>, <a href="11-tcp.html#SP6_10">&#167;6.10</a>, <a href="11-tcp.html#SP6_11">&#167;6.11</a>, <a href="11-tcp.html#SP10">&#167;10</a>, <a href="11-tcp.html#SP11">&#167;11</a>, <a href="11-tcp.html#SP11_3">&#167;11.3</a>, <a href="11-tcp.html#SP12">&#167;12</a>), 12/ter (<a href="12-ter.html#SP5_1">&#167;5.1</a>, <a href="12-ter.html#SP8_4">&#167;8.4</a>), 12/qr (<a href="12-qr.html#SP5">&#167;5</a>), 12/ca (<a href="12-ca.html#SP6_2">&#167;6.2</a>), 13/kak (<a href="13-kak.html#SP7">&#167;7</a>), 13/rsfk (<a href="13-rsfk.html#SP4_1">&#167;4.1</a>, <a href="13-rsfk.html#SP4_2">&#167;4.2</a>, <a href="13-rsfk.html#SP16_2">&#167;16.2</a>, <a href="13-rsfk.html#SP27">&#167;27</a>), 14/ds2 (<a href="14-ds2.html#SP10_1_1_3_1">&#167;10.1.1.3.1</a>, <a href="14-ds2.html#SP11_8_1">&#167;11.8.1</a>, <a href="14-ds2.html#SP11_9_1_1_2_2_2">&#167;11.9.1.1.2.2.2</a>, <a href="14-ds2.html#SP11_9_1_1_3_1_1">&#167;11.9.1.1.3.1.1</a>, <a href="14-ds2.html#SP11_9_1_1_5_2">&#167;11.9.1.1.5.2</a>, <a href="14-ds2.html#SP11_9_1_2_3_3">&#167;11.9.1.2.3.3</a>, <a href="14-ds2.html#SP11_9_1_2_4">&#167;11.9.1.2.4</a>, <a href="14-ds2.html#SP15_4">&#167;15.4</a>, <a href="14-ds2.html#SP19_1">&#167;19.1</a>, <a href="14-ds2.html#SP19_2">&#167;19.2</a>, <a href="14-ds2.html#SP19_2_1">&#167;19.2.1</a>, <a href="14-ds2.html#SP19_5_3_2">&#167;19.5.3.2</a>, <a href="14-ds2.html#SP19_6_1_1">&#167;19.6.1.1</a>, <a href="14-ds2.html#SP19_6_2_1">&#167;19.6.2.1</a>, <a href="14-ds2.html#SP19_6_2_2">&#167;19.6.2.2</a>), 15/vp (<a href="15-vp.html#SP5">&#167;5</a>), 15/cp (<a href="15-cp.html#SP3">&#167;3</a>), 15/tpr (<a href="15-tpr.html#SP5">&#167;5</a>), 15/spr2 (<a href="15-spr2.html#SP9_1">&#167;9.1</a>, <a href="15-spr2.html#SP9_2">&#167;9.2</a>), 15/pov (<a href="15-pov.html#SP4_1">&#167;4.1</a>), 16/in (<a href="16-in.html#SP14">&#167;14</a>), 18/lc (<a href="18-lc.html#SP8_2_1">&#167;8.2.1</a>), 19/tc (<a href="19-tc.html#SP6_1">&#167;6.1</a>, <a href="19-tc.html#SP14_1">&#167;14.1</a>, <a href="19-tc.html#SP15">&#167;15</a>, <a href="19-tc.html#SP15_6">&#167;15.6</a>), 19/tod (<a href="19-tod.html#SP6_2">&#167;6.2</a>, <a href="19-tod.html#SP6_3_3">&#167;6.3.3</a>), 20/eq (<a href="20-eq.html#SP41_4_1">&#167;41.4.1</a>, <a href="20-eq.html#SP41_4_2">&#167;41.4.2</a>, <a href="20-eq.html#SP47_3_2">&#167;47.3.2</a>), 21/rl (<a href="21-rl.html#SP15">&#167;15</a>, <a href="21-rl.html#SP18">&#167;18</a>), 22/pu (<a href="22-pu.html#SP20_1_1_2">&#167;20.1.1.2</a>), 25/ci (<a href="25-ci.html#SP3_1_1_2">&#167;3.1.1.2</a>), 25/cii (<a href="25-cii.html#SP3_2_1_1">&#167;3.2.1.1</a>, <a href="25-cii.html#SP3_1_1_4_7_1_2">&#167;3.1.1.4.7.1.2</a>, <a href="25-cii.html#SP3_5_3">&#167;3.5.3</a>, <a href="25-cii.html#SP3_5_4_3">&#167;3.5.4.3</a>), 25/cp (<a href="25-cp.html#SP5_3_5">&#167;5.3.5</a>).</p>
<p class="endnote">The function Problems::quote_kind is used in <a href="#SP4">&#167;4</a>, 5/lp (<a href="5-lp.html#SP34_5">&#167;34.5</a>, <a href="5-lp.html#SP34_6">&#167;34.6</a>), 5/ins (<a href="5-ins.html#SP19_1">&#167;19.1</a>), 5/nv (<a href="5-nv.html#SP7_1">&#167;7.1</a>, <a href="5-nv.html#SP23">&#167;23</a>, <a href="5-nv.html#SP25_2">&#167;25.2</a>), 6/tur (<a href="6-tur.html#SP5">&#167;5</a>), 9/tc (<a href="9-tc.html#SP5_4_2_6">&#167;5.4.2.6</a>, <a href="9-tc.html#SP5_4_2_7">&#167;5.4.2.7</a>, <a href="9-tc.html#SP5_4_2_8">&#167;5.4.2.8</a>, <a href="9-tc.html#SP8_1">&#167;8.1</a>), 9/ma (<a href="9-ma.html#SP3_3_39_1">&#167;3.3.39.1</a>), 9/pk (<a href="9-pk.html#SP2_1">&#167;2.1</a>, <a href="9-pk.html#SP4_4">&#167;4.4</a>), 9/pd (<a href="9-pd.html#SP5_6_1">&#167;5.6.1</a>, <a href="9-pd.html#SP7_1_3">&#167;7.1.3</a>), 11/tc (<a href="11-tc.html#SP7_1">&#167;7.1</a>), 11/tcp (<a href="11-tcp.html#SP6_9">&#167;6.9</a>, <a href="11-tcp.html#SP6_10">&#167;6.10</a>, <a href="11-tcp.html#SP6_11">&#167;6.11</a>, <a href="11-tcp.html#SP10">&#167;10</a>, <a href="11-tcp.html#SP11">&#167;11</a>, <a href="11-tcp.html#SP11_3">&#167;11.3</a>, <a href="11-tcp.html#SP12">&#167;12</a>), 12/ter (<a href="12-ter.html#SP5_1">&#167;5.1</a>, <a href="12-ter.html#SP8_4">&#167;8.4</a>), 12/qr (<a href="12-qr.html#SP5">&#167;5</a>), 12/ca (<a href="12-ca.html#SP6_2">&#167;6.2</a>), 13/kak (<a href="13-kak.html#SP7">&#167;7</a>), 13/rsfk (<a href="13-rsfk.html#SP4_1">&#167;4.1</a>, <a href="13-rsfk.html#SP4_2">&#167;4.2</a>, <a href="13-rsfk.html#SP16_2">&#167;16.2</a>, <a href="13-rsfk.html#SP26">&#167;26</a>), 14/ds2 (<a href="14-ds2.html#SP10_1_1_3_1">&#167;10.1.1.3.1</a>, <a href="14-ds2.html#SP11_8_1">&#167;11.8.1</a>, <a href="14-ds2.html#SP11_9_1_1_2_2_2">&#167;11.9.1.1.2.2.2</a>, <a href="14-ds2.html#SP11_9_1_1_3_1_1">&#167;11.9.1.1.3.1.1</a>, <a href="14-ds2.html#SP11_9_1_1_5_2">&#167;11.9.1.1.5.2</a>, <a href="14-ds2.html#SP11_9_1_2_3_3">&#167;11.9.1.2.3.3</a>, <a href="14-ds2.html#SP11_9_1_2_4">&#167;11.9.1.2.4</a>, <a href="14-ds2.html#SP15_4">&#167;15.4</a>, <a href="14-ds2.html#SP19_1">&#167;19.1</a>, <a href="14-ds2.html#SP19_2">&#167;19.2</a>, <a href="14-ds2.html#SP19_2_1">&#167;19.2.1</a>, <a href="14-ds2.html#SP19_5_3_2">&#167;19.5.3.2</a>, <a href="14-ds2.html#SP19_6_1_1">&#167;19.6.1.1</a>, <a href="14-ds2.html#SP19_6_2_1">&#167;19.6.2.1</a>, <a href="14-ds2.html#SP19_6_2_2">&#167;19.6.2.2</a>), 15/vp (<a href="15-vp.html#SP5">&#167;5</a>), 15/cp (<a href="15-cp.html#SP3">&#167;3</a>), 15/tpr (<a href="15-tpr.html#SP5">&#167;5</a>), 15/spr2 (<a href="15-spr2.html#SP9_1">&#167;9.1</a>, <a href="15-spr2.html#SP9_2">&#167;9.2</a>), 15/pov (<a href="15-pov.html#SP4_1">&#167;4.1</a>), 16/in (<a href="16-in.html#SP14">&#167;14</a>), 18/lc (<a href="18-lc.html#SP8_2_1">&#167;8.2.1</a>), 19/tc (<a href="19-tc.html#SP6_1">&#167;6.1</a>, <a href="19-tc.html#SP14_1">&#167;14.1</a>, <a href="19-tc.html#SP15">&#167;15</a>, <a href="19-tc.html#SP15_6">&#167;15.6</a>), 19/tod (<a href="19-tod.html#SP6_2">&#167;6.2</a>, <a href="19-tod.html#SP6_3_3">&#167;6.3.3</a>), 20/eq (<a href="20-eq.html#SP41_4_1">&#167;41.4.1</a>, <a href="20-eq.html#SP41_4_2">&#167;41.4.2</a>, <a href="20-eq.html#SP47_3_2">&#167;47.3.2</a>), 21/rl (<a href="21-rl.html#SP15">&#167;15</a>, <a href="21-rl.html#SP18">&#167;18</a>), 22/pu (<a href="22-pu.html#SP20_1_1_2">&#167;20.1.1.2</a>), 25/ci (<a href="25-ci.html#SP3_1_1_2">&#167;3.1.1.2</a>), 25/cii (<a href="25-cii.html#SP3_2_1_1">&#167;3.2.1.1</a>, <a href="25-cii.html#SP3_1_1_4_7_1_2">&#167;3.1.1.4.7.1.2</a>, <a href="25-cii.html#SP3_5_3">&#167;3.5.3</a>, <a href="25-cii.html#SP3_5_4_3">&#167;3.5.4.3</a>), 25/cp (<a href="25-cp.html#SP5_3_5">&#167;5.3.5</a>).</p>
<p class="endnote">The function Problems::expand_kind appears nowhere else.</p>

View file

@ -1079,7 +1079,7 @@ than once for each rule.
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">action_based</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">) </span><span class="identifier">grouping</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">forbid_breaks_s</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">, *</span><span class="identifier">rv_s</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">, *</span><span class="identifier">original_deadflag_s</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">, *</span><span class="identifier">p_s</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">packaging_state</span><span class="plain"> </span><span class="identifier">save_array</span><span class="plain"> = </span><span class="functiontext">Packaging::stateless</span><span class="plain">();</span>
<span class="reserved">packaging_state</span><span class="plain"> </span><span class="identifier">save_array</span><span class="plain"> = </span><span class="functiontext">Emit::unused_packaging_state</span><span class="plain">();</span>
&lt;<span class="cwebmacro">Open the rulebook compilation</span> <span class="cwebmacronumber">24.1.1</span>&gt;<span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">group_size</span><span class="plain"> = 0, </span><span class="identifier">group_started</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">, </span><span class="identifier">entry_count</span><span class="plain"> = 0, </span><span class="identifier">action_group_open</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>

View file

@ -297,9 +297,8 @@ must be added after the rule has been created:
<span class="identifier">R</span><span class="plain">-</span><span class="element">&gt;rule_extern_iname</span><span class="plain"> = </span><span class="functiontext">Hierarchy::make_iname_in</span><span class="plain">(</span><span class="constant">EXTERIOR_RULE_HL</span><span class="plain">, </span><span class="identifier">R</span><span class="plain">-</span><span class="element">&gt;rule_package</span><span class="plain">);</span>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">xiname</span><span class="plain"> = </span><span class="functiontext">Hierarchy::find_by_name</span><span class="plain">(</span><span class="identifier">XT</span><span class="plain">);</span>
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">v1</span><span class="plain"> = 0, </span><span class="identifier">v2</span><span class="plain"> = 0;</span>
<span class="identifier">Inter::Symbols::to_data</span><span class="plain">(</span><span class="functiontext">Emit::repository</span><span class="plain">(), </span><span class="functiontext">Packaging::incarnate</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">-</span><span class="element">&gt;rule_package</span><span class="plain">), </span><span class="functiontext">InterNames::to_symbol</span><span class="plain">(</span><span class="identifier">xiname</span><span class="plain">), &amp;</span><span class="identifier">v1</span><span class="plain">, &amp;</span><span class="identifier">v2</span><span class="plain">);</span>
<span class="functiontext">Emit::named_generic_constant</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">-</span><span class="element">&gt;rule_extern_iname</span><span class="plain">, </span><span class="identifier">v1</span><span class="plain">, </span><span class="identifier">v2</span><span class="plain">);</span>
<span class="functiontext">Emit::named_generic_constant_xiname</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">-</span><span class="element">&gt;rule_package</span><span class="plain">, </span><span class="identifier">R</span><span class="plain">-</span><span class="element">&gt;rule_extern_iname</span><span class="plain">, </span><span class="identifier">xiname</span><span class="plain">);</span>
<span class="identifier">R</span><span class="plain">-</span><span class="element">&gt;xiname</span><span class="plain"> = </span><span class="identifier">xiname</span><span class="plain">;</span>
<span class="identifier">R</span><span class="plain">-</span><span class="element">&gt;rule_extern_iname_as_text</span><span class="plain"> = </span><span class="identifier">Str::duplicate</span><span class="plain">(</span><span class="identifier">XT</span><span class="plain">);</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">XT</span><span class="plain">);</span>

View file

@ -1105,9 +1105,7 @@ code are the real outcome of the code in this section.
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Rulebooks::focus</span><span class="plain">(</span><span class="identifier">rb</span><span class="plain">) == </span><span class="constant">PARAMETER_FOCUS</span><span class="plain">) </span><span class="identifier">par</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="identifier">LOGIF</span><span class="plain">(</span><span class="identifier">RULEBOOK_COMPILATION</span><span class="plain">, </span><span class="string">"Compiling rulebook: %W = %n\</span><span class="plain">n</span><span class="string">"</span><span class="plain">,</span>
<span class="identifier">rb</span><span class="plain">-</span><span class="element">&gt;primary_name</span><span class="plain">, </span><span class="identifier">rb</span><span class="plain">-</span><span class="element">&gt;rb_iname</span><span class="plain">);</span>
<span class="reserved">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="functiontext">Packaging::enter_home_of</span><span class="plain">(</span><span class="identifier">rb</span><span class="plain">-</span><span class="element">&gt;rb_iname</span><span class="plain">);</span>
<span class="functiontext">Rules::Bookings::list_compile</span><span class="plain">(</span><span class="identifier">rb</span><span class="plain">-</span><span class="element">&gt;rule_list</span><span class="plain">, </span><span class="identifier">rb</span><span class="plain">-</span><span class="element">&gt;rb_iname</span><span class="plain">, </span><span class="identifier">act</span><span class="plain">, </span><span class="identifier">par</span><span class="plain">);</span>
<span class="functiontext">Packaging::exit</span><span class="plain">(</span><span class="identifier">save</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="functiontext">Rules::check_placement_safety</span><span class="plain">();</span>
<span class="plain">}</span>

View file

@ -250,7 +250,7 @@ compilation.
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Phrases::Constants::compile_default_closure</span><span class="plain">(</span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">closure_identifier</span><span class="plain">, </span><span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">K</span><span class="plain">) {</span>
<span class="reserved">package_request</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain"> = </span><span class="functiontext">Kinds::RunTime::package</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">);</span>
<span class="reserved">package_request</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain"> = </span><span class="identifier">Kinds::Behaviour::package</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">);</span>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">rname</span><span class="plain"> = </span><span class="functiontext">Hierarchy::make_iname_in</span><span class="plain">(</span><span class="constant">DEFAULT_CLOSURE_FN_HL</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">);</span>
&lt;<span class="cwebmacro">Compile the default routine</span> <span class="cwebmacronumber">9.2</span>&gt;<span class="plain">;</span>

View file

@ -588,7 +588,7 @@ what number is...", for instance.
<p class="endnote">The function Phrases::get_inter_tail is used in 25/cii (<a href="25-cii.html#SP1_3">&#167;1.3</a>).</p>
<p class="endnote">The function Phrases::iname is used in <a href="#SP9">&#167;9</a>, <a href="#SP12">&#167;12</a>, 21/rl (<a href="21-rl.html#SP19">&#167;19</a>), 22/prcd (<a href="22-prcd.html#SP10">&#167;10</a>, <a href="22-prcd.html#SP10_1">&#167;10.1</a>), 22/tp2 (<a href="22-tp2.html#SP4">&#167;4</a>), 23/abp (<a href="23-abp.html#SP1">&#167;1</a>), 25/cp (<a href="25-cp.html#SP4">&#167;4</a>).</p>
<p class="endnote">The function Phrases::iname is used in <a href="#SP9">&#167;9</a>, 21/rl (<a href="21-rl.html#SP19">&#167;19</a>), 22/prcd (<a href="22-prcd.html#SP10">&#167;10</a>, <a href="22-prcd.html#SP10_1">&#167;10.1</a>), 22/tp2 (<a href="22-tp2.html#SP4">&#167;4</a>), 23/abp (<a href="23-abp.html#SP1">&#167;1</a>), 25/cp (<a href="25-cp.html#SP4">&#167;4</a>).</p>
<p class="endnote">The function Phrases::declaration_node is used in 22/cs (<a href="22-cs.html#SP10_6">&#167;10.6</a>, <a href="22-cs.html#SP10_7">&#167;10.7</a>), 22/pu (<a href="22-pu.html#SP10_2_1">&#167;10.2.1</a>), 22/tp (<a href="22-tp.html#SP4">&#167;4</a>, <a href="22-tp.html#SP7_1">&#167;7.1</a>, <a href="22-tp.html#SP8">&#167;8</a>), 22/pi (<a href="22-pi.html#SP1">&#167;1</a>).</p>
@ -610,15 +610,11 @@ response to "requests". All other phrases are compiled just once.
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">effect</span><span class="plain"> = </span><span class="functiontext">Phrases::Usage::get_effect</span><span class="plain">(&amp;(</span><span class="identifier">ph</span><span class="plain">-</span><span class="element">&gt;usage_data</span><span class="plain">));</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">effect</span><span class="plain"> == </span><span class="constant">RULE_NOT_IN_RULEBOOK_EFF</span><span class="plain">) </span><span class="identifier">effect</span><span class="plain"> = </span><span class="constant">RULE_IN_RULEBOOK_EFF</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">effect</span><span class="plain"> == </span><span class="constant">TO_PHRASE_EFF</span><span class="plain">) {</span>
<span class="reserved">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="functiontext">Packaging::enter_home_of</span><span class="plain">(</span><span class="identifier">req</span><span class="plain">-</span><span class="element">&gt;req_iname</span><span class="plain">);</span>
<span class="functiontext">Routines::Compile::routine</span><span class="plain">(</span><span class="identifier">ph</span><span class="plain">, </span><span class="identifier">legible</span><span class="plain">, </span><span class="identifier">req</span><span class="plain">, </span><span class="identifier">acl</span><span class="plain">);</span>
<span class="functiontext">Packaging::exit</span><span class="plain">(</span><span class="identifier">save</span><span class="plain">);</span>
&lt;<span class="cwebmacro">Move along the progress bar if it's this phrase's first compilation</span> <span class="cwebmacronumber">12.1</span>&gt;<span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ph</span><span class="plain">-</span><span class="element">&gt;at_least_one_compiled_form_needed</span><span class="plain">) {</span>
<span class="reserved">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="functiontext">Packaging::enter_home_of</span><span class="plain">(</span><span class="functiontext">Phrases::iname</span><span class="plain">(</span><span class="identifier">ph</span><span class="plain">));</span>
<span class="functiontext">Routines::Compile::routine</span><span class="plain">(</span><span class="identifier">ph</span><span class="plain">, </span><span class="identifier">legible</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">acl</span><span class="plain">);</span>
<span class="functiontext">Packaging::exit</span><span class="plain">(</span><span class="identifier">save</span><span class="plain">);</span>
&lt;<span class="cwebmacro">Move along the progress bar if it's this phrase's first compilation</span> <span class="cwebmacronumber">12.1</span>&gt;<span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>

View file

@ -33,7 +33,7 @@ we use the following chits to keep track of what's outstanding:
<p class="inwebparagraph"></p>
<p class="endnote">The structure to_phrase_request is accessed in 22/ph, 25/cp, 26/ts and here.</p>
<p class="endnote">The structure to_phrase_request is accessed in 25/cp, 26/ts and here.</p>
<p class="inwebparagraph"><a id="SP3"></a><b>&#167;3. Logical priority of To phrases. </b>"To" phrases are insertion-sorted, as they are defined, into a linked list
held in logical priority order. This essentially means that two lexically

View file

@ -460,13 +460,13 @@ scratch work-space which can be used in the compiled code.
<p class="endnote">The function LocalVariables::add_internal_local_as_symbol_noting is used in 12/cdp (<a href="12-cdp.html#SP2_1_5">&#167;2.1.5</a>).</p>
<p class="endnote">The function LocalVariables::add_named_call is used in <a href="#SP47">&#167;47</a>, 13/rsfk (<a href="13-rsfk.html#SP25_6_3">&#167;25.6.3</a>), 21/rb (<a href="21-rb.html#SP23">&#167;23</a>), 22/pav (<a href="22-pav.html#SP9_2">&#167;9.2</a>).</p>
<p class="endnote">The function LocalVariables::add_named_call is used in <a href="#SP47">&#167;47</a>, 13/rsfk (<a href="13-rsfk.html#SP24_6_3">&#167;24.6.3</a>), 21/rb (<a href="21-rb.html#SP23">&#167;23</a>), 22/pav (<a href="22-pav.html#SP9_2">&#167;9.2</a>).</p>
<p class="endnote">The function LocalVariables::add_named_call_as_symbol is used in 4/am (<a href="4-am.html#SP43">&#167;43</a>), 5/lp (<a href="5-lp.html#SP27">&#167;27</a>), 6/rlt (<a href="6-rlt.html#SP15_2">&#167;15.2</a>, <a href="6-rlt.html#SP17">&#167;17</a>, <a href="6-rlt.html#SP29_1">&#167;29.1</a>), 6/nv (<a href="6-nv.html#SP18_1">&#167;18.1</a>, <a href="6-nv.html#SP18_2">&#167;18.2</a>), 8/ef (<a href="8-ef.html#SP19">&#167;19</a>), 12/cad (<a href="12-cad.html#SP5">&#167;5</a>), 12/cdp (<a href="12-cdp.html#SP2_1_5">&#167;2.1.5</a>, <a href="12-cdp.html#SP2_1_5_2">&#167;2.1.5.2</a>), 13/rsfk (<a href="13-rsfk.html#SP16_3">&#167;16.3</a>, <a href="13-rsfk.html#SP25_1">&#167;25.1</a>, <a href="13-rsfk.html#SP25_2">&#167;25.2</a>, <a href="13-rsfk.html#SP25_3">&#167;25.3</a>, <a href="13-rsfk.html#SP25_5">&#167;25.5</a>, <a href="13-rsfk.html#SP25_6_1">&#167;25.6.1</a>, <a href="13-rsfk.html#SP25_6_2">&#167;25.6.2</a>, <a href="13-rsfk.html#SP25_6_5">&#167;25.6.5</a>, <a href="13-rsfk.html#SP25_6_6">&#167;25.6.6</a>, <a href="13-rsfk.html#SP26">&#167;26</a>), 17/rs (<a href="17-rs.html#SP6_2">&#167;6.2</a>, <a href="17-rs.html#SP7_2">&#167;7.2</a>), 19/tc (<a href="19-tc.html#SP8">&#167;8</a>), 19/rsft (<a href="19-rsft.html#SP2">&#167;2</a>), 21/rl (<a href="21-rl.html#SP20">&#167;20</a>), 21/rb (<a href="21-rb.html#SP24_1_1">&#167;24.1.1</a>), 21/rl2 (<a href="21-rl2.html#SP14_1">&#167;14.1</a>), 21/fao (<a href="21-fao.html#SP10">&#167;10</a>), 21/sv (<a href="21-sv.html#SP3">&#167;3</a>), 24/ch (<a href="24-ch.html#SP7">&#167;7</a>), 26/uo (<a href="26-uo.html#SP21_1">&#167;21.1</a>, <a href="26-uo.html#SP21_2">&#167;21.2</a>).</p>
<p class="endnote">The function LocalVariables::add_named_call_as_symbol is used in 4/am (<a href="4-am.html#SP43">&#167;43</a>), 5/lp (<a href="5-lp.html#SP27">&#167;27</a>), 6/rlt (<a href="6-rlt.html#SP15_2">&#167;15.2</a>, <a href="6-rlt.html#SP17">&#167;17</a>, <a href="6-rlt.html#SP29_1">&#167;29.1</a>), 6/nv (<a href="6-nv.html#SP18_1">&#167;18.1</a>, <a href="6-nv.html#SP18_2">&#167;18.2</a>), 8/ef (<a href="8-ef.html#SP19">&#167;19</a>), 12/cad (<a href="12-cad.html#SP5">&#167;5</a>), 12/cdp (<a href="12-cdp.html#SP2_1_5">&#167;2.1.5</a>, <a href="12-cdp.html#SP2_1_5_2">&#167;2.1.5.2</a>), 13/rsfk (<a href="13-rsfk.html#SP16_3">&#167;16.3</a>, <a href="13-rsfk.html#SP24_1">&#167;24.1</a>, <a href="13-rsfk.html#SP24_2">&#167;24.2</a>, <a href="13-rsfk.html#SP24_3">&#167;24.3</a>, <a href="13-rsfk.html#SP24_5">&#167;24.5</a>, <a href="13-rsfk.html#SP24_6_1">&#167;24.6.1</a>, <a href="13-rsfk.html#SP24_6_2">&#167;24.6.2</a>, <a href="13-rsfk.html#SP24_6_5">&#167;24.6.5</a>, <a href="13-rsfk.html#SP24_6_6">&#167;24.6.6</a>, <a href="13-rsfk.html#SP25">&#167;25</a>), 17/rs (<a href="17-rs.html#SP6_2">&#167;6.2</a>, <a href="17-rs.html#SP7_2">&#167;7.2</a>), 19/tc (<a href="19-tc.html#SP8">&#167;8</a>), 19/rsft (<a href="19-rsft.html#SP2">&#167;2</a>), 21/rl (<a href="21-rl.html#SP20">&#167;20</a>), 21/rb (<a href="21-rb.html#SP24_1_1">&#167;24.1.1</a>), 21/rl2 (<a href="21-rl2.html#SP14_1">&#167;14.1</a>), 21/fao (<a href="21-fao.html#SP10">&#167;10</a>), 21/sv (<a href="21-sv.html#SP3">&#167;3</a>), 24/ch (<a href="24-ch.html#SP7">&#167;7</a>), 26/uo (<a href="26-uo.html#SP21_1">&#167;21.1</a>, <a href="26-uo.html#SP21_2">&#167;21.2</a>).</p>
<p class="endnote">The function LocalVariables::add_named_call_as_symbol_noting is used in 6/rlt (<a href="6-rlt.html#SP15_2">&#167;15.2</a>).</p>
<p class="endnote">The function LocalVariables::add_internal_local_c is used in <a href="#SP12">&#167;12</a>, <a href="#SP13">&#167;13</a>, 13/rsfk (<a href="13-rsfk.html#SP25_6_2">&#167;25.6.2</a>, <a href="13-rsfk.html#SP25_6_3">&#167;25.6.3</a>, <a href="13-rsfk.html#SP25_6_4">&#167;25.6.4</a>).</p>
<p class="endnote">The function LocalVariables::add_internal_local_c is used in <a href="#SP12">&#167;12</a>, <a href="#SP13">&#167;13</a>, 13/rsfk (<a href="13-rsfk.html#SP24_6_2">&#167;24.6.2</a>, <a href="13-rsfk.html#SP24_6_3">&#167;24.6.3</a>, <a href="13-rsfk.html#SP24_6_4">&#167;24.6.4</a>).</p>
<p class="endnote">The function LocalVariables::add_internal_local_c_as_symbol is used in 6/rlt (<a href="6-rlt.html#SP15">&#167;15</a>), 21/rb (<a href="21-rb.html#SP24_1_1">&#167;24.1.1</a>).</p>
@ -1648,9 +1648,9 @@ need in the compilation of any given routine:
<p class="endnote">The function LocalVariables::declare is used in 26/rt (<a href="26-rt.html#SP3">&#167;3</a>, <a href="26-rt.html#SP4">&#167;4</a>, <a href="26-rt.html#SP4_1_1">&#167;4.1.1</a>).</p>
<p class="endnote">The function LocalVariables::declare_this is used in <a href="#SP8">&#167;8</a>, <a href="#SP10">&#167;10</a>, <a href="#SP11">&#167;11</a>, <a href="#SP27">&#167;27</a>, <a href="#SP28">&#167;28</a>, <a href="#SP29">&#167;29</a>, <a href="#SP41">&#167;41</a>, <a href="#SP43">&#167;43</a>, <a href="#SP45">&#167;45</a>, 4/am (<a href="4-am.html#SP34_2">&#167;34.2</a>), 11/tr (<a href="11-tr.html#SP10">&#167;10</a>), 12/dtd (<a href="12-dtd.html#SP9">&#167;9</a>, <a href="12-dtd.html#SP23">&#167;23</a>, <a href="12-dtd.html#SP25">&#167;25</a>, <a href="12-dtd.html#SP26">&#167;26</a>, <a href="12-dtd.html#SP27">&#167;27</a>), 12/cad (<a href="12-cad.html#SP7">&#167;7</a>), 13/rsfk (<a href="13-rsfk.html#SP25_6_2">&#167;25.6.2</a>, <a href="13-rsfk.html#SP25_6_3">&#167;25.6.3</a>, <a href="13-rsfk.html#SP25_6_4">&#167;25.6.4</a>), 14/lv (<a href="14-lv.html#SP14_1">&#167;14.1</a>, <a href="14-lv.html#SP14_5">&#167;14.5</a>), 14/cn (<a href="14-cn.html#SP16_3">&#167;16.3</a>), 20/eq (<a href="20-eq.html#SP48">&#167;48</a>), 25/cii (<a href="25-cii.html#SP1_2_1">&#167;1.2.1</a>, <a href="25-cii.html#SP3_5_1">&#167;3.5.1</a>, <a href="25-cii.html#SP3_5_3">&#167;3.5.3</a>), 25/cp (<a href="25-cp.html#SP5_3_5">&#167;5.3.5</a>), 27/is (<a href="27-is.html#SP31_9">&#167;31.9</a>).</p>
<p class="endnote">The function LocalVariables::declare_this is used in <a href="#SP8">&#167;8</a>, <a href="#SP10">&#167;10</a>, <a href="#SP11">&#167;11</a>, <a href="#SP27">&#167;27</a>, <a href="#SP28">&#167;28</a>, <a href="#SP29">&#167;29</a>, <a href="#SP41">&#167;41</a>, <a href="#SP43">&#167;43</a>, <a href="#SP45">&#167;45</a>, 4/am (<a href="4-am.html#SP34_2">&#167;34.2</a>), 11/tr (<a href="11-tr.html#SP10">&#167;10</a>), 12/dtd (<a href="12-dtd.html#SP9">&#167;9</a>, <a href="12-dtd.html#SP23">&#167;23</a>, <a href="12-dtd.html#SP25">&#167;25</a>, <a href="12-dtd.html#SP26">&#167;26</a>, <a href="12-dtd.html#SP27">&#167;27</a>), 12/cad (<a href="12-cad.html#SP7">&#167;7</a>), 13/rsfk (<a href="13-rsfk.html#SP24_6_2">&#167;24.6.2</a>, <a href="13-rsfk.html#SP24_6_3">&#167;24.6.3</a>, <a href="13-rsfk.html#SP24_6_4">&#167;24.6.4</a>), 14/lv (<a href="14-lv.html#SP14_1">&#167;14.1</a>, <a href="14-lv.html#SP14_5">&#167;14.5</a>), 14/cn (<a href="14-cn.html#SP16_3">&#167;16.3</a>), 20/eq (<a href="20-eq.html#SP48">&#167;48</a>), 25/cii (<a href="25-cii.html#SP1_2_1">&#167;1.2.1</a>, <a href="25-cii.html#SP3_5_1">&#167;3.5.1</a>, <a href="25-cii.html#SP3_5_3">&#167;3.5.3</a>), 25/cp (<a href="25-cp.html#SP5_3_5">&#167;5.3.5</a>), 27/is (<a href="27-is.html#SP31_9">&#167;31.9</a>).</p>
<p class="endnote">The function LocalVariables::create_and_declare is used in 13/rsfk (<a href="13-rsfk.html#SP25_4_1">&#167;25.4.1</a>, <a href="13-rsfk.html#SP25_4_2">&#167;25.4.2</a>).</p>
<p class="endnote">The function LocalVariables::create_and_declare is used in 13/rsfk (<a href="13-rsfk.html#SP24_4_1">&#167;24.4.1</a>, <a href="13-rsfk.html#SP24_4_2">&#167;24.4.2</a>).</p>
<p class="inwebparagraph"><a id="SP48"></a><b>&#167;48. </b>Note that a deallocated "let" variable retains its most recent name.
</p>

View file

@ -62,11 +62,11 @@ should always be supplied for "To..." phrases, but left null for rules.
&lt;<span class="cwebmacro">Compile some commentary about the routine to follow</span> <span class="cwebmacronumber">3.1</span>&gt;<span class="plain">;</span>
<span class="functiontext">Routines::begin_framed</span><span class="plain">(</span><span class="functiontext">Routines::Compile::iname</span><span class="plain">(</span><span class="identifier">ph</span><span class="plain">, </span><span class="identifier">req</span><span class="plain">), &amp;(</span><span class="identifier">ph</span><span class="plain">-</span><span class="element">&gt;stack_frame</span><span class="plain">));</span>
<span class="reserved">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="functiontext">Routines::begin_framed</span><span class="plain">(</span><span class="functiontext">Routines::Compile::iname</span><span class="plain">(</span><span class="identifier">ph</span><span class="plain">, </span><span class="identifier">req</span><span class="plain">), &amp;(</span><span class="identifier">ph</span><span class="plain">-</span><span class="element">&gt;stack_frame</span><span class="plain">));</span>
&lt;<span class="cwebmacro">Compile the body of the routine</span> <span class="cwebmacronumber">3.3</span>&gt;<span class="plain">;</span>
<span class="functiontext">Routines::end_in_current_package</span><span class="plain">();</span>
<span class="functiontext">Routines::end</span><span class="plain">(</span><span class="identifier">save</span><span class="plain">);</span>
<span class="identifier">phrase_being_compiled</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">current_sentence</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>

View file

@ -189,7 +189,7 @@ behave more like dictionary words and the <code class="display"><span class="ext
<p class="inwebparagraph"></p>
<p class="endnote">The function CompiledText::from_wide_string is used in <a href="#SP5">&#167;5</a>, 5/lp (<a href="5-lp.html#SP27_3_1">&#167;27.3.1</a>), 13/rsfk (<a href="13-rsfk.html#SP25_3">&#167;25.3</a>), 17/tl (<a href="17-tl.html#SP14_1">&#167;14.1</a>).</p>
<p class="endnote">The function CompiledText::from_wide_string is used in <a href="#SP5">&#167;5</a>, 5/lp (<a href="5-lp.html#SP27_3_1">&#167;27.3.1</a>), 13/rsfk (<a href="13-rsfk.html#SP24_3">&#167;24.3</a>), 17/tl (<a href="17-tl.html#SP14_1">&#167;14.1</a>).</p>
<p class="endnote">The function CompiledText::from_wide_string_for_emission is used in 25/cii (<a href="25-cii.html#SP3_5_8_1">&#167;3.5.8.1</a>).</p>

View file

@ -809,7 +809,7 @@ of defined adjectives. So:
<span class="functiontext">Holsters::unholster_pair</span><span class="plain">(&amp;</span><span class="identifier">VH2</span><span class="plain">, &amp;</span><span class="identifier">v1</span><span class="plain">, &amp;</span><span class="identifier">v2</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">v1</span><span class="plain"> == </span><span class="identifier">ALIAS_IVAL</span><span class="plain">) {</span>
<span class="identifier">PUT</span><span class="plain">(</span><span class="identifier">URL_SYMBOL_CHAR</span><span class="plain">);</span>
<span class="identifier">inter_symbols_table</span><span class="plain"> *</span><span class="identifier">T</span><span class="plain"> = </span><span class="identifier">Inter::Packages::scope</span><span class="plain">(</span><span class="functiontext">Packaging::current_enclosure</span><span class="plain">()-</span><span class="element">&gt;actual_package</span><span class="plain">);</span>
<span class="identifier">inter_symbols_table</span><span class="plain"> *</span><span class="identifier">T</span><span class="plain"> = </span><span class="identifier">Inter::Packages::scope</span><span class="plain">(</span><span class="functiontext">Emit::current_enclosure</span><span class="plain">()-</span><span class="element">&gt;actual_package</span><span class="plain">);</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain"> = </span><span class="identifier">Inter::SymbolsTables::symbol_from_id</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">v2</span><span class="plain">);</span>
<span class="identifier">Inter::SymbolsTables::symbol_to_url_name</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">);</span>
<span class="identifier">PUT</span><span class="plain">(</span><span class="identifier">URL_SYMBOL_CHAR</span><span class="plain">);</span>

View file

@ -9,36 +9,26 @@
<body>
<!--Weave of '26/rt' generated by 7-->
<ul class="crumbs"><li><a href="../webs.html">&#9733;</a></li><li><a href="index.html">core</a></li><li><a href="index.html#26">Chapter 26: Compilation Utilities</a></li><li><b>Routines</b></li></ul><p class="purpose">To compile the bones of routines, and their local variable declarations.</p>
<ul class="crumbs"><li><a href="../webs.html">&#9733;</a></li><li><a href="index.html">core</a></li><li><a href="index.html#26">Chapter 26: Compilation Utilities</a></li><li><b>Routines</b></li></ul><p class="purpose">To compile the bones of functions, and their local variable declarations.</p>
<p class="inwebparagraph"><a id="SP1"></a><b>&#167;1. </b>The code following is used throughout Inform, whenever we want to compile
an I6 routine. Sometimes that's in order to define a phrase, but often not.
a function. Sometimes that's in order to define a phrase, but often not.
</p>
<p class="inwebparagraph">We then compile the body code of our routine, and conclude with:
<p class="inwebparagraph">There are two ways to begin a function: specifying a stack frame which has
already been set up, or not. Here's not:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">Routines::end_in_current_package();</span>
<span class="reserved">packaging_state</span><span class="plain"> </span><span class="functiontext">Routines::begin</span><span class="plain">(</span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">) {</span>
<span class="reserved">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="functiontext">Packaging::enter_home_of</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">);</span>
<span class="functiontext">Routines::begin_framed</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">save</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Routines::begin_in_current_package</span><span class="plain">(</span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">) {</span>
<span class="functiontext">Routines::begin_framed</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">Routines::begin_framed</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function Routines::begin is used in 4/am (<a href="4-am.html#SP34_2">&#167;34.2</a>, <a href="4-am.html#SP43">&#167;43</a>), 5/lp (<a href="5-lp.html#SP27">&#167;27</a>), 5/nv (<a href="5-nv.html#SP16">&#167;16</a>), 6/bp (<a href="6-bp.html#SP33">&#167;33</a>), 6/rlt (<a href="6-rlt.html#SP15">&#167;15</a>, <a href="6-rlt.html#SP15_2">&#167;15.2</a>, <a href="6-rlt.html#SP17">&#167;17</a>, <a href="6-rlt.html#SP29_1">&#167;29.1</a>, <a href="6-rlt.html#SP29_2">&#167;29.2</a>, <a href="6-rlt.html#SP29_3">&#167;29.3</a>, <a href="6-rlt.html#SP29_4">&#167;29.4</a>, <a href="6-rlt.html#SP29_5">&#167;29.5</a>, <a href="6-rlt.html#SP29_6">&#167;29.6</a>, <a href="6-rlt.html#SP30">&#167;30</a>), 6/nv (<a href="6-nv.html#SP18_1">&#167;18.1</a>, <a href="6-nv.html#SP18_2">&#167;18.2</a>), 8/ef (<a href="8-ef.html#SP19">&#167;19</a>), 12/cdp (<a href="12-cdp.html#SP2_1">&#167;2.1</a>), 13/rsfk (<a href="13-rsfk.html#SP16_3">&#167;16.3</a>, <a href="13-rsfk.html#SP25_1">&#167;25.1</a>, <a href="13-rsfk.html#SP25_2">&#167;25.2</a>, <a href="13-rsfk.html#SP25_3">&#167;25.3</a>, <a href="13-rsfk.html#SP25_4">&#167;25.4</a>, <a href="13-rsfk.html#SP25_5">&#167;25.5</a>, <a href="13-rsfk.html#SP25_6_1">&#167;25.6.1</a>, <a href="13-rsfk.html#SP25_6_2">&#167;25.6.2</a>, <a href="13-rsfk.html#SP25_6_3">&#167;25.6.3</a>, <a href="13-rsfk.html#SP25_6_4">&#167;25.6.4</a>, <a href="13-rsfk.html#SP25_6_5">&#167;25.6.5</a>, <a href="13-rsfk.html#SP25_6_6">&#167;25.6.6</a>, <a href="13-rsfk.html#SP26">&#167;26</a>), 15/ma (<a href="15-ma.html#SP13">&#167;13</a>), 17/tl (<a href="17-tl.html#SP14_2">&#167;14.2</a>), 17/ts (<a href="17-ts.html#SP11">&#167;11</a>), 17/rs (<a href="17-rs.html#SP6_1">&#167;6.1</a>, <a href="17-rs.html#SP6_2">&#167;6.2</a>, <a href="17-rs.html#SP7_2">&#167;7.2</a>), 19/tc (<a href="19-tc.html#SP8">&#167;8</a>), 19/rsft (<a href="19-rsft.html#SP2">&#167;2</a>), 20/eq (<a href="20-eq.html#SP43">&#167;43</a>), 21/rl (<a href="21-rl.html#SP20">&#167;20</a>, <a href="21-rl.html#SP22_1">&#167;22.1</a>), 21/rb (<a href="21-rb.html#SP23">&#167;23</a>, <a href="21-rb.html#SP24_1_1">&#167;24.1.1</a>), 21/rl2 (<a href="21-rl2.html#SP14_1">&#167;14.1</a>), 21/fao (<a href="21-fao.html#SP10">&#167;10</a>), 21/sv (<a href="21-sv.html#SP3">&#167;3</a>), 22/pav (<a href="22-pav.html#SP9_2">&#167;9.2</a>), 24/ch (<a href="24-ch.html#SP6">&#167;6</a>, <a href="24-ch.html#SP7">&#167;7</a>), 26/uo (<a href="26-uo.html#SP21_1">&#167;21.1</a>, <a href="26-uo.html#SP21_2">&#167;21.2</a>), 26/lt (<a href="26-lt.html#SP4_1">&#167;4.1</a>), 26/ts (<a href="26-ts.html#SP10">&#167;10</a>, <a href="26-ts.html#SP11">&#167;11</a>).</p>
<p class="endnote">The function Routines::begin_in_current_package appears nowhere else.</p>
<p class="endnote">The function Routines::begin is used in 4/am (<a href="4-am.html#SP34_2">&#167;34.2</a>, <a href="4-am.html#SP43">&#167;43</a>), 5/lp (<a href="5-lp.html#SP27">&#167;27</a>), 5/nv (<a href="5-nv.html#SP16">&#167;16</a>), 6/bp (<a href="6-bp.html#SP33">&#167;33</a>), 6/rlt (<a href="6-rlt.html#SP15">&#167;15</a>, <a href="6-rlt.html#SP15_2">&#167;15.2</a>, <a href="6-rlt.html#SP17">&#167;17</a>, <a href="6-rlt.html#SP29_1">&#167;29.1</a>, <a href="6-rlt.html#SP29_2">&#167;29.2</a>, <a href="6-rlt.html#SP29_3">&#167;29.3</a>, <a href="6-rlt.html#SP29_4">&#167;29.4</a>, <a href="6-rlt.html#SP29_5">&#167;29.5</a>, <a href="6-rlt.html#SP29_6">&#167;29.6</a>, <a href="6-rlt.html#SP30">&#167;30</a>), 6/nv (<a href="6-nv.html#SP18_1">&#167;18.1</a>, <a href="6-nv.html#SP18_2">&#167;18.2</a>), 8/ef (<a href="8-ef.html#SP19">&#167;19</a>), 12/cdp (<a href="12-cdp.html#SP2_1">&#167;2.1</a>), 13/rsfk (<a href="13-rsfk.html#SP16_3">&#167;16.3</a>, <a href="13-rsfk.html#SP24_1">&#167;24.1</a>, <a href="13-rsfk.html#SP24_2">&#167;24.2</a>, <a href="13-rsfk.html#SP24_3">&#167;24.3</a>, <a href="13-rsfk.html#SP24_4">&#167;24.4</a>, <a href="13-rsfk.html#SP24_5">&#167;24.5</a>, <a href="13-rsfk.html#SP24_6_1">&#167;24.6.1</a>, <a href="13-rsfk.html#SP24_6_2">&#167;24.6.2</a>, <a href="13-rsfk.html#SP24_6_3">&#167;24.6.3</a>, <a href="13-rsfk.html#SP24_6_4">&#167;24.6.4</a>, <a href="13-rsfk.html#SP24_6_5">&#167;24.6.5</a>, <a href="13-rsfk.html#SP24_6_6">&#167;24.6.6</a>, <a href="13-rsfk.html#SP25">&#167;25</a>), 15/ma (<a href="15-ma.html#SP13">&#167;13</a>), 17/tl (<a href="17-tl.html#SP14_2">&#167;14.2</a>), 17/ts (<a href="17-ts.html#SP11">&#167;11</a>), 17/rs (<a href="17-rs.html#SP6_1">&#167;6.1</a>, <a href="17-rs.html#SP6_2">&#167;6.2</a>, <a href="17-rs.html#SP7_2">&#167;7.2</a>), 19/tc (<a href="19-tc.html#SP8">&#167;8</a>), 19/rsft (<a href="19-rsft.html#SP2">&#167;2</a>), 20/eq (<a href="20-eq.html#SP43">&#167;43</a>), 21/rl (<a href="21-rl.html#SP20">&#167;20</a>, <a href="21-rl.html#SP22_1">&#167;22.1</a>), 21/rb (<a href="21-rb.html#SP23">&#167;23</a>, <a href="21-rb.html#SP24_1_1">&#167;24.1.1</a>), 21/rl2 (<a href="21-rl2.html#SP14_1">&#167;14.1</a>), 21/fao (<a href="21-fao.html#SP10">&#167;10</a>), 21/sv (<a href="21-sv.html#SP3">&#167;3</a>), 22/pav (<a href="22-pav.html#SP9_2">&#167;9.2</a>), 24/ch (<a href="24-ch.html#SP6">&#167;6</a>, <a href="24-ch.html#SP7">&#167;7</a>), 26/uo (<a href="26-uo.html#SP21_1">&#167;21.1</a>, <a href="26-uo.html#SP21_2">&#167;21.2</a>), 26/lt (<a href="26-lt.html#SP4_1">&#167;4.1</a>), 26/ts (<a href="26-ts.html#SP10">&#167;10</a>, <a href="26-ts.html#SP11">&#167;11</a>).</p>
<p class="inwebparagraph"><a id="SP2"></a><b>&#167;2. </b>During the time when we're compiling the body of the routine,
we need to keep track of:
@ -54,27 +44,24 @@ we need to keep track of:
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP3"></a><b>&#167;3. </b>So here is the flip:
<p class="inwebparagraph"><a id="SP3"></a><b>&#167;3. </b>So here is the general version, in which <code class="display"><span class="extract">phsf</span></code> may or may not be a
pre-existing stack frame:
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Routines::begin_framed</span><span class="plain">(</span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain">, </span><span class="reserved">ph_stack_frame</span><span class="plain"> *</span><span class="identifier">phsf</span><span class="plain">) {</span>
<span class="reserved">packaging_state</span><span class="plain"> </span><span class="functiontext">Routines::begin_framed</span><span class="plain">(</span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain">, </span><span class="reserved">ph_stack_frame</span><span class="plain"> *</span><span class="identifier">phsf</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">iname</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"no iname for routine"</span><span class="plain">);</span>
<span class="reserved">package_request</span><span class="plain"> *</span><span class="identifier">R</span><span class="plain"> = </span><span class="functiontext">Packaging::home_of</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">R</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) || (</span><span class="identifier">R</span><span class="plain"> == </span><span class="functiontext">Hierarchy::main</span><span class="plain">())) {</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"Routine outside of package: ................................................ %n\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">iname</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">STDERR</span><span class="plain">, </span><span class="string">"Routine outside of package: %n\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">iname</span><span class="plain">);</span>
<span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"routine outside of package"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="identifier">currently_compiling_iname</span><span class="plain"> = </span><span class="identifier">iname</span><span class="plain">;</span>
&lt;<span class="cwebmacro">Prepare a suitable stack frame</span> <span class="cwebmacronumber">3.1</span>&gt;<span class="plain">;</span>
<span class="functiontext">Frames::Blocks::begin_code_blocks</span><span class="plain">();</span>
<span class="identifier">currently_compiling_inter_block</span><span class="plain"> = </span><span class="functiontext">Emit::block</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">);</span>
<span class="reserved">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="functiontext">Emit::unused_packaging_state</span><span class="plain">();</span>
<span class="identifier">currently_compiling_inter_block</span><span class="plain"> = </span><span class="functiontext">Emit::block</span><span class="plain">(&amp;</span><span class="identifier">save</span><span class="plain">, </span><span class="identifier">iname</span><span class="plain">);</span>
<span class="functiontext">LocalVariables::declare</span><span class="plain">(</span><span class="identifier">phsf</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">save</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="functiontext">Routines::self</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
@ -113,26 +100,22 @@ create a new nonphrasal stack frame.
<p class="endnote">This code is used in <a href="#SP3">&#167;3</a>.</p>
<p class="inwebparagraph"><a id="SP4"></a><b>&#167;4. </b>And here is the flop:
<p class="inwebparagraph"><a id="SP4"></a><b>&#167;4. </b>As can be seen, very much more work is involved in finishing a function
than in starting it. This is because we need to split into two cases: one
where the code we've just compiled required allocation of heap memory
(e.g. for dynamic strings or lists), and another simpler case where it
did not.
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Routines::end</span><span class="plain">(</span><span class="reserved">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain">) {</span>
<span class="functiontext">Routines::end_in_current_package</span><span class="plain">();</span>
<span class="functiontext">Packaging::exit</span><span class="plain">(</span><span class="identifier">save</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Routines::end_in_current_package</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">R_kind</span><span class="plain"> = </span><span class="functiontext">LocalVariables::deduced_function_kind</span><span class="plain">(</span><span class="identifier">currently_compiling_in_frame</span><span class="plain">);</span>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">kernel_name</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">, *</span><span class="identifier">public_name</span><span class="plain"> = </span><span class="identifier">currently_compiling_iname</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">currently_compiling_in_frame</span><span class="plain">-</span><span class="element">&gt;allocated_pointers</span><span class="plain">) ||</span>
<span class="plain">(</span><span class="identifier">currently_compiling_in_frame</span><span class="plain">-</span><span class="element">&gt;no_formal_parameters_needed</span><span class="plain"> &gt; 0)) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Packaging::housed_in_function</span><span class="plain">(</span><span class="identifier">public_name</span><span class="plain">))</span>
<span class="identifier">kernel_name</span><span class="plain"> = </span><span class="functiontext">Hierarchy::make_kernel_iname</span><span class="plain">(</span><span class="functiontext">Packaging::home_of</span><span class="plain">(</span><span class="identifier">public_name</span><span class="plain">));</span>
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"routine not housed in function"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">(</span><span class="identifier">currently_compiling_in_frame</span><span class="plain">-</span><span class="element">&gt;no_formal_parameters_needed</span><span class="plain"> &gt; 0))</span>
<span class="identifier">kernel_name</span><span class="plain"> = </span><span class="functiontext">Emit::kernel</span><span class="plain">(</span><span class="identifier">public_name</span><span class="plain">);</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">needed</span><span class="plain"> = </span><span class="functiontext">LocalVariables::count</span><span class="plain">(</span><span class="identifier">currently_compiling_in_frame</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">kernel_name</span><span class="plain">) </span><span class="identifier">needed</span><span class="plain">++;</span>
@ -150,14 +133,13 @@ create a new nonphrasal stack frame.
<span class="functiontext">Frames::Blocks::end_code_blocks</span><span class="plain">();</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">currently_compiling_nnp</span><span class="plain">) </span><span class="functiontext">Frames::remove_nonphrase_stack_frame</span><span class="plain">();</span>
<span class="functiontext">Frames::remove_current</span><span class="plain">();</span>
<span class="functiontext">Emit::end_main_block</span><span class="plain">(</span><span class="identifier">save</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function Routines::end is used in 4/am (<a href="4-am.html#SP34_2">&#167;34.2</a>, <a href="4-am.html#SP43">&#167;43</a>), 5/lp (<a href="5-lp.html#SP27">&#167;27</a>), 5/nv (<a href="5-nv.html#SP16">&#167;16</a>), 6/bp (<a href="6-bp.html#SP33">&#167;33</a>), 6/rlt (<a href="6-rlt.html#SP15">&#167;15</a>, <a href="6-rlt.html#SP15_2">&#167;15.2</a>, <a href="6-rlt.html#SP17">&#167;17</a>, <a href="6-rlt.html#SP29_1">&#167;29.1</a>, <a href="6-rlt.html#SP29_2">&#167;29.2</a>, <a href="6-rlt.html#SP29_3">&#167;29.3</a>, <a href="6-rlt.html#SP29_4">&#167;29.4</a>, <a href="6-rlt.html#SP29_5">&#167;29.5</a>, <a href="6-rlt.html#SP29_6">&#167;29.6</a>, <a href="6-rlt.html#SP30">&#167;30</a>), 6/nv (<a href="6-nv.html#SP18_1">&#167;18.1</a>, <a href="6-nv.html#SP18_2">&#167;18.2</a>), 8/ef (<a href="8-ef.html#SP19">&#167;19</a>), 12/cdp (<a href="12-cdp.html#SP2_1">&#167;2.1</a>), 13/rsfk (<a href="13-rsfk.html#SP16_3">&#167;16.3</a>, <a href="13-rsfk.html#SP25_1">&#167;25.1</a>, <a href="13-rsfk.html#SP25_2">&#167;25.2</a>, <a href="13-rsfk.html#SP25_3">&#167;25.3</a>, <a href="13-rsfk.html#SP25_4">&#167;25.4</a>, <a href="13-rsfk.html#SP25_5">&#167;25.5</a>, <a href="13-rsfk.html#SP25_6_1">&#167;25.6.1</a>, <a href="13-rsfk.html#SP25_6_2">&#167;25.6.2</a>, <a href="13-rsfk.html#SP25_6_3">&#167;25.6.3</a>, <a href="13-rsfk.html#SP25_6_4">&#167;25.6.4</a>, <a href="13-rsfk.html#SP25_6_5">&#167;25.6.5</a>, <a href="13-rsfk.html#SP25_6_6">&#167;25.6.6</a>, <a href="13-rsfk.html#SP26">&#167;26</a>), 15/ma (<a href="15-ma.html#SP13">&#167;13</a>), 17/tl (<a href="17-tl.html#SP14_2">&#167;14.2</a>), 17/ts (<a href="17-ts.html#SP11">&#167;11</a>), 17/rs (<a href="17-rs.html#SP6_1">&#167;6.1</a>, <a href="17-rs.html#SP6_2">&#167;6.2</a>, <a href="17-rs.html#SP7_2">&#167;7.2</a>), 19/tc (<a href="19-tc.html#SP8">&#167;8</a>), 19/rsft (<a href="19-rsft.html#SP2">&#167;2</a>), 20/eq (<a href="20-eq.html#SP43">&#167;43</a>), 21/rl (<a href="21-rl.html#SP20">&#167;20</a>, <a href="21-rl.html#SP22_1">&#167;22.1</a>), 21/rb (<a href="21-rb.html#SP23">&#167;23</a>, <a href="21-rb.html#SP24_1_5">&#167;24.1.5</a>), 21/rl2 (<a href="21-rl2.html#SP14_1">&#167;14.1</a>), 21/fao (<a href="21-fao.html#SP10">&#167;10</a>), 21/sv (<a href="21-sv.html#SP3">&#167;3</a>), 22/pav (<a href="22-pav.html#SP9_2">&#167;9.2</a>), 24/ch (<a href="24-ch.html#SP6">&#167;6</a>, <a href="24-ch.html#SP7">&#167;7</a>), 26/uo (<a href="26-uo.html#SP21_1">&#167;21.1</a>, <a href="26-uo.html#SP21_2">&#167;21.2</a>), 26/lt (<a href="26-lt.html#SP4_1">&#167;4.1</a>), 26/ts (<a href="26-ts.html#SP10">&#167;10</a>, <a href="26-ts.html#SP11">&#167;11</a>).</p>
<p class="endnote">The function Routines::end_in_current_package is used in 25/cp (<a href="25-cp.html#SP3">&#167;3</a>).</p>
<p class="endnote">The function Routines::end is used in 4/am (<a href="4-am.html#SP34_2">&#167;34.2</a>, <a href="4-am.html#SP43">&#167;43</a>), 5/lp (<a href="5-lp.html#SP27">&#167;27</a>), 5/nv (<a href="5-nv.html#SP16">&#167;16</a>), 6/bp (<a href="6-bp.html#SP33">&#167;33</a>), 6/rlt (<a href="6-rlt.html#SP15">&#167;15</a>, <a href="6-rlt.html#SP15_2">&#167;15.2</a>, <a href="6-rlt.html#SP17">&#167;17</a>, <a href="6-rlt.html#SP29_1">&#167;29.1</a>, <a href="6-rlt.html#SP29_2">&#167;29.2</a>, <a href="6-rlt.html#SP29_3">&#167;29.3</a>, <a href="6-rlt.html#SP29_4">&#167;29.4</a>, <a href="6-rlt.html#SP29_5">&#167;29.5</a>, <a href="6-rlt.html#SP29_6">&#167;29.6</a>, <a href="6-rlt.html#SP30">&#167;30</a>), 6/nv (<a href="6-nv.html#SP18_1">&#167;18.1</a>, <a href="6-nv.html#SP18_2">&#167;18.2</a>), 8/ef (<a href="8-ef.html#SP19">&#167;19</a>), 12/cdp (<a href="12-cdp.html#SP2_1">&#167;2.1</a>), 13/rsfk (<a href="13-rsfk.html#SP16_3">&#167;16.3</a>, <a href="13-rsfk.html#SP24_1">&#167;24.1</a>, <a href="13-rsfk.html#SP24_2">&#167;24.2</a>, <a href="13-rsfk.html#SP24_3">&#167;24.3</a>, <a href="13-rsfk.html#SP24_4">&#167;24.4</a>, <a href="13-rsfk.html#SP24_5">&#167;24.5</a>, <a href="13-rsfk.html#SP24_6_1">&#167;24.6.1</a>, <a href="13-rsfk.html#SP24_6_2">&#167;24.6.2</a>, <a href="13-rsfk.html#SP24_6_3">&#167;24.6.3</a>, <a href="13-rsfk.html#SP24_6_4">&#167;24.6.4</a>, <a href="13-rsfk.html#SP24_6_5">&#167;24.6.5</a>, <a href="13-rsfk.html#SP24_6_6">&#167;24.6.6</a>, <a href="13-rsfk.html#SP25">&#167;25</a>), 15/ma (<a href="15-ma.html#SP13">&#167;13</a>), 17/tl (<a href="17-tl.html#SP14_2">&#167;14.2</a>), 17/ts (<a href="17-ts.html#SP11">&#167;11</a>), 17/rs (<a href="17-rs.html#SP6_1">&#167;6.1</a>, <a href="17-rs.html#SP6_2">&#167;6.2</a>, <a href="17-rs.html#SP7_2">&#167;7.2</a>), 19/tc (<a href="19-tc.html#SP8">&#167;8</a>), 19/rsft (<a href="19-rsft.html#SP2">&#167;2</a>), 20/eq (<a href="20-eq.html#SP43">&#167;43</a>), 21/rl (<a href="21-rl.html#SP20">&#167;20</a>, <a href="21-rl.html#SP22_1">&#167;22.1</a>), 21/rb (<a href="21-rb.html#SP23">&#167;23</a>, <a href="21-rb.html#SP24_1_5">&#167;24.1.5</a>), 21/rl2 (<a href="21-rl2.html#SP14_1">&#167;14.1</a>), 21/fao (<a href="21-fao.html#SP10">&#167;10</a>), 21/sv (<a href="21-sv.html#SP3">&#167;3</a>), 22/pav (<a href="22-pav.html#SP9_2">&#167;9.2</a>), 24/ch (<a href="24-ch.html#SP6">&#167;6</a>, <a href="24-ch.html#SP7">&#167;7</a>), 25/cp (<a href="25-cp.html#SP3">&#167;3</a>), 26/uo (<a href="26-uo.html#SP21_1">&#167;21.1</a>, <a href="26-uo.html#SP21_2">&#167;21.2</a>), 26/lt (<a href="26-lt.html#SP4_1">&#167;4.1</a>), 26/ts (<a href="26-ts.html#SP10">&#167;10</a>, <a href="26-ts.html#SP11">&#167;11</a>).</p>
<p class="inwebparagraph"><a id="SP4_1"></a><b>&#167;4.1. </b><code class="display">
&lt;<span class="cwebmacrodefn">Compile an outer shell routine with the public-facing name</span> <span class="cwebmacronumber">4.1</span>&gt; =
@ -168,7 +150,7 @@ create a new nonphrasal stack frame.
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">returns_block_value</span><span class="plain"> =</span>
<span class="identifier">Kinds::Behaviour::uses_pointer_values</span><span class="plain">(</span><span class="identifier">currently_compiling_in_frame</span><span class="plain">-</span><span class="element">&gt;kind_returned</span><span class="plain">);</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">rsymb</span><span class="plain"> = </span><span class="functiontext">Emit::block</span><span class="plain">(</span><span class="identifier">public_name</span><span class="plain">);</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">rsymb</span><span class="plain"> = </span><span class="functiontext">Emit::block</span><span class="plain">(</span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">public_name</span><span class="plain">);</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">I7RBLK_symbol</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
&lt;<span class="cwebmacro">Compile I6 locals for the outer shell</span> <span class="cwebmacronumber">4.1.1</span>&gt;<span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">NBV</span><span class="plain"> = 0;</span>

View file

@ -43,7 +43,7 @@ attached.
<p class="inwebparagraph"></p>
<p class="endnote">The structure test_scenario is accessed in 2/sq, 2/si, 5/ins, 5/nv, 8/ed2, 9/ma, 9/pk, 11/sm, 14/lv, 14/ds2, 15/pr, 15/ep, 15/vp, 15/spr, 16/in, 16/cmw, 17/rs, 19/tc, 19/tb, 19/tod, 20/eq, 21/rl, 21/rl2, 21/fao, 21/rps, 21/sv, 21/ac, 22/ph, 22/pu, 22/dptd, 22/po, 22/pav, 22/tp, 25/cii, 25/cp, 26/uo and here.</p>
<p class="endnote">The structure test_scenario is accessed in 2/sq, 2/si, 5/ins, 5/nv, 8/ed2, 9/ma, 9/pk, 11/sm, 14/lv, 14/ds2, 15/pr, 15/ep, 15/vp, 15/spr, 16/in, 16/cmw, 17/rs, 19/tc, 19/tb, 19/tod, 20/eq, 21/rl, 21/rl2, 21/fao, 21/rps, 21/sv, 21/ac, 22/pu, 22/dptd, 22/po, 22/pav, 22/tp, 25/cii, 25/cp, 26/uo and here.</p>
<p class="inwebparagraph"><a id="SP3"></a><b>&#167;3. </b></p>

View file

@ -350,7 +350,7 @@ at 15, but Glulx allows it to be set with an I6 memory setting.
<p class="inwebparagraph"></p>
<p class="endnote">The function VirtualMachines::supports is used in 13/rsfk (<a href="13-rsfk.html#SP27">&#167;27</a>), 20/eq (<a href="20-eq.html#SP41">&#167;41</a>).</p>
<p class="endnote">The function VirtualMachines::supports is used in 13/rsfk (<a href="13-rsfk.html#SP26">&#167;26</a>), 20/eq (<a href="20-eq.html#SP41">&#167;41</a>).</p>
<p class="inwebparagraph"><a id="SP12"></a><b>&#167;12. </b>When releasing a blorbed story file, the file extension depends on the
story file wrapped inside. (This is a dubious idea, in the opinion of

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -215,7 +215,9 @@ a memo to attach):
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="functiontext">InterNames::explicitly_named_in_template</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">) {</span>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain"> = </span><span class="functiontext">InterNames::explicitly_named</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">, </span><span class="functiontext">Hierarchy::template</span><span class="plain">());</span>
<span class="reserved">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="functiontext">Packaging::enter_home_of</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">);</span>
<span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain"> = </span><span class="functiontext">Emit::extern</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">K_value</span><span class="plain">);</span>
<span class="functiontext">Packaging::exit</span><span class="plain">(</span><span class="identifier">save</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">iname</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
@ -275,7 +277,7 @@ a memo to attach):
<p class="inwebparagraph"></p>
<p class="endnote">The function InterNames::location is used in 27/pc (<a href="27-pc.html#SP2">&#167;2</a>, <a href="27-pc.html#SP3">&#167;3</a>, <a href="27-pc.html#SP4">&#167;4</a>, <a href="27-pc.html#SP6">&#167;6</a>).</p>
<p class="endnote">The function InterNames::location is used in 27/pc (<a href="27-pc.html#SP2">&#167;2</a>, <a href="27-pc.html#SP3">&#167;3</a>, <a href="27-pc.html#SP4">&#167;4</a>, <a href="27-pc.html#SP6">&#167;6</a>), 27/ei (<a href="27-ei.html#SP5">&#167;5</a>).</p>
<p class="inwebparagraph"><a id="SP8"></a><b>&#167;8. Conversion of inames to symbols. </b>The purpose of inames is not quite to represent identifier names occurring in
given packages inside the Inter hierarchy: it would be more accurate to say
@ -306,7 +308,7 @@ automatically here:
<p class="inwebparagraph"></p>
<p class="endnote">The function InterNames::to_symbol is used in 13/rsfk (<a href="13-rsfk.html#SP5">&#167;5</a>), 15/epv (<a href="15-epv.html#SP4">&#167;4</a>), 21/rl (<a href="21-rl.html#SP9">&#167;9</a>, <a href="21-rl.html#SP11_2">&#167;11.2</a>, <a href="21-rl.html#SP22">&#167;22</a>), 26/iti (<a href="26-iti.html#SP9">&#167;9</a>), 27/is (<a href="27-is.html#SP32">&#167;32</a>), 27/ei (<a href="27-ei.html#SP2">&#167;2</a>, <a href="27-ei.html#SP3">&#167;3</a>, <a href="27-ei.html#SP4">&#167;4</a>, <a href="27-ei.html#SP5">&#167;5</a>).</p>
<p class="endnote">The function InterNames::to_symbol is used in 13/rsfk (<a href="13-rsfk.html#SP5">&#167;5</a>), 15/epv (<a href="15-epv.html#SP4">&#167;4</a>), 21/rl (<a href="21-rl.html#SP11_2">&#167;11.2</a>, <a href="21-rl.html#SP22">&#167;22</a>), 26/iti (<a href="26-iti.html#SP9">&#167;9</a>), 27/is (<a href="27-is.html#SP32">&#167;32</a>), 27/ei (<a href="27-ei.html#SP2">&#167;2</a>, <a href="27-ei.html#SP3">&#167;3</a>, <a href="27-ei.html#SP4">&#167;4</a>, <a href="27-ei.html#SP5">&#167;5</a>).</p>
<hr class="tocbar">
<ul class="toc"><li><a href="27-pt.html">Back to 'Package Types'</a></li><li><a href="27-is.html">Continue with 'Inter Schemas'</a></li></ul><hr class="tocbar">

View file

@ -102,10 +102,6 @@
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">Packaging::enter</span><span class="plain">(</span><span class="functiontext">Packaging::home_of</span><span class="plain">(</span><span class="identifier">N</span><span class="plain">));</span>
<span class="plain">}</span>
<span class="reserved">packaging_state</span><span class="plain"> </span><span class="functiontext">Packaging::enter_current_enclosure</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">Packaging::enter</span><span class="plain">(</span><span class="identifier">current_enclosure</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">package_request</span><span class="plain"> *</span><span class="functiontext">Packaging::current_enclosure</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">current_enclosure</span><span class="plain">;</span>
<span class="plain">}</span>
@ -113,15 +109,13 @@
<p class="inwebparagraph"></p>
<p class="endnote">The function Packaging::stateless is used in 21/rb (<a href="21-rb.html#SP24_1">&#167;24.1</a>).</p>
<p class="endnote">The function Packaging::stateless is used in 27/ei (<a href="27-ei.html#SP5">&#167;5</a>).</p>
<p class="endnote">The function Packaging::home_of is used in 5/ins (<a href="5-ins.html#SP34">&#167;34</a>), 12/cdp (<a href="12-cdp.html#SP5">&#167;5</a>), 13/rsfk (<a href="13-rsfk.html#SP22">&#167;22</a>), 26/rt (<a href="26-rt.html#SP3">&#167;3</a>, <a href="26-rt.html#SP4">&#167;4</a>), 27/hr (<a href="27-hr.html#SP3">&#167;3</a>), 27/hl (<a href="27-hl.html#SP1">&#167;1</a>), 27/ei (<a href="27-ei.html#SP3">&#167;3</a>).</p>
<p class="endnote">The function Packaging::home_of is used in 27/hr (<a href="27-hr.html#SP3">&#167;3</a>), 27/hl (<a href="27-hl.html#SP1">&#167;1</a>), 27/ei (<a href="27-ei.html#SP3">&#167;3</a>).</p>
<p class="endnote">The function Packaging::enter_home_of is used in 5/nv (<a href="5-nv.html#SP16">&#167;16</a>, <a href="5-nv.html#SP25">&#167;25</a>), 13/rsfk (<a href="13-rsfk.html#SP16_2">&#167;16.2</a>), 17/tl (<a href="17-tl.html#SP13">&#167;13</a>), 21/rl2 (<a href="21-rl2.html#SP20">&#167;20</a>), 22/ph (<a href="22-ph.html#SP12">&#167;12</a>), 26/rt (<a href="26-rt.html#SP1">&#167;1</a>), 27/ei (<a href="27-ei.html#SP2">&#167;2</a>, <a href="27-ei.html#SP3">&#167;3</a>).</p>
<p class="endnote">The function Packaging::enter_home_of is used in 27/in (<a href="27-in.html#SP5">&#167;5</a>), 27/ei (<a href="27-ei.html#SP2">&#167;2</a>, <a href="27-ei.html#SP3">&#167;3</a>, <a href="27-ei.html#SP5">&#167;5</a>).</p>
<p class="endnote">The function Packaging::enter_current_enclosure appears nowhere else.</p>
<p class="endnote">The function Packaging::current_enclosure is used in 17/ts (<a href="17-ts.html#SP8">&#167;8</a>, <a href="17-ts.html#SP8_1">&#167;8.1</a>), 18/lc (<a href="18-lc.html#SP5">&#167;5</a>), 26/iti (<a href="26-iti.html#SP9">&#167;9</a>), 27/hr (<a href="27-hr.html#SP5">&#167;5</a>).</p>
<p class="endnote">The function Packaging::current_enclosure is used in 27/hr (<a href="27-hr.html#SP5">&#167;5</a>), 27/ei (<a href="27-ei.html#SP5">&#167;5</a>).</p>
<p class="endnote">The structure packaging_state is private to this section.</p>
@ -137,6 +131,7 @@
<span class="identifier">inter_reading_state</span><span class="plain"> </span><span class="identifier">packaging_entry_stack</span><span class="plain">[</span><span class="constant">MAX_PACKAGING_ENTRY_DEPTH</span><span class="plain">];</span>
<span class="reserved">packaging_state</span><span class="plain"> </span><span class="functiontext">Packaging::enter</span><span class="plain">(</span><span class="reserved">package_request</span><span class="plain"> *</span><span class="identifier">R</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">R</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">R</span><span class="plain"> = </span><span class="functiontext">Hierarchy::main</span><span class="plain">();</span>
<span class="identifier">LOGIF</span><span class="plain">(</span><span class="identifier">PACKAGING</span><span class="plain">, </span><span class="string">"Entering $X\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">R</span><span class="plain">);</span>
<span class="identifier">inter_reading_state</span><span class="plain"> *</span><span class="identifier">IRS</span><span class="plain"> = </span><span class="functiontext">Emit::IRS</span><span class="plain">();</span>
@ -201,11 +196,11 @@
<p class="inwebparagraph"></p>
<p class="endnote">The function Packaging::enter is used in <a href="#SP3">&#167;3</a>, 27/ei (<a href="27-ei.html#SP2">&#167;2</a>, <a href="27-ei.html#SP3">&#167;3</a>).</p>
<p class="endnote">The function Packaging::enter is used in <a href="#SP3">&#167;3</a>, 27/ei (<a href="27-ei.html#SP3">&#167;3</a>).</p>
<p class="endnote">The function Packaging::exit is used in 5/nv (<a href="5-nv.html#SP16">&#167;16</a>, <a href="5-nv.html#SP25">&#167;25</a>), 13/rsfk (<a href="13-rsfk.html#SP16_2">&#167;16.2</a>), 17/tl (<a href="17-tl.html#SP13">&#167;13</a>), 21/rl2 (<a href="21-rl2.html#SP20">&#167;20</a>), 22/ph (<a href="22-ph.html#SP12">&#167;12</a>), 26/rt (<a href="26-rt.html#SP4">&#167;4</a>), 27/ei (<a href="27-ei.html#SP2">&#167;2</a>, <a href="27-ei.html#SP3">&#167;3</a>).</p>
<p class="endnote">The function Packaging::exit is used in 27/in (<a href="27-in.html#SP5">&#167;5</a>), 27/ei (<a href="27-ei.html#SP2">&#167;2</a>, <a href="27-ei.html#SP3">&#167;3</a>, <a href="27-ei.html#SP5">&#167;5</a>).</p>
<p class="endnote">The function Packaging::incarnate is used in 21/rl (<a href="21-rl.html#SP9">&#167;9</a>), 27/ei (<a href="27-ei.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Packaging::incarnate is used in 27/ei (<a href="27-ei.html#SP2">&#167;2</a>, <a href="27-ei.html#SP3">&#167;3</a>, <a href="27-ei.html#SP5">&#167;5</a>).</p>
<p class="endnote">The function Packaging::scope is used in 27/in (<a href="27-in.html#SP8">&#167;8</a>).</p>
@ -448,7 +443,7 @@
<p class="endnote">The function Packaging::datum_text is used in 27/hl (<a href="27-hl.html#SP1">&#167;1</a>).</p>
<p class="endnote">The function Packaging::housed_in_function is used in 26/rt (<a href="26-rt.html#SP4">&#167;4</a>), 27/ei (<a href="27-ei.html#SP3">&#167;3</a>).</p>
<p class="endnote">The function Packaging::housed_in_function is used in 27/ei (<a href="27-ei.html#SP3">&#167;3</a>).</p>
<hr class="tocbar">
<ul class="toc"><li><a href="27-cm.html">Back to 'Compilation Modules'</a></li><li><a href="27-pt.html">Continue with 'Package Types'</a></li></ul><hr class="tocbar">

View file

@ -47,6 +47,8 @@ evidence turns up to suggest otherwise).
<pre class="display">
<span class="reserved">typedef</span><span class="plain"> </span><span class="reserved">struct</span><span class="plain"> </span><span class="reserved">instance</span><span class="plain"> {</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">noun</span><span class="plain"> *</span><span class="identifier">tag</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">package_request</span><span class="plain"> *</span><span class="identifier">instance_package</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">instance_iname</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">instance_emitted</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">creating_sentence</span><span class="plain">; </span> <span class="comment">sentence creating the instance</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">instance_of_set_at</span><span class="plain">; </span> <span class="comment">and identifying its kind</span>
@ -172,6 +174,8 @@ later on.)
<pre class="displaydefn">
<span class="identifier">I</span><span class="plain">-</span><span class="element">&gt;instance_package</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">I</span><span class="plain">-</span><span class="element">&gt;instance_iname</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">I</span><span class="plain">-</span><span class="element">&gt;instance_emitted</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="identifier">I</span><span class="plain">-</span><span class="element">&gt;creating_sentence</span><span class="plain"> = </span><span class="identifier">current_sentence</span><span class="plain">;</span>
<span class="identifier">I</span><span class="plain">-</span><span class="element">&gt;instance_of_set_at</span><span class="plain"> = </span><span class="identifier">current_sentence</span><span class="plain">;</span>
@ -450,9 +454,12 @@ turns up subsequently, e.g., in response to
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="functiontext">Instances::iname</span><span class="plain">(</span><span class="reserved">instance</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">I</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">package_request</span><span class="plain"> *</span><span class="identifier">R</span><span class="plain"> = </span><span class="functiontext">Hierarchy::local_package</span><span class="plain">(</span><span class="constant">INSTANCES_HAP</span><span class="plain">);</span>
<span class="functiontext">UseNouns::noun_compose_identifier</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">-</span><span class="element">&gt;tag</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">-&gt;</span><span class="identifier">allocation_id</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">UseNouns::iname</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">-</span><span class="element">&gt;tag</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">I</span><span class="plain">-</span><span class="element">&gt;instance_iname</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
<span class="identifier">I</span><span class="plain">-</span><span class="element">&gt;instance_package</span><span class="plain"> = </span><span class="functiontext">Hierarchy::local_package</span><span class="plain">(</span><span class="constant">INSTANCES_HAP</span><span class="plain">);</span>
<span class="functiontext">UseNouns::noun_compose_identifier</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">-</span><span class="element">&gt;instance_package</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">-</span><span class="element">&gt;tag</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">-&gt;</span><span class="identifier">allocation_id</span><span class="plain">);</span>
<span class="identifier">I</span><span class="plain">-</span><span class="element">&gt;instance_iname</span><span class="plain"> = </span><span class="functiontext">UseNouns::iname</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">-</span><span class="element">&gt;tag</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="plain">-</span><span class="element">&gt;instance_iname</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
@ -460,7 +467,7 @@ turns up subsequently, e.g., in response to
<p class="endnote">The function Instances::get_name is used in <a href="#SP15_1">&#167;15.1</a>, <a href="#SP15_2">&#167;15.2</a>, <a href="#SP27">&#167;27</a>, <a href="#SP37">&#167;37</a>, <a href="#SP38_2">&#167;38.2</a>, 2/sq (<a href="2-sq.html#SP2">&#167;2</a>), 5/ipw (<a href="5-ipw.html#SP2_2_1">&#167;2.2.1</a>), 8/ed2 (<a href="8-ed2.html#SP3_2_1_7_2">&#167;3.2.1.7.2</a>, <a href="8-ed2.html#SP3_2_1_7_4">&#167;3.2.1.7.4</a>), 9/rpt (<a href="9-rpt.html#SP9_5_1">&#167;9.5.1</a>), 9/tc (<a href="9-tc.html#SP5_4_1">&#167;5.4.1</a>), 14/rv (<a href="14-rv.html#SP3">&#167;3</a>).</p>
<p class="endnote">The function Instances::get_name_in_play is used in <a href="#SP25">&#167;25</a>, 13/rsfk (<a href="13-rsfk.html#SP25_3">&#167;25.3</a>).</p>
<p class="endnote">The function Instances::get_name_in_play is used in <a href="#SP25">&#167;25</a>, 13/rsfk (<a href="13-rsfk.html#SP24_3">&#167;24.3</a>).</p>
<p class="endnote">The function Instances::full_name_includes appears nowhere else.</p>
@ -468,7 +475,7 @@ turns up subsequently, e.g., in response to
<p class="endnote">The function Instances::identifier appears nowhere else.</p>
<p class="endnote">The function Instances::iname is used in <a href="#SP6">&#167;6</a>, <a href="#SP15">&#167;15</a>, <a href="#SP29">&#167;29</a>, <a href="#SP34">&#167;34</a>, 13/rsfk (<a href="13-rsfk.html#SP4">&#167;4</a>, <a href="13-rsfk.html#SP25_3">&#167;25.3</a>), 26/iti (<a href="26-iti.html#SP9">&#167;9</a>), 26/ts (<a href="26-ts.html#SP10">&#167;10</a>).</p>
<p class="endnote">The function Instances::iname is used in <a href="#SP6">&#167;6</a>, <a href="#SP15">&#167;15</a>, <a href="#SP29">&#167;29</a>, <a href="#SP34">&#167;34</a>, 13/rsfk (<a href="13-rsfk.html#SP4">&#167;4</a>, <a href="13-rsfk.html#SP24_3">&#167;24.3</a>), 26/iti (<a href="26-iti.html#SP9">&#167;9</a>), 26/ts (<a href="26-ts.html#SP10">&#167;10</a>).</p>
<p class="inwebparagraph"><a id="SP15"></a><b>&#167;15. Writer. </b></p>
@ -750,7 +757,7 @@ are allowed to refine it. Such revisions are allowed to specialise the kind
<p class="inwebparagraph"></p>
<p class="endnote">The function Instances::count is used in <a href="#SP37">&#167;37</a>, 5/ipw (<a href="5-ipw.html#SP3_3">&#167;3.3</a>), 13/rsfk (<a href="13-rsfk.html#SP25">&#167;25</a>), 13/ki (<a href="13-ki.html#SP4">&#167;4</a>), 19/tb (<a href="19-tb.html#SP26_3">&#167;26.3</a>).</p>
<p class="endnote">The function Instances::count is used in <a href="#SP37">&#167;37</a>, 5/ipw (<a href="5-ipw.html#SP3_3">&#167;3.3</a>), 13/rsfk (<a href="13-rsfk.html#SP24">&#167;24</a>), 13/ki (<a href="13-ki.html#SP4">&#167;4</a>), 19/tb (<a href="19-tb.html#SP26_3">&#167;26.3</a>).</p>
<p class="inwebparagraph"><a id="SP23"></a><b>&#167;23. Connections. </b>Some of Inform's plugins give special meanings to particular kinds, in such
a way that they need to be given additional structure. For example, the
@ -1067,8 +1074,8 @@ declarations) and finally return <code class="display"><span class="extract">TRU
<span class="plain">}</span>
<span class="reserved">package_request</span><span class="plain"> *</span><span class="functiontext">Instances::package</span><span class="plain">(</span><span class="reserved">instance</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">) {</span>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain"> = </span><span class="functiontext">Instances::iname</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">Packaging::home_of</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">);</span>
<span class="functiontext">Instances::iname</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">); </span> <span class="comment">Thus forcing this to exist...</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="plain">-</span><span class="element">&gt;instance_package</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>

View file

@ -2530,7 +2530,7 @@ note that the following uses the raw text of the word.
<p class="inwebparagraph"></p>
<p class="endnote">The function LiteralPatterns::printing_routine is used in 13/rsfk (<a href="13-rsfk.html#SP25_2">&#167;25.2</a>).</p>
<p class="endnote">The function LiteralPatterns::printing_routine is used in 13/rsfk (<a href="13-rsfk.html#SP24_2">&#167;24.2</a>).</p>
<p class="inwebparagraph"><a id="SP27_1"></a><b>&#167;27.1. </b>This was at one time a more complicated criterion, which masked bugs in
the sorting measure.
@ -4188,7 +4188,7 @@ set.
<p class="inwebparagraph"></p>
<p class="endnote">The function LiteralPatterns::list_of_literal_forms is used in <a href="#SP2">&#167;2</a>, <a href="#SP34">&#167;34</a>, 13/rsfk (<a href="13-rsfk.html#SP25_2">&#167;25.2</a>), 13/ki (<a href="13-ki.html#SP1_8">&#167;1.8</a>, <a href="13-ki.html#SP5_1_1">&#167;5.1.1</a>).</p>
<p class="endnote">The function LiteralPatterns::list_of_literal_forms is used in <a href="#SP2">&#167;2</a>, <a href="#SP34">&#167;34</a>, 13/rsfk (<a href="13-rsfk.html#SP24_2">&#167;24.2</a>), 13/ki (<a href="13-ki.html#SP1_8">&#167;1.8</a>, <a href="13-ki.html#SP5_1_1">&#167;5.1.1</a>).</p>
<hr class="tocbar">
<ul class="toc"><li><i>(This section begins Chapter 5: Nouns.)</i></li><li><a href="5-tod.html">Continue with 'Times of Day'</a></li></ul><hr class="tocbar">

View file

@ -594,17 +594,15 @@ there's very little to say.
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">nlv</span><span class="plain">-</span><span class="element">&gt;constant_at_run_time</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">) ||</span>
<span class="plain">(</span><span class="identifier">nlv</span><span class="plain">-</span><span class="element">&gt;housed_in_variables_array</span><span class="plain">)) {</span>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain"> = </span><span class="functiontext">NonlocalVariables::iname</span><span class="plain">(</span><span class="identifier">nlv</span><span class="plain">);</span>
<span class="reserved">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="functiontext">Packaging::enter_home_of</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">);</span>
<span class="reserved">value_holster</span><span class="plain"> </span><span class="identifier">VH</span><span class="plain"> = </span><span class="functiontext">Holsters::new</span><span class="plain">(</span><span class="constant">INTER_DATA_VHMODE</span><span class="plain">);</span>
<span class="constant">BEGIN_COMPILATION_MODE</span><span class="plain">;</span>
<span class="identifier">COMPILATION_MODE_EXIT</span><span class="plain">(</span><span class="constant">DEREFERENCE_POINTERS_CMODE</span><span class="plain">);</span>
<span class="functiontext">NonlocalVariables::compile_initial_value_vh</span><span class="plain">(&amp;</span><span class="identifier">VH</span><span class="plain">, </span><span class="identifier">nlv</span><span class="plain">);</span>
<span class="constant">END_COMPILATION_MODE</span><span class="plain">;</span>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain"> = </span><span class="functiontext">NonlocalVariables::iname</span><span class="plain">(</span><span class="identifier">nlv</span><span class="plain">);</span>
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">v1</span><span class="plain"> = 0, </span><span class="identifier">v2</span><span class="plain"> = 0;</span>
<span class="functiontext">Holsters::unholster_pair</span><span class="plain">(&amp;</span><span class="identifier">VH</span><span class="plain">, &amp;</span><span class="identifier">v1</span><span class="plain">, &amp;</span><span class="identifier">v2</span><span class="plain">);</span>
<span class="functiontext">NonlocalVariables::seek_initial_value</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">, &amp;</span><span class="identifier">v1</span><span class="plain">, &amp;</span><span class="identifier">v2</span><span class="plain">, </span><span class="identifier">nlv</span><span class="plain">);</span>
<span class="constant">END_COMPILATION_MODE</span><span class="plain">;</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">rvalue</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">nlv</span><span class="plain">-</span><span class="element">&gt;housed_in_variables_array</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">)</span>
@ -619,7 +617,6 @@ there's very little to say.
<span class="functiontext">Routines::end</span><span class="plain">(</span><span class="identifier">save</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="functiontext">Packaging::exit</span><span class="plain">(</span><span class="identifier">save</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="plain">}</span>
@ -992,11 +989,9 @@ which makes its kind safe. Hence the error messages.
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">NonlocalVariables::seek_initial_value</span><span class="plain">(</span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> *</span><span class="identifier">v1</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> *</span><span class="identifier">v2</span><span class="plain">, </span><span class="reserved">nonlocal_variable</span><span class="plain"> *</span><span class="identifier">nlv</span><span class="plain">) {</span>
<span class="reserved">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="functiontext">Packaging::enter_home_of</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">);</span>
<span class="reserved">value_holster</span><span class="plain"> </span><span class="identifier">VH</span><span class="plain"> = </span><span class="functiontext">Holsters::new</span><span class="plain">(</span><span class="constant">INTER_DATA_VHMODE</span><span class="plain">);</span>
<span class="functiontext">NonlocalVariables::compile_initial_value_vh</span><span class="plain">(&amp;</span><span class="identifier">VH</span><span class="plain">, </span><span class="identifier">nlv</span><span class="plain">);</span>
<span class="functiontext">Holsters::unholster_pair</span><span class="plain">(&amp;</span><span class="identifier">VH</span><span class="plain">, </span><span class="identifier">v1</span><span class="plain">, </span><span class="identifier">v2</span><span class="plain">);</span>
<span class="functiontext">Packaging::exit</span><span class="plain">(</span><span class="identifier">save</span><span class="plain">);</span>
<span class="reserved">ival_emission</span><span class="plain"> </span><span class="identifier">IE</span><span class="plain"> = </span><span class="functiontext">Emit::begin_ival_emission</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">);</span>
<span class="functiontext">NonlocalVariables::compile_initial_value_vh</span><span class="plain">(</span><span class="functiontext">Emit::ival_holster</span><span class="plain">(&amp;</span><span class="identifier">IE</span><span class="plain">), </span><span class="identifier">nlv</span><span class="plain">);</span>
<span class="functiontext">Emit::end_ival_emission</span><span class="plain">(&amp;</span><span class="identifier">IE</span><span class="plain">, </span><span class="identifier">v1</span><span class="plain">, </span><span class="identifier">v2</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">NonlocalVariables::compile_initial_value_vh</span><span class="plain">(</span><span class="reserved">value_holster</span><span class="plain"> *</span><span class="identifier">VH</span><span class="plain">, </span><span class="reserved">nonlocal_variable</span><span class="plain"> *</span><span class="identifier">nlv</span><span class="plain">) {</span>
@ -1022,9 +1017,9 @@ which makes its kind safe. Hence the error messages.
<p class="endnote">The function NonlocalVariables::emit_initial_value_as_val is used in 21/sv (<a href="21-sv.html#SP3_1">&#167;3.1</a>).</p>
<p class="endnote">The function NonlocalVariables::seek_initial_value appears nowhere else.</p>
<p class="endnote">The function NonlocalVariables::seek_initial_value is used in <a href="#SP16">&#167;16</a>.</p>
<p class="endnote">The function NonlocalVariables::compile_initial_value_vh is used in <a href="#SP16">&#167;16</a>.</p>
<p class="endnote">The function NonlocalVariables::compile_initial_value_vh appears nowhere else.</p>
<p class="inwebparagraph"><a id="SP25_1"></a><b>&#167;25.1. </b><code class="display">
&lt;<span class="cwebmacrodefn">Initialise with the default value of its kind</span> <span class="cwebmacronumber">25.1</span>&gt; =

View file

@ -65,13 +65,13 @@ it's convenient to associate them with nametags.
<p class="endnote">The function UseNouns::identifier is used in 5/ins (<a href="5-ins.html#SP14">&#167;14</a>), 5/ipw (<a href="5-ipw.html#SP3_1">&#167;3.1</a>, <a href="5-ipw.html#SP3_5">&#167;3.5</a>).</p>
<p class="endnote">The function UseNouns::iname is used in 5/ins (<a href="5-ins.html#SP14">&#167;14</a>), 13/rsfk (<a href="13-rsfk.html#SP24">&#167;24</a>).</p>
<p class="endnote">The function UseNouns::iname is used in 5/ins (<a href="5-ins.html#SP14">&#167;14</a>), 13/rsfk (<a href="13-rsfk.html#SP23">&#167;23</a>).</p>
<p class="endnote">The function UseNouns::iname_set is used in 13/rsfk (<a href="13-rsfk.html#SP24">&#167;24</a>).</p>
<p class="endnote">The function UseNouns::iname_set is used in 13/rsfk (<a href="13-rsfk.html#SP23">&#167;23</a>).</p>
<p class="endnote">The function UseNouns::noun_compose_identifier is used in 5/ins (<a href="5-ins.html#SP14">&#167;14</a>).</p>
<p class="endnote">The function UseNouns::noun_impose_identifier is used in 13/rsfk (<a href="13-rsfk.html#SP24">&#167;24</a>).</p>
<p class="endnote">The function UseNouns::noun_impose_identifier is used in 13/rsfk (<a href="13-rsfk.html#SP23">&#167;23</a>).</p>
<p class="endnote">The function UseNouns::noun_set_I6_representation is used in <a href="#SP2_1">&#167;2.1</a>.</p>

View file

@ -771,7 +771,7 @@
</li>
<li>
<p><a href="26-rt.html"><spon class="sectiontitle">Routines</span></a> -
<span class="purpose">To compile the bones of routines, and their local variable declarations.</span></p>
<span class="purpose">To compile the bones of functions, and their local variable declarations.</span></p>
</li>
<li>
<p><a href="26-tti.html"><spon class="sectiontitle">Translate to Identifiers</span></a> -

View file

@ -36,7 +36,7 @@ but on others it's compiled into the body of an application. So:
<p class="inwebparagraph"></p>
<p class="endnote">The function main is used in 2/pt (<a href="2-pt.html#SP52">&#167;52</a>), 2/pl2 (<a href="2-pl2.html#SP3_1">&#167;3.1</a>), 2/pck (<a href="2-pck.html#SP2">&#167;2</a>), 3/rst (<a href="3-rst.html#SP6">&#167;6</a>), 4/am (<a href="4-am.html#SP26_1">&#167;26.1</a>), 8/ef (<a href="8-ef.html#SP26">&#167;26</a>), 8/ed2 (<a href="8-ed2.html#SP3_2">&#167;3.2</a>), 10/varc (<a href="10-varc.html#SP14">&#167;14</a>), 19/tb (<a href="19-tb.html#SP27">&#167;27</a>, <a href="19-tb.html#SP27_1">&#167;27.1</a>, <a href="19-tb.html#SP27_1_3">&#167;27.1.3</a>, <a href="19-tb.html#SP29">&#167;29</a>), 21/rl2 (<a href="21-rl2.html#SP23">&#167;23</a>), 26/uo (<a href="26-uo.html#SP11_1">&#167;11.1</a>), 27/hr (<a href="27-hr.html#SP5">&#167;5</a>), 2/lnk (<a href="2-lnk.html#SP1">&#167;1</a>), 2/res (<a href="2-res.html#SP1">&#167;1</a>), 3/cg (<a href="3-cg.html#SP1">&#167;1</a>), 2/hf (<a href="2-hf.html#SP6">&#167;6</a>).</p>
<p class="endnote">The function main is used in 2/pt (<a href="2-pt.html#SP52">&#167;52</a>), 2/pl2 (<a href="2-pl2.html#SP3_1">&#167;3.1</a>), 2/pck (<a href="2-pck.html#SP2">&#167;2</a>), 3/rst (<a href="3-rst.html#SP6">&#167;6</a>), 4/am (<a href="4-am.html#SP26_1">&#167;26.1</a>), 8/ef (<a href="8-ef.html#SP26">&#167;26</a>), 8/ed2 (<a href="8-ed2.html#SP3_2">&#167;3.2</a>), 10/varc (<a href="10-varc.html#SP14">&#167;14</a>), 19/tb (<a href="19-tb.html#SP27">&#167;27</a>, <a href="19-tb.html#SP27_1">&#167;27.1</a>, <a href="19-tb.html#SP27_1_3">&#167;27.1.3</a>, <a href="19-tb.html#SP29">&#167;29</a>), 21/rl2 (<a href="21-rl2.html#SP23">&#167;23</a>), 26/uo (<a href="26-uo.html#SP11_1">&#167;11.1</a>), 27/hr (<a href="27-hr.html#SP5">&#167;5</a>), 27/ei (<a href="27-ei.html#SP2">&#167;2</a>), 2/lnk (<a href="2-lnk.html#SP1">&#167;1</a>), 2/res (<a href="2-res.html#SP1">&#167;1</a>), 3/cg (<a href="3-cg.html#SP1">&#167;1</a>), 2/hf (<a href="2-hf.html#SP6">&#167;6</a>).</p>
<p class="inwebparagraph"><a id="SP3"></a><b>&#167;3. </b>As a matter of policy, no module is allowed to start or stop the foundation
module, not even the mighty core; so we take care of that with one more

View file

@ -408,7 +408,7 @@ actually means it's rarely needed.)
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">P_cap_short_name</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
<span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">property_iname</span><span class="plain"> = </span><span class="identifier">Hierarchy::find</span><span class="plain">(</span><span class="identifier">CAPSHORTNAME_HL</span><span class="plain">);</span>
<span class="identifier">P_cap_short_name</span><span class="plain"> = </span><span class="identifier">Properties::Valued::new_nameless_using</span><span class="plain">(</span>
<span class="identifier">K_text</span><span class="plain">, </span><span class="identifier">property_iname</span><span class="plain">);</span>
<span class="identifier">K_text</span><span class="plain">, </span><span class="identifier">Kinds::Behaviour::package</span><span class="plain">(</span><span class="identifier">K_object</span><span class="plain">), </span><span class="identifier">property_iname</span><span class="plain">);</span>
<span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain"> = </span><span class="identifier">Hierarchy::find</span><span class="plain">(</span><span class="identifier">CAP_SHORT_NAME_EXISTS_HL</span><span class="plain">);</span>
<span class="identifier">Emit::named_numeric_constant</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">, 1);</span>
<span class="plain">}</span>

View file

@ -147,13 +147,12 @@ will simply compile a <code class="display"><span class="extract">parse_name</sp
<span class="reserved">parse_name_notice</span><span class="plain"> *</span><span class="identifier">notice</span><span class="plain">;</span>
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">notice</span><span class="plain">, </span><span class="reserved">parse_name_notice</span><span class="plain">) {</span>
<span class="reserved">gpr_kit</span><span class="plain"> </span><span class="identifier">gprk</span><span class="plain"> = </span><span class="functiontext">PL::Parsing::Tokens::Values::new_kit</span><span class="plain">();</span>
<span class="identifier">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="identifier">Packaging::enter_home_of</span><span class="plain">(</span><span class="identifier">notice</span><span class="plain">-</span><span class="element">&gt;pnn_iname</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">PL::Parsing::Tokens::General::compile_parse_name_head</span><span class="plain">(&amp;</span><span class="identifier">gprk</span><span class="plain">,</span>
<span class="identifier">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="identifier">Emit::unused_packaging_state</span><span class="plain">();</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">PL::Parsing::Tokens::General::compile_parse_name_head</span><span class="plain">(&amp;</span><span class="identifier">save</span><span class="plain">, &amp;</span><span class="identifier">gprk</span><span class="plain">,</span>
<span class="identifier">notice</span><span class="plain">-</span><span class="element">&gt;parse_subject</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">notice</span><span class="plain">-</span><span class="element">&gt;pnn_iname</span><span class="plain">)) {</span>
<span class="functiontext">PL::Parsing::Tokens::General::compile_parse_name_tail</span><span class="plain">(&amp;</span><span class="identifier">gprk</span><span class="plain">);</span>
<span class="identifier">Routines::end_in_current_package</span><span class="plain">();</span>
<span class="identifier">Routines::end</span><span class="plain">(</span><span class="identifier">save</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="identifier">Packaging::exit</span><span class="plain">(</span><span class="identifier">save</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">}</span>
</pre>
@ -218,8 +217,10 @@ will be the correct decision.
<pre class="display">
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">PL::Parsing::Tokens::General::compile_parse_name_head</span><span class="plain">(</span><span class="reserved">gpr_kit</span><span class="plain"> *</span><span class="identifier">gprk</span><span class="plain">, </span><span class="identifier">inference_subject</span><span class="plain"> *</span><span class="identifier">subj</span><span class="plain">,</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">PL::Parsing::Tokens::General::compile_parse_name_head</span><span class="plain">(</span><span class="identifier">packaging_state</span><span class="plain"> *</span><span class="identifier">save</span><span class="plain">,</span>
<span class="reserved">gpr_kit</span><span class="plain"> *</span><span class="identifier">gprk</span><span class="plain">, </span><span class="identifier">inference_subject</span><span class="plain"> *</span><span class="identifier">subj</span><span class="plain">,</span>
<span class="reserved">grammar_verb</span><span class="plain"> *</span><span class="identifier">gv</span><span class="plain">, </span><span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">rname</span><span class="plain">) {</span>
<span class="identifier">STREAM_FLUSH</span><span class="plain">(</span><span class="identifier">DL</span><span class="plain">);</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">test_distinguishability</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">, </span><span class="identifier">sometimes_has_visible_properties</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">N</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
@ -236,9 +237,15 @@ will be the correct decision.
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">InferenceSubjects::domain</span><span class="plain">(</span><span class="identifier">subj</span><span class="plain">)) </span><span class="identifier">test_distinguishability</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">rname</span><span class="plain">) </span><span class="identifier">Routines::begin_in_current_package</span><span class="plain">(</span><span class="identifier">rname</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">N</span><span class="plain">) </span><span class="identifier">Routines::begin_in_current_package</span><span class="plain">(</span><span class="identifier">N</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"no parse name routine name given"</span><span class="plain">);</span>
<span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">compile_to</span><span class="plain"> = </span><span class="identifier">rname</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">compile_to</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">compile_to</span><span class="plain"> = </span><span class="identifier">N</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">compile_to</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"no parse name routine name given"</span><span class="plain">);</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"\</span><span class="plain">n</span><span class="string">\</span><span class="plain">n</span><span class="string">AND %n\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">compile_to</span><span class="plain">);</span>
<span class="identifier">STREAM_FLUSH</span><span class="plain">(</span><span class="identifier">DL</span><span class="plain">);</span>
<span class="plain">*</span><span class="identifier">save</span><span class="plain"> = </span><span class="identifier">Routines::begin</span><span class="plain">(</span><span class="identifier">compile_to</span><span class="plain">);</span>
<span class="functiontext">PL::Parsing::Tokens::Values::add_parse_name_vars</span><span class="plain">(</span><span class="identifier">gprk</span><span class="plain">);</span>
<span class="functiontext">PL::Parsing::Tokens::General::top_of_head</span><span class="plain">(</span><span class="identifier">gprk</span><span class="plain">, </span><span class="identifier">N</span><span class="plain">, </span><span class="identifier">subj</span><span class="plain">,</span>

View file

@ -670,8 +670,7 @@ following routine finds or creates this for a given property.
<span class="identifier">gv</span><span class="plain"> = </span><span class="functiontext">PL::Parsing::Verbs::gv_new</span><span class="plain">(</span><span class="constant">GV_IS_PROPERTY_NAME</span><span class="plain">);</span>
<span class="identifier">Properties::EitherOr::set_parsing_grammar</span><span class="plain">(</span><span class="identifier">prn</span><span class="plain">, </span><span class="identifier">gv</span><span class="plain">);</span>
<span class="identifier">gv</span><span class="plain">-</span><span class="element">&gt;prn_understood</span><span class="plain"> = </span><span class="identifier">prn</span><span class="plain">;</span>
<span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain"> = </span><span class="identifier">Properties::iname</span><span class="plain">(</span><span class="identifier">prn</span><span class="plain">);</span>
<span class="identifier">gv</span><span class="plain">-</span><span class="element">&gt;gv_prn_iname</span><span class="plain"> = </span><span class="identifier">Hierarchy::make_iname_in</span><span class="plain">(</span><span class="identifier">EITHER_OR_GPR_FN_HL</span><span class="plain">, </span><span class="identifier">Packaging::home_of</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">));</span>
<span class="identifier">gv</span><span class="plain">-</span><span class="element">&gt;gv_prn_iname</span><span class="plain"> = </span><span class="identifier">Hierarchy::make_iname_in</span><span class="plain">(</span><span class="identifier">EITHER_OR_GPR_FN_HL</span><span class="plain">, </span><span class="identifier">Properties::package</span><span class="plain">(</span><span class="identifier">prn</span><span class="plain">));</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">gv</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
@ -1026,13 +1025,13 @@ next priority, and so on up the hierarchy.
<span class="plain">}</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">GV_IS_OBJECT</span><span class="plain">: {</span>
<span class="reserved">gpr_kit</span><span class="plain"> </span><span class="identifier">gprk</span><span class="plain"> = </span><span class="functiontext">PL::Parsing::Tokens::Values::new_kit</span><span class="plain">();</span>
<span class="identifier">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="identifier">Packaging::enter_home_of</span><span class="plain">(</span><span class="functiontext">PL::Parsing::Tokens::General::get_gv_parse_name</span><span class="plain">(</span><span class="identifier">gv</span><span class="plain">));</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">PL::Parsing::Tokens::General::compile_parse_name_head</span><span class="plain">(&amp;</span><span class="identifier">gprk</span><span class="plain">, </span><span class="identifier">gv</span><span class="plain">-</span><span class="element">&gt;subj_understood</span><span class="plain">, </span><span class="identifier">gv</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">)) {</span>
<span class="identifier">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="identifier">Emit::unused_packaging_state</span><span class="plain">();</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"\</span><span class="plain">n</span><span class="string">\</span><span class="plain">n</span><span class="string">So %n\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="functiontext">PL::Parsing::Tokens::General::get_gv_parse_name</span><span class="plain">(</span><span class="identifier">gv</span><span class="plain">));</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">PL::Parsing::Tokens::General::compile_parse_name_head</span><span class="plain">(&amp;</span><span class="identifier">save</span><span class="plain">, &amp;</span><span class="identifier">gprk</span><span class="plain">, </span><span class="identifier">gv</span><span class="plain">-</span><span class="element">&gt;subj_understood</span><span class="plain">, </span><span class="identifier">gv</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">)) {</span>
<span class="functiontext">PL::Parsing::Verbs::gv_compile_parse_name_lines</span><span class="plain">(&amp;</span><span class="identifier">gprk</span><span class="plain">, </span><span class="identifier">gv</span><span class="plain">);</span>
<span class="functiontext">PL::Parsing::Tokens::General::compile_parse_name_tail</span><span class="plain">(&amp;</span><span class="identifier">gprk</span><span class="plain">);</span>
<span class="identifier">Routines::end_in_current_package</span><span class="plain">();</span>
<span class="identifier">Routines::end</span><span class="plain">(</span><span class="identifier">save</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="identifier">Packaging::exit</span><span class="plain">(</span><span class="identifier">save</span><span class="plain">);</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">GV_IS_VALUE</span><span class="plain">:</span>

View file

@ -43,7 +43,7 @@ when they want I7 to run.
<p class="inwebparagraph"></p>
<p class="endnote">The function main is used in 2/pt (<a href="2-pt.html#SP52">&#167;52</a>), 2/pl2 (<a href="2-pl2.html#SP3_1">&#167;3.1</a>), 2/pck (<a href="2-pck.html#SP2">&#167;2</a>), 3/rst (<a href="3-rst.html#SP6">&#167;6</a>), 4/am (<a href="4-am.html#SP26_1">&#167;26.1</a>), 8/ef (<a href="8-ef.html#SP26">&#167;26</a>), 8/ed2 (<a href="8-ed2.html#SP3_2">&#167;3.2</a>), 10/varc (<a href="10-varc.html#SP14">&#167;14</a>), 19/tb (<a href="19-tb.html#SP27">&#167;27</a>, <a href="19-tb.html#SP27_1">&#167;27.1</a>, <a href="19-tb.html#SP27_1_3">&#167;27.1.3</a>, <a href="19-tb.html#SP29">&#167;29</a>), 21/rl2 (<a href="21-rl2.html#SP23">&#167;23</a>), 26/uo (<a href="26-uo.html#SP11_1">&#167;11.1</a>), 27/hr (<a href="27-hr.html#SP5">&#167;5</a>), 2/lnk (<a href="2-lnk.html#SP1">&#167;1</a>), 2/res (<a href="2-res.html#SP1">&#167;1</a>), 3/cg (<a href="3-cg.html#SP1">&#167;1</a>), 3/sm (<a href="3-sm.html#SP36">&#167;36</a>, <a href="3-sm.html#SP36_1">&#167;36.1</a>, <a href="3-sm.html#SP38">&#167;38</a>), 3/em2 (<a href="3-em2.html#SP24">&#167;24</a>), 4/ap (<a href="4-ap.html#SP2">&#167;2</a>), 2/hf (<a href="2-hf.html#SP6">&#167;6</a>).</p>
<p class="endnote">The function main is used in 2/pt (<a href="2-pt.html#SP52">&#167;52</a>), 2/pl2 (<a href="2-pl2.html#SP3_1">&#167;3.1</a>), 2/pck (<a href="2-pck.html#SP2">&#167;2</a>), 3/rst (<a href="3-rst.html#SP6">&#167;6</a>), 4/am (<a href="4-am.html#SP26_1">&#167;26.1</a>), 8/ef (<a href="8-ef.html#SP26">&#167;26</a>), 8/ed2 (<a href="8-ed2.html#SP3_2">&#167;3.2</a>), 10/varc (<a href="10-varc.html#SP14">&#167;14</a>), 19/tb (<a href="19-tb.html#SP27">&#167;27</a>, <a href="19-tb.html#SP27_1">&#167;27.1</a>, <a href="19-tb.html#SP27_1_3">&#167;27.1.3</a>, <a href="19-tb.html#SP29">&#167;29</a>), 21/rl2 (<a href="21-rl2.html#SP23">&#167;23</a>), 26/uo (<a href="26-uo.html#SP11_1">&#167;11.1</a>), 27/hr (<a href="27-hr.html#SP5">&#167;5</a>), 27/ei (<a href="27-ei.html#SP2">&#167;2</a>), 2/lnk (<a href="2-lnk.html#SP1">&#167;1</a>), 2/res (<a href="2-res.html#SP1">&#167;1</a>), 3/cg (<a href="3-cg.html#SP1">&#167;1</a>), 3/sm (<a href="3-sm.html#SP36">&#167;36</a>, <a href="3-sm.html#SP36_1">&#167;36.1</a>, <a href="3-sm.html#SP38">&#167;38</a>), 3/em2 (<a href="3-em2.html#SP24">&#167;24</a>), 4/ap (<a href="4-ap.html#SP2">&#167;2</a>), 2/hf (<a href="2-hf.html#SP6">&#167;6</a>).</p>
<p class="inwebparagraph"><a id="SP3"></a><b>&#167;3. </b>Either way, that brings us here. All our modules have to be started up and
shut down, so we take care of that with one more intermediary. These modules

View file

@ -760,21 +760,21 @@ in some human-readable format.
<span class="identifier">inter_name</span><span class="plain"> *</span><span class="functiontext">Kinds::Behaviour::get_inc_iname</span><span class="plain">(</span><span class="reserved">kind</span><span class="plain"> *</span><span class="identifier">K</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">K</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"null kind has no inc routine"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">K</span><span class="plain">-</span><span class="element">&gt;construct</span><span class="plain">-</span><span class="element">&gt;inc_iname</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">K</span><span class="plain">-</span><span class="element">&gt;construct</span><span class="plain">-</span><span class="element">&gt;inc_iname</span><span class="plain">;</span>
<span class="identifier">package_request</span><span class="plain"> *</span><span class="identifier">R</span><span class="plain"> = </span><span class="identifier">Kinds::RunTime::package</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">);</span>
<span class="identifier">package_request</span><span class="plain"> *</span><span class="identifier">R</span><span class="plain"> = </span><span class="functiontext">Kinds::Behaviour::package</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">);</span>
<span class="identifier">K</span><span class="plain">-</span><span class="element">&gt;construct</span><span class="plain">-</span><span class="element">&gt;inc_iname</span><span class="plain"> = </span><span class="identifier">Hierarchy::make_iname_in</span><span class="plain">(</span><span class="identifier">DECREMENT_FN_HL</span><span class="plain">, </span><span class="identifier">R</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">K</span><span class="plain">-</span><span class="element">&gt;construct</span><span class="plain">-</span><span class="element">&gt;inc_iname</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">inter_name</span><span class="plain"> *</span><span class="functiontext">Kinds::Behaviour::get_dec_iname</span><span class="plain">(</span><span class="reserved">kind</span><span class="plain"> *</span><span class="identifier">K</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">K</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"null kind has no dec routine"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">K</span><span class="plain">-</span><span class="element">&gt;construct</span><span class="plain">-</span><span class="element">&gt;dec_iname</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">K</span><span class="plain">-</span><span class="element">&gt;construct</span><span class="plain">-</span><span class="element">&gt;dec_iname</span><span class="plain">;</span>
<span class="identifier">package_request</span><span class="plain"> *</span><span class="identifier">R</span><span class="plain"> = </span><span class="identifier">Kinds::RunTime::package</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">);</span>
<span class="identifier">package_request</span><span class="plain"> *</span><span class="identifier">R</span><span class="plain"> = </span><span class="functiontext">Kinds::Behaviour::package</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">);</span>
<span class="identifier">K</span><span class="plain">-</span><span class="element">&gt;construct</span><span class="plain">-</span><span class="element">&gt;dec_iname</span><span class="plain"> = </span><span class="identifier">Hierarchy::make_iname_in</span><span class="plain">(</span><span class="identifier">INCREMENT_FN_HL</span><span class="plain">, </span><span class="identifier">R</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">K</span><span class="plain">-</span><span class="element">&gt;construct</span><span class="plain">-</span><span class="element">&gt;dec_iname</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">inter_name</span><span class="plain"> *</span><span class="functiontext">Kinds::Behaviour::get_ranger_iname</span><span class="plain">(</span><span class="reserved">kind</span><span class="plain"> *</span><span class="identifier">K</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">K</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"null kind has no inc routine"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">K</span><span class="plain">-</span><span class="element">&gt;construct</span><span class="plain">-</span><span class="element">&gt;ranger_iname</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">K</span><span class="plain">-</span><span class="element">&gt;construct</span><span class="plain">-</span><span class="element">&gt;ranger_iname</span><span class="plain">;</span>
<span class="identifier">package_request</span><span class="plain"> *</span><span class="identifier">R</span><span class="plain"> = </span><span class="identifier">Kinds::RunTime::package</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">);</span>
<span class="identifier">package_request</span><span class="plain"> *</span><span class="identifier">R</span><span class="plain"> = </span><span class="functiontext">Kinds::Behaviour::package</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">);</span>
<span class="identifier">K</span><span class="plain">-</span><span class="element">&gt;construct</span><span class="plain">-</span><span class="element">&gt;ranger_iname</span><span class="plain"> = </span><span class="identifier">Hierarchy::make_iname_in</span><span class="plain">(</span><span class="identifier">RANGER_FN_HL</span><span class="plain">, </span><span class="identifier">R</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">K</span><span class="plain">-</span><span class="element">&gt;construct</span><span class="plain">-</span><span class="element">&gt;ranger_iname</span><span class="plain">;</span>
<span class="plain">}</span>

View file

@ -1592,8 +1592,7 @@ pcalc_prop *Calculus::Propositions::Deferred::compile_loop_header(int var, local
if ((K) && (parent_optimised == FALSE)) { /* parent optimisation is stronger, so we prefer that */
if (Calculus::Deferrals::write_loop_schema(&loop_schema, K) == FALSE) {
if (pdef->rtp_iname == NULL) {
package_request *P = Packaging::home_of(pdef->ppd_iname);
pdef->rtp_iname = Hierarchy::make_iname_in(RTP_HL, P);
pdef->rtp_iname = Hierarchy::make_iname_in(RTP_HL, pdef->ppd_package);
}
Calculus::Schemas::modify(&loop_schema, "if (RunTimeProblem(RTP_CANTITERATE, %n))",
pdef->rtp_iname);

View file

@ -31,6 +31,7 @@ typedef struct pcalc_prop_deferral {
struct parse_node *deferred_from; /* remember where it came from, for Problem reports */
struct general_pointer defn_ref; /* sometimes we must remember other things too */
struct kind *cinder_kinds[16]; /* the kinds of value being cindered (see below) */
struct package_request *ppd_package; /* where to put both of the following: */
struct inter_name *ppd_iname; /* routine to implement this */
struct inter_name *rtp_iname; /* compile a string of the origin text for run-time problems? */
MEMORY_MANAGEMENT
@ -56,8 +57,8 @@ pcalc_prop_deferral *Calculus::Deferrals::new_deferred_proposition(pcalc_prop *p
pdef->reason = reason;
pdef->deferred_from = current_sentence;
pdef->rtp_iname = NULL;
package_request *PR = Hierarchy::package_in_enclosure(PROPOSITIONS_HAP);
pdef->ppd_iname = Hierarchy::make_iname_in(PROPOSITION_HL, PR);
pdef->ppd_package = Hierarchy::package_in_enclosure(PROPOSITIONS_HAP);
pdef->ppd_iname = Hierarchy::make_iname_in(PROPOSITION_HL, pdef->ppd_package);
if (no_further_deferrals) internal_error("Too late now to defer propositions");
return pdef;

View file

@ -612,7 +612,7 @@ inter_name *Kinds::RunTime::get_kind_GPR_iname(kind *K) {
if (K == NULL) return NULL;
kind_constructor *con = Kinds::get_construct(K);
if (con->kind_GPR_iname == NULL) {
package_request *R = Kinds::RunTime::package(K);
package_request *R = Kinds::Behaviour::package(K);
con->kind_GPR_iname = Hierarchy::make_iname_in(GPR_FN_HL, R);
}
return con->kind_GPR_iname;
@ -622,7 +622,7 @@ inter_name *Kinds::RunTime::get_instance_GPR_iname(kind *K) {
if (K == NULL) return NULL;
kind_constructor *con = Kinds::get_construct(K);
if (con->instance_GPR_iname == NULL) {
package_request *R = Kinds::RunTime::package(K);
package_request *R = Kinds::Behaviour::package(K);
con->instance_GPR_iname = Hierarchy::make_iname_in(INSTANCE_GPR_FN_HL, R);
}
return con->instance_GPR_iname;
@ -706,7 +706,6 @@ void Kinds::RunTime::compile_structures(void) {
@<Compile a constructed default value for this kind@> =
inter_name *identifier = rks->rks_dv_iname;
current_sentence = rks->default_requested_here;
packaging_state save = Packaging::enter_home_of(identifier);
if (Kinds::get_construct(K) == CON_phrase) {
Phrases::Constants::compile_default_closure(identifier, K);
} else if (Kinds::get_construct(K) == CON_relation) {
@ -722,7 +721,6 @@ void Kinds::RunTime::compile_structures(void) {
"for the kind '%2', but there's no obvious way to make one.");
Problems::issue_problem_end();
}
Packaging::exit(save);
@<Compile the default value finder@> =
packaging_state save = Routines::begin(Hierarchy::find(DEFAULTVALUEFINDER_HL));
@ -893,12 +891,6 @@ typedef struct kind_interaction {
MEMORY_MANAGEMENT
} kind_interaction;
@ =
package_request *Kinds::RunTime::package(kind *K) {
inter_name *iname = Kinds::RunTime::iname(K);
return Packaging::home_of(iname);
}
@
@d MAX_KIND_ARITY 32

View file

@ -87,7 +87,7 @@ relies on adjectival meanings.
property *Properties::EitherOr::new_nameless(wchar_t *I6_form) {
wording W = Feeds::feed_text(I6_form);
inter_name *iname = Hierarchy::make_iname_with_memo(PROPERTY_HL, Hierarchy::template(), W);
property *prn = Properties::create(EMPTY_WORDING, iname);
property *prn = Properties::create(EMPTY_WORDING, Hierarchy::template(), iname);
prn->either_or = TRUE;
Properties::exclude_from_index(prn);
Properties::set_translation(prn, I6_form);

View file

@ -115,7 +115,7 @@ int Properties::Emit::emit_propertyvalue(inference_subject *know, property *prn)
instance *I = InferenceSubjects::as_instance(know);
if (I) R = Instances::package(I);
kind *K = InferenceSubjects::as_kind(know);
if (K) R = Kinds::RunTime::package(K);
if (K) R = Kinds::Behaviour::package(K);
int storage_cost = 0;
if ((Properties::visited_in_traverse(prn) == FALSE) &&
(Properties::can_be_compiled(prn))) {

View file

@ -36,6 +36,7 @@ typedef struct property {
/* runtime implementation */
int metadata_table_offset; /* position in the |property_metadata| word array at run-time */
struct package_request *prop_package; /* where to find: */
struct inter_name *prop_iname; /* the identifier we would like to use at run-time for this property */
int translated; /* has this been given an explicit translation? */
int prn_emitted; /* has this been emitted to Inter yet? */
@ -91,7 +92,7 @@ property *Properties::obtain(wording W, int valued) {
parse_node *p = ExParser::parse_excerpt(PROPERTY_MC, W);
property *prn;
if (p == NULL) {
prn = Properties::create(W, NULL);
prn = Properties::create(W, NULL, NULL);
if (valued) {
Properties::Valued::make_setting_relation(prn, W);
prn->either_or = FALSE;
@ -111,7 +112,7 @@ property *Properties::obtain(wording W, int valued) {
@ And: (2) To create a new structure outright.
=
property *Properties::create(wording W, inter_name *using_iname) {
property *Properties::create(wording W, package_request *using_package, inter_name *using_iname) {
W = Articles::remove_article(W);
@<Ensure that the new property name is one we can live with@>;
@<See if the property name already has a meaning, which may or may not be okay@>;
@ -196,6 +197,7 @@ something.
prn->ambiguous_name = <name-looking-like-property-test>(W);
prn->applicable_to = NULL;
prn->either_or = FALSE;
prn->prop_package = using_package;
prn->prop_iname = using_iname;
prn->prn_emitted = FALSE;
prn->translated = FALSE;
@ -681,12 +683,20 @@ inter_name *Properties::iname(property *prn) {
if ((Properties::is_either_or(prn)) && (prn->stored_in_negation))
return Properties::iname(Properties::EitherOr::get_negation(prn));
if (prn->prop_iname == NULL) {
package_request *R = Hierarchy::package(prn->owning_module, PROPERTIES_HAP);
prn->prop_iname = Hierarchy::make_iname_with_memo(PROPERTY_HL, R, prn->name);
prn->prop_package = Hierarchy::package(prn->owning_module, PROPERTIES_HAP);
prn->prop_iname = Hierarchy::make_iname_with_memo(PROPERTY_HL, prn->prop_package, prn->name);
}
return prn->prop_iname;
}
package_request *Properties::package(property *prn) {
if (prn == NULL) internal_error("tried to find package for null property");
if ((Properties::is_either_or(prn)) && (prn->stored_in_negation))
return Properties::package(Properties::EitherOr::get_negation(prn));
Properties::iname(prn);
return prn->prop_package;
}
void Properties::emit_single(property *prn) {
if (prn == NULL) internal_error("tried to find emit single for null property");
if ((Properties::is_either_or(prn)) && (prn->stored_in_negation)) {

View file

@ -63,7 +63,7 @@ property *Properties::Valued::new_nameless(text_stream *I6_form, kind *K) {
if (K == NULL) internal_error("new nameless property without kind");
package_request *R = Hierarchy::package(Modules::find(current_sentence), PROPERTIES_HAP);
inter_name *using_iname = Hierarchy::make_iname_with_memo(PROPERTY_HL, R, W);
property *prn = Properties::create(EMPTY_WORDING, using_iname);
property *prn = Properties::create(EMPTY_WORDING, R, using_iname);
Properties::exclude_from_index(prn);
prn->either_or = FALSE;
Properties::set_translation_S(prn, I6_form);
@ -74,9 +74,9 @@ property *Properties::Valued::new_nameless(text_stream *I6_form, kind *K) {
return prn;
}
property *Properties::Valued::new_nameless_using(kind *K, inter_name *using) {
property *Properties::Valued::new_nameless_using(kind *K, package_request *R, inter_name *using) {
if (K == NULL) internal_error("new nameless property without kind");
property *prn = Properties::create(EMPTY_WORDING, using);
property *prn = Properties::create(EMPTY_WORDING, R, using);
Properties::exclude_from_index(prn);
prn->either_or = FALSE;
prn->property_value_kind = K;

View file

@ -269,11 +269,11 @@ for the relation-route-finding code at run time.
inter_name *count_iname = PL::Counting::instance_count_iname(K);
PF_S(counting, subj)->instance_count_prop =
Properties::Valued::new_nameless_using(K_number, count_iname);
Properties::Valued::new_nameless_using(K_number, Kinds::Behaviour::package(K), count_iname);
inter_name *next_iname = PL::Counting::next_instance(K);
PF_S(counting, subj)->instance_link_prop =
Properties::Valued::new_nameless_using(K_object, next_iname);
Properties::Valued::new_nameless_using(K_object, Kinds::Behaviour::package(K), next_iname);
}
P_KD_Count = Properties::Valued::new_nameless(I"KD_Count", K_number);

View file

@ -250,12 +250,9 @@ int Strings::TextLiterals::CCOUNT_QUOTATIONS(void) {
@ A version from fixed text:
=
void Strings::TextLiterals::compile_literal_from_text(inter_name *iname, inter_t *v1, inter_t *v2, wchar_t *p) {
void Strings::TextLiterals::compile_literal_from_text(inter_name *context, inter_t *v1, inter_t *v2, wchar_t *p) {
literal_text *lt = Strings::TextLiterals::compile_literal(NULL, TRUE, Feeds::feed_text(p));
packaging_state save = Packaging::enter_home_of(iname);
inter_reading_state *IRS = Emit::IRS();
Emit::to_ival(IRS->read_into, IRS->current_package, v1, v2, lt->lt_sba_iname);
Packaging::exit(save);
Emit::to_ival_in_context(context, v1, v2, lt->lt_sba_iname);
}
@ The above gradually piled up the need for |TX_L_*| constants/routines,

View file

@ -141,7 +141,7 @@ void Strings::TextSubstitutions::text_substitution_cue(value_holster *VH, wordin
Frames::emit_allocation(K_text);
}
text_substitution *ts = Strings::TextSubstitutions::new_text_substitution(W, phsf,
adopted_rule_for_compilation, adopted_marker_for_compilation, Packaging::current_enclosure());
adopted_rule_for_compilation, adopted_marker_for_compilation, Emit::current_enclosure());
inter_name *tin = Strings::TextSubstitutions::text_substitution_iname(ts);
if (VH->vhmode_wanted == INTER_DATA_VHMODE)
Emit::holster(VH, tin);
@ -157,7 +157,7 @@ void Strings::TextSubstitutions::text_substitution_cue(value_holster *VH, wordin
@<Write the actual cue@> =
text_substitution *ts = Strings::TextSubstitutions::new_text_substitution(W, phsf,
adopted_rule_for_compilation, adopted_marker_for_compilation, Packaging::current_enclosure());
adopted_rule_for_compilation, adopted_marker_for_compilation, Emit::current_enclosure());
if (TEST_COMPILATION_MODE(CONSTANT_CMODE)) {
package_request *PR = Hierarchy::package_in_enclosure(BLOCK_CONSTANTS_HAP);
inter_name *N = Hierarchy::make_iname_in(BLOCK_CONSTANT_HL, PR);

View file

@ -79,7 +79,7 @@ literal_list *Lists::empty_literal_list(wording W) {
ll->ll_iname = NULL;
ll->first_llist_entry = NULL;
ll->list_text = NULL;
ll->ll_package = Packaging::current_enclosure();
ll->ll_package = Emit::current_enclosure();
Kinds::RunTime::ensure_basic_heap_present();
return ll;
}

View file

@ -769,7 +769,7 @@ than once for each rule.
if (action_based == FALSE) grouping = FALSE;
inter_symbol *forbid_breaks_s = NULL, *rv_s = NULL, *original_deadflag_s = NULL, *p_s = NULL;
packaging_state save_array = Packaging::stateless();
packaging_state save_array = Emit::unused_packaging_state();
@<Open the rulebook compilation@>;
int group_size = 0, group_started = FALSE, entry_count = 0, action_group_open = FALSE;

View file

@ -876,9 +876,7 @@ void Rulebooks::compile_rulebooks(void) {
if (Rulebooks::focus(rb) == PARAMETER_FOCUS) par = TRUE;
LOGIF(RULEBOOK_COMPILATION, "Compiling rulebook: %W = %n\n",
rb->primary_name, rb->rb_iname);
packaging_state save = Packaging::enter_home_of(rb->rb_iname);
Rules::Bookings::list_compile(rb->rule_list, rb->rb_iname, act, par);
Packaging::exit(save);
}
Rules::check_placement_safety();
}

View file

@ -208,9 +208,8 @@ void Rules::set_I6_definition(rule *R, wchar_t *identifier) {
R->rule_extern_iname = Hierarchy::make_iname_in(EXTERIOR_RULE_HL, R->rule_package);
inter_name *xiname = Hierarchy::find_by_name(XT);
inter_t v1 = 0, v2 = 0;
Inter::Symbols::to_data(Emit::repository(), Packaging::incarnate(R->rule_package), InterNames::to_symbol(xiname), &v1, &v2);
Emit::named_generic_constant(R->rule_extern_iname, v1, v2);
Emit::named_generic_constant_xiname(R->rule_package, R->rule_extern_iname, xiname);
R->xiname = xiname;
R->rule_extern_iname_as_text = Str::duplicate(XT);
DISCARD_TEXT(XT);

View file

@ -164,7 +164,7 @@ compilation.
=
void Phrases::Constants::compile_default_closure(inter_name *closure_identifier, kind *K) {
package_request *P = Kinds::RunTime::package(K);
package_request *P = Kinds::Behaviour::package(K);
inter_name *rname = Hierarchy::make_iname_in(DEFAULT_CLOSURE_FN_HL, P);
@<Compile the default routine@>;

View file

@ -377,15 +377,11 @@ void Phrases::compile(phrase *ph, int *i, int max_i,
int effect = Phrases::Usage::get_effect(&(ph->usage_data));
if (effect == RULE_NOT_IN_RULEBOOK_EFF) effect = RULE_IN_RULEBOOK_EFF;
if (effect == TO_PHRASE_EFF) {
packaging_state save = Packaging::enter_home_of(req->req_iname);
Routines::Compile::routine(ph, legible, req, acl);
Packaging::exit(save);
@<Move along the progress bar if it's this phrase's first compilation@>;
} else {
if (ph->at_least_one_compiled_form_needed) {
packaging_state save = Packaging::enter_home_of(Phrases::iname(ph));
Routines::Compile::routine(ph, legible, NULL, acl);
Packaging::exit(save);
@<Move along the progress bar if it's this phrase's first compilation@>;
}
}

View file

@ -41,11 +41,11 @@ void Routines::Compile::routine(phrase *ph,
@<Compile some commentary about the routine to follow@>;
Routines::begin_framed(Routines::Compile::iname(ph, req), &(ph->stack_frame));
packaging_state save = Routines::begin_framed(Routines::Compile::iname(ph, req), &(ph->stack_frame));
@<Compile the body of the routine@>;
Routines::end_in_current_package();
Routines::end(save);
phrase_being_compiled = NULL;
current_sentence = NULL;

View file

@ -582,7 +582,7 @@ void TemplateFiles::compile_I7_from_I6_inner(value_holster *VH, text_stream *OUT
Holsters::unholster_pair(&VH2, &v1, &v2);
if (v1 == ALIAS_IVAL) {
PUT(URL_SYMBOL_CHAR);
inter_symbols_table *T = Inter::Packages::scope(Packaging::current_enclosure()->actual_package);
inter_symbols_table *T = Inter::Packages::scope(Emit::current_enclosure()->actual_package);
inter_symbol *S = Inter::SymbolsTables::symbol_from_id(T, v2);
Inter::SymbolsTables::symbol_to_url_name(OUT, S);
PUT(URL_SYMBOL_CHAR);

View file

@ -1,24 +1,16 @@
[Routines::] Routines.
To compile the bones of routines, and their local variable
declarations.
To compile the bones of functions, and their local variable declarations.
@ The code following is used throughout Inform, whenever we want to compile
an I6 routine. Sometimes that's in order to define a phrase, but often not.
a function. Sometimes that's in order to define a phrase, but often not.
We then compile the body code of our routine, and conclude with:
|Routines::end_in_current_package();|
There are two ways to begin a function: specifying a stack frame which has
already been set up, or not. Here's not:
=
packaging_state Routines::begin(inter_name *name) {
packaging_state save = Packaging::enter_home_of(name);
Routines::begin_framed(name, NULL);
return save;
}
void Routines::begin_in_current_package(inter_name *name) {
Routines::begin_framed(name, NULL);
return Routines::begin_framed(name, NULL);
}
@ During the time when we're compiling the body of the routine,
@ -30,25 +22,22 @@ int currently_compiling_nnp = FALSE; /* is this a nonphrasal stack frame we made
inter_symbol *currently_compiling_inter_block = NULL; /* where Inter is being emitted to */
inter_name *currently_compiling_iname = NULL; /* routine we end up with */
@ So here is the flip:
@ So here is the general version, in which |phsf| may or may not be a
pre-existing stack frame:
=
void Routines::begin_framed(inter_name *iname, ph_stack_frame *phsf) {
packaging_state Routines::begin_framed(inter_name *iname, ph_stack_frame *phsf) {
if (iname == NULL) internal_error("no iname for routine");
package_request *R = Packaging::home_of(iname);
if ((R == NULL) || (R == Hierarchy::main())) {
LOG("Routine outside of package: ................................................ %n\n", iname);
WRITE_TO(STDERR, "Routine outside of package: %n\n", iname);
internal_error("routine outside of package");
}
currently_compiling_iname = iname;
@<Prepare a suitable stack frame@>;
Frames::Blocks::begin_code_blocks();
currently_compiling_inter_block = Emit::block(iname);
packaging_state save = Emit::unused_packaging_state();
currently_compiling_inter_block = Emit::block(&save, iname);
LocalVariables::declare(phsf, FALSE);
return save;
}
inter_symbol *Routines::self(void) {
@ -68,24 +57,20 @@ create a new nonphrasal stack frame.
currently_compiling_in_frame = phsf;
Frames::make_current(phsf);
@ And here is the flop:
@ As can be seen, very much more work is involved in finishing a function
than in starting it. This is because we need to split into two cases: one
where the code we've just compiled required allocation of heap memory
(e.g. for dynamic strings or lists), and another simpler case where it
did not.
=
void Routines::end(packaging_state save) {
Routines::end_in_current_package();
Packaging::exit(save);
}
void Routines::end_in_current_package(void) {
kind *R_kind = LocalVariables::deduced_function_kind(currently_compiling_in_frame);
inter_name *kernel_name = NULL, *public_name = currently_compiling_iname;
if ((currently_compiling_in_frame->allocated_pointers) ||
(currently_compiling_in_frame->no_formal_parameters_needed > 0)) {
if (Packaging::housed_in_function(public_name))
kernel_name = Hierarchy::make_kernel_iname(Packaging::home_of(public_name));
else internal_error("routine not housed in function");
}
(currently_compiling_in_frame->no_formal_parameters_needed > 0))
kernel_name = Emit::kernel(public_name);
int needed = LocalVariables::count(currently_compiling_in_frame);
if (kernel_name) needed++;
@ -103,13 +88,14 @@ void Routines::end_in_current_package(void) {
Frames::Blocks::end_code_blocks();
if (currently_compiling_nnp) Frames::remove_nonphrase_stack_frame();
Frames::remove_current();
Emit::end_main_block(save);
}
@<Compile an outer shell routine with the public-facing name@> =
int returns_block_value =
Kinds::Behaviour::uses_pointer_values(currently_compiling_in_frame->kind_returned);
inter_symbol *rsymb = Emit::block(public_name);
inter_symbol *rsymb = Emit::block(NULL, public_name);
inter_symbol *I7RBLK_symbol = NULL;
@<Compile I6 locals for the outer shell@>;
int NBV = 0;

View file

@ -74,7 +74,7 @@ void Emit::begin(void) {
Emit::comment(I"Primitives:");
Primitives::emit();
Packaging::enter(Hierarchy::main()); // We never exit this
Packaging::enter_home_of(NULL); // Enters main, which we never exit
inter_name *KU = Hierarchy::find(K_UNCHECKED_HL);
packaging_state save = Packaging::enter_home_of(KU);
@ -137,12 +137,10 @@ inter_symbol *Emit::extern(text_stream *name, kind *K) {
if (extern_symbols == NULL) extern_symbols = Dictionaries::new(1024, FALSE);
if (Dictionaries::find(extern_symbols, name))
return Dictionaries::read_value(extern_symbols, name);
packaging_state save = Packaging::enter(Hierarchy::template());
inter_symbol *symb = Emit::new_symbol(Emit::main_scope(), name);
Inter::Symbols::extern(symb);
Dictionaries::create(extern_symbols, name);
Dictionaries::write_value(extern_symbols, name, symb);
Packaging::exit(save);
return symb;
}
@ -331,7 +329,7 @@ void Emit::property(inter_name *name, kind *K) {
}
void Emit::permission(property *prn, kind *K, inter_name *name) {
packaging_state save = Packaging::enter(Kinds::RunTime::package(K));
packaging_state save = Packaging::enter(Kinds::Behaviour::package(K));
inter_name *prop_name = Properties::iname(prn);
inter_symbol *owner_kind = Emit::kind_to_symbol(K);
inter_symbol *store = (name)?InterNames::to_symbol(name):NULL;
@ -381,7 +379,7 @@ void Emit::ensure_defaultvalue(kind *K) {
}
void Emit::defaultvalue(kind *K, inter_t v1, inter_t v2) {
packaging_state save = Packaging::enter(Kinds::RunTime::package(K));
packaging_state save = Packaging::enter(Kinds::Behaviour::package(K));
inter_symbol *owner_kind = Emit::kind_to_symbol(K);
Emit::guard(Inter::DefaultValue::new(default_bookmark,
Inter::SymbolsTables::id_from_IRS_and_symbol(default_bookmark, owner_kind), v1, v2, Emit::baseline(default_bookmark), NULL));
@ -424,6 +422,12 @@ void Emit::instance(inter_name *name, kind *K, int v) {
Packaging::exit(save);
}
void Emit::named_generic_constant_xiname(package_request *PR, inter_name *name, inter_name *xiname) {
inter_t v1 = 0, v2 = 0;
Inter::Symbols::to_data(Emit::repository(), Packaging::incarnate(PR), InterNames::to_symbol(xiname), &v1, &v2);
Emit::named_generic_constant(name, v1, v2);
}
void Emit::named_generic_constant(inter_name *name, inter_t val1, inter_t val2) {
packaging_state save = Packaging::enter_home_of(name);
inter_symbol *con_name = Emit::define_symbol(name);
@ -786,9 +790,19 @@ inter_symbol *Emit::package(inter_name *iname, inter_symbol *ptype, inter_packag
return rsymb;
}
inter_symbol *Emit::block(inter_name *iname) {
inter_symbol *Emit::block(packaging_state *save, inter_name *iname) {
if (current_inter_routine) internal_error("nested routines");
if (Emit::IRS() == NULL) internal_error("no inter repository");
if (save) {
*save = Packaging::enter_home_of(iname);
package_request *R = Packaging::home_of(iname);
if ((R == NULL) || (R == Hierarchy::main())) {
LOG("Routine outside of package: %n\n", iname);
internal_error("routine outside of package");
}
}
inter_name *block_iname = NULL;
if (Packaging::housed_in_function(iname))
block_iname = Hierarchy::make_block_iname(Packaging::home_of(iname));
@ -808,6 +822,16 @@ inter_symbol *Emit::block(inter_name *iname) {
return rsymb;
}
inter_name *Emit::kernel(inter_name *public_name) {
if (Packaging::housed_in_function(public_name) == FALSE)
internal_error("routine not housed in function");
return Hierarchy::make_kernel_iname(Packaging::home_of(public_name));
}
void Emit::end_main_block(packaging_state save) {
Packaging::exit(save);
}
void Emit::routine(inter_name *rname, kind *rkind, inter_symbol *block_name) {
if (Emit::IRS() == NULL) internal_error("no inter repository");
inter_symbol *AB_symbol = Emit::kind_to_symbol(rkind);
@ -1349,9 +1373,46 @@ void Emit::to_ival(inter_repository *I, inter_package *pack, inter_t *val1, inte
*val1 = LITERAL_IVAL; *val2 = 0;
}
void Emit::to_ival_in_context(inter_name *context, inter_t *val1, inter_t *val2, inter_name *iname) {
package_request *PR = InterNames::location(context);
inter_package *pack = Packaging::incarnate(PR);
inter_symbol *S = InterNames::to_symbol(iname);
if (S) { Inter::Symbols::to_data(pack->stored_in, pack, S, val1, val2); return; }
*val1 = LITERAL_IVAL; *val2 = 0;
}
int Emit::defined(inter_name *iname) {
if (iname == NULL) return FALSE;
inter_symbol *S = InterNames::to_symbol(iname);
if (Inter::Symbols::is_defined(S)) return TRUE;
return FALSE;
}
typedef struct ival_emission {
value_holster emission_VH;
packaging_state saved_PS;
} ival_emission;
ival_emission Emit::begin_ival_emission(inter_name *iname) {
ival_emission IE;
IE.emission_VH = Holsters::new(INTER_DATA_VHMODE);
IE.saved_PS = Packaging::enter_home_of(iname);
return IE;
}
value_holster *Emit::ival_holster(ival_emission *IE) {
return &(IE->emission_VH);
}
void Emit::end_ival_emission(ival_emission *IE, inter_t *v1, inter_t *v2) {
Holsters::unholster_pair(&(IE->emission_VH), v1, v2);
Packaging::exit(IE->saved_PS);
}
package_request *Emit::current_enclosure(void) {
return Packaging::current_enclosure();
}
packaging_state Emit::unused_packaging_state(void) {
return Packaging::stateless();
}

View file

@ -150,7 +150,9 @@ inter_name *InterNames::explicitly_named(text_stream *name, package_request *R)
inter_name *InterNames::explicitly_named_in_template(text_stream *name) {
inter_name *iname = InterNames::explicitly_named(name, Hierarchy::template());
packaging_state save = Packaging::enter_home_of(iname);
iname->symbol = Emit::extern(name, K_value);
Packaging::exit(save);
return iname;
}

View file

@ -69,10 +69,6 @@ packaging_state Packaging::enter_home_of(inter_name *N) {
return Packaging::enter(Packaging::home_of(N));
}
packaging_state Packaging::enter_current_enclosure(void) {
return Packaging::enter(current_enclosure);
}
package_request *Packaging::current_enclosure(void) {
return current_enclosure;
}
@ -86,6 +82,7 @@ int packaging_entry_sp = 0;
inter_reading_state packaging_entry_stack[MAX_PACKAGING_ENTRY_DEPTH];
packaging_state Packaging::enter(package_request *R) {
if (R == NULL) R = Hierarchy::main();
LOGIF(PACKAGING, "Entering $X\n", R);
inter_reading_state *IRS = Emit::IRS();

View file

@ -27,6 +27,8 @@ evidence turns up to suggest otherwise).
=
typedef struct instance {
struct noun *tag;
struct package_request *instance_package;
struct inter_name *instance_iname;
int instance_emitted;
struct parse_node *creating_sentence; /* sentence creating the instance */
struct parse_node *instance_of_set_at; /* and identifying its kind */
@ -105,6 +107,8 @@ later on.)
K = Kinds::weaken(K);
@<Initialise the instance except for its noun@> =
I->instance_package = NULL;
I->instance_iname = NULL;
I->instance_emitted = FALSE;
I->creating_sentence = current_sentence;
I->instance_of_set_at = current_sentence;
@ -287,9 +291,12 @@ text_stream *Instances::identifier(instance *I) {
inter_name *Instances::iname(instance *I) {
if (I == NULL) return NULL;
package_request *R = Hierarchy::local_package(INSTANCES_HAP);
UseNouns::noun_compose_identifier(R, I->tag, I->allocation_id);
return UseNouns::iname(I->tag);
if (I->instance_iname == NULL) {
I->instance_package = Hierarchy::local_package(INSTANCES_HAP);
UseNouns::noun_compose_identifier(I->instance_package, I->tag, I->allocation_id);
I->instance_iname = UseNouns::iname(I->tag);
}
return I->instance_iname;
}
@h Writer.
@ -717,8 +724,8 @@ inter_name *Instances::emitted_iname(instance *I) {
}
package_request *Instances::package(instance *I) {
inter_name *iname = Instances::iname(I);
return Packaging::home_of(iname);
Instances::iname(I); // Thus forcing this to exist...
return I->instance_package;
}
@h Adjectival uses of instances.

View file

@ -414,17 +414,15 @@ int NonlocalVariables::SUBJ_compile_all(void) {
if ((nlv->constant_at_run_time == FALSE) ||
(nlv->housed_in_variables_array)) {
inter_name *iname = NonlocalVariables::iname(nlv);
packaging_state save = Packaging::enter_home_of(iname);
value_holster VH = Holsters::new(INTER_DATA_VHMODE);
BEGIN_COMPILATION_MODE;
COMPILATION_MODE_EXIT(DEREFERENCE_POINTERS_CMODE);
NonlocalVariables::compile_initial_value_vh(&VH, nlv);
END_COMPILATION_MODE;
inter_name *iname = NonlocalVariables::iname(nlv);
inter_t v1 = 0, v2 = 0;
Holsters::unholster_pair(&VH, &v1, &v2);
NonlocalVariables::seek_initial_value(iname, &v1, &v2, nlv);
END_COMPILATION_MODE;
text_stream *rvalue = NULL;
if (nlv->housed_in_variables_array == FALSE)
@ -439,7 +437,6 @@ int NonlocalVariables::SUBJ_compile_all(void) {
Routines::end(save);
}
Packaging::exit(save);
}
return TRUE;
}
@ -699,11 +696,9 @@ void NonlocalVariables::emit_initial_value_as_val(nonlocal_variable *nlv) {
}
void NonlocalVariables::seek_initial_value(inter_name *iname, inter_t *v1, inter_t *v2, nonlocal_variable *nlv) {
packaging_state save = Packaging::enter_home_of(iname);
value_holster VH = Holsters::new(INTER_DATA_VHMODE);
NonlocalVariables::compile_initial_value_vh(&VH, nlv);
Holsters::unholster_pair(&VH, v1, v2);
Packaging::exit(save);
ival_emission IE = Emit::begin_ival_emission(iname);
NonlocalVariables::compile_initial_value_vh(Emit::ival_holster(&IE), nlv);
Emit::end_ival_emission(&IE, v1, v2);
}
void NonlocalVariables::compile_initial_value_vh(value_holster *VH, nonlocal_variable *nlv) {

View file

@ -278,7 +278,7 @@ actually means it's rarely needed.)
if (P_cap_short_name == NULL) {
inter_name *property_iname = Hierarchy::find(CAPSHORTNAME_HL);
P_cap_short_name = Properties::Valued::new_nameless_using(
K_text, property_iname);
K_text, Kinds::Behaviour::package(K_object), property_iname);
inter_name *iname = Hierarchy::find(CAP_SHORT_NAME_EXISTS_HL);
Emit::named_numeric_constant(iname, 1);
}

View file

@ -113,13 +113,12 @@ void PL::Parsing::Tokens::General::write_parse_name_routines(void) {
parse_name_notice *notice;
LOOP_OVER(notice, parse_name_notice) {
gpr_kit gprk = PL::Parsing::Tokens::Values::new_kit();
packaging_state save = Packaging::enter_home_of(notice->pnn_iname);
if (PL::Parsing::Tokens::General::compile_parse_name_head(&gprk,
packaging_state save = Emit::unused_packaging_state();
if (PL::Parsing::Tokens::General::compile_parse_name_head(&save, &gprk,
notice->parse_subject, NULL, notice->pnn_iname)) {
PL::Parsing::Tokens::General::compile_parse_name_tail(&gprk);
Routines::end_in_current_package();
Routines::end(save);
}
Packaging::exit(save);
}
}
@ -168,8 +167,10 @@ the absence of either I7-level grammar lines or visible properties, that
will be the correct decision.
=
int PL::Parsing::Tokens::General::compile_parse_name_head(gpr_kit *gprk, inference_subject *subj,
int PL::Parsing::Tokens::General::compile_parse_name_head(packaging_state *save,
gpr_kit *gprk, inference_subject *subj,
grammar_verb *gv, inter_name *rname) {
STREAM_FLUSH(DL);
int test_distinguishability = FALSE, sometimes_has_visible_properties = FALSE;
inter_name *N = NULL;
@ -186,9 +187,15 @@ int PL::Parsing::Tokens::General::compile_parse_name_head(gpr_kit *gprk, inferen
if (InferenceSubjects::domain(subj)) test_distinguishability = TRUE;
if (rname) Routines::begin_in_current_package(rname);
else if (N) Routines::begin_in_current_package(N);
else internal_error("no parse name routine name given");
inter_name *compile_to = rname;
if (compile_to == NULL) compile_to = N;
if (compile_to == NULL) internal_error("no parse name routine name given");
LOG("\n\nAND %n\n", compile_to);
STREAM_FLUSH(DL);
*save = Routines::begin(compile_to);
PL::Parsing::Tokens::Values::add_parse_name_vars(gprk);
PL::Parsing::Tokens::General::top_of_head(gprk, N, subj,

View file

@ -525,8 +525,7 @@ grammar_verb *PL::Parsing::Verbs::for_prn(property *prn) {
gv = PL::Parsing::Verbs::gv_new(GV_IS_PROPERTY_NAME);
Properties::EitherOr::set_parsing_grammar(prn, gv);
gv->prn_understood = prn;
inter_name *iname = Properties::iname(prn);
gv->gv_prn_iname = Hierarchy::make_iname_in(EITHER_OR_GPR_FN_HL, Packaging::home_of(iname));
gv->gv_prn_iname = Hierarchy::make_iname_in(EITHER_OR_GPR_FN_HL, Properties::package(prn));
return gv;
}
@ -821,13 +820,13 @@ void PL::Parsing::Verbs::compile(grammar_verb *gv) {
}
case GV_IS_OBJECT: {
gpr_kit gprk = PL::Parsing::Tokens::Values::new_kit();
packaging_state save = Packaging::enter_home_of(PL::Parsing::Tokens::General::get_gv_parse_name(gv));
if (PL::Parsing::Tokens::General::compile_parse_name_head(&gprk, gv->subj_understood, gv, NULL)) {
packaging_state save = Emit::unused_packaging_state();
LOG("\n\nSo %n\n", PL::Parsing::Tokens::General::get_gv_parse_name(gv));
if (PL::Parsing::Tokens::General::compile_parse_name_head(&save, &gprk, gv->subj_understood, gv, NULL)) {
PL::Parsing::Verbs::gv_compile_parse_name_lines(&gprk, gv);
PL::Parsing::Tokens::General::compile_parse_name_tail(&gprk);
Routines::end_in_current_package();
Routines::end(save);
}
Packaging::exit(save);
break;
}
case GV_IS_VALUE:

View file

@ -516,21 +516,21 @@ package_request *Kinds::Behaviour::package(kind *K) {
inter_name *Kinds::Behaviour::get_inc_iname(kind *K) {
if (K == NULL) internal_error("null kind has no inc routine");
if (K->construct->inc_iname) return K->construct->inc_iname;
package_request *R = Kinds::RunTime::package(K);
package_request *R = Kinds::Behaviour::package(K);
K->construct->inc_iname = Hierarchy::make_iname_in(DECREMENT_FN_HL, R);
return K->construct->inc_iname;
}
inter_name *Kinds::Behaviour::get_dec_iname(kind *K) {
if (K == NULL) internal_error("null kind has no dec routine");
if (K->construct->dec_iname) return K->construct->dec_iname;
package_request *R = Kinds::RunTime::package(K);
package_request *R = Kinds::Behaviour::package(K);
K->construct->dec_iname = Hierarchy::make_iname_in(INCREMENT_FN_HL, R);
return K->construct->dec_iname;
}
inter_name *Kinds::Behaviour::get_ranger_iname(kind *K) {
if (K == NULL) internal_error("null kind has no inc routine");
if (K->construct->ranger_iname) return K->construct->ranger_iname;
package_request *R = Kinds::RunTime::package(K);
package_request *R = Kinds::Behaviour::package(K);
K->construct->ranger_iname = Hierarchy::make_iname_in(RANGER_FN_HL, R);
return K->construct->ranger_iname;
}