mirror of
https://github.com/ganelson/inform.git
synced 2024-07-05 08:34:22 +03:00
Refactored enclosure and packaging
This commit is contained in:
parent
46f3e3e320
commit
24ec91a807
|
@ -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">) && (</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">(&</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">>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">>ppd_iname</span><span class="plain">);</span>
|
||||
<span class="identifier">pdef</span><span class="plain">-</span><span class="element">>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">>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">>ppd_package</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="functiontext">Calculus::Schemas::modify</span><span class="plain">(&</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">>rtp_iname</span><span class="plain">);</span>
|
||||
|
|
|
@ -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 — they would then never be reached.
|
|||
<span class="identifier">pdef</span><span class="plain">-</span><span class="element">>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">>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">>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">>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">>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">>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">>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>
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
<!--Weave of '13/rsfk' generated by 7-->
|
||||
<ul class="crumbs"><li><a href="../webs.html">★</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">§1. Definitions</a></li><li><a href="#SP3">§3. Kinds as I6 classes</a></li><li><a href="#SP4">§4. Default values</a></li><li><a href="#SP6">§6. Equality tests</a></li><li><a href="#SP7">§7. Casts at runtime</a></li><li><a href="#SP8">§8. IDs</a></li><li><a href="#SP17">§17. The heap</a></li><li><a href="#SP21">§21. Run-time support for units and enumerations</a></li><li><a href="#SP25_6">§25.6. Further runtime support</a></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><a href="#SP1">§1. Definitions</a></li><li><a href="#SP3">§3. Kinds as I6 classes</a></li><li><a href="#SP4">§4. Default values</a></li><li><a href="#SP6">§6. Equality tests</a></li><li><a href="#SP7">§7. Casts at runtime</a></li><li><a href="#SP8">§8. IDs</a></li><li><a href="#SP17">§17. The heap</a></li><li><a href="#SP21">§21. Run-time support for units and enumerations</a></li><li><a href="#SP24_6">§24.6. Further runtime support</a></li></ul><hr class="tocbar">
|
||||
|
||||
<p class="inwebparagraph"><a id="SP1"></a><b>§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">§26</a>, 6/bp (<a href="6-bp.html#SP25">§25</a>), 6/rlt (<a href="6-rlt.html#SP29_2">§29.2</a>, <a href="6-rlt.html#SP29_3">§29.3</a>, <a href="6-rlt.html#SP29_4">§29.4</a>, <a href="6-rlt.html#SP29_5">§29.5</a>, <a href="6-rlt.html#SP29_6">§29.6</a>), 12/ter (<a href="12-ter.html#SP8_6">§8.6</a>), 12/ca (<a href="12-ca.html#SP6_2">§6.2</a>), 12/dtd (<a href="12-dtd.html#SP24">§24</a>), 13/kak (<a href="13-kak.html#SP2">§2</a>), 25/cii (<a href="25-cii.html#SP3_1_1_4_7_1">§3.1.1.4.7.1</a>), 26/iti (<a href="26-iti.html#SP9">§9</a>), 27/hr (<a href="27-hr.html#SP4">§4</a>), 27/is (<a href="27-is.html#SP31_8_1">§31.8.1</a>).</p>
|
||||
<p class="endnote">The function Kinds::RunTime::I6_classname is used in <a href="#SP25">§25</a>, 6/bp (<a href="6-bp.html#SP25">§25</a>), 6/rlt (<a href="6-rlt.html#SP29_2">§29.2</a>, <a href="6-rlt.html#SP29_3">§29.3</a>, <a href="6-rlt.html#SP29_4">§29.4</a>, <a href="6-rlt.html#SP29_5">§29.5</a>, <a href="6-rlt.html#SP29_6">§29.6</a>), 12/ter (<a href="12-ter.html#SP8_6">§8.6</a>), 12/ca (<a href="12-ca.html#SP6_2">§6.2</a>), 12/dtd (<a href="12-dtd.html#SP24">§24</a>), 13/kak (<a href="13-kak.html#SP2">§2</a>), 25/cii (<a href="25-cii.html#SP3_1_1_4_7_1">§3.1.1.4.7.1</a>), 26/iti (<a href="26-iti.html#SP9">§9</a>), 27/hr (<a href="27-hr.html#SP4">§4</a>), 27/is (<a href="27-is.html#SP31_8_1">§31.8.1</a>).</p>
|
||||
|
||||
<p class="endnote">The function Kinds::RunTime::I6_classnumber is used in <a href="#SP24">§24</a>, 16/ic (<a href="16-ic.html#SP6">§6</a>, <a href="16-ic.html#SP10">§10</a>).</p>
|
||||
<p class="endnote">The function Kinds::RunTime::I6_classnumber is used in <a href="#SP23">§23</a>, 16/ic (<a href="16-ic.html#SP6">§6</a>, <a href="16-ic.html#SP10">§10</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP4"></a><b>§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">§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">§25.6.2</a>, 22/pav (<a href="22-pav.html#SP9_2">§9.2</a>), 24/lv (<a href="24-lv.html#SP43">§43</a>), 25/cii (<a href="25-cii.html#SP3_2_1">§3.2.1</a>, <a href="25-cii.html#SP3_5_3">§3.5.3</a>), 25/cp (<a href="25-cp.html#SP3_3_1">§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">§24.6.2</a>, 22/pav (<a href="22-pav.html#SP9_2">§9.2</a>), 24/lv (<a href="24-lv.html#SP43">§43</a>), 25/cii (<a href="25-cii.html#SP3_2_1">§3.2.1</a>, <a href="25-cii.html#SP3_5_3">§3.5.3</a>), 25/cp (<a href="25-cp.html#SP3_3_1">§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">§25.1</a>), 15/vp (<a href="15-vp.html#SP11">§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">§9</a>, <a href="#SP25">§25</a>, <a href="#SP25_1">§25.1</a>, 4/am (<a href="4-am.html#SP20">§20</a>, <a href="4-am.html#SP29_1">§29.1</a>, <a href="4-am.html#SP30">§30</a>, <a href="4-am.html#SP34_2">§34.2</a>).</p>
|
||||
<p class="endnote">The function Kinds::RunTime::weak_id is used in <a href="#SP9">§9</a>, <a href="#SP24">§24</a>, <a href="#SP24_1">§24.1</a>, 4/am (<a href="4-am.html#SP20">§20</a>, <a href="4-am.html#SP29_1">§29.1</a>, <a href="4-am.html#SP30">§30</a>, <a href="4-am.html#SP34_2">§34.2</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP9"></a><b>§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">§12</a>, <a href="#SP16_1">§16.1</a>, <a href="#SP20">§20</a>.</p>
|
||||
|
||||
<p class="endnote">The function Kinds::RunTime::emit_weak_id_as_val is used in <a href="#SP12">§12</a>, <a href="#SP25_6_1">§25.6.1</a>, <a href="#SP25_6_2">§25.6.2</a>, <a href="#SP25_6_3">§25.6.3</a>, <a href="#SP25_6_4">§25.6.4</a>, <a href="#SP25_6_5">§25.6.5</a>, <a href="#SP25_6_6">§25.6.6</a>, 12/is (<a href="12-is.html#SP8">§8</a>), 14/lv (<a href="14-lv.html#SP14_3">§14.3</a>), 21/fao (<a href="21-fao.html#SP10">§10</a>), 25/cii (<a href="25-cii.html#SP3_2_8">§3.2.8</a>).</p>
|
||||
<p class="endnote">The function Kinds::RunTime::emit_weak_id_as_val is used in <a href="#SP12">§12</a>, <a href="#SP24_6_1">§24.6.1</a>, <a href="#SP24_6_2">§24.6.2</a>, <a href="#SP24_6_3">§24.6.3</a>, <a href="#SP24_6_4">§24.6.4</a>, <a href="#SP24_6_5">§24.6.5</a>, <a href="#SP24_6_6">§24.6.6</a>, 12/is (<a href="12-is.html#SP8">§8</a>), 14/lv (<a href="14-lv.html#SP14_3">§14.3</a>), 21/fao (<a href="21-fao.html#SP10">§10</a>), 25/cii (<a href="25-cii.html#SP3_2_8">§3.2.8</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP10"></a><b>§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">-></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">-></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">-></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">-></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">-></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">-></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">>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">>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">§23</a>, <a href="#SP24">§24</a>, <a href="#SP25">§25</a>.</p>
|
||||
<p class="endnote">The function Kinds::RunTime::base_represented_in_inter is used in <a href="#SP22">§22</a>, <a href="#SP23">§23</a>, <a href="#SP24">§24</a>.</p>
|
||||
|
||||
<p class="endnote">The structure kind_interaction is private to this section.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP22"></a><b>§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">§15</a>, 15/epv (<a href="15-epv.html#SP2">§2</a>), 22/pav (<a href="22-pav.html#SP9">§9</a>), 27/ei (<a href="27-ei.html#SP3">§3</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP23"></a><b>§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><<span class="cwebmacro">Run out inter kind for description</span> <span class="cwebmacronumber">23.2</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_list_of</span><span class="plain">) </span><<span class="cwebmacro">Run out inter kind for list</span> <span class="cwebmacronumber">23.1</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_phrase</span><span class="plain">) </span><<span class="cwebmacro">Run out inter kind for phrase</span> <span class="cwebmacronumber">23.5</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_rule</span><span class="plain">) </span><<span class="cwebmacro">Run out inter kind for rule</span> <span class="cwebmacronumber">23.6</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_rulebook</span><span class="plain">) </span><<span class="cwebmacro">Run out inter kind for rulebook</span> <span class="cwebmacronumber">23.7</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_table_column</span><span class="plain">) </span><<span class="cwebmacro">Run out inter kind for column</span> <span class="cwebmacronumber">23.3</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><<span class="cwebmacro">Run out inter kind for relation</span> <span class="cwebmacronumber">23.4</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><<span class="cwebmacro">Run out inter kind for description</span> <span class="cwebmacronumber">22.2</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_list_of</span><span class="plain">) </span><<span class="cwebmacro">Run out inter kind for list</span> <span class="cwebmacronumber">22.1</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_phrase</span><span class="plain">) </span><<span class="cwebmacro">Run out inter kind for phrase</span> <span class="cwebmacronumber">22.5</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_rule</span><span class="plain">) </span><<span class="cwebmacro">Run out inter kind for rule</span> <span class="cwebmacronumber">22.6</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_rulebook</span><span class="plain">) </span><<span class="cwebmacro">Run out inter kind for rulebook</span> <span class="cwebmacronumber">22.7</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_table_column</span><span class="plain">) </span><<span class="cwebmacro">Run out inter kind for column</span> <span class="cwebmacronumber">22.3</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><<span class="cwebmacro">Run out inter kind for relation</span> <span class="cwebmacronumber">22.4</span>>
|
||||
<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">§3</a>, <a href="#SP22">§22</a>, <a href="#SP25">§25</a>, 15/epv (<a href="15-epv.html#SP1">§1</a>), 16/ic (<a href="16-ic.html#SP10">§10</a>), 27/ei (<a href="27-ei.html#SP2">§2</a>).</p>
|
||||
<p class="endnote">The function Kinds::RunTime::iname is used in <a href="#SP3">§3</a>, <a href="#SP24">§24</a>, 15/epv (<a href="15-epv.html#SP1">§1</a>), 16/ic (<a href="16-ic.html#SP10">§10</a>), 27/ei (<a href="27-ei.html#SP2">§2</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP23_1"></a><b>§23.1. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Run out inter kind for list</span> <span class="cwebmacronumber">23.1</span>> =
|
||||
<p class="inwebparagraph"><a id="SP22_1"></a><b>§22.1. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Run out inter kind for list</span> <span class="cwebmacronumber">22.1</span>> =
|
||||
</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">§23</a>.</p>
|
||||
<p class="endnote">This code is used in <a href="#SP22">§22</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP23_2"></a><b>§23.2. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Run out inter kind for description</span> <span class="cwebmacronumber">23.2</span>> =
|
||||
<p class="inwebparagraph"><a id="SP22_2"></a><b>§22.2. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Run out inter kind for description</span> <span class="cwebmacronumber">22.2</span>> =
|
||||
</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">§23</a>.</p>
|
||||
<p class="endnote">This code is used in <a href="#SP22">§22</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP23_3"></a><b>§23.3. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Run out inter kind for column</span> <span class="cwebmacronumber">23.3</span>> =
|
||||
<p class="inwebparagraph"><a id="SP22_3"></a><b>§22.3. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Run out inter kind for column</span> <span class="cwebmacronumber">22.3</span>> =
|
||||
</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">§23</a>.</p>
|
||||
<p class="endnote">This code is used in <a href="#SP22">§22</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP23_4"></a><b>§23.4. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Run out inter kind for relation</span> <span class="cwebmacronumber">23.4</span>> =
|
||||
<p class="inwebparagraph"><a id="SP22_4"></a><b>§22.4. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Run out inter kind for relation</span> <span class="cwebmacronumber">22.4</span>> =
|
||||
</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">§23</a>.</p>
|
||||
<p class="endnote">This code is used in <a href="#SP22">§22</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP23_5"></a><b>§23.5. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Run out inter kind for phrase</span> <span class="cwebmacronumber">23.5</span>> =
|
||||
<p class="inwebparagraph"><a id="SP22_5"></a><b>§22.5. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Run out inter kind for phrase</span> <span class="cwebmacronumber">22.5</span>> =
|
||||
</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">§23</a>.</p>
|
||||
<p class="endnote">This code is used in <a href="#SP22">§22</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP23_6"></a><b>§23.6. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Run out inter kind for rule</span> <span class="cwebmacronumber">23.6</span>> =
|
||||
<p class="inwebparagraph"><a id="SP22_6"></a><b>§22.6. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Run out inter kind for rule</span> <span class="cwebmacronumber">22.6</span>> =
|
||||
</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">§23</a>.</p>
|
||||
<p class="endnote">This code is used in <a href="#SP22">§22</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP23_7"></a><b>§23.7. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Run out inter kind for rulebook</span> <span class="cwebmacronumber">23.7</span>> =
|
||||
<p class="inwebparagraph"><a id="SP22_7"></a><b>§22.7. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Run out inter kind for rulebook</span> <span class="cwebmacronumber">22.7</span>> =
|
||||
</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">§23</a>.</p>
|
||||
<p class="endnote">This code is used in <a href="#SP22">§22</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP24"></a><b>§24. </b></p>
|
||||
<p class="inwebparagraph"><a id="SP23"></a><b>§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">§23</a>.</p>
|
||||
<p class="endnote">The function Kinds::RunTime::iname_inner is used in <a href="#SP22">§22</a>.</p>
|
||||
|
||||
<p class="endnote">The function Kinds::RunTime::assure_iname_exists is used in 5/un (<a href="5-un.html#SP2">§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>§25. </b></p>
|
||||
<p class="inwebparagraph"><a id="SP24"></a><b>§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>
|
||||
<<span class="cwebmacro">Compile I6 printing routine for an enumerated kind</span> <span class="cwebmacronumber">25.3</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Compile the A and B routines for an enumerated kind</span> <span class="cwebmacronumber">25.4</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Compile random-ranger routine for this kind</span> <span class="cwebmacronumber">25.5</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Compile I6 printing routine for an enumerated kind</span> <span class="cwebmacronumber">24.3</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Compile the A and B routines for an enumerated kind</span> <span class="cwebmacronumber">24.4</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Compile random-ranger routine for this kind</span> <span class="cwebmacronumber">24.5</span>><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>
|
||||
<<span class="cwebmacro">Compile I6 printing routine for a unit kind</span> <span class="cwebmacronumber">25.2</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Compile random-ranger routine for this kind</span> <span class="cwebmacronumber">25.5</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Compile I6 printing routine for a unit kind</span> <span class="cwebmacronumber">24.2</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Compile random-ranger routine for this kind</span> <span class="cwebmacronumber">24.5</span>><span class="plain">;</span>
|
||||
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
|
||||
<<span class="cwebmacro">Compile I6 printing routine for a vacant but named kind</span> <span class="cwebmacronumber">25.1</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Compile I6 printing routine for a vacant but named kind</span> <span class="cwebmacronumber">24.1</span>><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<<span class="cwebmacro">Compile a suite of I6 routines taking kind IDs as arguments</span> <span class="cwebmacronumber">25.6</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Compile a suite of I6 routines taking kind IDs as arguments</span> <span class="cwebmacronumber">24.6</span>><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">§4.14</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP25_1"></a><b>§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>§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">
|
||||
<<span class="cwebmacrodefn">Compile I6 printing routine for a vacant but named kind</span> <span class="cwebmacronumber">25.1</span>> =
|
||||
<<span class="cwebmacrodefn">Compile I6 printing routine for a vacant but named kind</span> <span class="cwebmacronumber">24.1</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
|
@ -1562,16 +1546,16 @@ compilation errors.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP25">§25</a>.</p>
|
||||
<p class="endnote">This code is used in <a href="#SP24">§24</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP25_2"></a><b>§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>§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">
|
||||
<<span class="cwebmacrodefn">Compile I6 printing routine for a unit kind</span> <span class="cwebmacronumber">25.2</span>> =
|
||||
<<span class="cwebmacrodefn">Compile I6 printing routine for a unit kind</span> <span class="cwebmacronumber">24.2</span>> =
|
||||
</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">§25</a>.</p>
|
||||
<p class="endnote">This code is used in <a href="#SP24">§24</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP25_3"></a><b>§25.3. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Compile I6 printing routine for an enumerated kind</span> <span class="cwebmacronumber">25.3</span>> =
|
||||
<p class="inwebparagraph"><a id="SP24_3"></a><b>§24.3. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Compile I6 printing routine for an enumerated kind</span> <span class="cwebmacronumber">24.3</span>> =
|
||||
</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">§25</a>.</p>
|
||||
<p class="endnote">This code is used in <a href="#SP24">§24</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP25_4"></a><b>§25.4. </b>The suite of standard routines provided for enumerative types is a little
|
||||
<p class="inwebparagraph"><a id="SP24_4"></a><b>§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">
|
||||
<<span class="cwebmacrodefn">Compile the A and B routines for an enumerated kind</span> <span class="cwebmacronumber">25.4</span>> =
|
||||
<<span class="cwebmacrodefn">Compile the A and B routines for an enumerated kind</span> <span class="cwebmacronumber">24.4</span>> =
|
||||
</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>
|
||||
<<span class="cwebmacro">Implement the A routine</span> <span class="cwebmacronumber">25.4.1</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Implement the A routine</span> <span class="cwebmacronumber">24.4.1</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="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>
|
||||
<<span class="cwebmacro">Implement the B routine</span> <span class="cwebmacronumber">25.4.2</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Implement the B routine</span> <span class="cwebmacronumber">24.4.2</span>><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">§25</a>.</p>
|
||||
<p class="endnote">This code is used in <a href="#SP24">§24</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP25_4_1"></a><b>§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>§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">
|
||||
<<span class="cwebmacrodefn">Implement the A routine</span> <span class="cwebmacronumber">25.4.1</span>> =
|
||||
<<span class="cwebmacrodefn">Implement the A routine</span> <span class="cwebmacronumber">24.4.1</span>> =
|
||||
</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">§25.4</a>.</p>
|
||||
<p class="endnote">This code is used in <a href="#SP24_4">§24.4</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP25_4_2"></a><b>§25.4.2. </b>And this was the second, a few minutes later.
|
||||
<p class="inwebparagraph"><a id="SP24_4_2"></a><b>§24.4.2. </b>And this was the second, a few minutes later.
|
||||
</p>
|
||||
|
||||
|
||||
<p class="macrodefinition"><code class="display">
|
||||
<<span class="cwebmacrodefn">Implement the B routine</span> <span class="cwebmacronumber">25.4.2</span>> =
|
||||
<<span class="cwebmacrodefn">Implement the B routine</span> <span class="cwebmacronumber">24.4.2</span>> =
|
||||
</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">§25.4</a>.</p>
|
||||
<p class="endnote">This code is used in <a href="#SP24_4">§24.4</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP25_5"></a><b>§25.5. </b>And here we add:
|
||||
<p class="inwebparagraph"><a id="SP24_5"></a><b>§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">
|
||||
<<span class="cwebmacrodefn">Compile random-ranger routine for this kind</span> <span class="cwebmacronumber">25.5</span>> =
|
||||
<<span class="cwebmacrodefn">Compile random-ranger routine for this kind</span> <span class="cwebmacronumber">24.5</span>> =
|
||||
</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>
|
||||
<<span class="cwebmacro">Formula for range</span> <span class="cwebmacronumber">25.5.1</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Formula for range</span> <span class="cwebmacronumber">24.5.1</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>
|
||||
<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>
|
||||
<<span class="cwebmacro">Formula for range</span> <span class="cwebmacronumber">25.5.1</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Formula for range</span> <span class="cwebmacronumber">24.5.1</span>><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">§25</a> (twice).</p>
|
||||
<p class="endnote">This code is used in <a href="#SP24">§24</a> (twice).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP25_5_1"></a><b>§25.5.1. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Formula for range</span> <span class="cwebmacronumber">25.5.1</span>> =
|
||||
<p class="inwebparagraph"><a id="SP24_5_1"></a><b>§24.5.1. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Formula for range</span> <span class="cwebmacronumber">24.5.1</span>> =
|
||||
</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">§25.5</a> (twice).</p>
|
||||
<p class="endnote">This code is used in <a href="#SP24_5">§24.5</a> (twice).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP25_6"></a><b>§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>§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">
|
||||
<<span class="cwebmacrodefn">Compile a suite of I6 routines taking kind IDs as arguments</span> <span class="cwebmacronumber">25.6</span>> =
|
||||
<<span class="cwebmacrodefn">Compile a suite of I6 routines taking kind IDs as arguments</span> <span class="cwebmacronumber">24.6</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<<span class="cwebmacro">Compile PrintKindValuePair</span> <span class="cwebmacronumber">25.6.1</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Compile DefaultValueOfKOV</span> <span class="cwebmacronumber">25.6.2</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Compile KOVComparisonFunction</span> <span class="cwebmacronumber">25.6.3</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Compile KOVDomainSize</span> <span class="cwebmacronumber">25.6.4</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Compile KOVIsBlockValue</span> <span class="cwebmacronumber">25.6.5</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Compile KOVSupportFunction</span> <span class="cwebmacronumber">25.6.6</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Compile PrintKindValuePair</span> <span class="cwebmacronumber">24.6.1</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Compile DefaultValueOfKOV</span> <span class="cwebmacronumber">24.6.2</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Compile KOVComparisonFunction</span> <span class="cwebmacronumber">24.6.3</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Compile KOVDomainSize</span> <span class="cwebmacronumber">24.6.4</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Compile KOVIsBlockValue</span> <span class="cwebmacronumber">24.6.5</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Compile KOVSupportFunction</span> <span class="cwebmacronumber">24.6.6</span>><span class="plain">;</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP25">§25</a>.</p>
|
||||
<p class="endnote">This code is used in <a href="#SP24">§24</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP25_6_1"></a><b>§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>§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">
|
||||
<<span class="cwebmacrodefn">Compile PrintKindValuePair</span> <span class="cwebmacronumber">25.6.1</span>> =
|
||||
<<span class="cwebmacrodefn">Compile PrintKindValuePair</span> <span class="cwebmacronumber">24.6.1</span>> =
|
||||
</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">§25.6</a>.</p>
|
||||
<p class="endnote">This code is used in <a href="#SP24_6">§24.6</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP25_6_2"></a><b>§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>§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">
|
||||
<<span class="cwebmacrodefn">Compile DefaultValueOfKOV</span> <span class="cwebmacronumber">25.6.2</span>> =
|
||||
<<span class="cwebmacrodefn">Compile DefaultValueOfKOV</span> <span class="cwebmacronumber">24.6.2</span>> =
|
||||
</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">§25.6</a>.</p>
|
||||
<p class="endnote">This code is used in <a href="#SP24_6">§24.6</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP25_6_3"></a><b>§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>§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">
|
||||
<<span class="cwebmacrodefn">Compile KOVComparisonFunction</span> <span class="cwebmacronumber">25.6.3</span>> =
|
||||
<<span class="cwebmacrodefn">Compile KOVComparisonFunction</span> <span class="cwebmacronumber">24.6.3</span>> =
|
||||
</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">§25.6</a>.</p>
|
||||
<p class="endnote">This code is used in <a href="#SP24_6">§24.6</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP25_6_4"></a><b>§25.6.4. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Compile KOVDomainSize</span> <span class="cwebmacronumber">25.6.4</span>> =
|
||||
<p class="inwebparagraph"><a id="SP24_6_4"></a><b>§24.6.4. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Compile KOVDomainSize</span> <span class="cwebmacronumber">24.6.4</span>> =
|
||||
</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">§25.6</a>.</p>
|
||||
<p class="endnote">This code is used in <a href="#SP24_6">§24.6</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP25_6_5"></a><b>§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>§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">
|
||||
<<span class="cwebmacrodefn">Compile KOVIsBlockValue</span> <span class="cwebmacronumber">25.6.5</span>> =
|
||||
<<span class="cwebmacrodefn">Compile KOVIsBlockValue</span> <span class="cwebmacronumber">24.6.5</span>> =
|
||||
</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">§25.6</a>.</p>
|
||||
<p class="endnote">This code is used in <a href="#SP24_6">§24.6</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP25_6_6"></a><b>§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>§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">
|
||||
<<span class="cwebmacrodefn">Compile KOVSupportFunction</span> <span class="cwebmacronumber">25.6.6</span>> =
|
||||
<<span class="cwebmacrodefn">Compile KOVSupportFunction</span> <span class="cwebmacronumber">24.6.6</span>> =
|
||||
</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">§25.6</a>.</p>
|
||||
<p class="endnote">This code is used in <a href="#SP24_6">§24.6</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP26"></a><b>§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>§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">§4.14</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP27"></a><b>§27. </b></p>
|
||||
<p class="inwebparagraph"><a id="SP26"></a><b>§26. </b></p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
|
|
|
@ -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">§16</a>, <a href="5-nv.html#SP25">§25</a>), 12/is (<a href="12-is.html#SP7">§7</a>), 12/ca (<a href="12-ca.html#SP5">§5</a>), 12/dtd (<a href="12-dtd.html#SP7">§7</a>), 13/rsfk (<a href="13-rsfk.html#SP4">§4</a>), 14/cfs (<a href="14-cfs.html#SP9">§9</a>), 15/epv (<a href="15-epv.html#SP2">§2</a>), 24/pb (<a href="24-pb.html#SP14">§14</a>), 25/ci (<a href="25-ci.html#SP3_1_1">§3.1.1</a>, <a href="25-ci.html#SP3_2_3_3_1_3">§3.2.3.3.1.3</a>), 25/cp (<a href="25-cp.html#SP6">§6</a>), 26/iti (<a href="26-iti.html#SP9">§9</a>), 27/is (<a href="27-is.html#SP31_1">§31.1</a>).</p>
|
||||
<p class="endnote">The function Holsters::new is used in 5/nv (<a href="5-nv.html#SP25">§25</a>), 12/is (<a href="12-is.html#SP7">§7</a>), 12/ca (<a href="12-ca.html#SP5">§5</a>), 12/dtd (<a href="12-dtd.html#SP7">§7</a>), 13/rsfk (<a href="13-rsfk.html#SP4">§4</a>), 14/cfs (<a href="14-cfs.html#SP9">§9</a>), 15/epv (<a href="15-epv.html#SP2">§2</a>), 24/pb (<a href="24-pb.html#SP14">§14</a>), 25/ci (<a href="25-ci.html#SP3_1_1">§3.1.1</a>, <a href="25-ci.html#SP3_2_3_3_1_3">§3.2.3.3.1.3</a>), 25/cp (<a href="25-cp.html#SP6">§6</a>), 26/iti (<a href="26-iti.html#SP9">§9</a>), 27/is (<a href="27-is.html#SP31_1">§31.1</a>), 27/ei (<a href="27-ei.html#SP5">§5</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP3"></a><b>§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">§25.1</a>), 13/rsfk (<a href="13-rsfk.html#SP4">§4</a>), 14/rv (<a href="14-rv.html#SP24_1">§24.1</a>, <a href="14-rv.html#SP24_3">§24.3</a>), 15/ep (<a href="15-ep.html#SP11">§11</a>), 15/vp (<a href="15-vp.html#SP11">§11</a>), 17/rs (<a href="17-rs.html#SP12">§12</a>), 27/ei (<a href="27-ei.html#SP5">§5</a>).</p>
|
||||
|
||||
<p class="endnote">The function Holsters::unholster_pair is used in 5/nv (<a href="5-nv.html#SP16">§16</a>, <a href="5-nv.html#SP25">§25</a>), 13/rsfk (<a href="13-rsfk.html#SP4">§4</a>), 14/cfs (<a href="14-cfs.html#SP9">§9</a>), 15/epv (<a href="15-epv.html#SP2_1">§2.1</a>), 26/iti (<a href="26-iti.html#SP9">§9</a>).</p>
|
||||
<p class="endnote">The function Holsters::unholster_pair is used in 5/nv (<a href="5-nv.html#SP25">§25</a>), 13/rsfk (<a href="13-rsfk.html#SP4">§4</a>), 14/cfs (<a href="14-cfs.html#SP9">§9</a>), 15/epv (<a href="15-epv.html#SP2_1">§2.1</a>), 26/iti (<a href="26-iti.html#SP9">§9</a>), 27/ei (<a href="27-ei.html#SP5">§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">
|
||||
|
|
|
@ -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">>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>
|
||||
|
|
|
@ -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">) &&</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>
|
||||
|
|
|
@ -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">>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>
|
||||
<<span class="cwebmacro">Ensure that the new property name is one we can live with</span> <span class="cwebmacronumber">5.1</span>><span class="plain">;</span>
|
||||
<<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>><span class="plain">;</span>
|
||||
|
@ -263,6 +264,7 @@ something.
|
|||
<span class="identifier">prn</span><span class="plain">-</span><span class="element">>ambiguous_name</span><span class="plain"> = <</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">>(</span><span class="identifier">W</span><span class="plain">);</span>
|
||||
<span class="identifier">prn</span><span class="plain">-</span><span class="element">>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">>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">>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">>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">>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">>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">)) && (</span><span class="identifier">prn</span><span class="plain">-</span><span class="element">>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">>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">>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">>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">>name</span><span class="plain">);</span>
|
||||
<span class="identifier">prn</span><span class="plain">-</span><span class="element">>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">>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">>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">>prop_package</span><span class="plain">, </span><span class="identifier">prn</span><span class="plain">-</span><span class="element">>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">>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">)) && (</span><span class="identifier">prn</span><span class="plain">-</span><span class="element">>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">>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">)) && (</span><span class="identifier">prn</span><span class="plain">-</span><span class="element">>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">§21</a>, <a href="#SP22_1">§22.1</a>, 5/ins (<a href="5-ins.html#SP38_3">§38.3</a>), 6/rlt (<a href="6-rlt.html#SP9_3_8">§9.3.8</a>, <a href="6-rlt.html#SP15_1_3">§15.1.3</a>), 12/ter (<a href="12-ter.html#SP8_1">§8.1</a>), 12/dtd (<a href="12-dtd.html#SP19">§19</a>, <a href="12-dtd.html#SP22">§22</a>), 12/cdp (<a href="12-cdp.html#SP2_1_6_1_2_2_5">§2.1.6.1.2.2.5</a>, <a href="12-cdp.html#SP2_1_6_1_2_2_6_1">§2.1.6.1.2.2.6.1</a>), 14/rv (<a href="14-rv.html#SP24_3_1">§24.3.1</a>), 15/ep (<a href="15-ep.html#SP15_1">§15.1</a>, <a href="15-ep.html#SP15_2">§15.2</a>), 15/ma (<a href="15-ma.html#SP14_1">§14.1</a>), 15/cr (<a href="15-cr.html#SP7_1">§7.1</a>), 15/spr (<a href="15-spr.html#SP2">§2</a>), 15/spr2 (<a href="15-spr2.html#SP8">§8</a>, <a href="15-spr2.html#SP11">§11</a>), 15/epv (<a href="15-epv.html#SP4">§4</a>), 16/ic (<a href="16-ic.html#SP13">§13</a>), 26/iti (<a href="26-iti.html#SP9">§9</a>), 27/ei (<a href="27-ei.html#SP3">§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">§3</a>).</p>
|
||||
|
||||
<p class="endnote">The function Properties::emit is used in 1/mr (<a href="1-mr.html#SP4_11">§4.11</a>).</p>
|
||||
|
|
|
@ -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">>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">>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">>property_value_kind</span><span class="plain"> = </span><span class="identifier">K</span><span class="plain">;</span>
|
||||
|
|
|
@ -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">>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">>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>
|
||||
|
|
|
@ -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">§12</a>).</p>
|
||||
|
||||
<p class="endnote">The function Strings::TextLiterals::CCOUNT_QUOTATIONS is used in 13/rsfk (<a href="13-rsfk.html#SP25">§25</a>).</p>
|
||||
<p class="endnote">The function Strings::TextLiterals::CCOUNT_QUOTATIONS is used in 13/rsfk (<a href="13-rsfk.html#SP24">§24</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP13"></a><b>§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">-></span><span class="identifier">read_into</span><span class="plain">, </span><span class="identifier">IRS</span><span class="plain">-></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">>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">>lt_sba_iname</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
|
|
|
@ -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">>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>
|
||||
|
|
|
@ -116,7 +116,7 @@ with a call to:
|
|||
<span class="identifier">ll</span><span class="plain">-</span><span class="element">>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">>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">>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">>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">>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>
|
||||
|
|
|
@ -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">§4</a>, 5/lp (<a href="5-lp.html#SP34_5">§34.5</a>, <a href="5-lp.html#SP34_6">§34.6</a>), 5/ins (<a href="5-ins.html#SP19_1">§19.1</a>), 5/nv (<a href="5-nv.html#SP7_1">§7.1</a>, <a href="5-nv.html#SP23">§23</a>, <a href="5-nv.html#SP25_2">§25.2</a>), 6/tur (<a href="6-tur.html#SP5">§5</a>), 9/tc (<a href="9-tc.html#SP5_4_2_6">§5.4.2.6</a>, <a href="9-tc.html#SP5_4_2_7">§5.4.2.7</a>, <a href="9-tc.html#SP5_4_2_8">§5.4.2.8</a>, <a href="9-tc.html#SP8_1">§8.1</a>), 9/ma (<a href="9-ma.html#SP3_3_39_1">§3.3.39.1</a>), 9/pk (<a href="9-pk.html#SP2_1">§2.1</a>, <a href="9-pk.html#SP4_4">§4.4</a>), 9/pd (<a href="9-pd.html#SP5_6_1">§5.6.1</a>, <a href="9-pd.html#SP7_1_3">§7.1.3</a>), 11/tc (<a href="11-tc.html#SP7_1">§7.1</a>), 11/tcp (<a href="11-tcp.html#SP6_9">§6.9</a>, <a href="11-tcp.html#SP6_10">§6.10</a>, <a href="11-tcp.html#SP6_11">§6.11</a>, <a href="11-tcp.html#SP10">§10</a>, <a href="11-tcp.html#SP11">§11</a>, <a href="11-tcp.html#SP11_3">§11.3</a>, <a href="11-tcp.html#SP12">§12</a>), 12/ter (<a href="12-ter.html#SP5_1">§5.1</a>, <a href="12-ter.html#SP8_4">§8.4</a>), 12/qr (<a href="12-qr.html#SP5">§5</a>), 12/ca (<a href="12-ca.html#SP6_2">§6.2</a>), 13/kak (<a href="13-kak.html#SP7">§7</a>), 13/rsfk (<a href="13-rsfk.html#SP4_1">§4.1</a>, <a href="13-rsfk.html#SP4_2">§4.2</a>, <a href="13-rsfk.html#SP16_2">§16.2</a>, <a href="13-rsfk.html#SP27">§27</a>), 14/ds2 (<a href="14-ds2.html#SP10_1_1_3_1">§10.1.1.3.1</a>, <a href="14-ds2.html#SP11_8_1">§11.8.1</a>, <a href="14-ds2.html#SP11_9_1_1_2_2_2">§11.9.1.1.2.2.2</a>, <a href="14-ds2.html#SP11_9_1_1_3_1_1">§11.9.1.1.3.1.1</a>, <a href="14-ds2.html#SP11_9_1_1_5_2">§11.9.1.1.5.2</a>, <a href="14-ds2.html#SP11_9_1_2_3_3">§11.9.1.2.3.3</a>, <a href="14-ds2.html#SP11_9_1_2_4">§11.9.1.2.4</a>, <a href="14-ds2.html#SP15_4">§15.4</a>, <a href="14-ds2.html#SP19_1">§19.1</a>, <a href="14-ds2.html#SP19_2">§19.2</a>, <a href="14-ds2.html#SP19_2_1">§19.2.1</a>, <a href="14-ds2.html#SP19_5_3_2">§19.5.3.2</a>, <a href="14-ds2.html#SP19_6_1_1">§19.6.1.1</a>, <a href="14-ds2.html#SP19_6_2_1">§19.6.2.1</a>, <a href="14-ds2.html#SP19_6_2_2">§19.6.2.2</a>), 15/vp (<a href="15-vp.html#SP5">§5</a>), 15/cp (<a href="15-cp.html#SP3">§3</a>), 15/tpr (<a href="15-tpr.html#SP5">§5</a>), 15/spr2 (<a href="15-spr2.html#SP9_1">§9.1</a>, <a href="15-spr2.html#SP9_2">§9.2</a>), 15/pov (<a href="15-pov.html#SP4_1">§4.1</a>), 16/in (<a href="16-in.html#SP14">§14</a>), 18/lc (<a href="18-lc.html#SP8_2_1">§8.2.1</a>), 19/tc (<a href="19-tc.html#SP6_1">§6.1</a>, <a href="19-tc.html#SP14_1">§14.1</a>, <a href="19-tc.html#SP15">§15</a>, <a href="19-tc.html#SP15_6">§15.6</a>), 19/tod (<a href="19-tod.html#SP6_2">§6.2</a>, <a href="19-tod.html#SP6_3_3">§6.3.3</a>), 20/eq (<a href="20-eq.html#SP41_4_1">§41.4.1</a>, <a href="20-eq.html#SP41_4_2">§41.4.2</a>, <a href="20-eq.html#SP47_3_2">§47.3.2</a>), 21/rl (<a href="21-rl.html#SP15">§15</a>, <a href="21-rl.html#SP18">§18</a>), 22/pu (<a href="22-pu.html#SP20_1_1_2">§20.1.1.2</a>), 25/ci (<a href="25-ci.html#SP3_1_1_2">§3.1.1.2</a>), 25/cii (<a href="25-cii.html#SP3_2_1_1">§3.2.1.1</a>, <a href="25-cii.html#SP3_1_1_4_7_1_2">§3.1.1.4.7.1.2</a>, <a href="25-cii.html#SP3_5_3">§3.5.3</a>, <a href="25-cii.html#SP3_5_4_3">§3.5.4.3</a>), 25/cp (<a href="25-cp.html#SP5_3_5">§5.3.5</a>).</p>
|
||||
<p class="endnote">The function Problems::quote_kind is used in <a href="#SP4">§4</a>, 5/lp (<a href="5-lp.html#SP34_5">§34.5</a>, <a href="5-lp.html#SP34_6">§34.6</a>), 5/ins (<a href="5-ins.html#SP19_1">§19.1</a>), 5/nv (<a href="5-nv.html#SP7_1">§7.1</a>, <a href="5-nv.html#SP23">§23</a>, <a href="5-nv.html#SP25_2">§25.2</a>), 6/tur (<a href="6-tur.html#SP5">§5</a>), 9/tc (<a href="9-tc.html#SP5_4_2_6">§5.4.2.6</a>, <a href="9-tc.html#SP5_4_2_7">§5.4.2.7</a>, <a href="9-tc.html#SP5_4_2_8">§5.4.2.8</a>, <a href="9-tc.html#SP8_1">§8.1</a>), 9/ma (<a href="9-ma.html#SP3_3_39_1">§3.3.39.1</a>), 9/pk (<a href="9-pk.html#SP2_1">§2.1</a>, <a href="9-pk.html#SP4_4">§4.4</a>), 9/pd (<a href="9-pd.html#SP5_6_1">§5.6.1</a>, <a href="9-pd.html#SP7_1_3">§7.1.3</a>), 11/tc (<a href="11-tc.html#SP7_1">§7.1</a>), 11/tcp (<a href="11-tcp.html#SP6_9">§6.9</a>, <a href="11-tcp.html#SP6_10">§6.10</a>, <a href="11-tcp.html#SP6_11">§6.11</a>, <a href="11-tcp.html#SP10">§10</a>, <a href="11-tcp.html#SP11">§11</a>, <a href="11-tcp.html#SP11_3">§11.3</a>, <a href="11-tcp.html#SP12">§12</a>), 12/ter (<a href="12-ter.html#SP5_1">§5.1</a>, <a href="12-ter.html#SP8_4">§8.4</a>), 12/qr (<a href="12-qr.html#SP5">§5</a>), 12/ca (<a href="12-ca.html#SP6_2">§6.2</a>), 13/kak (<a href="13-kak.html#SP7">§7</a>), 13/rsfk (<a href="13-rsfk.html#SP4_1">§4.1</a>, <a href="13-rsfk.html#SP4_2">§4.2</a>, <a href="13-rsfk.html#SP16_2">§16.2</a>, <a href="13-rsfk.html#SP26">§26</a>), 14/ds2 (<a href="14-ds2.html#SP10_1_1_3_1">§10.1.1.3.1</a>, <a href="14-ds2.html#SP11_8_1">§11.8.1</a>, <a href="14-ds2.html#SP11_9_1_1_2_2_2">§11.9.1.1.2.2.2</a>, <a href="14-ds2.html#SP11_9_1_1_3_1_1">§11.9.1.1.3.1.1</a>, <a href="14-ds2.html#SP11_9_1_1_5_2">§11.9.1.1.5.2</a>, <a href="14-ds2.html#SP11_9_1_2_3_3">§11.9.1.2.3.3</a>, <a href="14-ds2.html#SP11_9_1_2_4">§11.9.1.2.4</a>, <a href="14-ds2.html#SP15_4">§15.4</a>, <a href="14-ds2.html#SP19_1">§19.1</a>, <a href="14-ds2.html#SP19_2">§19.2</a>, <a href="14-ds2.html#SP19_2_1">§19.2.1</a>, <a href="14-ds2.html#SP19_5_3_2">§19.5.3.2</a>, <a href="14-ds2.html#SP19_6_1_1">§19.6.1.1</a>, <a href="14-ds2.html#SP19_6_2_1">§19.6.2.1</a>, <a href="14-ds2.html#SP19_6_2_2">§19.6.2.2</a>), 15/vp (<a href="15-vp.html#SP5">§5</a>), 15/cp (<a href="15-cp.html#SP3">§3</a>), 15/tpr (<a href="15-tpr.html#SP5">§5</a>), 15/spr2 (<a href="15-spr2.html#SP9_1">§9.1</a>, <a href="15-spr2.html#SP9_2">§9.2</a>), 15/pov (<a href="15-pov.html#SP4_1">§4.1</a>), 16/in (<a href="16-in.html#SP14">§14</a>), 18/lc (<a href="18-lc.html#SP8_2_1">§8.2.1</a>), 19/tc (<a href="19-tc.html#SP6_1">§6.1</a>, <a href="19-tc.html#SP14_1">§14.1</a>, <a href="19-tc.html#SP15">§15</a>, <a href="19-tc.html#SP15_6">§15.6</a>), 19/tod (<a href="19-tod.html#SP6_2">§6.2</a>, <a href="19-tod.html#SP6_3_3">§6.3.3</a>), 20/eq (<a href="20-eq.html#SP41_4_1">§41.4.1</a>, <a href="20-eq.html#SP41_4_2">§41.4.2</a>, <a href="20-eq.html#SP47_3_2">§47.3.2</a>), 21/rl (<a href="21-rl.html#SP15">§15</a>, <a href="21-rl.html#SP18">§18</a>), 22/pu (<a href="22-pu.html#SP20_1_1_2">§20.1.1.2</a>), 25/ci (<a href="25-ci.html#SP3_1_1_2">§3.1.1.2</a>), 25/cii (<a href="25-cii.html#SP3_2_1_1">§3.2.1.1</a>, <a href="25-cii.html#SP3_1_1_4_7_1_2">§3.1.1.4.7.1.2</a>, <a href="25-cii.html#SP3_5_3">§3.5.3</a>, <a href="25-cii.html#SP3_5_4_3">§3.5.4.3</a>), 25/cp (<a href="25-cp.html#SP5_3_5">§5.3.5</a>).</p>
|
||||
|
||||
<p class="endnote">The function Problems::expand_kind appears nowhere else.</p>
|
||||
|
||||
|
|
|
@ -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>
|
||||
|
||||
<<span class="cwebmacro">Open the rulebook compilation</span> <span class="cwebmacronumber">24.1.1</span>><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>
|
||||
|
|
|
@ -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">>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">>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">>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">), &</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</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">-</span><span class="element">>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">>rule_package</span><span class="plain">, </span><span class="identifier">R</span><span class="plain">-</span><span class="element">>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">>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">>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>
|
||||
|
|
|
@ -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">>primary_name</span><span class="plain">, </span><span class="identifier">rb</span><span class="plain">-</span><span class="element">>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">>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">>rule_list</span><span class="plain">, </span><span class="identifier">rb</span><span class="plain">-</span><span class="element">>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>
|
||||
|
|
|
@ -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>
|
||||
|
||||
<<span class="cwebmacro">Compile the default routine</span> <span class="cwebmacronumber">9.2</span>><span class="plain">;</span>
|
||||
|
|
|
@ -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">§1.3</a>).</p>
|
||||
|
||||
<p class="endnote">The function Phrases::iname is used in <a href="#SP9">§9</a>, <a href="#SP12">§12</a>, 21/rl (<a href="21-rl.html#SP19">§19</a>), 22/prcd (<a href="22-prcd.html#SP10">§10</a>, <a href="22-prcd.html#SP10_1">§10.1</a>), 22/tp2 (<a href="22-tp2.html#SP4">§4</a>), 23/abp (<a href="23-abp.html#SP1">§1</a>), 25/cp (<a href="25-cp.html#SP4">§4</a>).</p>
|
||||
<p class="endnote">The function Phrases::iname is used in <a href="#SP9">§9</a>, 21/rl (<a href="21-rl.html#SP19">§19</a>), 22/prcd (<a href="22-prcd.html#SP10">§10</a>, <a href="22-prcd.html#SP10_1">§10.1</a>), 22/tp2 (<a href="22-tp2.html#SP4">§4</a>), 23/abp (<a href="23-abp.html#SP1">§1</a>), 25/cp (<a href="25-cp.html#SP4">§4</a>).</p>
|
||||
|
||||
<p class="endnote">The function Phrases::declaration_node is used in 22/cs (<a href="22-cs.html#SP10_6">§10.6</a>, <a href="22-cs.html#SP10_7">§10.7</a>), 22/pu (<a href="22-pu.html#SP10_2_1">§10.2.1</a>), 22/tp (<a href="22-tp.html#SP4">§4</a>, <a href="22-tp.html#SP7_1">§7.1</a>, <a href="22-tp.html#SP8">§8</a>), 22/pi (<a href="22-pi.html#SP1">§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">(&(</span><span class="identifier">ph</span><span class="plain">-</span><span class="element">>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">>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>
|
||||
<<span class="cwebmacro">Move along the progress bar if it's this phrase's first compilation</span> <span class="cwebmacronumber">12.1</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">ph</span><span class="plain">-</span><span class="element">>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>
|
||||
<<span class="cwebmacro">Move along the progress bar if it's this phrase's first compilation</span> <span class="cwebmacronumber">12.1</span>><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="plain">}</span>
|
||||
|
|
|
@ -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>§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
|
||||
|
|
|
@ -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">§2.1.5</a>).</p>
|
||||
|
||||
<p class="endnote">The function LocalVariables::add_named_call is used in <a href="#SP47">§47</a>, 13/rsfk (<a href="13-rsfk.html#SP25_6_3">§25.6.3</a>), 21/rb (<a href="21-rb.html#SP23">§23</a>), 22/pav (<a href="22-pav.html#SP9_2">§9.2</a>).</p>
|
||||
<p class="endnote">The function LocalVariables::add_named_call is used in <a href="#SP47">§47</a>, 13/rsfk (<a href="13-rsfk.html#SP24_6_3">§24.6.3</a>), 21/rb (<a href="21-rb.html#SP23">§23</a>), 22/pav (<a href="22-pav.html#SP9_2">§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">§43</a>), 5/lp (<a href="5-lp.html#SP27">§27</a>), 6/rlt (<a href="6-rlt.html#SP15_2">§15.2</a>, <a href="6-rlt.html#SP17">§17</a>, <a href="6-rlt.html#SP29_1">§29.1</a>), 6/nv (<a href="6-nv.html#SP18_1">§18.1</a>, <a href="6-nv.html#SP18_2">§18.2</a>), 8/ef (<a href="8-ef.html#SP19">§19</a>), 12/cad (<a href="12-cad.html#SP5">§5</a>), 12/cdp (<a href="12-cdp.html#SP2_1_5">§2.1.5</a>, <a href="12-cdp.html#SP2_1_5_2">§2.1.5.2</a>), 13/rsfk (<a href="13-rsfk.html#SP16_3">§16.3</a>, <a href="13-rsfk.html#SP25_1">§25.1</a>, <a href="13-rsfk.html#SP25_2">§25.2</a>, <a href="13-rsfk.html#SP25_3">§25.3</a>, <a href="13-rsfk.html#SP25_5">§25.5</a>, <a href="13-rsfk.html#SP25_6_1">§25.6.1</a>, <a href="13-rsfk.html#SP25_6_2">§25.6.2</a>, <a href="13-rsfk.html#SP25_6_5">§25.6.5</a>, <a href="13-rsfk.html#SP25_6_6">§25.6.6</a>, <a href="13-rsfk.html#SP26">§26</a>), 17/rs (<a href="17-rs.html#SP6_2">§6.2</a>, <a href="17-rs.html#SP7_2">§7.2</a>), 19/tc (<a href="19-tc.html#SP8">§8</a>), 19/rsft (<a href="19-rsft.html#SP2">§2</a>), 21/rl (<a href="21-rl.html#SP20">§20</a>), 21/rb (<a href="21-rb.html#SP24_1_1">§24.1.1</a>), 21/rl2 (<a href="21-rl2.html#SP14_1">§14.1</a>), 21/fao (<a href="21-fao.html#SP10">§10</a>), 21/sv (<a href="21-sv.html#SP3">§3</a>), 24/ch (<a href="24-ch.html#SP7">§7</a>), 26/uo (<a href="26-uo.html#SP21_1">§21.1</a>, <a href="26-uo.html#SP21_2">§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">§43</a>), 5/lp (<a href="5-lp.html#SP27">§27</a>), 6/rlt (<a href="6-rlt.html#SP15_2">§15.2</a>, <a href="6-rlt.html#SP17">§17</a>, <a href="6-rlt.html#SP29_1">§29.1</a>), 6/nv (<a href="6-nv.html#SP18_1">§18.1</a>, <a href="6-nv.html#SP18_2">§18.2</a>), 8/ef (<a href="8-ef.html#SP19">§19</a>), 12/cad (<a href="12-cad.html#SP5">§5</a>), 12/cdp (<a href="12-cdp.html#SP2_1_5">§2.1.5</a>, <a href="12-cdp.html#SP2_1_5_2">§2.1.5.2</a>), 13/rsfk (<a href="13-rsfk.html#SP16_3">§16.3</a>, <a href="13-rsfk.html#SP24_1">§24.1</a>, <a href="13-rsfk.html#SP24_2">§24.2</a>, <a href="13-rsfk.html#SP24_3">§24.3</a>, <a href="13-rsfk.html#SP24_5">§24.5</a>, <a href="13-rsfk.html#SP24_6_1">§24.6.1</a>, <a href="13-rsfk.html#SP24_6_2">§24.6.2</a>, <a href="13-rsfk.html#SP24_6_5">§24.6.5</a>, <a href="13-rsfk.html#SP24_6_6">§24.6.6</a>, <a href="13-rsfk.html#SP25">§25</a>), 17/rs (<a href="17-rs.html#SP6_2">§6.2</a>, <a href="17-rs.html#SP7_2">§7.2</a>), 19/tc (<a href="19-tc.html#SP8">§8</a>), 19/rsft (<a href="19-rsft.html#SP2">§2</a>), 21/rl (<a href="21-rl.html#SP20">§20</a>), 21/rb (<a href="21-rb.html#SP24_1_1">§24.1.1</a>), 21/rl2 (<a href="21-rl2.html#SP14_1">§14.1</a>), 21/fao (<a href="21-fao.html#SP10">§10</a>), 21/sv (<a href="21-sv.html#SP3">§3</a>), 24/ch (<a href="24-ch.html#SP7">§7</a>), 26/uo (<a href="26-uo.html#SP21_1">§21.1</a>, <a href="26-uo.html#SP21_2">§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">§15.2</a>).</p>
|
||||
|
||||
<p class="endnote">The function LocalVariables::add_internal_local_c is used in <a href="#SP12">§12</a>, <a href="#SP13">§13</a>, 13/rsfk (<a href="13-rsfk.html#SP25_6_2">§25.6.2</a>, <a href="13-rsfk.html#SP25_6_3">§25.6.3</a>, <a href="13-rsfk.html#SP25_6_4">§25.6.4</a>).</p>
|
||||
<p class="endnote">The function LocalVariables::add_internal_local_c is used in <a href="#SP12">§12</a>, <a href="#SP13">§13</a>, 13/rsfk (<a href="13-rsfk.html#SP24_6_2">§24.6.2</a>, <a href="13-rsfk.html#SP24_6_3">§24.6.3</a>, <a href="13-rsfk.html#SP24_6_4">§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">§15</a>), 21/rb (<a href="21-rb.html#SP24_1_1">§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">§3</a>, <a href="26-rt.html#SP4">§4</a>, <a href="26-rt.html#SP4_1_1">§4.1.1</a>).</p>
|
||||
|
||||
<p class="endnote">The function LocalVariables::declare_this is used in <a href="#SP8">§8</a>, <a href="#SP10">§10</a>, <a href="#SP11">§11</a>, <a href="#SP27">§27</a>, <a href="#SP28">§28</a>, <a href="#SP29">§29</a>, <a href="#SP41">§41</a>, <a href="#SP43">§43</a>, <a href="#SP45">§45</a>, 4/am (<a href="4-am.html#SP34_2">§34.2</a>), 11/tr (<a href="11-tr.html#SP10">§10</a>), 12/dtd (<a href="12-dtd.html#SP9">§9</a>, <a href="12-dtd.html#SP23">§23</a>, <a href="12-dtd.html#SP25">§25</a>, <a href="12-dtd.html#SP26">§26</a>, <a href="12-dtd.html#SP27">§27</a>), 12/cad (<a href="12-cad.html#SP7">§7</a>), 13/rsfk (<a href="13-rsfk.html#SP25_6_2">§25.6.2</a>, <a href="13-rsfk.html#SP25_6_3">§25.6.3</a>, <a href="13-rsfk.html#SP25_6_4">§25.6.4</a>), 14/lv (<a href="14-lv.html#SP14_1">§14.1</a>, <a href="14-lv.html#SP14_5">§14.5</a>), 14/cn (<a href="14-cn.html#SP16_3">§16.3</a>), 20/eq (<a href="20-eq.html#SP48">§48</a>), 25/cii (<a href="25-cii.html#SP1_2_1">§1.2.1</a>, <a href="25-cii.html#SP3_5_1">§3.5.1</a>, <a href="25-cii.html#SP3_5_3">§3.5.3</a>), 25/cp (<a href="25-cp.html#SP5_3_5">§5.3.5</a>), 27/is (<a href="27-is.html#SP31_9">§31.9</a>).</p>
|
||||
<p class="endnote">The function LocalVariables::declare_this is used in <a href="#SP8">§8</a>, <a href="#SP10">§10</a>, <a href="#SP11">§11</a>, <a href="#SP27">§27</a>, <a href="#SP28">§28</a>, <a href="#SP29">§29</a>, <a href="#SP41">§41</a>, <a href="#SP43">§43</a>, <a href="#SP45">§45</a>, 4/am (<a href="4-am.html#SP34_2">§34.2</a>), 11/tr (<a href="11-tr.html#SP10">§10</a>), 12/dtd (<a href="12-dtd.html#SP9">§9</a>, <a href="12-dtd.html#SP23">§23</a>, <a href="12-dtd.html#SP25">§25</a>, <a href="12-dtd.html#SP26">§26</a>, <a href="12-dtd.html#SP27">§27</a>), 12/cad (<a href="12-cad.html#SP7">§7</a>), 13/rsfk (<a href="13-rsfk.html#SP24_6_2">§24.6.2</a>, <a href="13-rsfk.html#SP24_6_3">§24.6.3</a>, <a href="13-rsfk.html#SP24_6_4">§24.6.4</a>), 14/lv (<a href="14-lv.html#SP14_1">§14.1</a>, <a href="14-lv.html#SP14_5">§14.5</a>), 14/cn (<a href="14-cn.html#SP16_3">§16.3</a>), 20/eq (<a href="20-eq.html#SP48">§48</a>), 25/cii (<a href="25-cii.html#SP1_2_1">§1.2.1</a>, <a href="25-cii.html#SP3_5_1">§3.5.1</a>, <a href="25-cii.html#SP3_5_3">§3.5.3</a>), 25/cp (<a href="25-cp.html#SP5_3_5">§5.3.5</a>), 27/is (<a href="27-is.html#SP31_9">§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">§25.4.1</a>, <a href="13-rsfk.html#SP25_4_2">§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">§24.4.1</a>, <a href="13-rsfk.html#SP24_4_2">§24.4.2</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP48"></a><b>§48. </b>Note that a deallocated "let" variable retains its most recent name.
|
||||
</p>
|
||||
|
|
|
@ -62,11 +62,11 @@ should always be supplied for "To..." phrases, but left null for rules.
|
|||
|
||||
<<span class="cwebmacro">Compile some commentary about the routine to follow</span> <span class="cwebmacronumber">3.1</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">), &(</span><span class="identifier">ph</span><span class="plain">-</span><span class="element">>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">), &(</span><span class="identifier">ph</span><span class="plain">-</span><span class="element">>stack_frame</span><span class="plain">));</span>
|
||||
|
||||
<<span class="cwebmacro">Compile the body of the routine</span> <span class="cwebmacronumber">3.3</span>><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>
|
||||
|
|
|
@ -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">§5</a>, 5/lp (<a href="5-lp.html#SP27_3_1">§27.3.1</a>), 13/rsfk (<a href="13-rsfk.html#SP25_3">§25.3</a>), 17/tl (<a href="17-tl.html#SP14_1">§14.1</a>).</p>
|
||||
<p class="endnote">The function CompiledText::from_wide_string is used in <a href="#SP5">§5</a>, 5/lp (<a href="5-lp.html#SP27_3_1">§27.3.1</a>), 13/rsfk (<a href="13-rsfk.html#SP24_3">§24.3</a>), 17/tl (<a href="17-tl.html#SP14_1">§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">§3.5.8.1</a>).</p>
|
||||
|
||||
|
|
|
@ -809,7 +809,7 @@ of defined adjectives. So:
|
|||
<span class="functiontext">Holsters::unholster_pair</span><span class="plain">(&</span><span class="identifier">VH2</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="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">>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">>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>
|
||||
|
|
|
@ -9,36 +9,26 @@
|
|||
<body>
|
||||
|
||||
<!--Weave of '26/rt' generated by 7-->
|
||||
<ul class="crumbs"><li><a href="../webs.html">★</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">★</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>§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">§34.2</a>, <a href="4-am.html#SP43">§43</a>), 5/lp (<a href="5-lp.html#SP27">§27</a>), 5/nv (<a href="5-nv.html#SP16">§16</a>), 6/bp (<a href="6-bp.html#SP33">§33</a>), 6/rlt (<a href="6-rlt.html#SP15">§15</a>, <a href="6-rlt.html#SP15_2">§15.2</a>, <a href="6-rlt.html#SP17">§17</a>, <a href="6-rlt.html#SP29_1">§29.1</a>, <a href="6-rlt.html#SP29_2">§29.2</a>, <a href="6-rlt.html#SP29_3">§29.3</a>, <a href="6-rlt.html#SP29_4">§29.4</a>, <a href="6-rlt.html#SP29_5">§29.5</a>, <a href="6-rlt.html#SP29_6">§29.6</a>, <a href="6-rlt.html#SP30">§30</a>), 6/nv (<a href="6-nv.html#SP18_1">§18.1</a>, <a href="6-nv.html#SP18_2">§18.2</a>), 8/ef (<a href="8-ef.html#SP19">§19</a>), 12/cdp (<a href="12-cdp.html#SP2_1">§2.1</a>), 13/rsfk (<a href="13-rsfk.html#SP16_3">§16.3</a>, <a href="13-rsfk.html#SP25_1">§25.1</a>, <a href="13-rsfk.html#SP25_2">§25.2</a>, <a href="13-rsfk.html#SP25_3">§25.3</a>, <a href="13-rsfk.html#SP25_4">§25.4</a>, <a href="13-rsfk.html#SP25_5">§25.5</a>, <a href="13-rsfk.html#SP25_6_1">§25.6.1</a>, <a href="13-rsfk.html#SP25_6_2">§25.6.2</a>, <a href="13-rsfk.html#SP25_6_3">§25.6.3</a>, <a href="13-rsfk.html#SP25_6_4">§25.6.4</a>, <a href="13-rsfk.html#SP25_6_5">§25.6.5</a>, <a href="13-rsfk.html#SP25_6_6">§25.6.6</a>, <a href="13-rsfk.html#SP26">§26</a>), 15/ma (<a href="15-ma.html#SP13">§13</a>), 17/tl (<a href="17-tl.html#SP14_2">§14.2</a>), 17/ts (<a href="17-ts.html#SP11">§11</a>), 17/rs (<a href="17-rs.html#SP6_1">§6.1</a>, <a href="17-rs.html#SP6_2">§6.2</a>, <a href="17-rs.html#SP7_2">§7.2</a>), 19/tc (<a href="19-tc.html#SP8">§8</a>), 19/rsft (<a href="19-rsft.html#SP2">§2</a>), 20/eq (<a href="20-eq.html#SP43">§43</a>), 21/rl (<a href="21-rl.html#SP20">§20</a>, <a href="21-rl.html#SP22_1">§22.1</a>), 21/rb (<a href="21-rb.html#SP23">§23</a>, <a href="21-rb.html#SP24_1_1">§24.1.1</a>), 21/rl2 (<a href="21-rl2.html#SP14_1">§14.1</a>), 21/fao (<a href="21-fao.html#SP10">§10</a>), 21/sv (<a href="21-sv.html#SP3">§3</a>), 22/pav (<a href="22-pav.html#SP9_2">§9.2</a>), 24/ch (<a href="24-ch.html#SP6">§6</a>, <a href="24-ch.html#SP7">§7</a>), 26/uo (<a href="26-uo.html#SP21_1">§21.1</a>, <a href="26-uo.html#SP21_2">§21.2</a>), 26/lt (<a href="26-lt.html#SP4_1">§4.1</a>), 26/ts (<a href="26-ts.html#SP10">§10</a>, <a href="26-ts.html#SP11">§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">§34.2</a>, <a href="4-am.html#SP43">§43</a>), 5/lp (<a href="5-lp.html#SP27">§27</a>), 5/nv (<a href="5-nv.html#SP16">§16</a>), 6/bp (<a href="6-bp.html#SP33">§33</a>), 6/rlt (<a href="6-rlt.html#SP15">§15</a>, <a href="6-rlt.html#SP15_2">§15.2</a>, <a href="6-rlt.html#SP17">§17</a>, <a href="6-rlt.html#SP29_1">§29.1</a>, <a href="6-rlt.html#SP29_2">§29.2</a>, <a href="6-rlt.html#SP29_3">§29.3</a>, <a href="6-rlt.html#SP29_4">§29.4</a>, <a href="6-rlt.html#SP29_5">§29.5</a>, <a href="6-rlt.html#SP29_6">§29.6</a>, <a href="6-rlt.html#SP30">§30</a>), 6/nv (<a href="6-nv.html#SP18_1">§18.1</a>, <a href="6-nv.html#SP18_2">§18.2</a>), 8/ef (<a href="8-ef.html#SP19">§19</a>), 12/cdp (<a href="12-cdp.html#SP2_1">§2.1</a>), 13/rsfk (<a href="13-rsfk.html#SP16_3">§16.3</a>, <a href="13-rsfk.html#SP24_1">§24.1</a>, <a href="13-rsfk.html#SP24_2">§24.2</a>, <a href="13-rsfk.html#SP24_3">§24.3</a>, <a href="13-rsfk.html#SP24_4">§24.4</a>, <a href="13-rsfk.html#SP24_5">§24.5</a>, <a href="13-rsfk.html#SP24_6_1">§24.6.1</a>, <a href="13-rsfk.html#SP24_6_2">§24.6.2</a>, <a href="13-rsfk.html#SP24_6_3">§24.6.3</a>, <a href="13-rsfk.html#SP24_6_4">§24.6.4</a>, <a href="13-rsfk.html#SP24_6_5">§24.6.5</a>, <a href="13-rsfk.html#SP24_6_6">§24.6.6</a>, <a href="13-rsfk.html#SP25">§25</a>), 15/ma (<a href="15-ma.html#SP13">§13</a>), 17/tl (<a href="17-tl.html#SP14_2">§14.2</a>), 17/ts (<a href="17-ts.html#SP11">§11</a>), 17/rs (<a href="17-rs.html#SP6_1">§6.1</a>, <a href="17-rs.html#SP6_2">§6.2</a>, <a href="17-rs.html#SP7_2">§7.2</a>), 19/tc (<a href="19-tc.html#SP8">§8</a>), 19/rsft (<a href="19-rsft.html#SP2">§2</a>), 20/eq (<a href="20-eq.html#SP43">§43</a>), 21/rl (<a href="21-rl.html#SP20">§20</a>, <a href="21-rl.html#SP22_1">§22.1</a>), 21/rb (<a href="21-rb.html#SP23">§23</a>, <a href="21-rb.html#SP24_1_1">§24.1.1</a>), 21/rl2 (<a href="21-rl2.html#SP14_1">§14.1</a>), 21/fao (<a href="21-fao.html#SP10">§10</a>), 21/sv (<a href="21-sv.html#SP3">§3</a>), 22/pav (<a href="22-pav.html#SP9_2">§9.2</a>), 24/ch (<a href="24-ch.html#SP6">§6</a>, <a href="24-ch.html#SP7">§7</a>), 26/uo (<a href="26-uo.html#SP21_1">§21.1</a>, <a href="26-uo.html#SP21_2">§21.2</a>), 26/lt (<a href="26-lt.html#SP4_1">§4.1</a>), 26/ts (<a href="26-ts.html#SP10">§10</a>, <a href="26-ts.html#SP11">§11</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP2"></a><b>§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>§3. </b>So here is the flip:
|
||||
<p class="inwebparagraph"><a id="SP3"></a><b>§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>
|
||||
|
||||
<<span class="cwebmacro">Prepare a suitable stack frame</span> <span class="cwebmacronumber">3.1</span>><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">(&</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">§3</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP4"></a><b>§4. </b>And here is the flop:
|
||||
<p class="inwebparagraph"><a id="SP4"></a><b>§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">>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">>no_formal_parameters_needed</span><span class="plain"> > 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">>no_formal_parameters_needed</span><span class="plain"> > 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">§34.2</a>, <a href="4-am.html#SP43">§43</a>), 5/lp (<a href="5-lp.html#SP27">§27</a>), 5/nv (<a href="5-nv.html#SP16">§16</a>), 6/bp (<a href="6-bp.html#SP33">§33</a>), 6/rlt (<a href="6-rlt.html#SP15">§15</a>, <a href="6-rlt.html#SP15_2">§15.2</a>, <a href="6-rlt.html#SP17">§17</a>, <a href="6-rlt.html#SP29_1">§29.1</a>, <a href="6-rlt.html#SP29_2">§29.2</a>, <a href="6-rlt.html#SP29_3">§29.3</a>, <a href="6-rlt.html#SP29_4">§29.4</a>, <a href="6-rlt.html#SP29_5">§29.5</a>, <a href="6-rlt.html#SP29_6">§29.6</a>, <a href="6-rlt.html#SP30">§30</a>), 6/nv (<a href="6-nv.html#SP18_1">§18.1</a>, <a href="6-nv.html#SP18_2">§18.2</a>), 8/ef (<a href="8-ef.html#SP19">§19</a>), 12/cdp (<a href="12-cdp.html#SP2_1">§2.1</a>), 13/rsfk (<a href="13-rsfk.html#SP16_3">§16.3</a>, <a href="13-rsfk.html#SP25_1">§25.1</a>, <a href="13-rsfk.html#SP25_2">§25.2</a>, <a href="13-rsfk.html#SP25_3">§25.3</a>, <a href="13-rsfk.html#SP25_4">§25.4</a>, <a href="13-rsfk.html#SP25_5">§25.5</a>, <a href="13-rsfk.html#SP25_6_1">§25.6.1</a>, <a href="13-rsfk.html#SP25_6_2">§25.6.2</a>, <a href="13-rsfk.html#SP25_6_3">§25.6.3</a>, <a href="13-rsfk.html#SP25_6_4">§25.6.4</a>, <a href="13-rsfk.html#SP25_6_5">§25.6.5</a>, <a href="13-rsfk.html#SP25_6_6">§25.6.6</a>, <a href="13-rsfk.html#SP26">§26</a>), 15/ma (<a href="15-ma.html#SP13">§13</a>), 17/tl (<a href="17-tl.html#SP14_2">§14.2</a>), 17/ts (<a href="17-ts.html#SP11">§11</a>), 17/rs (<a href="17-rs.html#SP6_1">§6.1</a>, <a href="17-rs.html#SP6_2">§6.2</a>, <a href="17-rs.html#SP7_2">§7.2</a>), 19/tc (<a href="19-tc.html#SP8">§8</a>), 19/rsft (<a href="19-rsft.html#SP2">§2</a>), 20/eq (<a href="20-eq.html#SP43">§43</a>), 21/rl (<a href="21-rl.html#SP20">§20</a>, <a href="21-rl.html#SP22_1">§22.1</a>), 21/rb (<a href="21-rb.html#SP23">§23</a>, <a href="21-rb.html#SP24_1_5">§24.1.5</a>), 21/rl2 (<a href="21-rl2.html#SP14_1">§14.1</a>), 21/fao (<a href="21-fao.html#SP10">§10</a>), 21/sv (<a href="21-sv.html#SP3">§3</a>), 22/pav (<a href="22-pav.html#SP9_2">§9.2</a>), 24/ch (<a href="24-ch.html#SP6">§6</a>, <a href="24-ch.html#SP7">§7</a>), 26/uo (<a href="26-uo.html#SP21_1">§21.1</a>, <a href="26-uo.html#SP21_2">§21.2</a>), 26/lt (<a href="26-lt.html#SP4_1">§4.1</a>), 26/ts (<a href="26-ts.html#SP10">§10</a>, <a href="26-ts.html#SP11">§11</a>).</p>
|
||||
|
||||
<p class="endnote">The function Routines::end_in_current_package is used in 25/cp (<a href="25-cp.html#SP3">§3</a>).</p>
|
||||
<p class="endnote">The function Routines::end is used in 4/am (<a href="4-am.html#SP34_2">§34.2</a>, <a href="4-am.html#SP43">§43</a>), 5/lp (<a href="5-lp.html#SP27">§27</a>), 5/nv (<a href="5-nv.html#SP16">§16</a>), 6/bp (<a href="6-bp.html#SP33">§33</a>), 6/rlt (<a href="6-rlt.html#SP15">§15</a>, <a href="6-rlt.html#SP15_2">§15.2</a>, <a href="6-rlt.html#SP17">§17</a>, <a href="6-rlt.html#SP29_1">§29.1</a>, <a href="6-rlt.html#SP29_2">§29.2</a>, <a href="6-rlt.html#SP29_3">§29.3</a>, <a href="6-rlt.html#SP29_4">§29.4</a>, <a href="6-rlt.html#SP29_5">§29.5</a>, <a href="6-rlt.html#SP29_6">§29.6</a>, <a href="6-rlt.html#SP30">§30</a>), 6/nv (<a href="6-nv.html#SP18_1">§18.1</a>, <a href="6-nv.html#SP18_2">§18.2</a>), 8/ef (<a href="8-ef.html#SP19">§19</a>), 12/cdp (<a href="12-cdp.html#SP2_1">§2.1</a>), 13/rsfk (<a href="13-rsfk.html#SP16_3">§16.3</a>, <a href="13-rsfk.html#SP24_1">§24.1</a>, <a href="13-rsfk.html#SP24_2">§24.2</a>, <a href="13-rsfk.html#SP24_3">§24.3</a>, <a href="13-rsfk.html#SP24_4">§24.4</a>, <a href="13-rsfk.html#SP24_5">§24.5</a>, <a href="13-rsfk.html#SP24_6_1">§24.6.1</a>, <a href="13-rsfk.html#SP24_6_2">§24.6.2</a>, <a href="13-rsfk.html#SP24_6_3">§24.6.3</a>, <a href="13-rsfk.html#SP24_6_4">§24.6.4</a>, <a href="13-rsfk.html#SP24_6_5">§24.6.5</a>, <a href="13-rsfk.html#SP24_6_6">§24.6.6</a>, <a href="13-rsfk.html#SP25">§25</a>), 15/ma (<a href="15-ma.html#SP13">§13</a>), 17/tl (<a href="17-tl.html#SP14_2">§14.2</a>), 17/ts (<a href="17-ts.html#SP11">§11</a>), 17/rs (<a href="17-rs.html#SP6_1">§6.1</a>, <a href="17-rs.html#SP6_2">§6.2</a>, <a href="17-rs.html#SP7_2">§7.2</a>), 19/tc (<a href="19-tc.html#SP8">§8</a>), 19/rsft (<a href="19-rsft.html#SP2">§2</a>), 20/eq (<a href="20-eq.html#SP43">§43</a>), 21/rl (<a href="21-rl.html#SP20">§20</a>, <a href="21-rl.html#SP22_1">§22.1</a>), 21/rb (<a href="21-rb.html#SP23">§23</a>, <a href="21-rb.html#SP24_1_5">§24.1.5</a>), 21/rl2 (<a href="21-rl2.html#SP14_1">§14.1</a>), 21/fao (<a href="21-fao.html#SP10">§10</a>), 21/sv (<a href="21-sv.html#SP3">§3</a>), 22/pav (<a href="22-pav.html#SP9_2">§9.2</a>), 24/ch (<a href="24-ch.html#SP6">§6</a>, <a href="24-ch.html#SP7">§7</a>), 25/cp (<a href="25-cp.html#SP3">§3</a>), 26/uo (<a href="26-uo.html#SP21_1">§21.1</a>, <a href="26-uo.html#SP21_2">§21.2</a>), 26/lt (<a href="26-lt.html#SP4_1">§4.1</a>), 26/ts (<a href="26-ts.html#SP10">§10</a>, <a href="26-ts.html#SP11">§11</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP4_1"></a><b>§4.1. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Compile an outer shell routine with the public-facing name</span> <span class="cwebmacronumber">4.1</span>> =
|
||||
|
@ -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">>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>
|
||||
<<span class="cwebmacro">Compile I6 locals for the outer shell</span> <span class="cwebmacronumber">4.1.1</span>><span class="plain">;</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">NBV</span><span class="plain"> = 0;</span>
|
||||
|
|
|
@ -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>§3. </b></p>
|
||||
|
||||
|
|
|
@ -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">§27</a>), 20/eq (<a href="20-eq.html#SP41">§41</a>).</p>
|
||||
<p class="endnote">The function VirtualMachines::supports is used in 13/rsfk (<a href="13-rsfk.html#SP26">§26</a>), 20/eq (<a href="20-eq.html#SP41">§41</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP12"></a><b>§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
|
@ -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">>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">§2</a>, <a href="27-pc.html#SP3">§3</a>, <a href="27-pc.html#SP4">§4</a>, <a href="27-pc.html#SP6">§6</a>).</p>
|
||||
<p class="endnote">The function InterNames::location is used in 27/pc (<a href="27-pc.html#SP2">§2</a>, <a href="27-pc.html#SP3">§3</a>, <a href="27-pc.html#SP4">§4</a>, <a href="27-pc.html#SP6">§6</a>), 27/ei (<a href="27-ei.html#SP5">§5</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP8"></a><b>§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">§5</a>), 15/epv (<a href="15-epv.html#SP4">§4</a>), 21/rl (<a href="21-rl.html#SP9">§9</a>, <a href="21-rl.html#SP11_2">§11.2</a>, <a href="21-rl.html#SP22">§22</a>), 26/iti (<a href="26-iti.html#SP9">§9</a>), 27/is (<a href="27-is.html#SP32">§32</a>), 27/ei (<a href="27-ei.html#SP2">§2</a>, <a href="27-ei.html#SP3">§3</a>, <a href="27-ei.html#SP4">§4</a>, <a href="27-ei.html#SP5">§5</a>).</p>
|
||||
<p class="endnote">The function InterNames::to_symbol is used in 13/rsfk (<a href="13-rsfk.html#SP5">§5</a>), 15/epv (<a href="15-epv.html#SP4">§4</a>), 21/rl (<a href="21-rl.html#SP11_2">§11.2</a>, <a href="21-rl.html#SP22">§22</a>), 26/iti (<a href="26-iti.html#SP9">§9</a>), 27/is (<a href="27-is.html#SP32">§32</a>), 27/ei (<a href="27-ei.html#SP2">§2</a>, <a href="27-ei.html#SP3">§3</a>, <a href="27-ei.html#SP4">§4</a>, <a href="27-ei.html#SP5">§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">
|
||||
|
|
|
@ -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">§24.1</a>).</p>
|
||||
<p class="endnote">The function Packaging::stateless is used in 27/ei (<a href="27-ei.html#SP5">§5</a>).</p>
|
||||
|
||||
<p class="endnote">The function Packaging::home_of is used in 5/ins (<a href="5-ins.html#SP34">§34</a>), 12/cdp (<a href="12-cdp.html#SP5">§5</a>), 13/rsfk (<a href="13-rsfk.html#SP22">§22</a>), 26/rt (<a href="26-rt.html#SP3">§3</a>, <a href="26-rt.html#SP4">§4</a>), 27/hr (<a href="27-hr.html#SP3">§3</a>), 27/hl (<a href="27-hl.html#SP1">§1</a>), 27/ei (<a href="27-ei.html#SP3">§3</a>).</p>
|
||||
<p class="endnote">The function Packaging::home_of is used in 27/hr (<a href="27-hr.html#SP3">§3</a>), 27/hl (<a href="27-hl.html#SP1">§1</a>), 27/ei (<a href="27-ei.html#SP3">§3</a>).</p>
|
||||
|
||||
<p class="endnote">The function Packaging::enter_home_of is used in 5/nv (<a href="5-nv.html#SP16">§16</a>, <a href="5-nv.html#SP25">§25</a>), 13/rsfk (<a href="13-rsfk.html#SP16_2">§16.2</a>), 17/tl (<a href="17-tl.html#SP13">§13</a>), 21/rl2 (<a href="21-rl2.html#SP20">§20</a>), 22/ph (<a href="22-ph.html#SP12">§12</a>), 26/rt (<a href="26-rt.html#SP1">§1</a>), 27/ei (<a href="27-ei.html#SP2">§2</a>, <a href="27-ei.html#SP3">§3</a>).</p>
|
||||
<p class="endnote">The function Packaging::enter_home_of is used in 27/in (<a href="27-in.html#SP5">§5</a>), 27/ei (<a href="27-ei.html#SP2">§2</a>, <a href="27-ei.html#SP3">§3</a>, <a href="27-ei.html#SP5">§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">§8</a>, <a href="17-ts.html#SP8_1">§8.1</a>), 18/lc (<a href="18-lc.html#SP5">§5</a>), 26/iti (<a href="26-iti.html#SP9">§9</a>), 27/hr (<a href="27-hr.html#SP5">§5</a>).</p>
|
||||
<p class="endnote">The function Packaging::current_enclosure is used in 27/hr (<a href="27-hr.html#SP5">§5</a>), 27/ei (<a href="27-ei.html#SP5">§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">§3</a>, 27/ei (<a href="27-ei.html#SP2">§2</a>, <a href="27-ei.html#SP3">§3</a>).</p>
|
||||
<p class="endnote">The function Packaging::enter is used in <a href="#SP3">§3</a>, 27/ei (<a href="27-ei.html#SP3">§3</a>).</p>
|
||||
|
||||
<p class="endnote">The function Packaging::exit is used in 5/nv (<a href="5-nv.html#SP16">§16</a>, <a href="5-nv.html#SP25">§25</a>), 13/rsfk (<a href="13-rsfk.html#SP16_2">§16.2</a>), 17/tl (<a href="17-tl.html#SP13">§13</a>), 21/rl2 (<a href="21-rl2.html#SP20">§20</a>), 22/ph (<a href="22-ph.html#SP12">§12</a>), 26/rt (<a href="26-rt.html#SP4">§4</a>), 27/ei (<a href="27-ei.html#SP2">§2</a>, <a href="27-ei.html#SP3">§3</a>).</p>
|
||||
<p class="endnote">The function Packaging::exit is used in 27/in (<a href="27-in.html#SP5">§5</a>), 27/ei (<a href="27-ei.html#SP2">§2</a>, <a href="27-ei.html#SP3">§3</a>, <a href="27-ei.html#SP5">§5</a>).</p>
|
||||
|
||||
<p class="endnote">The function Packaging::incarnate is used in 21/rl (<a href="21-rl.html#SP9">§9</a>), 27/ei (<a href="27-ei.html#SP2">§2</a>).</p>
|
||||
<p class="endnote">The function Packaging::incarnate is used in 27/ei (<a href="27-ei.html#SP2">§2</a>, <a href="27-ei.html#SP3">§3</a>, <a href="27-ei.html#SP5">§5</a>).</p>
|
||||
|
||||
<p class="endnote">The function Packaging::scope is used in 27/in (<a href="27-in.html#SP8">§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">§1</a>).</p>
|
||||
|
||||
<p class="endnote">The function Packaging::housed_in_function is used in 26/rt (<a href="26-rt.html#SP4">§4</a>), 27/ei (<a href="27-ei.html#SP3">§3</a>).</p>
|
||||
<p class="endnote">The function Packaging::housed_in_function is used in 27/ei (<a href="27-ei.html#SP3">§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">
|
||||
|
|
|
@ -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">>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">>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">>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">>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">>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">>tag</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">-></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">>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">>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">>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">>instance_package</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">-</span><span class="element">>tag</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">-></span><span class="identifier">allocation_id</span><span class="plain">);</span>
|
||||
<span class="identifier">I</span><span class="plain">-</span><span class="element">>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">>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">>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">§15.1</a>, <a href="#SP15_2">§15.2</a>, <a href="#SP27">§27</a>, <a href="#SP37">§37</a>, <a href="#SP38_2">§38.2</a>, 2/sq (<a href="2-sq.html#SP2">§2</a>), 5/ipw (<a href="5-ipw.html#SP2_2_1">§2.2.1</a>), 8/ed2 (<a href="8-ed2.html#SP3_2_1_7_2">§3.2.1.7.2</a>, <a href="8-ed2.html#SP3_2_1_7_4">§3.2.1.7.4</a>), 9/rpt (<a href="9-rpt.html#SP9_5_1">§9.5.1</a>), 9/tc (<a href="9-tc.html#SP5_4_1">§5.4.1</a>), 14/rv (<a href="14-rv.html#SP3">§3</a>).</p>
|
||||
|
||||
<p class="endnote">The function Instances::get_name_in_play is used in <a href="#SP25">§25</a>, 13/rsfk (<a href="13-rsfk.html#SP25_3">§25.3</a>).</p>
|
||||
<p class="endnote">The function Instances::get_name_in_play is used in <a href="#SP25">§25</a>, 13/rsfk (<a href="13-rsfk.html#SP24_3">§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">§6</a>, <a href="#SP15">§15</a>, <a href="#SP29">§29</a>, <a href="#SP34">§34</a>, 13/rsfk (<a href="13-rsfk.html#SP4">§4</a>, <a href="13-rsfk.html#SP25_3">§25.3</a>), 26/iti (<a href="26-iti.html#SP9">§9</a>), 26/ts (<a href="26-ts.html#SP10">§10</a>).</p>
|
||||
<p class="endnote">The function Instances::iname is used in <a href="#SP6">§6</a>, <a href="#SP15">§15</a>, <a href="#SP29">§29</a>, <a href="#SP34">§34</a>, 13/rsfk (<a href="13-rsfk.html#SP4">§4</a>, <a href="13-rsfk.html#SP24_3">§24.3</a>), 26/iti (<a href="26-iti.html#SP9">§9</a>), 26/ts (<a href="26-ts.html#SP10">§10</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP15"></a><b>§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">§37</a>, 5/ipw (<a href="5-ipw.html#SP3_3">§3.3</a>), 13/rsfk (<a href="13-rsfk.html#SP25">§25</a>), 13/ki (<a href="13-ki.html#SP4">§4</a>), 19/tb (<a href="19-tb.html#SP26_3">§26.3</a>).</p>
|
||||
<p class="endnote">The function Instances::count is used in <a href="#SP37">§37</a>, 5/ipw (<a href="5-ipw.html#SP3_3">§3.3</a>), 13/rsfk (<a href="13-rsfk.html#SP24">§24</a>), 13/ki (<a href="13-ki.html#SP4">§4</a>), 19/tb (<a href="19-tb.html#SP26_3">§26.3</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP23"></a><b>§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">>instance_package</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
|
|
|
@ -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">§25.2</a>).</p>
|
||||
<p class="endnote">The function LiteralPatterns::printing_routine is used in 13/rsfk (<a href="13-rsfk.html#SP24_2">§24.2</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP27_1"></a><b>§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">§2</a>, <a href="#SP34">§34</a>, 13/rsfk (<a href="13-rsfk.html#SP25_2">§25.2</a>), 13/ki (<a href="13-ki.html#SP1_8">§1.8</a>, <a href="13-ki.html#SP5_1_1">§5.1.1</a>).</p>
|
||||
<p class="endnote">The function LiteralPatterns::list_of_literal_forms is used in <a href="#SP2">§2</a>, <a href="#SP34">§34</a>, 13/rsfk (<a href="13-rsfk.html#SP24_2">§24.2</a>), 13/ki (<a href="13-ki.html#SP1_8">§1.8</a>, <a href="13-ki.html#SP5_1_1">§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">
|
||||
|
|
|
@ -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">>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">>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">(&</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">(&</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">NonlocalVariables::seek_initial_value</span><span class="plain">(</span><span class="identifier">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="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">>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">(&</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">(&</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">(&</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">(&</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">§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">§16</a>.</p>
|
||||
|
||||
<p class="endnote">The function NonlocalVariables::compile_initial_value_vh is used in <a href="#SP16">§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>§25.1. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Initialise with the default value of its kind</span> <span class="cwebmacronumber">25.1</span>> =
|
||||
|
|
|
@ -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">§14</a>), 5/ipw (<a href="5-ipw.html#SP3_1">§3.1</a>, <a href="5-ipw.html#SP3_5">§3.5</a>).</p>
|
||||
|
||||
<p class="endnote">The function UseNouns::iname is used in 5/ins (<a href="5-ins.html#SP14">§14</a>), 13/rsfk (<a href="13-rsfk.html#SP24">§24</a>).</p>
|
||||
<p class="endnote">The function UseNouns::iname is used in 5/ins (<a href="5-ins.html#SP14">§14</a>), 13/rsfk (<a href="13-rsfk.html#SP23">§23</a>).</p>
|
||||
|
||||
<p class="endnote">The function UseNouns::iname_set is used in 13/rsfk (<a href="13-rsfk.html#SP24">§24</a>).</p>
|
||||
<p class="endnote">The function UseNouns::iname_set is used in 13/rsfk (<a href="13-rsfk.html#SP23">§23</a>).</p>
|
||||
|
||||
<p class="endnote">The function UseNouns::noun_compose_identifier is used in 5/ins (<a href="5-ins.html#SP14">§14</a>).</p>
|
||||
|
||||
<p class="endnote">The function UseNouns::noun_impose_identifier is used in 13/rsfk (<a href="13-rsfk.html#SP24">§24</a>).</p>
|
||||
<p class="endnote">The function UseNouns::noun_impose_identifier is used in 13/rsfk (<a href="13-rsfk.html#SP23">§23</a>).</p>
|
||||
|
||||
<p class="endnote">The function UseNouns::noun_set_I6_representation is used in <a href="#SP2_1">§2.1</a>.</p>
|
||||
|
||||
|
|
|
@ -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> -
|
||||
|
|
|
@ -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">§52</a>), 2/pl2 (<a href="2-pl2.html#SP3_1">§3.1</a>), 2/pck (<a href="2-pck.html#SP2">§2</a>), 3/rst (<a href="3-rst.html#SP6">§6</a>), 4/am (<a href="4-am.html#SP26_1">§26.1</a>), 8/ef (<a href="8-ef.html#SP26">§26</a>), 8/ed2 (<a href="8-ed2.html#SP3_2">§3.2</a>), 10/varc (<a href="10-varc.html#SP14">§14</a>), 19/tb (<a href="19-tb.html#SP27">§27</a>, <a href="19-tb.html#SP27_1">§27.1</a>, <a href="19-tb.html#SP27_1_3">§27.1.3</a>, <a href="19-tb.html#SP29">§29</a>), 21/rl2 (<a href="21-rl2.html#SP23">§23</a>), 26/uo (<a href="26-uo.html#SP11_1">§11.1</a>), 27/hr (<a href="27-hr.html#SP5">§5</a>), 2/lnk (<a href="2-lnk.html#SP1">§1</a>), 2/res (<a href="2-res.html#SP1">§1</a>), 3/cg (<a href="3-cg.html#SP1">§1</a>), 2/hf (<a href="2-hf.html#SP6">§6</a>).</p>
|
||||
<p class="endnote">The function main is used in 2/pt (<a href="2-pt.html#SP52">§52</a>), 2/pl2 (<a href="2-pl2.html#SP3_1">§3.1</a>), 2/pck (<a href="2-pck.html#SP2">§2</a>), 3/rst (<a href="3-rst.html#SP6">§6</a>), 4/am (<a href="4-am.html#SP26_1">§26.1</a>), 8/ef (<a href="8-ef.html#SP26">§26</a>), 8/ed2 (<a href="8-ed2.html#SP3_2">§3.2</a>), 10/varc (<a href="10-varc.html#SP14">§14</a>), 19/tb (<a href="19-tb.html#SP27">§27</a>, <a href="19-tb.html#SP27_1">§27.1</a>, <a href="19-tb.html#SP27_1_3">§27.1.3</a>, <a href="19-tb.html#SP29">§29</a>), 21/rl2 (<a href="21-rl2.html#SP23">§23</a>), 26/uo (<a href="26-uo.html#SP11_1">§11.1</a>), 27/hr (<a href="27-hr.html#SP5">§5</a>), 27/ei (<a href="27-ei.html#SP2">§2</a>), 2/lnk (<a href="2-lnk.html#SP1">§1</a>), 2/res (<a href="2-res.html#SP1">§1</a>), 3/cg (<a href="3-cg.html#SP1">§1</a>), 2/hf (<a href="2-hf.html#SP6">§6</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP3"></a><b>§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
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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">>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">(&</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">(&</span><span class="identifier">save</span><span class="plain">, &</span><span class="identifier">gprk</span><span class="plain">,</span>
|
||||
<span class="identifier">notice</span><span class="plain">-</span><span class="element">>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">>pnn_iname</span><span class="plain">)) {</span>
|
||||
<span class="functiontext">PL::Parsing::Tokens::General::compile_parse_name_tail</span><span class="plain">(&</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>
|
||||
|
|
|
@ -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">>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">>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">>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">(&</span><span class="identifier">gprk</span><span class="plain">, </span><span class="identifier">gv</span><span class="plain">-</span><span class="element">>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">(&</span><span class="identifier">save</span><span class="plain">, &</span><span class="identifier">gprk</span><span class="plain">, </span><span class="identifier">gv</span><span class="plain">-</span><span class="element">>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">(&</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">(&</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>
|
||||
|
|
|
@ -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">§52</a>), 2/pl2 (<a href="2-pl2.html#SP3_1">§3.1</a>), 2/pck (<a href="2-pck.html#SP2">§2</a>), 3/rst (<a href="3-rst.html#SP6">§6</a>), 4/am (<a href="4-am.html#SP26_1">§26.1</a>), 8/ef (<a href="8-ef.html#SP26">§26</a>), 8/ed2 (<a href="8-ed2.html#SP3_2">§3.2</a>), 10/varc (<a href="10-varc.html#SP14">§14</a>), 19/tb (<a href="19-tb.html#SP27">§27</a>, <a href="19-tb.html#SP27_1">§27.1</a>, <a href="19-tb.html#SP27_1_3">§27.1.3</a>, <a href="19-tb.html#SP29">§29</a>), 21/rl2 (<a href="21-rl2.html#SP23">§23</a>), 26/uo (<a href="26-uo.html#SP11_1">§11.1</a>), 27/hr (<a href="27-hr.html#SP5">§5</a>), 2/lnk (<a href="2-lnk.html#SP1">§1</a>), 2/res (<a href="2-res.html#SP1">§1</a>), 3/cg (<a href="3-cg.html#SP1">§1</a>), 3/sm (<a href="3-sm.html#SP36">§36</a>, <a href="3-sm.html#SP36_1">§36.1</a>, <a href="3-sm.html#SP38">§38</a>), 3/em2 (<a href="3-em2.html#SP24">§24</a>), 4/ap (<a href="4-ap.html#SP2">§2</a>), 2/hf (<a href="2-hf.html#SP6">§6</a>).</p>
|
||||
<p class="endnote">The function main is used in 2/pt (<a href="2-pt.html#SP52">§52</a>), 2/pl2 (<a href="2-pl2.html#SP3_1">§3.1</a>), 2/pck (<a href="2-pck.html#SP2">§2</a>), 3/rst (<a href="3-rst.html#SP6">§6</a>), 4/am (<a href="4-am.html#SP26_1">§26.1</a>), 8/ef (<a href="8-ef.html#SP26">§26</a>), 8/ed2 (<a href="8-ed2.html#SP3_2">§3.2</a>), 10/varc (<a href="10-varc.html#SP14">§14</a>), 19/tb (<a href="19-tb.html#SP27">§27</a>, <a href="19-tb.html#SP27_1">§27.1</a>, <a href="19-tb.html#SP27_1_3">§27.1.3</a>, <a href="19-tb.html#SP29">§29</a>), 21/rl2 (<a href="21-rl2.html#SP23">§23</a>), 26/uo (<a href="26-uo.html#SP11_1">§11.1</a>), 27/hr (<a href="27-hr.html#SP5">§5</a>), 27/ei (<a href="27-ei.html#SP2">§2</a>), 2/lnk (<a href="2-lnk.html#SP1">§1</a>), 2/res (<a href="2-res.html#SP1">§1</a>), 3/cg (<a href="3-cg.html#SP1">§1</a>), 3/sm (<a href="3-sm.html#SP36">§36</a>, <a href="3-sm.html#SP36_1">§36.1</a>, <a href="3-sm.html#SP38">§38</a>), 3/em2 (<a href="3-em2.html#SP24">§24</a>), 4/ap (<a href="4-ap.html#SP2">§2</a>), 2/hf (<a href="2-hf.html#SP6">§6</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP3"></a><b>§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
|
||||
|
|
|
@ -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">>construct</span><span class="plain">-</span><span class="element">>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">>construct</span><span class="plain">-</span><span class="element">>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">>construct</span><span class="plain">-</span><span class="element">>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">>construct</span><span class="plain">-</span><span class="element">>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">>construct</span><span class="plain">-</span><span class="element">>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">>construct</span><span class="plain">-</span><span class="element">>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">>construct</span><span class="plain">-</span><span class="element">>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">>construct</span><span class="plain">-</span><span class="element">>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">>construct</span><span class="plain">-</span><span class="element">>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">>construct</span><span class="plain">-</span><span class="element">>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">>construct</span><span class="plain">-</span><span class="element">>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">>construct</span><span class="plain">-</span><span class="element">>ranger_iname</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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))) {
|
||||
|
|
|
@ -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)) {
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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@>;
|
||||
|
|
|
@ -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@>;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue