1
0
Fork 0
mirror of https://github.com/ganelson/inform.git synced 2024-06-01 07:48:35 +03:00

Improved list literals

This commit is contained in:
Graham Nelson 2021-04-21 10:36:22 +01:00
parent 8c2ebbffd3
commit f40c55ba53
22 changed files with 450 additions and 289 deletions

View file

@ -1,6 +1,6 @@
# Inform 7
v10.1.0-alpha.1+6R86 'Krypton' (20 April 2021)
v10.1.0-alpha.1+6R87 'Krypton' (21 April 2021)
## About Inform 7

View file

@ -1,3 +1,3 @@
Prerelease: alpha.1
Build Date: 20 April 2021
Build Number: 6R86
Build Date: 21 April 2021
Build Number: 6R87

View file

@ -337,14 +337,12 @@ so on. Those absolute basics are made here.
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><a href="1-wtc.html#SP5" class="function-link"><span class="function-syntax">Task::advance_stage_to</span></a><span class="plain-syntax">(</span><span class="constant-syntax">INTER3_CSEQ</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Generating inter (3)"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> -1, </span><span class="identifier-syntax">debugging</span><span class="plain-syntax">, </span><span class="identifier-syntax">sequence_timer</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">BENCH</span><span class="plain-syntax">(</span><span class="identifier-syntax">Lists::check</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">BENCH</span><span class="plain-syntax">(</span><span class="identifier-syntax">ListLiterals::compile</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">BENCH</span><span class="plain-syntax">(</span><a href="1-htc.html#SP4" class="function-link"><span class="function-syntax">Sequence::compile_literal_resources</span></a><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">BENCH</span><span class="plain-syntax">(</span><span class="identifier-syntax">PhraseRequests::invoke_to_begin</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">BENCH</span><span class="plain-syntax">(</span><span class="identifier-syntax">Closures::compile_closures</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">BENCH</span><span class="plain-syntax">(</span><a href="1-htc.html#SP3" class="function-link"><span class="function-syntax">Sequence::compile_function_resources</span></a><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">BENCH</span><span class="plain-syntax">(</span><span class="identifier-syntax">Strings::compile_responses</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">BENCH</span><span class="plain-syntax">(</span><span class="identifier-syntax">Lists::check</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">BENCH</span><span class="plain-syntax">(</span><span class="identifier-syntax">ListLiterals::compile</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">BENCH</span><span class="plain-syntax">(</span><a href="1-htc.html#SP4" class="function-link"><span class="function-syntax">Sequence::compile_literal_resources</span></a><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">BENCH</span><span class="plain-syntax">(</span><span class="identifier-syntax">RTRelations::compile_defined_relations</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">BENCH</span><span class="plain-syntax">(</span><a href="1-htc.html#SP3" class="function-link"><span class="function-syntax">Sequence::compile_function_resources</span></a><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">BENCH</span><span class="plain-syntax">(</span><span class="identifier-syntax">TextSubstitutions::allow_no_further_text_subs</span><span class="plain-syntax">)</span>
@ -368,8 +366,7 @@ so on. Those absolute basics are made here.
<span class="plain-syntax"> </span><a href="1-wtc.html#SP5" class="function-link"><span class="function-syntax">Task::advance_stage_to</span></a><span class="plain-syntax">(</span><span class="constant-syntax">INTER5_CSEQ</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Generating inter (5)"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> -1, </span><span class="identifier-syntax">debugging</span><span class="plain-syntax">, </span><span class="identifier-syntax">sequence_timer</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">BENCH</span><span class="plain-syntax">(</span><span class="identifier-syntax">RTMeasurements::compile_test_functions</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">BENCH</span><span class="plain-syntax">(</span><span class="identifier-syntax">Lists::check</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">BENCH</span><span class="plain-syntax">(</span><span class="identifier-syntax">ListLiterals::compile</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">BENCH</span><span class="plain-syntax">(</span><a href="1-htc.html#SP4" class="function-link"><span class="function-syntax">Sequence::compile_literal_resources</span></a><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">BENCH</span><span class="plain-syntax">(</span><span class="identifier-syntax">TextLiterals::compile</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">BENCH</span><span class="plain-syntax">(</span><span class="identifier-syntax">RTKinds::compile_heap_allocator</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">BENCH</span><span class="plain-syntax">(</span><span class="identifier-syntax">RTKinds::compile_structures</span><span class="plain-syntax">)</span>
@ -464,6 +461,25 @@ other's bodies. But I think the term "coroutine" is reasonable just the same.
<span class="plain-syntax"> </span><span class="identifier-syntax">iterations</span><span class="plain-syntax">, (</span><span class="identifier-syntax">iterations</span><span class="plain-syntax"> == </span><span class="constant-syntax">1</span><span class="plain-syntax">)?</span><span class="string-syntax">""</span><span class="plain-syntax">:</span><span class="string-syntax">"s"</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. </b>And very similarly:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Sequence::compile_literal_resources</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">Sequence::compile_literal_resources</span></span>:<br/><a href="1-htc.html#SP2_11">&#167;2.11</a>, <a href="1-htc.html#SP2_13">&#167;2.13</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">repeat</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">iterations</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">while</span><span class="plain-syntax"> (</span><span class="identifier-syntax">repeat</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">repeat</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">; </span><span class="identifier-syntax">iterations</span><span class="plain-syntax">++;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ListLiterals::compile_support_matter</span><span class="plain-syntax">() &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">repeat</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">problem_count</span><span class="plain-syntax"> &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">iterations</span><span class="plain-syntax"> &gt; </span><span class="constant-syntax">10</span><span class="plain-syntax">)) </span><span class="identifier-syntax">repeat</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">iterations</span><span class="plain-syntax">--; </span><span class="comment-syntax"> since the final round is one where everyone does nothing</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">iterations</span><span class="plain-syntax"> &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">".... Sequence::compile_literal_resources completed in %d iteration%s\n"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">iterations</span><span class="plain-syntax">, (</span><span class="identifier-syntax">iterations</span><span class="plain-syntax"> == </span><span class="constant-syntax">1</span><span class="plain-syntax">)?</span><span class="string-syntax">""</span><span class="plain-syntax">:</span><span class="string-syntax">"s"</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="1-wtc.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresscurrentchapter">1</li><li class="progresssection"><a href="1-cm.html">cm</a></li><li class="progresssection"><a href="1-cp.html">cp</a></li><li class="progresssection"><a href="1-wtc.html">wtc</a></li><li class="progresscurrent">htc</li><li class="progresssection"><a href="1-cp2.html">cp2</a></li><li class="progresssection"><a href="1-pp.html">pp</a></li><li class="progresssection"><a href="1-cs.html">cs</a></li><li class="progresssection"><a href="1-inaa.html">inaa</a></li><li class="progresschapter"><a href="2-up.html">2</a></li><li class="progresschapter"><a href="3-pm.html">3</a></li><li class="progressnext"><a href="1-cp2.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->

View file

@ -178,8 +178,10 @@ kinds of value:
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Kinds::get_construct</span><span class="plain-syntax">(</span><span class="identifier-syntax">kind_of_constant</span><span class="plain-syntax">) == </span><span class="identifier-syntax">CON_list_of</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">value</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">literal_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ll</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Lists::find_literal</span><span class="plain-syntax">(</span><span class="identifier-syntax">Wordings::first_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">) + </span><span class="constant-syntax">1</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">N</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ListLiterals::compile_literal_list</span><span class="plain-syntax">(</span><span class="identifier-syntax">ll</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">N</span><span class="plain-syntax">) </span><span class="identifier-syntax">Emit::holster_iname</span><span class="plain-syntax">(</span><span class="identifier-syntax">VH</span><span class="plain-syntax">, </span><span class="identifier-syntax">N</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ll</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">N</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ListLiterals::compile_literal_list</span><span class="plain-syntax">(</span><span class="identifier-syntax">ll</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">N</span><span class="plain-syntax">) </span><span class="identifier-syntax">Emit::holster_iname</span><span class="plain-syntax">(</span><span class="identifier-syntax">VH</span><span class="plain-syntax">, </span><span class="identifier-syntax">N</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Kinds::get_construct</span><span class="plain-syntax">(</span><span class="identifier-syntax">kind_of_constant</span><span class="plain-syntax">) == </span><span class="identifier-syntax">CON_phrase</span><span class="plain-syntax">) {</span>

View file

@ -92,13 +92,13 @@ enforced; it's fine to store arbitrary data with <span class="extract"><span cla
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">packaging_state</span><span class="plain-syntax"> </span><span class="function-syntax">EmitArrays::begin</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">EmitArrays::begin</span></span>:<br/>List Literals - <a href="4-ll.html#SP2_1">&#167;2.1</a>, <a href="4-ll.html#SP3">&#167;3</a><br/>Text Literals - <a href="4-tl.html#SP13_1">&#167;13.1</a><br/>Text Substitutions - <a href="4-ts.html#SP11">&#167;11</a><br/>Responses - <a href="4-rsp.html#SP5_1">&#167;5.1</a>, <a href="4-rsp.html#SP6_3">&#167;6.3</a><br/>Runtime Support for Kinds - <a href="5-rsfk.html#SP18_1">&#167;18.1</a><br/>List Together - <a href="5-lt.html#SP3_1">&#167;3.1</a><br/>Rules - <a href="5-rls.html#SP8_1_1">&#167;8.1.1</a>, <a href="5-rls.html#SP12">&#167;12</a><br/>Activities - <a href="5-act.html#SP2">&#167;2</a><br/>Verbs at Run Time - <a href="5-vart.html#SP4">&#167;4</a><br/>Relations at Run Time - <a href="5-rart.html#SP4_1">&#167;4.1</a>, <a href="5-rart.html#SP5">&#167;5</a>, <a href="5-rart.html#SP9">&#167;9</a>, <a href="5-rart.html#SP9_3">&#167;9.3</a><br/>Runtime Support for Tables - <a href="5-rsft.html#SP4_3">&#167;4.3</a><br/>Chronology - <a href="5-chr.html#SP5">&#167;5</a><br/>Naming - <a href="6-nmn.html#SP2">&#167;2</a><br/>The Player - <a href="6-tp.html#SP1">&#167;1</a><br/>The Map - <a href="6-tm.html#SP2_2">&#167;2.2</a>, <a href="6-tm.html#SP3">&#167;3</a><br/>Actions - <a href="7-act.html#SP1">&#167;1</a><br/>Parsing - <a href="8-prs.html#SP2">&#167;2</a><br/>Figures - <a href="9-fgr.html#SP1">&#167;1</a><br/>Sound Effects - <a href="9-se.html#SP1">&#167;1</a><br/>External Files - <a href="9-ef.html#SP1">&#167;1</a><br/>Test Scripts - <a href="10-ts.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">packaging_state</span><span class="plain-syntax"> </span><span class="function-syntax">EmitArrays::begin</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">EmitArrays::begin</span></span>:<br/>List Literals - <a href="4-ll.html#SP1">&#167;1</a>, <a href="4-ll.html#SP2">&#167;2</a><br/>Text Literals - <a href="4-tl.html#SP13_1">&#167;13.1</a><br/>Text Substitutions - <a href="4-ts.html#SP11">&#167;11</a><br/>Responses - <a href="4-rsp.html#SP5_1">&#167;5.1</a>, <a href="4-rsp.html#SP6_3">&#167;6.3</a><br/>Runtime Support for Kinds - <a href="5-rsfk.html#SP18_1">&#167;18.1</a><br/>List Together - <a href="5-lt.html#SP3_1">&#167;3.1</a><br/>Rules - <a href="5-rls.html#SP8_1_1">&#167;8.1.1</a>, <a href="5-rls.html#SP12">&#167;12</a><br/>Activities - <a href="5-act.html#SP2">&#167;2</a><br/>Verbs at Run Time - <a href="5-vart.html#SP4">&#167;4</a><br/>Relations at Run Time - <a href="5-rart.html#SP4_1">&#167;4.1</a>, <a href="5-rart.html#SP5">&#167;5</a>, <a href="5-rart.html#SP9">&#167;9</a>, <a href="5-rart.html#SP9_3">&#167;9.3</a><br/>Runtime Support for Tables - <a href="5-rsft.html#SP4_3">&#167;4.3</a><br/>Chronology - <a href="5-chr.html#SP5">&#167;5</a><br/>Naming - <a href="6-nmn.html#SP2">&#167;2</a><br/>The Player - <a href="6-tp.html#SP1">&#167;1</a><br/>The Map - <a href="6-tm.html#SP2_2">&#167;2.2</a>, <a href="6-tm.html#SP3">&#167;3</a><br/>Actions - <a href="7-act.html#SP1">&#167;1</a><br/>Parsing - <a href="8-prs.html#SP2">&#167;2</a><br/>Figures - <a href="9-fgr.html#SP1">&#167;1</a><br/>Sound Effects - <a href="9-se.html#SP1">&#167;1</a><br/>External Files - <a href="9-ef.html#SP1">&#167;1</a><br/>Test Scripts - <a href="10-ts.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">packaging_state</span><span class="plain-syntax"> </span><span class="identifier-syntax">save</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Packaging::enter_home_of</span><span class="plain-syntax">(</span><span class="identifier-syntax">name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-ea.html#SP9" class="function-link"><span class="function-syntax">EmitArrays::begin_inner</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">save</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="identifier-syntax">packaging_state</span><span class="plain-syntax"> </span><span class="function-syntax">EmitArrays::begin_late</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">EmitArrays::begin_late</span></span>:<br/>List Literals - <a href="4-ll.html#SP1">&#167;1</a>, <a href="4-ll.html#SP3">&#167;3</a><br/>Text Literals - <a href="4-tl.html#SP14">&#167;14</a><br/>Text Substitutions - <a href="4-ts.html#SP7_1">&#167;7.1</a><br/>Runtime Support for Kinds - <a href="5-rsfk.html#SP5">&#167;5</a><br/>Action Patterns - <a href="7-ap.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">packaging_state</span><span class="plain-syntax"> </span><span class="function-syntax">EmitArrays::begin_late</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">EmitArrays::begin_late</span></span>:<br/>Text Literals - <a href="4-tl.html#SP14">&#167;14</a><br/>Text Substitutions - <a href="4-ts.html#SP7_1">&#167;7.1</a><br/>Runtime Support for Kinds - <a href="5-rsfk.html#SP5">&#167;5</a><br/>Action Patterns - <a href="7-ap.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">packaging_state</span><span class="plain-syntax"> </span><span class="identifier-syntax">save</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Packaging::enter_home_of</span><span class="plain-syntax">(</span><span class="identifier-syntax">name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-ea.html#SP9" class="function-link"><span class="function-syntax">EmitArrays::begin_inner</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::annotate_iname_i</span><span class="plain-syntax">(</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">LATE_IANN</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">);</span>
@ -158,11 +158,11 @@ which would be a typesafe list in I7, so they can be absolutely any data,
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">EmitArrays::numeric_entry</span><button class="popup" onclick="togglePopup('usagePopup8')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup8">Usage of <span class="code-font"><span class="function-syntax">EmitArrays::numeric_entry</span></span>:<br/>List Literals - <a href="4-ll.html#SP1">&#167;1</a>, <a href="4-ll.html#SP2_1">&#167;2.1</a>, <a href="4-ll.html#SP3">&#167;3</a><br/>Responses - <a href="4-rsp.html#SP6_3">&#167;6.3</a>, <a href="4-rsp.html#SP6_3_1_1">&#167;6.3.1.1</a>, <a href="4-rsp.html#SP6_3_1_2">&#167;6.3.1.2</a><br/>Runtime Support for Kinds - <a href="5-rsfk.html#SP5">&#167;5</a>, <a href="5-rsfk.html#SP11">&#167;11</a>, <a href="5-rsfk.html#SP18_1_1_1">&#167;18.1.1.1</a>, <a href="5-rsfk.html#SP18_1_1_2">&#167;18.1.1.2</a>, <a href="5-rsfk.html#SP22">&#167;22</a><br/>Rules - <a href="5-rls.html#SP8_1_1">&#167;8.1.1</a>, <a href="5-rls.html#SP8_1_2">&#167;8.1.2</a>, <a href="5-rls.html#SP12">&#167;12</a><br/>Activities - <a href="5-act.html#SP2">&#167;2</a><br/>Verbs at Run Time - <a href="5-vart.html#SP4">&#167;4</a><br/>Relations at Run Time - <a href="5-rart.html#SP4_1">&#167;4.1</a>, <a href="5-rart.html#SP4_1_3">&#167;4.1.3</a>, <a href="5-rart.html#SP5">&#167;5</a>, <a href="5-rart.html#SP8">&#167;8</a>, <a href="5-rart.html#SP9_2">&#167;9.2</a>, <a href="5-rart.html#SP9_3">&#167;9.3</a><br/>Runtime Support for Tables - <a href="5-rsft.html#SP4_1_1_1_1_3">&#167;4.1.1.1.1.3</a>, <a href="5-rsft.html#SP4_1_1_1_1_4">&#167;4.1.1.1.1.4</a>, <a href="5-rsft.html#SP4_2_3">&#167;4.2.3</a>, <a href="5-rsft.html#SP4_3">&#167;4.3</a><br/>Chronology - <a href="5-chr.html#SP5">&#167;5</a><br/>The Player - <a href="6-tp.html#SP1">&#167;1</a><br/>The Map - <a href="6-tm.html#SP2_2">&#167;2.2</a><br/>Timed Rules - <a href="6-tr.html#SP1">&#167;1</a><br/>Actions - <a href="7-act.html#SP1">&#167;1</a>, <a href="7-act.html#SP2">&#167;2</a><br/>Action Patterns - <a href="7-ap.html#SP5">&#167;5</a><br/>Figures - <a href="9-fgr.html#SP1">&#167;1</a><br/>Sound Effects - <a href="9-se.html#SP1">&#167;1</a><br/>External Files - <a href="9-ef.html#SP1">&#167;1</a><br/>Test Scripts - <a href="10-ts.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">N</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">EmitArrays::numeric_entry</span><button class="popup" onclick="togglePopup('usagePopup8')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup8">Usage of <span class="code-font"><span class="function-syntax">EmitArrays::numeric_entry</span></span>:<br/>List Literals - <a href="4-ll.html#SP1">&#167;1</a>, <a href="4-ll.html#SP2">&#167;2</a>, <a href="4-ll.html#SP7_1">&#167;7.1</a><br/>Responses - <a href="4-rsp.html#SP6_3">&#167;6.3</a>, <a href="4-rsp.html#SP6_3_1_1">&#167;6.3.1.1</a>, <a href="4-rsp.html#SP6_3_1_2">&#167;6.3.1.2</a><br/>Runtime Support for Kinds - <a href="5-rsfk.html#SP5">&#167;5</a>, <a href="5-rsfk.html#SP11">&#167;11</a>, <a href="5-rsfk.html#SP18_1_1_1">&#167;18.1.1.1</a>, <a href="5-rsfk.html#SP18_1_1_2">&#167;18.1.1.2</a>, <a href="5-rsfk.html#SP22">&#167;22</a><br/>Rules - <a href="5-rls.html#SP8_1_1">&#167;8.1.1</a>, <a href="5-rls.html#SP8_1_2">&#167;8.1.2</a>, <a href="5-rls.html#SP12">&#167;12</a><br/>Activities - <a href="5-act.html#SP2">&#167;2</a><br/>Verbs at Run Time - <a href="5-vart.html#SP4">&#167;4</a><br/>Relations at Run Time - <a href="5-rart.html#SP4_1">&#167;4.1</a>, <a href="5-rart.html#SP4_1_3">&#167;4.1.3</a>, <a href="5-rart.html#SP5">&#167;5</a>, <a href="5-rart.html#SP8">&#167;8</a>, <a href="5-rart.html#SP9_2">&#167;9.2</a>, <a href="5-rart.html#SP9_3">&#167;9.3</a><br/>Runtime Support for Tables - <a href="5-rsft.html#SP4_1_1_1_1_3">&#167;4.1.1.1.1.3</a>, <a href="5-rsft.html#SP4_1_1_1_1_4">&#167;4.1.1.1.1.4</a>, <a href="5-rsft.html#SP4_2_3">&#167;4.2.3</a>, <a href="5-rsft.html#SP4_3">&#167;4.3</a><br/>Chronology - <a href="5-chr.html#SP5">&#167;5</a><br/>The Player - <a href="6-tp.html#SP1">&#167;1</a><br/>The Map - <a href="6-tm.html#SP2_2">&#167;2.2</a><br/>Timed Rules - <a href="6-tr.html#SP1">&#167;1</a><br/>Actions - <a href="7-act.html#SP1">&#167;1</a>, <a href="7-act.html#SP2">&#167;2</a><br/>Action Patterns - <a href="7-ap.html#SP5">&#167;5</a><br/>Figures - <a href="9-fgr.html#SP1">&#167;1</a><br/>Sound Effects - <a href="9-se.html#SP1">&#167;1</a><br/>External Files - <a href="9-ef.html#SP1">&#167;1</a><br/>Test Scripts - <a href="10-ts.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">N</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="2-ea.html#SP10" class="function-link"><span class="function-syntax">EmitArrays::entry_inner</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">LITERAL_IVAL</span><span class="plain-syntax">, </span><span class="identifier-syntax">N</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">EmitArrays::iname_entry</span><button class="popup" onclick="togglePopup('usagePopup9')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup9">Usage of <span class="code-font"><span class="function-syntax">EmitArrays::iname_entry</span></span>:<br/>List Literals - <a href="4-ll.html#SP1">&#167;1</a>, <a href="4-ll.html#SP3">&#167;3</a><br/>Text Literals - <a href="4-tl.html#SP13_1">&#167;13.1</a>, <a href="4-tl.html#SP14">&#167;14</a><br/>Text Substitutions - <a href="4-ts.html#SP7_1">&#167;7.1</a>, <a href="4-ts.html#SP11">&#167;11</a><br/>Responses - <a href="4-rsp.html#SP5_1">&#167;5.1</a>, <a href="4-rsp.html#SP6_3_1_1">&#167;6.3.1.1</a><br/>Runtime Support for Kinds - <a href="5-rsfk.html#SP5">&#167;5</a>, <a href="5-rsfk.html#SP11">&#167;11</a>, <a href="5-rsfk.html#SP14">&#167;14</a>, <a href="5-rsfk.html#SP22">&#167;22</a><br/>List Together - <a href="5-lt.html#SP3_1">&#167;3.1</a><br/>Rules - <a href="5-rls.html#SP12">&#167;12</a><br/>Activities - <a href="5-act.html#SP2">&#167;2</a><br/>Verbs at Run Time - <a href="5-vart.html#SP4">&#167;4</a><br/>Relations at Run Time - <a href="5-rart.html#SP4_1_2">&#167;4.1.2</a>, <a href="5-rart.html#SP4_1_2_1">&#167;4.1.2.1</a>, <a href="5-rart.html#SP4_1_3">&#167;4.1.3</a>, <a href="5-rart.html#SP4_1_6">&#167;4.1.6</a>, <a href="5-rart.html#SP5">&#167;5</a>, <a href="5-rart.html#SP9_2">&#167;9.2</a><br/>Runtime Support for Tables - <a href="5-rsft.html#SP4_1_1_1">&#167;4.1.1.1</a>, <a href="5-rsft.html#SP4_1_1_1_1_5">&#167;4.1.1.1.1.5</a>, <a href="5-rsft.html#SP4_3">&#167;4.3</a><br/>Chronology - <a href="5-chr.html#SP5">&#167;5</a><br/>Naming - <a href="6-nmn.html#SP2">&#167;2</a><br/>The Player - <a href="6-tp.html#SP1">&#167;1</a><br/>The Map - <a href="6-tm.html#SP2_2">&#167;2.2</a>, <a href="6-tm.html#SP3">&#167;3</a><br/>Timed Rules - <a href="6-tr.html#SP1">&#167;1</a><br/>Actions - <a href="7-act.html#SP2">&#167;2</a>, <a href="7-act.html#SP3">&#167;3</a><br/>Action Patterns - <a href="7-ap.html#SP5">&#167;5</a><br/>Command Grammar Lines - <a href="8-cgl.html#SP2">&#167;2</a>, <a href="8-cgl.html#SP5">&#167;5</a>, <a href="8-cgl.html#SP7">&#167;7</a>, <a href="8-cgl.html#SP10">&#167;10</a><br/>Noun Filter Tokens - <a href="8-nft.html#SP3">&#167;3</a><br/>External Files - <a href="9-ef.html#SP1">&#167;1</a><br/>Test Scripts - <a href="10-ts.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">iname</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">EmitArrays::iname_entry</span><button class="popup" onclick="togglePopup('usagePopup9')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup9">Usage of <span class="code-font"><span class="function-syntax">EmitArrays::iname_entry</span></span>:<br/>List Literals - <a href="4-ll.html#SP2">&#167;2</a>, <a href="4-ll.html#SP7_2">&#167;7.2</a><br/>Text Literals - <a href="4-tl.html#SP13_1">&#167;13.1</a>, <a href="4-tl.html#SP14">&#167;14</a><br/>Text Substitutions - <a href="4-ts.html#SP7_1">&#167;7.1</a>, <a href="4-ts.html#SP11">&#167;11</a><br/>Responses - <a href="4-rsp.html#SP5_1">&#167;5.1</a>, <a href="4-rsp.html#SP6_3_1_1">&#167;6.3.1.1</a><br/>Runtime Support for Kinds - <a href="5-rsfk.html#SP5">&#167;5</a>, <a href="5-rsfk.html#SP11">&#167;11</a>, <a href="5-rsfk.html#SP14">&#167;14</a>, <a href="5-rsfk.html#SP22">&#167;22</a><br/>List Together - <a href="5-lt.html#SP3_1">&#167;3.1</a><br/>Rules - <a href="5-rls.html#SP12">&#167;12</a><br/>Activities - <a href="5-act.html#SP2">&#167;2</a><br/>Verbs at Run Time - <a href="5-vart.html#SP4">&#167;4</a><br/>Relations at Run Time - <a href="5-rart.html#SP4_1_2">&#167;4.1.2</a>, <a href="5-rart.html#SP4_1_2_1">&#167;4.1.2.1</a>, <a href="5-rart.html#SP4_1_3">&#167;4.1.3</a>, <a href="5-rart.html#SP4_1_6">&#167;4.1.6</a>, <a href="5-rart.html#SP5">&#167;5</a>, <a href="5-rart.html#SP9_2">&#167;9.2</a><br/>Runtime Support for Tables - <a href="5-rsft.html#SP4_1_1_1">&#167;4.1.1.1</a>, <a href="5-rsft.html#SP4_1_1_1_1_5">&#167;4.1.1.1.1.5</a>, <a href="5-rsft.html#SP4_3">&#167;4.3</a><br/>Chronology - <a href="5-chr.html#SP5">&#167;5</a><br/>Naming - <a href="6-nmn.html#SP2">&#167;2</a><br/>The Player - <a href="6-tp.html#SP1">&#167;1</a><br/>The Map - <a href="6-tm.html#SP2_2">&#167;2.2</a>, <a href="6-tm.html#SP3">&#167;3</a><br/>Timed Rules - <a href="6-tr.html#SP1">&#167;1</a><br/>Actions - <a href="7-act.html#SP2">&#167;2</a>, <a href="7-act.html#SP3">&#167;3</a><br/>Action Patterns - <a href="7-ap.html#SP5">&#167;5</a><br/>Command Grammar Lines - <a href="8-cgl.html#SP2">&#167;2</a>, <a href="8-cgl.html#SP5">&#167;5</a>, <a href="8-cgl.html#SP7">&#167;7</a>, <a href="8-cgl.html#SP10">&#167;10</a><br/>Noun Filter Tokens - <a href="8-nft.html#SP3">&#167;3</a><br/>External Files - <a href="9-ef.html#SP1">&#167;1</a><br/>Test Scripts - <a href="10-ts.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">iname</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">alias</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">iname</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">alias</span><span class="plain-syntax"> = </span><a href="2-emt.html#SP1" class="function-link"><span class="function-syntax">Emit::get_veneer_symbol</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">NOTHING_VSYMB</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">alias</span><span class="plain-syntax"> = </span><span class="identifier-syntax">InterNames::to_symbol</span><span class="plain-syntax">(</span><span class="identifier-syntax">iname</span><span class="plain-syntax">);</span>
@ -213,7 +213,7 @@ difference to compiled code.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">EmitArrays::end</span><button class="popup" onclick="togglePopup('usagePopup16')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup16">Usage of <span class="code-font"><span class="function-syntax">EmitArrays::end</span></span>:<br/>List Literals - <a href="4-ll.html#SP1">&#167;1</a>, <a href="4-ll.html#SP2_1">&#167;2.1</a>, <a href="4-ll.html#SP3">&#167;3</a><br/>Text Literals - <a href="4-tl.html#SP13_1">&#167;13.1</a>, <a href="4-tl.html#SP14">&#167;14</a><br/>Text Substitutions - <a href="4-ts.html#SP7_1">&#167;7.1</a>, <a href="4-ts.html#SP11">&#167;11</a><br/>Responses - <a href="4-rsp.html#SP5_1">&#167;5.1</a>, <a href="4-rsp.html#SP6_3">&#167;6.3</a><br/>Runtime Support for Kinds - <a href="5-rsfk.html#SP5">&#167;5</a>, <a href="5-rsfk.html#SP18_1">&#167;18.1</a><br/>List Together - <a href="5-lt.html#SP3_1">&#167;3.1</a><br/>Rules - <a href="5-rls.html#SP8_1_5">&#167;8.1.5</a>, <a href="5-rls.html#SP12">&#167;12</a><br/>Activities - <a href="5-act.html#SP2">&#167;2</a><br/>Verbs at Run Time - <a href="5-vart.html#SP4">&#167;4</a><br/>Relations at Run Time - <a href="5-rart.html#SP4_1">&#167;4.1</a>, <a href="5-rart.html#SP4_1_2">&#167;4.1.2</a>, <a href="5-rart.html#SP5">&#167;5</a>, <a href="5-rart.html#SP9">&#167;9</a>, <a href="5-rart.html#SP9_3">&#167;9.3</a><br/>Runtime Support for Tables - <a href="5-rsft.html#SP4_1_1_1">&#167;4.1.1.1</a>, <a href="5-rsft.html#SP4_1_1_1_1">&#167;4.1.1.1.1</a>, <a href="5-rsft.html#SP4_2">&#167;4.2</a>, <a href="5-rsft.html#SP4_3">&#167;4.3</a><br/>Chronology - <a href="5-chr.html#SP5">&#167;5</a><br/>Naming - <a href="6-nmn.html#SP2">&#167;2</a><br/>The Player - <a href="6-tp.html#SP1">&#167;1</a><br/>The Map - <a href="6-tm.html#SP2_2">&#167;2.2</a>, <a href="6-tm.html#SP3">&#167;3</a><br/>Timed Rules - <a href="6-tr.html#SP1">&#167;1</a><br/>Actions - <a href="7-act.html#SP1">&#167;1</a>, <a href="7-act.html#SP2">&#167;2</a><br/>Action Patterns - <a href="7-ap.html#SP5">&#167;5</a><br/>Parsing - <a href="8-prs.html#SP2">&#167;2</a><br/>Command Grammars - <a href="8-cg.html#SP7">&#167;7</a><br/>Figures - <a href="9-fgr.html#SP1">&#167;1</a><br/>Sound Effects - <a href="9-se.html#SP1">&#167;1</a><br/>External Files - <a href="9-ef.html#SP1">&#167;1</a><br/>Test Scripts - <a href="10-ts.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">packaging_state</span><span class="plain-syntax"> </span><span class="identifier-syntax">save</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">EmitArrays::end</span><button class="popup" onclick="togglePopup('usagePopup16')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup16">Usage of <span class="code-font"><span class="function-syntax">EmitArrays::end</span></span>:<br/>List Literals - <a href="4-ll.html#SP1">&#167;1</a>, <a href="4-ll.html#SP2">&#167;2</a><br/>Text Literals - <a href="4-tl.html#SP13_1">&#167;13.1</a>, <a href="4-tl.html#SP14">&#167;14</a><br/>Text Substitutions - <a href="4-ts.html#SP7_1">&#167;7.1</a>, <a href="4-ts.html#SP11">&#167;11</a><br/>Responses - <a href="4-rsp.html#SP5_1">&#167;5.1</a>, <a href="4-rsp.html#SP6_3">&#167;6.3</a><br/>Runtime Support for Kinds - <a href="5-rsfk.html#SP5">&#167;5</a>, <a href="5-rsfk.html#SP18_1">&#167;18.1</a><br/>List Together - <a href="5-lt.html#SP3_1">&#167;3.1</a><br/>Rules - <a href="5-rls.html#SP8_1_5">&#167;8.1.5</a>, <a href="5-rls.html#SP12">&#167;12</a><br/>Activities - <a href="5-act.html#SP2">&#167;2</a><br/>Verbs at Run Time - <a href="5-vart.html#SP4">&#167;4</a><br/>Relations at Run Time - <a href="5-rart.html#SP4_1">&#167;4.1</a>, <a href="5-rart.html#SP4_1_2">&#167;4.1.2</a>, <a href="5-rart.html#SP5">&#167;5</a>, <a href="5-rart.html#SP9">&#167;9</a>, <a href="5-rart.html#SP9_3">&#167;9.3</a><br/>Runtime Support for Tables - <a href="5-rsft.html#SP4_1_1_1">&#167;4.1.1.1</a>, <a href="5-rsft.html#SP4_1_1_1_1">&#167;4.1.1.1.1</a>, <a href="5-rsft.html#SP4_2">&#167;4.2</a>, <a href="5-rsft.html#SP4_3">&#167;4.3</a><br/>Chronology - <a href="5-chr.html#SP5">&#167;5</a><br/>Naming - <a href="6-nmn.html#SP2">&#167;2</a><br/>The Player - <a href="6-tp.html#SP1">&#167;1</a><br/>The Map - <a href="6-tm.html#SP2_2">&#167;2.2</a>, <a href="6-tm.html#SP3">&#167;3</a><br/>Timed Rules - <a href="6-tr.html#SP1">&#167;1</a><br/>Actions - <a href="7-act.html#SP1">&#167;1</a>, <a href="7-act.html#SP2">&#167;2</a><br/>Action Patterns - <a href="7-ap.html#SP5">&#167;5</a><br/>Parsing - <a href="8-prs.html#SP2">&#167;2</a><br/>Command Grammars - <a href="8-cg.html#SP7">&#167;7</a><br/>Figures - <a href="9-fgr.html#SP1">&#167;1</a><br/>Sound Effects - <a href="9-se.html#SP1">&#167;1</a><br/>External Files - <a href="9-ef.html#SP1">&#167;1</a><br/>Test Scripts - <a href="10-ts.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">packaging_state</span><span class="plain-syntax"> </span><span class="identifier-syntax">save</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="2-ea.html#SP11" class="function-link"><span class="function-syntax">EmitArrays::end_inner</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Packaging::exit</span><span class="plain-syntax">(</span><a href="2-emt.html#SP1" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">save</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>

View file

@ -98,7 +98,7 @@ reference points. But as newly-created packages they are initially empty.
<span class="plain-syntax"> </span><span class="identifier-syntax">Packaging::incarnate</span><span class="plain-syntax">(</span><span class="identifier-syntax">Packaging::get_unit</span><span class="plain-syntax">(</span><span class="identifier-syntax">main_emission_tree</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"synoptic"</span><span class="plain-syntax">)-&gt;</span><span class="identifier-syntax">the_package</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">main_emission_tree</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="identifier-syntax">inter_tree</span><span class="plain-syntax"> *</span><span class="function-syntax">Emit::tree</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">Emit::tree</span></span>:<br/><a href="2-emt.html#SP4">&#167;4</a>, <a href="2-emt.html#SP5">&#167;5</a>, <a href="2-emt.html#SP7">&#167;7</a>, <a href="2-emt.html#SP8">&#167;8</a>, <a href="2-emt.html#SP9">&#167;9</a>, <a href="2-emt.html#SP10">&#167;10</a>, <a href="2-emt.html#SP11">&#167;11</a>, <a href="2-emt.html#SP12">&#167;12</a>, <a href="2-emt.html#SP14">&#167;14</a>, <a href="2-emt.html#SP15">&#167;15</a>, <a href="2-emt.html#SP16">&#167;16</a>, <a href="2-emt.html#SP17">&#167;17</a>, <a href="2-emt.html#SP19">&#167;19</a>, <a href="2-emt.html#SP22">&#167;22</a><br/>Hierarchy - <a href="2-hrr.html#SP1">&#167;1</a>, <a href="2-hrr.html#SP2">&#167;2</a>, <a href="2-hrr.html#SP9">&#167;9</a>, <a href="2-hrr.html#SP11">&#167;11</a>, <a href="2-hrr.html#SP12">&#167;12</a>, <a href="2-hrr.html#SP13">&#167;13</a>, <a href="2-hrr.html#SP14">&#167;14</a>, <a href="2-hrr.html#SP15">&#167;15</a>, <a href="2-hrr.html#SP16">&#167;16</a>, <a href="2-hrr.html#SP17">&#167;17</a>, <a href="2-hrr.html#SP19">&#167;19</a>, <a href="2-hrr.html#SP20">&#167;20</a>, <a href="2-hrr.html#SP21">&#167;21</a>, <a href="2-hrr.html#SP22">&#167;22</a>, <a href="2-hrr.html#SP23">&#167;23</a>, <a href="2-hrr.html#SP24">&#167;24</a>, <a href="2-hrr.html#SP25">&#167;25</a><br/>Compilation Units - <a href="2-cu.html#SP2_1">&#167;2.1</a><br/>Emit Code - <a href="2-ec.html#SP2">&#167;2</a>, <a href="2-ec.html#SP3">&#167;3</a>, <a href="2-ec.html#SP4">&#167;4</a>, <a href="2-ec.html#SP5">&#167;5</a>, <a href="2-ec.html#SP7">&#167;7</a>, <a href="2-ec.html#SP8">&#167;8</a>, <a href="2-ec.html#SP9">&#167;9</a>, <a href="2-ec.html#SP10">&#167;10</a>, <a href="2-ec.html#SP11">&#167;11</a>, <a href="2-ec.html#SP12">&#167;12</a>, <a href="2-ec.html#SP13">&#167;13</a><br/>Emit Arrays - <a href="2-ea.html#SP4">&#167;4</a>, <a href="2-ea.html#SP6">&#167;6</a><br/>List Literals - <a href="4-ll.html#SP3">&#167;3</a><br/>Text Substitutions - <a href="4-ts.html#SP11">&#167;11</a><br/>Runtime Support for Kinds - <a href="5-rsfk.html#SP5">&#167;5</a>, <a href="5-rsfk.html#SP6">&#167;6</a>, <a href="5-rsfk.html#SP9">&#167;9</a>, <a href="5-rsfk.html#SP26">&#167;26</a><br/>Rules - <a href="5-rls.html#SP2">&#167;2</a><br/>Variables - <a href="5-vrb.html#SP1">&#167;1</a>, <a href="5-vrb.html#SP8">&#167;8</a><br/>Relations at Run Time - <a href="5-rart.html#SP18">&#167;18</a><br/>Command Grammars - <a href="8-cg.html#SP1">&#167;1</a><br/>Command Grammar Lines - <a href="8-cgl.html#SP10">&#167;10</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">inter_tree</span><span class="plain-syntax"> *</span><span class="function-syntax">Emit::tree</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">Emit::tree</span></span>:<br/><a href="2-emt.html#SP4">&#167;4</a>, <a href="2-emt.html#SP5">&#167;5</a>, <a href="2-emt.html#SP7">&#167;7</a>, <a href="2-emt.html#SP8">&#167;8</a>, <a href="2-emt.html#SP9">&#167;9</a>, <a href="2-emt.html#SP10">&#167;10</a>, <a href="2-emt.html#SP11">&#167;11</a>, <a href="2-emt.html#SP12">&#167;12</a>, <a href="2-emt.html#SP14">&#167;14</a>, <a href="2-emt.html#SP15">&#167;15</a>, <a href="2-emt.html#SP16">&#167;16</a>, <a href="2-emt.html#SP17">&#167;17</a>, <a href="2-emt.html#SP19">&#167;19</a>, <a href="2-emt.html#SP22">&#167;22</a><br/>Hierarchy - <a href="2-hrr.html#SP1">&#167;1</a>, <a href="2-hrr.html#SP2">&#167;2</a>, <a href="2-hrr.html#SP9">&#167;9</a>, <a href="2-hrr.html#SP11">&#167;11</a>, <a href="2-hrr.html#SP12">&#167;12</a>, <a href="2-hrr.html#SP13">&#167;13</a>, <a href="2-hrr.html#SP14">&#167;14</a>, <a href="2-hrr.html#SP15">&#167;15</a>, <a href="2-hrr.html#SP16">&#167;16</a>, <a href="2-hrr.html#SP17">&#167;17</a>, <a href="2-hrr.html#SP19">&#167;19</a>, <a href="2-hrr.html#SP20">&#167;20</a>, <a href="2-hrr.html#SP21">&#167;21</a>, <a href="2-hrr.html#SP22">&#167;22</a>, <a href="2-hrr.html#SP23">&#167;23</a>, <a href="2-hrr.html#SP24">&#167;24</a>, <a href="2-hrr.html#SP25">&#167;25</a><br/>Compilation Units - <a href="2-cu.html#SP2_1">&#167;2.1</a><br/>Emit Code - <a href="2-ec.html#SP2">&#167;2</a>, <a href="2-ec.html#SP3">&#167;3</a>, <a href="2-ec.html#SP4">&#167;4</a>, <a href="2-ec.html#SP5">&#167;5</a>, <a href="2-ec.html#SP7">&#167;7</a>, <a href="2-ec.html#SP8">&#167;8</a>, <a href="2-ec.html#SP9">&#167;9</a>, <a href="2-ec.html#SP10">&#167;10</a>, <a href="2-ec.html#SP11">&#167;11</a>, <a href="2-ec.html#SP12">&#167;12</a>, <a href="2-ec.html#SP13">&#167;13</a><br/>Emit Arrays - <a href="2-ea.html#SP4">&#167;4</a>, <a href="2-ea.html#SP6">&#167;6</a><br/>Text Substitutions - <a href="4-ts.html#SP11">&#167;11</a><br/>Runtime Support for Kinds - <a href="5-rsfk.html#SP5">&#167;5</a>, <a href="5-rsfk.html#SP6">&#167;6</a>, <a href="5-rsfk.html#SP9">&#167;9</a>, <a href="5-rsfk.html#SP26">&#167;26</a><br/>Rules - <a href="5-rls.html#SP2">&#167;2</a><br/>Variables - <a href="5-vrb.html#SP1">&#167;1</a>, <a href="5-vrb.html#SP8">&#167;8</a><br/>Relations at Run Time - <a href="5-rart.html#SP18">&#167;18</a><br/>Command Grammars - <a href="8-cg.html#SP1">&#167;1</a><br/>Command Grammar Lines - <a href="8-cgl.html#SP10">&#167;10</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">main_emission_tree</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>

View file

@ -890,6 +890,7 @@ that the compiler can refer to it.
<span class="definition-keyword">enum</span> <span class="constant-syntax">DEFAULT_CLOSURE_FN_HL</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">GPR_FN_HL</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">INSTANCE_GPR_FN_HL</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">INSTANCE_LIST_HL</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">FIRST_INSTANCE_HL</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">NEXT_INSTANCE_HL</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">COUNT_INSTANCE_1_HL</span>
@ -947,6 +948,7 @@ that the compiler can refer to it.
<span class="plain-syntax"> </span><span class="identifier-syntax">H_F_U</span><span class="plain-syntax">(</span><span class="constant-syntax">DEFAULT_CLOSURE_FN_HL</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"default_closure_fn"</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">H_F_U</span><span class="plain-syntax">(</span><span class="constant-syntax">GPR_FN_HL</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"gpr_fn"</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">H_F_U</span><span class="plain-syntax">(</span><span class="constant-syntax">INSTANCE_GPR_FN_HL</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"instance_gpr_fn"</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">H_C_U</span><span class="plain-syntax">(</span><span class="constant-syntax">INSTANCE_LIST_HL</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"instance_list"</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">H_C_S</span><span class="plain-syntax">(</span><span class="constant-syntax">FIRST_INSTANCE_HL</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"_First"</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">H_C_S</span><span class="plain-syntax">(</span><span class="constant-syntax">NEXT_INSTANCE_HL</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"_Next"</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">H_C_T</span><span class="plain-syntax">(</span><span class="constant-syntax">COUNT_INSTANCE_1_HL</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"IK1_Count"</span><span class="plain-syntax">)</span>
@ -2072,7 +2074,7 @@ package holding it. (<span class="extract"><span class="extract-syntax">P</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="function-syntax">Hierarchy::make_iname_in</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">Hierarchy::make_iname_in</span></span>:<br/><a href="2-hrr.html#SP17">&#167;17</a><br/>Text Substitutions - <a href="4-ts.html#SP4">&#167;4</a><br/>Responses - <a href="4-rsp.html#SP4">&#167;4</a>, <a href="4-rsp.html#SP5_1">&#167;5.1</a><br/>Runtime Support for Kinds - <a href="5-rsfk.html#SP15_1_1">&#167;15.1.1</a>, <a href="5-rsfk.html#SP17">&#167;17</a><br/>List Together - <a href="5-lt.html#SP2">&#167;2</a><br/>Rules - <a href="5-rls.html#SP2">&#167;2</a>, <a href="5-rls.html#SP11">&#167;11</a>, <a href="5-rls.html#SP12">&#167;12</a><br/>Activities - <a href="5-act.html#SP2">&#167;2</a><br/>Equations Support - <a href="5-es.html#SP1">&#167;1</a><br/>Measurements - <a href="5-msr.html#SP1">&#167;1</a><br/>Instance Counting - <a href="5-ic.html#SP9">&#167;9</a><br/>Adjectives - <a href="5-adj.html#SP2">&#167;2</a>, <a href="5-adj.html#SP6">&#167;6</a><br/>Verbs at Run Time - <a href="5-vart.html#SP2">&#167;2</a><br/>Relations at Run Time - <a href="5-rart.html#SP1">&#167;1</a>, <a href="5-rart.html#SP4_1_2">&#167;4.1.2</a>, <a href="5-rart.html#SP9">&#167;9</a>, <a href="5-rart.html#SP9_3">&#167;9.3</a><br/>Runtime Support for Tables - <a href="5-rsft.html#SP2">&#167;2</a>, <a href="5-rsft.html#SP3">&#167;3</a><br/>Chronology - <a href="5-chr.html#SP2">&#167;2</a><br/>Naming - <a href="6-nmn.html#SP2">&#167;2</a><br/>Backdrops - <a href="6-bck.html#SP1">&#167;1</a><br/>Regions - <a href="6-rgn.html#SP1">&#167;1</a><br/>The Map - <a href="6-tm.html#SP1">&#167;1</a>, <a href="6-tm.html#SP3">&#167;3</a><br/>Actions - <a href="7-act.html#SP1">&#167;1</a><br/>Named Action Patterns - <a href="7-nap.html#SP1">&#167;1</a><br/>Parsing - <a href="8-prs.html#SP2">&#167;2</a><br/>Command Grammars - <a href="8-cg.html#SP1">&#167;1</a>, <a href="8-cg.html#SP7">&#167;7</a><br/>Command Grammar Lines - <a href="8-cgl.html#SP2">&#167;2</a>, <a href="8-cgl.html#SP7">&#167;7</a><br/>Noun Filter Tokens - <a href="8-nft.html#SP2">&#167;2</a><br/>General Parsing Routines - <a href="8-gpr.html#SP3">&#167;3</a>, <a href="8-gpr.html#SP4">&#167;4</a><br/>Looping Over Scope - <a href="8-los.html#SP2">&#167;2</a><br/>Test Scripts - <a href="10-ts.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">id</span><span class="plain-syntax">, </span><span class="identifier-syntax">package_request</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="function-syntax">Hierarchy::make_iname_in</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">Hierarchy::make_iname_in</span></span>:<br/><a href="2-hrr.html#SP17">&#167;17</a><br/>List Literals - <a href="4-ll.html#SP7">&#167;7</a><br/>Text Substitutions - <a href="4-ts.html#SP4">&#167;4</a><br/>Responses - <a href="4-rsp.html#SP4">&#167;4</a>, <a href="4-rsp.html#SP5_1">&#167;5.1</a><br/>Runtime Support for Kinds - <a href="5-rsfk.html#SP15_1_1">&#167;15.1.1</a>, <a href="5-rsfk.html#SP17">&#167;17</a><br/>List Together - <a href="5-lt.html#SP2">&#167;2</a><br/>Rules - <a href="5-rls.html#SP2">&#167;2</a>, <a href="5-rls.html#SP11">&#167;11</a>, <a href="5-rls.html#SP12">&#167;12</a><br/>Activities - <a href="5-act.html#SP2">&#167;2</a><br/>Equations Support - <a href="5-es.html#SP1">&#167;1</a><br/>Measurements - <a href="5-msr.html#SP1">&#167;1</a><br/>Instance Counting - <a href="5-ic.html#SP9">&#167;9</a><br/>Adjectives - <a href="5-adj.html#SP2">&#167;2</a>, <a href="5-adj.html#SP6">&#167;6</a><br/>Verbs at Run Time - <a href="5-vart.html#SP2">&#167;2</a><br/>Relations at Run Time - <a href="5-rart.html#SP1">&#167;1</a>, <a href="5-rart.html#SP4_1_2">&#167;4.1.2</a>, <a href="5-rart.html#SP9">&#167;9</a>, <a href="5-rart.html#SP9_3">&#167;9.3</a><br/>Runtime Support for Tables - <a href="5-rsft.html#SP2">&#167;2</a>, <a href="5-rsft.html#SP3">&#167;3</a><br/>Chronology - <a href="5-chr.html#SP2">&#167;2</a><br/>Naming - <a href="6-nmn.html#SP2">&#167;2</a><br/>Backdrops - <a href="6-bck.html#SP1">&#167;1</a><br/>Regions - <a href="6-rgn.html#SP1">&#167;1</a><br/>The Map - <a href="6-tm.html#SP1">&#167;1</a>, <a href="6-tm.html#SP3">&#167;3</a><br/>Actions - <a href="7-act.html#SP1">&#167;1</a><br/>Named Action Patterns - <a href="7-nap.html#SP1">&#167;1</a><br/>Parsing - <a href="8-prs.html#SP2">&#167;2</a><br/>Command Grammars - <a href="8-cg.html#SP1">&#167;1</a>, <a href="8-cg.html#SP7">&#167;7</a><br/>Command Grammar Lines - <a href="8-cgl.html#SP2">&#167;2</a>, <a href="8-cgl.html#SP7">&#167;7</a><br/>Noun Filter Tokens - <a href="8-nft.html#SP2">&#167;2</a><br/>General Parsing Routines - <a href="8-gpr.html#SP3">&#167;3</a>, <a href="8-gpr.html#SP4">&#167;4</a><br/>Looping Over Scope - <a href="8-los.html#SP2">&#167;2</a><br/>Test Scripts - <a href="10-ts.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">id</span><span class="plain-syntax">, </span><span class="identifier-syntax">package_request</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">HierarchyLocations::find_in_package</span><span class="plain-syntax">(</span><a href="2-emt.html#SP1" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">id</span><span class="plain-syntax">, </span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">EMPTY_WORDING</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, -1, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
@ -2120,7 +2122,7 @@ supply the translated name, the following should be used:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="function-syntax">Hierarchy::make_iname_with_specific_translation</span><button class="popup" onclick="togglePopup('usagePopup7')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup7">Usage of <span class="code-font"><span class="function-syntax">Hierarchy::make_iname_with_specific_translation</span></span>:<br/>List Literals - <a href="4-ll.html#SP3">&#167;3</a><br/>Runtime Support for Kinds - <a href="5-rsfk.html#SP26">&#167;26</a><br/>Actions - <a href="7-act.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">id</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">,</span>
<span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="function-syntax">Hierarchy::make_iname_with_specific_translation</span><button class="popup" onclick="togglePopup('usagePopup7')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup7">Usage of <span class="code-font"><span class="function-syntax">Hierarchy::make_iname_with_specific_translation</span></span>:<br/>Runtime Support for Kinds - <a href="5-rsfk.html#SP26">&#167;26</a><br/>Actions - <a href="7-act.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">id</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">package_request</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">HierarchyLocations::find_in_package</span><span class="plain-syntax">(</span><a href="2-emt.html#SP1" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">id</span><span class="plain-syntax">, </span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">EMPTY_WORDING</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, -1, </span><span class="identifier-syntax">name</span><span class="plain-syntax">);</span>
@ -2137,7 +2139,7 @@ sufficient grandness that it is expected to contain all of its own needs.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="function-syntax">Hierarchy::iname_in_enclosure</span><button class="popup" onclick="togglePopup('usagePopup8')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup8">Usage of <span class="code-font"><span class="function-syntax">Hierarchy::iname_in_enclosure</span></span>:<br/><a href="2-hrr.html#SP18">&#167;18</a><br/>List Literals - <a href="4-ll.html#SP1">&#167;1</a><br/>Text Literals - <a href="4-tl.html#SP6">&#167;6</a>, <a href="4-tl.html#SP13_2">&#167;13.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">hap</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">hl</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="function-syntax">Hierarchy::iname_in_enclosure</span><button class="popup" onclick="togglePopup('usagePopup8')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup8">Usage of <span class="code-font"><span class="function-syntax">Hierarchy::iname_in_enclosure</span></span>:<br/><a href="2-hrr.html#SP18">&#167;18</a><br/>List Literals - <a href="4-ll.html#SP4">&#167;4</a><br/>Text Literals - <a href="4-tl.html#SP6">&#167;6</a>, <a href="4-tl.html#SP13_2">&#167;13.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">hap</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">hl</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">package_request</span><span class="plain-syntax"> *</span><span class="identifier-syntax">PR</span><span class="plain-syntax"> = </span><span class="identifier-syntax">HierarchyLocations::attach_new_package</span><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><a href="2-emt.html#SP1" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">Packaging::enclosure</span><span class="plain-syntax">(</span><a href="2-emt.html#SP1" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">()), </span><span class="identifier-syntax">hap</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="2-hrr.html#SP12" class="function-link"><span class="function-syntax">Hierarchy::make_iname_in</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">hl</span><span class="plain-syntax">, </span><span class="identifier-syntax">PR</span><span class="plain-syntax">);</span>
@ -2147,7 +2149,7 @@ sufficient grandness that it is expected to contain all of its own needs.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="function-syntax">Hierarchy::new_block_constant_iname</span><button class="popup" onclick="togglePopup('usagePopup9')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup9">Usage of <span class="code-font"><span class="function-syntax">Hierarchy::new_block_constant_iname</span></span>:<br/>List Literals - <a href="4-ll.html#SP1">&#167;1</a>, <a href="4-ll.html#SP3">&#167;3</a><br/>Text Literals - <a href="4-tl.html#SP9_3_1">&#167;9.3.1</a>, <a href="4-tl.html#SP13_2">&#167;13.2</a>, <a href="4-tl.html#SP14">&#167;14</a><br/>Text Substitutions - <a href="4-ts.html#SP7_1">&#167;7.1</a><br/>Runtime Support for Kinds - <a href="5-rsfk.html#SP5">&#167;5</a><br/>Action Patterns - <a href="7-ap.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="function-syntax">Hierarchy::new_block_constant_iname</span><button class="popup" onclick="togglePopup('usagePopup9')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup9">Usage of <span class="code-font"><span class="function-syntax">Hierarchy::new_block_constant_iname</span></span>:<br/>List Literals - <a href="4-ll.html#SP2">&#167;2</a><br/>Text Literals - <a href="4-tl.html#SP9_3_1">&#167;9.3.1</a>, <a href="4-tl.html#SP13_2">&#167;13.2</a>, <a href="4-tl.html#SP14">&#167;14</a><br/>Text Substitutions - <a href="4-ts.html#SP7_1">&#167;7.1</a><br/>Runtime Support for Kinds - <a href="5-rsfk.html#SP5">&#167;5</a><br/>Action Patterns - <a href="7-ap.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="2-hrr.html#SP17" class="function-link"><span class="function-syntax">Hierarchy::iname_in_enclosure</span></a><span class="plain-syntax">(</span><span class="constant-syntax">BLOCK_CONSTANTS_HAP</span><span class="plain-syntax">, </span><span class="constant-syntax">BLOCK_CONSTANT_HL</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
@ -2159,7 +2161,7 @@ available", using the following, which creates a socket. Again, see
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Hierarchy::make_available</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">Hierarchy::make_available</span></span>:<br/><a href="2-hrr.html#SP14">&#167;14</a><br/>Fundamental Constants - <a href="3-fc.html#SP1_1">&#167;1.1</a>, <a href="3-fc.html#SP1_2">&#167;1.2</a>, <a href="3-fc.html#SP2">&#167;2</a><br/>Use Options - <a href="3-uo.html#SP1_3">&#167;1.3</a><br/>Extensions - <a href="3-ext.html#SP1_1">&#167;1.1</a>, <a href="3-ext.html#SP1_2">&#167;1.2</a>, <a href="3-ext.html#SP1_3">&#167;1.3</a><br/>List Literals - <a href="4-ll.html#SP3">&#167;3</a><br/>Responses - <a href="4-rsp.html#SP6_3">&#167;6.3</a><br/>Runtime Support for Kinds - <a href="5-rsfk.html#SP18_3">&#167;18.3</a>, <a href="5-rsfk.html#SP26">&#167;26</a>, <a href="5-rsfk.html#SP26_6_1">&#167;26.6.1</a>, <a href="5-rsfk.html#SP26_6_2">&#167;26.6.2</a>, <a href="5-rsfk.html#SP26_6_3">&#167;26.6.3</a>, <a href="5-rsfk.html#SP26_6_4">&#167;26.6.4</a>, <a href="5-rsfk.html#SP26_6_5">&#167;26.6.5</a>, <a href="5-rsfk.html#SP26_6_6">&#167;26.6.6</a>, <a href="5-rsfk.html#SP27">&#167;27</a><br/>Rules - <a href="5-rls.html#SP2">&#167;2</a>, <a href="5-rls.html#SP5">&#167;5</a>, <a href="5-rls.html#SP7">&#167;7</a>, <a href="5-rls.html#SP10">&#167;10</a>, <a href="5-rls.html#SP12">&#167;12</a>, <a href="5-rls.html#SP14">&#167;14</a><br/>Activities - <a href="5-act.html#SP2">&#167;2</a><br/>Variables - <a href="5-vrb.html#SP7_1">&#167;7.1</a><br/>Properties - <a href="5-prp.html#SP5">&#167;5</a><br/>Noun Identifiers - <a href="5-ni.html#SP1">&#167;1</a><br/>Verbs at Run Time - <a href="5-vart.html#SP4">&#167;4</a><br/>Relations at Run Time - <a href="5-rart.html#SP1">&#167;1</a>, <a href="5-rart.html#SP3">&#167;3</a>, <a href="5-rart.html#SP4">&#167;4</a>, <a href="5-rart.html#SP6">&#167;6</a><br/>Runtime Support for Tables - <a href="5-rsft.html#SP2">&#167;2</a>, <a href="5-rsft.html#SP4_2">&#167;4.2</a><br/>Chronology - <a href="5-chr.html#SP5">&#167;5</a>, <a href="5-chr.html#SP6">&#167;6</a>, <a href="5-chr.html#SP7">&#167;7</a><br/>Naming - <a href="6-nmn.html#SP1">&#167;1</a>, <a href="6-nmn.html#SP2">&#167;2</a><br/>Bibliographic Data - <a href="6-bd.html#SP1_1">&#167;1.1</a>, <a href="6-bd.html#SP1_2">&#167;1.2</a>, <a href="6-bd.html#SP1_3">&#167;1.3</a>, <a href="6-bd.html#SP1_4">&#167;1.4</a>, <a href="6-bd.html#SP1_5">&#167;1.5</a>, <a href="6-bd.html#SP2">&#167;2</a><br/>Spatial - <a href="6-spt.html#SP1">&#167;1</a><br/>The Player - <a href="6-tp.html#SP1">&#167;1</a><br/>The Map - <a href="6-tm.html#SP2_1">&#167;2.1</a>, <a href="6-tm.html#SP2_2">&#167;2.2</a><br/>The Score - <a href="6-ts.html#SP1">&#167;1</a><br/>Timed Rules - <a href="6-tr.html#SP1">&#167;1</a><br/>Scenes - <a href="6-scn.html#SP2">&#167;2</a>, <a href="6-scn.html#SP6">&#167;6</a><br/>Actions - <a href="7-act.html#SP1">&#167;1</a>, <a href="7-act.html#SP2">&#167;2</a><br/>Command Grammars - <a href="8-cg.html#SP2">&#167;2</a><br/>Command Grammar Lines - <a href="8-cgl.html#SP2">&#167;2</a><br/>Tokens Parsing Values - <a href="8-tpv.html#SP1">&#167;1</a><br/>External Files - <a href="9-ef.html#SP1">&#167;1</a><br/>Showme Command - <a href="10-sc.html#SP2">&#167;2</a><br/>Test Scripts - <a href="10-ts.html#SP3">&#167;3</a><br/>Internal Test Cases - <a href="10-itc.html#SP4">&#167;4</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">iname</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Hierarchy::make_available</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">Hierarchy::make_available</span></span>:<br/><a href="2-hrr.html#SP14">&#167;14</a><br/>Fundamental Constants - <a href="3-fc.html#SP1_1">&#167;1.1</a>, <a href="3-fc.html#SP1_2">&#167;1.2</a>, <a href="3-fc.html#SP2">&#167;2</a><br/>Use Options - <a href="3-uo.html#SP1_3">&#167;1.3</a><br/>Extensions - <a href="3-ext.html#SP1_1">&#167;1.1</a>, <a href="3-ext.html#SP1_2">&#167;1.2</a>, <a href="3-ext.html#SP1_3">&#167;1.3</a><br/>Responses - <a href="4-rsp.html#SP6_3">&#167;6.3</a><br/>Runtime Support for Kinds - <a href="5-rsfk.html#SP18_3">&#167;18.3</a>, <a href="5-rsfk.html#SP26">&#167;26</a>, <a href="5-rsfk.html#SP26_6_1">&#167;26.6.1</a>, <a href="5-rsfk.html#SP26_6_2">&#167;26.6.2</a>, <a href="5-rsfk.html#SP26_6_3">&#167;26.6.3</a>, <a href="5-rsfk.html#SP26_6_4">&#167;26.6.4</a>, <a href="5-rsfk.html#SP26_6_5">&#167;26.6.5</a>, <a href="5-rsfk.html#SP26_6_6">&#167;26.6.6</a>, <a href="5-rsfk.html#SP27">&#167;27</a><br/>Rules - <a href="5-rls.html#SP2">&#167;2</a>, <a href="5-rls.html#SP5">&#167;5</a>, <a href="5-rls.html#SP7">&#167;7</a>, <a href="5-rls.html#SP10">&#167;10</a>, <a href="5-rls.html#SP12">&#167;12</a>, <a href="5-rls.html#SP14">&#167;14</a><br/>Activities - <a href="5-act.html#SP2">&#167;2</a><br/>Variables - <a href="5-vrb.html#SP7_1">&#167;7.1</a><br/>Properties - <a href="5-prp.html#SP5">&#167;5</a><br/>Noun Identifiers - <a href="5-ni.html#SP1">&#167;1</a><br/>Verbs at Run Time - <a href="5-vart.html#SP4">&#167;4</a><br/>Relations at Run Time - <a href="5-rart.html#SP1">&#167;1</a>, <a href="5-rart.html#SP3">&#167;3</a>, <a href="5-rart.html#SP4">&#167;4</a>, <a href="5-rart.html#SP6">&#167;6</a><br/>Runtime Support for Tables - <a href="5-rsft.html#SP2">&#167;2</a>, <a href="5-rsft.html#SP4_2">&#167;4.2</a><br/>Chronology - <a href="5-chr.html#SP5">&#167;5</a>, <a href="5-chr.html#SP6">&#167;6</a>, <a href="5-chr.html#SP7">&#167;7</a><br/>Naming - <a href="6-nmn.html#SP1">&#167;1</a>, <a href="6-nmn.html#SP2">&#167;2</a><br/>Bibliographic Data - <a href="6-bd.html#SP1_1">&#167;1.1</a>, <a href="6-bd.html#SP1_2">&#167;1.2</a>, <a href="6-bd.html#SP1_3">&#167;1.3</a>, <a href="6-bd.html#SP1_4">&#167;1.4</a>, <a href="6-bd.html#SP1_5">&#167;1.5</a>, <a href="6-bd.html#SP2">&#167;2</a><br/>Spatial - <a href="6-spt.html#SP1">&#167;1</a><br/>The Player - <a href="6-tp.html#SP1">&#167;1</a><br/>The Map - <a href="6-tm.html#SP2_1">&#167;2.1</a>, <a href="6-tm.html#SP2_2">&#167;2.2</a><br/>The Score - <a href="6-ts.html#SP1">&#167;1</a><br/>Timed Rules - <a href="6-tr.html#SP1">&#167;1</a><br/>Scenes - <a href="6-scn.html#SP2">&#167;2</a>, <a href="6-scn.html#SP6">&#167;6</a><br/>Actions - <a href="7-act.html#SP1">&#167;1</a>, <a href="7-act.html#SP2">&#167;2</a><br/>Command Grammars - <a href="8-cg.html#SP2">&#167;2</a><br/>Command Grammar Lines - <a href="8-cgl.html#SP2">&#167;2</a><br/>Tokens Parsing Values - <a href="8-tpv.html#SP1">&#167;1</a><br/>External Files - <a href="9-ef.html#SP1">&#167;1</a><br/>Showme Command - <a href="10-sc.html#SP2">&#167;2</a><br/>Test Scripts - <a href="10-ts.html#SP3">&#167;3</a><br/>Internal Test Cases - <a href="10-itc.html#SP4">&#167;4</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">iname</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ma_as</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Produce::get_translation</span><span class="plain-syntax">(</span><span class="identifier-syntax">iname</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">ma_as</span><span class="plain-syntax">) == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">ma_as</span><span class="plain-syntax"> = </span><span class="identifier-syntax">InterNames::to_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">iname</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PackageTypes::get</span><span class="plain-syntax">(</span><a href="2-emt.html#SP1" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">I</span><span class="string-syntax">"_linkage"</span><span class="plain-syntax">);</span>

View file

@ -72,153 +72,236 @@ function togglePopup(material_id) {
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../compiler.html">Inform7</a></li><li><a href="index.html">runtime</a></li><li><a href="index.html#4">Chapter 4: Literals</a></li><li><b>List Literals</b></li></ul></div>
<p class="purpose">Each enclosure contains the literal lists needed by its functions.</p>
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. </b>Literal lists arise from source text such as:
<ul class="toc"><li><a href="4-ll.html#SP1">&#167;1. Runtime representation</a></li><li><a href="4-ll.html#SP3">&#167;3. Default values for list kinds</a></li><li><a href="4-ll.html#SP4">&#167;4. Literals</a></li><li><a href="4-ll.html#SP6">&#167;6. The instance list for a kind</a></li></ul><hr class="tocbar">
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. Runtime representation. </b>Literal lists arise from source text such as:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">let</span><span class="plain-syntax"> </span><span class="identifier-syntax">Q</span><span class="plain-syntax"> </span><span class="identifier-syntax">be</span><span class="plain-syntax"> { </span><span class="constant-syntax">2</span><span class="plain-syntax">, </span><span class="constant-syntax">3</span><span class="plain-syntax">, </span><span class="constant-syntax">5</span><span class="plain-syntax">, </span><span class="constant-syntax">7</span><span class="plain-syntax">, </span><span class="constant-syntax">11</span><span class="plain-syntax"> };</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">let</span><span class="plain-syntax"> </span><span class="identifier-syntax">Q</span><span class="plain-syntax"> </span><span class="identifier-syntax">be</span><span class="plain-syntax"> { </span><span class="constant-syntax">60</span><span class="plain-syntax">, </span><span class="constant-syntax">168</span><span class="plain-syntax"> };</span>
</pre>
<p class="commentary">The data to hold <span class="extract"><span class="extract-syntax">{ 2, 3, 5, 7, 11 }</span></span> has to go somewhere, and it goes into
a block constant inside the enclosure for the function which contained this
definition.
<p class="commentary">The data to hold <span class="extract"><span class="extract-syntax">{ 60, 168 }</span></span> has to be stored somehow. As with all
kinds for which values cannot be stored in a single word, we use a double
pointer:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> small block: large block:</span>
<span class="plain-syntax"> Q ----------------&gt; pointer ----------------&gt; block value header</span>
<span class="plain-syntax"> 0 strong kind ID for entries</span>
<span class="plain-syntax"> number of entries</span>
<span class="plain-syntax"> the entries</span>
</pre>
<p class="commentary">So in this particular example, the result would be:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> small block: large block:</span>
<span class="plain-syntax"> Q ----------------&gt; pointer ----------------&gt; block value header</span>
<span class="plain-syntax"> 0 NUMBER_TY</span>
<span class="plain-syntax"> 2</span>
<span class="plain-syntax"> 60</span>
<span class="plain-syntax"> 168</span>
</pre>
<p class="commentary">So the small block always occupies 2 words, the second being initially 0 and
used at runtime; the large block can be any size we need. The runtime code has
elaborate ways to extend or contract dynamic lists, but these of course are
constants, so we simply make the large blocks exactly the right size.
</p>
<p class="commentary">We make the large block first:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">packaging_state</span><span class="plain-syntax"> </span><span class="function-syntax">ListLiterals::begin_large_block</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">ListLiterals::begin_large_block</span></span>:<br/><a href="4-ll.html#SP3">&#167;3</a>, <a href="4-ll.html#SP5_1">&#167;5.1</a>, <a href="4-ll.html#SP7">&#167;7</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">iname</span><span class="plain-syntax">, </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">list_kind</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">no_entries</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">packaging_state</span><span class="plain-syntax"> </span><span class="identifier-syntax">save</span><span class="plain-syntax"> = </span><a href="2-ea.html#SP2" class="function-link"><span class="function-syntax">EmitArrays::begin</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">iname</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_value</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="5-rsfk.html#SP22" class="function-link"><span class="function-syntax">RTKinds::emit_block_value_header</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">list_kind</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">no_entries</span><span class="plain-syntax"> + </span><span class="constant-syntax">2</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="5-rsfk.html#SP14" class="function-link"><span class="function-syntax">RTKinds::emit_strong_id</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">Kinds::unary_construction_material</span><span class="plain-syntax">(</span><span class="identifier-syntax">list_kind</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><a href="2-ea.html#SP4" class="function-link"><span class="function-syntax">EmitArrays::numeric_entry</span></a><span class="plain-syntax">((</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax">) </span><span class="identifier-syntax">no_entries</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">save</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ListLiterals::end_large_block</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">ListLiterals::end_large_block</span></span>:<br/><a href="4-ll.html#SP3">&#167;3</a>, <a href="4-ll.html#SP5_1">&#167;5.1</a>, <a href="4-ll.html#SP7">&#167;7</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">packaging_state</span><span class="plain-syntax"> </span><span class="identifier-syntax">save</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="2-ea.html#SP6" class="function-link"><span class="function-syntax">EmitArrays::end</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">save</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b>And then make the small block pointing to it:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="function-syntax">ListLiterals::small_block</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">ListLiterals::small_block</span></span>:<br/><a href="4-ll.html#SP4">&#167;4</a>, <a href="4-ll.html#SP7">&#167;7</a><br/>Runtime Support for Kinds - <a href="5-rsfk.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">large_block</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">N</span><span class="plain-syntax"> = </span><a href="2-hrr.html#SP18" class="function-link"><span class="function-syntax">Hierarchy::new_block_constant_iname</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">packaging_state</span><span class="plain-syntax"> </span><span class="identifier-syntax">save</span><span class="plain-syntax"> = </span><a href="2-ea.html#SP2" class="function-link"><span class="function-syntax">EmitArrays::begin</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">N</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_value</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-ea.html#SP4" class="function-link"><span class="function-syntax">EmitArrays::iname_entry</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">large_block</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-ea.html#SP4" class="function-link"><span class="function-syntax">EmitArrays::numeric_entry</span></a><span class="plain-syntax">(0);</span>
<span class="plain-syntax"> </span><a href="2-ea.html#SP6" class="function-link"><span class="function-syntax">EmitArrays::end</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">save</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">N</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. Default values for list kinds. </b>The default list is the empty list, but note from the above representation
that the empty list of numbers (say) is different from the empty list of texts:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> small block: large block:</span>
<span class="plain-syntax"> ----&gt; pointer ----------------&gt; block value header</span>
<span class="plain-syntax"> NUMBER_TY</span>
<span class="plain-syntax"> 0</span>
<span class="plain-syntax"> small block: large block:</span>
<span class="plain-syntax"> ----&gt; pointer ----------------&gt; block value header</span>
<span class="plain-syntax"> TEXT_TY</span>
<span class="plain-syntax"> 0</span>
</pre>
<p class="commentary">So each different kind K needs its own large block for making the default value
of "list of K": see <a href="5-rsfk.html#SP18" class="internal">RTKinds::compile_structures</a>. This block is easily made:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ListLiterals::default_large_block</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">ListLiterals::default_large_block</span></span>:<br/>Runtime Support for Kinds - <a href="5-rsfk.html#SP18_2">&#167;18.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">iname</span><span class="plain-syntax">, </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">list_kind</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">packaging_state</span><span class="plain-syntax"> </span><span class="identifier-syntax">save</span><span class="plain-syntax"> = </span><a href="4-ll.html#SP1" class="function-link"><span class="function-syntax">ListLiterals::begin_large_block</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">iname</span><span class="plain-syntax">, </span><span class="identifier-syntax">list_kind</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="4-ll.html#SP1" class="function-link"><span class="function-syntax">ListLiterals::end_large_block</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">save</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. Literals. </b>To return to the example:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">let</span><span class="plain-syntax"> </span><span class="identifier-syntax">Q</span><span class="plain-syntax"> </span><span class="identifier-syntax">be</span><span class="plain-syntax"> { </span><span class="constant-syntax">60</span><span class="plain-syntax">, </span><span class="constant-syntax">168</span><span class="plain-syntax"> };</span>
</pre>
<p class="commentary">Each list literal like <span class="extract"><span class="extract-syntax">{ 60, 168 }</span></span> in imperative code results in a <span class="extract"><span class="extract-syntax">literal_list</span></span>
object, and here we return its value:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="function-syntax">ListLiterals::compile_literal_list</span><span class="plain-syntax">(</span><span class="identifier-syntax">literal_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ll</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ll</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Lists::kind_of_ll</span><span class="plain-syntax">(</span><span class="identifier-syntax">ll</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">N</span><span class="plain-syntax"> = </span><a href="2-hrr.html#SP18" class="function-link"><span class="function-syntax">Hierarchy::new_block_constant_iname</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">packaging_state</span><span class="plain-syntax"> </span><span class="identifier-syntax">save</span><span class="plain-syntax"> = </span><a href="2-ea.html#SP2" class="function-link"><span class="function-syntax">EmitArrays::begin_late</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">N</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_value</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-ea.html#SP4" class="function-link"><span class="function-syntax">EmitArrays::iname_entry</span></a><span class="plain-syntax">(</span><a href="4-ll.html#SP1" class="function-link"><span class="function-syntax">ListLiterals::iname</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ll</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><a href="2-ea.html#SP4" class="function-link"><span class="function-syntax">EmitArrays::numeric_entry</span></a><span class="plain-syntax">(0);</span>
<span class="plain-syntax"> </span><a href="2-ea.html#SP6" class="function-link"><span class="function-syntax">EmitArrays::end</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">save</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">N</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Lists::kind_of_ll</span><span class="plain-syntax">(</span><span class="identifier-syntax">ll</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="4-ll.html#SP2" class="function-link"><span class="function-syntax">ListLiterals::small_block</span></a><span class="plain-syntax">(</span><a href="4-ll.html#SP4" class="function-link"><span class="function-syntax">ListLiterals::large_block_iname</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ll</span><span class="plain-syntax">));</span>
<span class="plain-syntax">}</span>
<span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="function-syntax">ListLiterals::iname</span><span class="plain-syntax">(</span><span class="identifier-syntax">literal_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ll</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="function-syntax">ListLiterals::large_block_iname</span><span class="plain-syntax">(</span><span class="identifier-syntax">literal_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ll</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ll</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">ll_iname</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ll</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">ll_iname</span><span class="plain-syntax"> = </span><a href="2-hrr.html#SP17" class="function-link"><span class="function-syntax">Hierarchy::iname_in_enclosure</span></a><span class="plain-syntax">(</span><span class="constant-syntax">LITERALS_HAP</span><span class="plain-syntax">, </span><span class="constant-syntax">LIST_LITERAL_HL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">ll</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">ll_iname</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b>Using:
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>&#167;5. </b>The large blocks are then compiled in due course by the following coroutine
(see <a href="../core-module/1-htc.html" class="internal">How To Compile (in core)</a>):
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ListLiterals::compile</span><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ListLiterals::compile_support_matter</span><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">N</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">literal_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ll</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">problem_count</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER</span><span class="plain-syntax">(</span><span class="identifier-syntax">ll</span><span class="plain-syntax">, </span><span class="identifier-syntax">literal_list</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">ll</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">list_compiled</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">ll</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">ll_iname</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ll</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">list_compiled</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ll</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">list_compiled</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">; </span><span class="identifier-syntax">N</span><span class="plain-syntax">++;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ll</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">list_text</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Lists::kind_of_ll</span><span class="plain-syntax">(</span><span class="identifier-syntax">ll</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">problem_count</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="4-ll.html#SP2_1" class="named-paragraph-link"><span class="named-paragraph">Actually compile the list array</span><span class="named-paragraph-number">2.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">problem_count</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="4-ll.html#SP5_1" class="named-paragraph-link"><span class="named-paragraph">Compile the large block for this literal</span><span class="named-paragraph-number">5.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">N</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP2_1" class="paragraph-anchor"></a><b>&#167;2.1. </b>These are I6 word arrays, with the contents:
</p>
<ul class="items"><li>(a) a zero word, used as a flag at run-time;
</li><li>(b) the strong kind ID of the kind of entry the list holds (not the kind of
the list!);
</li><li>(c) the number of entries in the list; and
</li><li>(d) that number of values, each representing one entry.
</li></ul>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Actually compile the list array</span><span class="named-paragraph-number">2.1</span></span><span class="comment-syntax"> =</span>
<p class="commentary firstcommentary"><a id="SP5_1" class="paragraph-anchor"></a><b>&#167;5.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Compile the large block for this literal</span><span class="named-paragraph-number">5.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">packaging_state</span><span class="plain-syntax"> </span><span class="identifier-syntax">save</span><span class="plain-syntax"> = </span><a href="2-ea.html#SP2" class="function-link"><span class="function-syntax">EmitArrays::begin</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ll</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">ll_iname</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_value</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">llist_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">lle</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">n</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">lle</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ll</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">first_llist_entry</span><span class="plain-syntax">; </span><span class="identifier-syntax">lle</span><span class="plain-syntax">; </span><span class="identifier-syntax">lle</span><span class="plain-syntax"> = </span><span class="identifier-syntax">lle</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next_llist_entry</span><span class="plain-syntax">) </span><span class="identifier-syntax">n</span><span class="plain-syntax">++;</span>
<span class="plain-syntax"> </span><a href="5-rsfk.html#SP22" class="function-link"><span class="function-syntax">RTKinds::emit_block_value_header</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">Lists::kind_of_ll</span><span class="plain-syntax">(</span><span class="identifier-syntax">ll</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">), </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">n</span><span class="plain-syntax">+2);</span>
<span class="plain-syntax"> </span><a href="5-rsfk.html#SP14" class="function-link"><span class="function-syntax">RTKinds::emit_strong_id</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ll</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">entry_kind</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-ea.html#SP4" class="function-link"><span class="function-syntax">EmitArrays::numeric_entry</span></a><span class="plain-syntax">((</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax">) </span><span class="identifier-syntax">n</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">packaging_state</span><span class="plain-syntax"> </span><span class="identifier-syntax">save</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><a href="4-ll.html#SP1" class="function-link"><span class="function-syntax">ListLiterals::begin_large_block</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ll</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">ll_iname</span><span class="plain-syntax">, </span><span class="identifier-syntax">Lists::kind_of_ll</span><span class="plain-syntax">(</span><span class="identifier-syntax">ll</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">), </span><span class="identifier-syntax">n</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">lle</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ll</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">first_llist_entry</span><span class="plain-syntax">; </span><span class="identifier-syntax">lle</span><span class="plain-syntax">; </span><span class="identifier-syntax">lle</span><span class="plain-syntax"> = </span><span class="identifier-syntax">lle</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next_llist_entry</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CompileValues::to_array_entry_of_kind</span><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">lle</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">llist_entry_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">ll</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">entry_kind</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-ea.html#SP6" class="function-link"><span class="function-syntax">EmitArrays::end</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">save</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="4-ll.html#SP1" class="function-link"><span class="function-syntax">ListLiterals::end_large_block</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">save</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-ll.html#SP2">&#167;2</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b>The default list of any given kind is empty.
<ul class="endnotetexts"><li>This code is used in <a href="4-ll.html#SP5">&#167;5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>&#167;6. The instance list for a kind. </b>For kinds of object and enumerations, Inform sometimes chooses to compile its
own literal list, even though this is not specified anywhere in the source text.
Not all kinds have these: obviously, there can be no instance list for <span class="extract"><span class="extract-syntax">K_real_number</span></span>.
The following returns -1 if <span class="extract"><span class="extract-syntax">K</span></span> is similarly unsuitable, or a non-negative value
for the number of instances it has:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ListLiterals::compile_default_list</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">ListLiterals::compile_default_list</span></span>:<br/>Runtime Support for Kinds - <a href="5-rsfk.html#SP18_2">&#167;18.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">identifier</span><span class="plain-syntax">, </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">packaging_state</span><span class="plain-syntax"> </span><span class="identifier-syntax">save</span><span class="plain-syntax"> = </span><a href="2-ea.html#SP2" class="function-link"><span class="function-syntax">EmitArrays::begin</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">identifier</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_value</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="5-rsfk.html#SP22" class="function-link"><span class="function-syntax">RTKinds::emit_block_value_header</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="5-rsfk.html#SP14" class="function-link"><span class="function-syntax">RTKinds::emit_strong_id</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">Kinds::unary_construction_material</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><a href="2-ea.html#SP4" class="function-link"><span class="function-syntax">EmitArrays::numeric_entry</span></a><span class="plain-syntax">(0);</span>
<span class="plain-syntax"> </span><a href="2-ea.html#SP6" class="function-link"><span class="function-syntax">EmitArrays::end</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">save</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ListLiterals::extent_of_instance_list</span><span class="plain-syntax">(</span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Kinds::Behaviour::is_an_enumeration</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">Kinds::Behaviour::get_highest_valid_value_as_integer</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Kinds::Behaviour::is_subkind_of_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">N</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">instance</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_INSTANCES</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">) </span><span class="identifier-syntax">N</span><span class="plain-syntax">++;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">N</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> -1;</span>
<span class="plain-syntax">}</span>
<span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="function-syntax">ListLiterals::get_instance_list</span><span class="plain-syntax">(</span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">N</span><span class="plain-syntax"> = </span><a href="4-ll.html#SP3" class="function-link"><span class="function-syntax">ListLiterals::extent_of_instance_list</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">N</span><span class="plain-syntax"> &lt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">iname</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Kinds::Constructors::list_iname</span><span class="plain-syntax">(</span><span class="identifier-syntax">Kinds::get_construct</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">iname</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">ILN</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">ILN</span><span class="plain-syntax">, </span><span class="string-syntax">"ILIST_"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Kinds::Textual::write</span><span class="plain-syntax">(</span><span class="identifier-syntax">ILN</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::truncate</span><span class="plain-syntax">(</span><span class="identifier-syntax">ILN</span><span class="plain-syntax">, </span><span class="constant-syntax">31</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_THROUGH_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">pos</span><span class="plain-syntax">, </span><span class="identifier-syntax">ILN</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::put</span><span class="plain-syntax">(</span><span class="identifier-syntax">pos</span><span class="plain-syntax">, </span><span class="identifier-syntax">Characters::toupper</span><span class="plain-syntax">(</span><span class="identifier-syntax">Str::get</span><span class="plain-syntax">(</span><span class="identifier-syntax">pos</span><span class="plain-syntax">)));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Characters::isalnum</span><span class="plain-syntax">(</span><span class="identifier-syntax">Str::get</span><span class="plain-syntax">(</span><span class="identifier-syntax">pos</span><span class="plain-syntax">)) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) </span><span class="identifier-syntax">Str::put</span><span class="plain-syntax">(</span><span class="identifier-syntax">pos</span><span class="plain-syntax">, </span><span class="character-syntax">'_'</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">iname</span><span class="plain-syntax"> = </span><a href="2-hrr.html#SP16" class="function-link"><span class="function-syntax">Hierarchy::make_iname_with_specific_translation</span></a><span class="plain-syntax">(</span><span class="constant-syntax">ILIST_HL</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">InterSymbolsTables::render_identifier_unique</span><span class="plain-syntax">(</span><span class="identifier-syntax">Produce::main_scope</span><span class="plain-syntax">(</span><a href="2-emt.html#SP1" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">()), </span><span class="identifier-syntax">ILN</span><span class="plain-syntax">),</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Kinds::Behaviour::package</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">ILN</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="2-hrr.html#SP19" class="function-link"><span class="function-syntax">Hierarchy::make_available</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">iname</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">packaging_state</span><span class="plain-syntax"> </span><span class="identifier-syntax">save</span><span class="plain-syntax"> = </span><a href="2-ea.html#SP2" class="function-link"><span class="function-syntax">EmitArrays::begin</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">iname</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_value</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="5-rsfk.html#SP22" class="function-link"><span class="function-syntax">RTKinds::emit_block_value_header</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">Kinds::unary_con</span><span class="plain-syntax">(</span><span class="identifier-syntax">CON_list_of</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">), </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">N</span><span class="plain-syntax"> + </span><span class="constant-syntax">2</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="5-rsfk.html#SP14" class="function-link"><span class="function-syntax">RTKinds::emit_strong_id</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-ea.html#SP4" class="function-link"><span class="function-syntax">EmitArrays::numeric_entry</span></a><span class="plain-syntax">((</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax">) </span><span class="identifier-syntax">N</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Kinds::Behaviour::is_an_enumeration</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax"> &lt;= </span><span class="identifier-syntax">N</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) {</span>
<span class="plain-syntax"> </span><a href="2-ea.html#SP4" class="function-link"><span class="function-syntax">EmitArrays::numeric_entry</span></a><span class="plain-syntax">((</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax">) </span><span class="identifier-syntax">i</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Kinds::Behaviour::is_subkind_of_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">instance</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax"> = </span><a href="5-ic.html#SP7" class="function-link"><span class="function-syntax">PL::Counting::next_instance_of</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">while</span><span class="plain-syntax"> (</span><span class="identifier-syntax">I</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="2-ea.html#SP4" class="function-link"><span class="function-syntax">EmitArrays::iname_entry</span></a><span class="plain-syntax">(</span><a href="5-ins.html#SP1" class="function-link"><span class="function-syntax">RTInstances::iname</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="plain-syntax"> = </span><a href="5-ic.html#SP7" class="function-link"><span class="function-syntax">PL::Counting::next_instance_of</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><a href="2-ea.html#SP6" class="function-link"><span class="function-syntax">EmitArrays::end</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">save</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Kinds::Constructors::set_list_iname</span><span class="plain-syntax">(</span><span class="identifier-syntax">Kinds::get_construct</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">), </span><span class="identifier-syntax">iname</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bc</span><span class="plain-syntax"> = </span><a href="2-hrr.html#SP18" class="function-link"><span class="function-syntax">Hierarchy::new_block_constant_iname</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">packaging_state</span><span class="plain-syntax"> </span><span class="identifier-syntax">save</span><span class="plain-syntax"> = </span><a href="2-ea.html#SP2" class="function-link"><span class="function-syntax">EmitArrays::begin_late</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">bc</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_value</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-ea.html#SP4" class="function-link"><span class="function-syntax">EmitArrays::iname_entry</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">iname</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-ea.html#SP4" class="function-link"><span class="function-syntax">EmitArrays::numeric_entry</span></a><span class="plain-syntax">(0);</span>
<span class="plain-syntax"> </span><a href="2-ea.html#SP6" class="function-link"><span class="function-syntax">EmitArrays::end</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">save</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">bc</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ListLiterals::extent_of_instance_list</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">ListLiterals::extent_of_instance_list</span></span>:<br/><a href="4-ll.html#SP7">&#167;7</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">N</span><span class="plain-syntax"> = -1;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Kinds::Behaviour::is_an_enumeration</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">)) </span><span class="named-paragraph-container code-font"><a href="4-ll.html#SP6_1" class="named-paragraph-link"><span class="named-paragraph">Count entries for an enumeration</span><span class="named-paragraph-number">6.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Kinds::Behaviour::is_subkind_of_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">)) </span><span class="named-paragraph-container code-font"><a href="4-ll.html#SP6_2" class="named-paragraph-link"><span class="named-paragraph">Count entries for a kind of object</span><span class="named-paragraph-number">6.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">N</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP6_1" class="paragraph-anchor"></a><b>&#167;6.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Count entries for an enumeration</span><span class="named-paragraph-number">6.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">N</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Kinds::Behaviour::get_highest_valid_value_as_integer</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-ll.html#SP6">&#167;6</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6_2" class="paragraph-anchor"></a><b>&#167;6.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Count entries for a kind of object</span><span class="named-paragraph-number">6.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">N</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">instance</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_INSTANCES</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">) </span><span class="identifier-syntax">N</span><span class="plain-syntax">++;</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-ll.html#SP6">&#167;6</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>&#167;7. </b>And the following then constructs the literal list, on demand:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="function-syntax">ListLiterals::get_instance_list</span><span class="plain-syntax">(</span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">N</span><span class="plain-syntax"> = </span><a href="4-ll.html#SP6" class="function-link"><span class="function-syntax">ListLiterals::extent_of_instance_list</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">N</span><span class="plain-syntax"> &lt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">large_block_iname</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Kinds::Constructors::list_iname</span><span class="plain-syntax">(</span><span class="identifier-syntax">Kinds::get_construct</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">large_block_iname</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">large_block_iname</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><a href="2-hrr.html#SP12" class="function-link"><span class="function-syntax">Hierarchy::make_iname_in</span></a><span class="plain-syntax">(</span><span class="constant-syntax">INSTANCE_LIST_HL</span><span class="plain-syntax">, </span><span class="identifier-syntax">Kinds::Behaviour::package</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">packaging_state</span><span class="plain-syntax"> </span><span class="identifier-syntax">save</span><span class="plain-syntax"> = </span><a href="4-ll.html#SP1" class="function-link"><span class="function-syntax">ListLiterals::begin_large_block</span></a><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">large_block_iname</span><span class="plain-syntax">, </span><span class="identifier-syntax">Kinds::unary_con</span><span class="plain-syntax">(</span><span class="identifier-syntax">CON_list_of</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">), </span><span class="identifier-syntax">N</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Kinds::Behaviour::is_an_enumeration</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">)) </span><span class="named-paragraph-container code-font"><a href="4-ll.html#SP7_1" class="named-paragraph-link"><span class="named-paragraph">Compile entries for an enumeration</span><span class="named-paragraph-number">7.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Kinds::Behaviour::is_subkind_of_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">)) </span><span class="named-paragraph-container code-font"><a href="4-ll.html#SP7_2" class="named-paragraph-link"><span class="named-paragraph">Compile entries for a kind of object</span><span class="named-paragraph-number">7.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="4-ll.html#SP1" class="function-link"><span class="function-syntax">ListLiterals::end_large_block</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">save</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Kinds::Constructors::set_list_iname</span><span class="plain-syntax">(</span><span class="identifier-syntax">Kinds::get_construct</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">), </span><span class="identifier-syntax">large_block_iname</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="4-ll.html#SP2" class="function-link"><span class="function-syntax">ListLiterals::small_block</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">large_block_iname</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP7_1" class="paragraph-anchor"></a><b>&#167;7.1. </b>A little dubiously, for an enumeration ("Colour is a kind of value. The
colours are red, green and blue."), the entries are just the numbers 1, 2, 3, ...
That never seems a good use of memory, but it is still more efficient to store
one copy of this than to have to construct it frequently at runtime.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Compile entries for an enumeration</span><span class="named-paragraph-number">7.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax"> &lt;= </span><span class="identifier-syntax">N</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++)</span>
<span class="plain-syntax"> </span><a href="2-ea.html#SP4" class="function-link"><span class="function-syntax">EmitArrays::numeric_entry</span></a><span class="plain-syntax">((</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax">) </span><span class="identifier-syntax">i</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-ll.html#SP7">&#167;7</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP7_2" class="paragraph-anchor"></a><b>&#167;7.2. </b>Note that the instances are given in the order preferred by <a href="5-ic.html" class="internal">Instance Counting</a>,
not in creation order, as a simple <span class="extract"><span class="extract-syntax">LOOP_OVER_INSTANCES</span></span> would have done.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Compile entries for a kind of object</span><span class="named-paragraph-number">7.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">instance</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax"> = </span><a href="5-ic.html#SP7" class="function-link"><span class="function-syntax">PL::Counting::next_instance_of</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">while</span><span class="plain-syntax"> (</span><span class="identifier-syntax">I</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="2-ea.html#SP4" class="function-link"><span class="function-syntax">EmitArrays::iname_entry</span></a><span class="plain-syntax">(</span><a href="5-ins.html#SP1" class="function-link"><span class="function-syntax">RTInstances::iname</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="plain-syntax"> = </span><a href="5-ic.html#SP7" class="function-link"><span class="function-syntax">PL::Counting::next_instance_of</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-ll.html#SP7">&#167;7</a>.</li></ul>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="3-ext.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-rm.html">1</a></li><li class="progresschapter"><a href="2-hrr.html">2</a></li><li class="progresschapter"><a href="3-fc.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresscurrent">ll</li><li class="progresssection"><a href="4-tl.html">tl</a></li><li class="progresssection"><a href="4-ts.html">ts</a></li><li class="progresssection"><a href="4-rsp.html">rsp</a></li><li class="progresssection"><a href="4-ct.html">ct</a></li><li class="progresssection"><a href="4-lpart.html">lpart</a></li><li class="progresschapter"><a href="5-rsfk.html">5</a></li><li class="progresschapter"><a href="6-nmn.html">6</a></li><li class="progresschapter"><a href="7-act.html">7</a></li><li class="progresschapter"><a href="8-prs.html">8</a></li><li class="progresschapter"><a href="9-fgr.html">9</a></li><li class="progresschapter"><a href="10-sc.html">10</a></li><li class="progressnext"><a href="4-tl.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->

View file

@ -224,7 +224,7 @@ an explicit player.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">instance</span><span class="plain-syntax"> *</span><span class="function-syntax">PL::Counting::next_instance_of</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">PL::Counting::next_instance_of</span></span>:<br/><a href="5-ic.html#SP8">&#167;8</a>, <a href="5-ic.html#SP9">&#167;9</a><br/>List Literals - <a href="4-ll.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">instance</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">k</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">instance</span><span class="plain-syntax"> *</span><span class="function-syntax">PL::Counting::next_instance_of</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">PL::Counting::next_instance_of</span></span>:<br/><a href="5-ic.html#SP8">&#167;8</a>, <a href="5-ic.html#SP9">&#167;9</a><br/>List Literals - <a href="4-ll.html#SP7_2">&#167;7.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">instance</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">k</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">k</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">resuming</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">I</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) { </span><span class="identifier-syntax">I</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FIRST_IN_INSTANCE_ORDERING</span><span class="plain-syntax">; </span><span class="identifier-syntax">resuming</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">; }</span>

View file

@ -91,7 +91,7 @@ function togglePopup(material_id) {
<span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">icd</span><span class="plain-syntax">.</span><span class="identifier-syntax">instance_emitted</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="function-syntax">RTInstances::iname</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">RTInstances::iname</span></span>:<br/><a href="5-ins.html#SP2">&#167;2</a>, <a href="5-ins.html#SP4">&#167;4</a><br/>List Literals - <a href="4-ll.html#SP3">&#167;3</a><br/>Runtime Support for Kinds - <a href="5-rsfk.html#SP5">&#167;5</a>, <a href="5-rsfk.html#SP26_3">&#167;26.3</a><br/>Naming - <a href="6-nmn.html#SP2">&#167;2</a><br/>The Player - <a href="6-tp.html#SP1">&#167;1</a><br/>Backdrops - <a href="6-bck.html#SP2_1">&#167;2.1</a><br/>Regions - <a href="6-rgn.html#SP2">&#167;2</a><br/>The Map - <a href="6-tm.html#SP2_2">&#167;2.2</a>, <a href="6-tm.html#SP3">&#167;3</a>, <a href="6-tm.html#SP4">&#167;4</a><br/>Action Patterns - <a href="7-ap.html#SP5">&#167;5</a>, <a href="7-ap.html#SP6_1_1_1">&#167;6.1.1.1</a><br/>Tokens Parsing Values - <a href="8-tpv.html#SP1_1">&#167;1.1</a><br/>Test Scripts - <a href="10-ts.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">instance</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="function-syntax">RTInstances::iname</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">RTInstances::iname</span></span>:<br/><a href="5-ins.html#SP2">&#167;2</a>, <a href="5-ins.html#SP4">&#167;4</a><br/>List Literals - <a href="4-ll.html#SP7_2">&#167;7.2</a><br/>Runtime Support for Kinds - <a href="5-rsfk.html#SP5">&#167;5</a>, <a href="5-rsfk.html#SP26_3">&#167;26.3</a><br/>Naming - <a href="6-nmn.html#SP2">&#167;2</a><br/>The Player - <a href="6-tp.html#SP1">&#167;1</a><br/>Backdrops - <a href="6-bck.html#SP2_1">&#167;2.1</a><br/>Regions - <a href="6-rgn.html#SP2">&#167;2</a><br/>The Map - <a href="6-tm.html#SP2_2">&#167;2.2</a>, <a href="6-tm.html#SP3">&#167;3</a>, <a href="6-tm.html#SP4">&#167;4</a><br/>Action Patterns - <a href="7-ap.html#SP5">&#167;5</a>, <a href="7-ap.html#SP6_1_1_1">&#167;6.1.1.1</a><br/>Tokens Parsing Values - <a href="8-tpv.html#SP1_1">&#167;1.1</a><br/>Test Scripts - <a href="10-ts.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">instance</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">I</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">icd</span><span class="plain-syntax">.</span><span class="element-syntax">instance_iname</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>

View file

@ -192,12 +192,15 @@ chosen), but no problem message has been issued about this, or
<span class="plain-syntax"> (</span><span class="identifier-syntax">Kinds::get_construct</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">) == </span><span class="identifier-syntax">CON_phrase</span><span class="plain-syntax">) ||</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">Kinds::get_construct</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">) == </span><span class="identifier-syntax">CON_relation</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Kinds::get_construct</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">) == </span><span class="identifier-syntax">CON_list_of</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">N</span><span class="plain-syntax"> = </span><a href="2-hrr.html#SP18" class="function-link"><span class="function-syntax">Hierarchy::new_block_constant_iname</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">N</span><span class="plain-syntax"> = </span><a href="4-ll.html#SP2" class="function-link"><span class="function-syntax">ListLiterals::small_block</span></a><span class="plain-syntax">(</span><a href="5-rsfk.html#SP16" class="function-link"><span class="function-syntax">RTKinds::compile_default_value_inner</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">));</span>
<span class="comment-syntax"> Hierarchy::new_block_constant_iname();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">packaging_state</span><span class="plain-syntax"> </span><span class="identifier-syntax">save</span><span class="plain-syntax"> = </span><a href="2-ea.html#SP2" class="function-link"><span class="function-syntax">EmitArrays::begin_late</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">N</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_value</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">rks_symb</span><span class="plain-syntax"> = </span><a href="5-rsfk.html#SP16" class="function-link"><span class="function-syntax">RTKinds::compile_default_value_inner</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-ea.html#SP4" class="function-link"><span class="function-syntax">EmitArrays::iname_entry</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">rks_symb</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-ea.html#SP4" class="function-link"><span class="function-syntax">EmitArrays::numeric_entry</span></a><span class="plain-syntax">(0);</span>
<span class="plain-syntax"> </span><a href="2-ea.html#SP6" class="function-link"><span class="function-syntax">EmitArrays::end</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">save</span><span class="plain-syntax">);</span>
<span class="plain-syntax">*/</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">N</span><span class="plain-syntax">) </span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::holster_iname</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">VH</span><span class="plain-syntax">, </span><span class="identifier-syntax">N</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Kinds::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_stored_action</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">N</span><span class="plain-syntax"> = </span><a href="2-hrr.html#SP18" class="function-link"><span class="function-syntax">Hierarchy::new_block_constant_iname</span></a><span class="plain-syntax">();</span>
@ -626,7 +629,7 @@ turns up. This means remembering everything we've seen, using a new structure:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">RTKinds::emit_strong_id</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">RTKinds::emit_strong_id</span></span>:<br/><a href="5-rsfk.html#SP18_1_1">&#167;18.1.1</a>, <a href="5-rsfk.html#SP18_1_1_1">&#167;18.1.1.1</a>, <a href="5-rsfk.html#SP18_1_1_2">&#167;18.1.1.2</a><br/>List Literals - <a href="4-ll.html#SP2_1">&#167;2.1</a>, <a href="4-ll.html#SP3">&#167;3</a><br/>Relations at Run Time - <a href="5-rart.html#SP4_1_4">&#167;4.1.4</a>, <a href="5-rart.html#SP5">&#167;5</a><br/>Actions - <a href="7-act.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">RTKinds::emit_strong_id</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">RTKinds::emit_strong_id</span></span>:<br/><a href="5-rsfk.html#SP18_1_1">&#167;18.1.1</a>, <a href="5-rsfk.html#SP18_1_1_1">&#167;18.1.1.1</a>, <a href="5-rsfk.html#SP18_1_1_2">&#167;18.1.1.2</a><br/>List Literals - <a href="4-ll.html#SP1">&#167;1</a><br/>Relations at Run Time - <a href="5-rart.html#SP4_1_4">&#167;4.1.4</a>, <a href="5-rart.html#SP5">&#167;5</a><br/>Actions - <a href="7-act.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">runtime_kind_structure</span><span class="plain-syntax"> *</span><span class="identifier-syntax">rks</span><span class="plain-syntax"> = </span><a href="5-rsfk.html#SP15" class="function-link"><span class="function-syntax">RTKinds::get_rks</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">rks</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="2-ea.html#SP4" class="function-link"><span class="function-syntax">EmitArrays::iname_entry</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">rks</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">rks_iname</span><span class="plain-syntax">);</span>
@ -873,7 +876,7 @@ recursively scanned through for us, so that if we have seen a construction
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Kinds::get_construct</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">) == </span><span class="identifier-syntax">CON_relation</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="5-rart.html#SP5" class="function-link"><span class="function-syntax">RTRelations::compile_default_relation</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">identifier</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Kinds::get_construct</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">) == </span><span class="identifier-syntax">CON_list_of</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="4-ll.html#SP3" class="function-link"><span class="function-syntax">ListLiterals::compile_default_list</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">identifier</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="4-ll.html#SP3" class="function-link"><span class="function-syntax">ListLiterals::default_large_block</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">identifier</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_source</span><span class="plain-syntax">(1, </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_kind</span><span class="plain-syntax">(2, </span><span class="identifier-syntax">K</span><span class="plain-syntax">);</span>
@ -1035,7 +1038,7 @@ list of 20 texts. For the cases above, it's always 1.
<span class="definition-keyword">define</span> <span class="constant-syntax">BLK_FLAG_TRUNCMULT</span><span class="plain-syntax"> </span><span class="constant-syntax">0x00000010</span>
</pre>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">RTKinds::emit_block_value_header</span><button class="popup" onclick="togglePopup('usagePopup21')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup21">Usage of <span class="code-font"><span class="function-syntax">RTKinds::emit_block_value_header</span></span>:<br/><a href="5-rsfk.html#SP5">&#167;5</a><br/>List Literals - <a href="4-ll.html#SP2_1">&#167;2.1</a>, <a href="4-ll.html#SP3">&#167;3</a><br/>Relations at Run Time - <a href="5-rart.html#SP4_1">&#167;4.1</a>, <a href="5-rart.html#SP5">&#167;5</a><br/>Action Patterns - <a href="7-ap.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">individual</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">size</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">RTKinds::emit_block_value_header</span><button class="popup" onclick="togglePopup('usagePopup21')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup21">Usage of <span class="code-font"><span class="function-syntax">RTKinds::emit_block_value_header</span></span>:<br/><a href="5-rsfk.html#SP5">&#167;5</a><br/>List Literals - <a href="4-ll.html#SP1">&#167;1</a><br/>Relations at Run Time - <a href="5-rart.html#SP4_1">&#167;4.1</a>, <a href="5-rart.html#SP5">&#167;5</a><br/>Action Patterns - <a href="7-ap.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">individual</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">size</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">individual</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) </span><a href="2-ea.html#SP4" class="function-link"><span class="function-syntax">EmitArrays::numeric_entry</span></a><span class="plain-syntax">(0);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">n</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">c</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax">, </span><span class="identifier-syntax">w</span><span class="plain-syntax"> = </span><span class="constant-syntax">4</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">TargetVMs::is_16_bit</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::vm</span><span class="plain-syntax">())) </span><span class="identifier-syntax">w</span><span class="plain-syntax"> = </span><span class="constant-syntax">2</span><span class="plain-syntax">;</span>

View file

@ -217,7 +217,7 @@ which happens to be a malformed list.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="function-syntax">Lists::kind_of_ll</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">Lists::kind_of_ll</span></span>:<br/><a href="3-ll.html#SP2">&#167;2</a>, <a href="3-ll.html#SP9">&#167;9</a>, <a href="3-ll.html#SP10">&#167;10</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">literal_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ll</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">issue_problems</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="function-syntax">Lists::kind_of_ll</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">Lists::kind_of_ll</span></span>:<br/><a href="3-ll.html#SP2">&#167;2</a>, <a href="3-ll.html#SP9">&#167;9</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">literal_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ll</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">issue_problems</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cs</span><span class="plain-syntax"> = </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">issue_problems</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ll</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">list_text</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">)</span>
@ -356,18 +356,6 @@ problem messages out into the open &mdash;
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ll</span><span class="plain-syntax">) </span><a href="3-ll.html#SP8" class="function-link"><span class="function-syntax">Lists::kind_of_ll</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ll</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>&#167;10. </b>And this checks every list, with problem messages on:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Lists::check</span><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">problem_count</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">literal_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ll</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER</span><span class="plain-syntax">(</span><span class="identifier-syntax">ll</span><span class="plain-syntax">, </span><span class="reserved-syntax">literal_list</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="3-ll.html#SP8" class="function-link"><span class="function-syntax">Lists::kind_of_ll</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ll</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="3-ul.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-vm.html">1</a></li><li class="progresschapter"><a href="2-spc.html">2</a></li><li class="progresscurrentchapter">3</li><li class="progresssection"><a href="3-pl.html">pl</a></li><li class="progresssection"><a href="3-lp.html">lp</a></li><li class="progresssection"><a href="3-lrn.html">lrn</a></li><li class="progresssection"><a href="3-tod.html">tod</a></li><li class="progresssection"><a href="3-ul.html">ul</a></li><li class="progresscurrent">ll</li><li class="progresschapter"><a href="4-ets.html">4</a></li><li class="progresschapter"><a href="5-dsh.html">5</a></li><li class="progressnext"><a href="4-ets.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->

View file

@ -1,10 +1,10 @@
Total memory consumption was 280631K = 274 MB
64.1% was used for 1356697 objects, in 311359 frames in 225 x 800K = 180000K = 175 MB:
64.1% was used for 1356591 objects, in 311352 frames in 225 x 800K = 180000K = 175 MB:
9.2% inter_tree_node_array 37 x 8192 = 303104 objects, 26674336 bytes
5.6% linked_list 28956 objects, 16215360 bytes
5.3% text_stream_array 2727 x 100 = 272700 objects, 15358464 bytes
5.6% linked_list 28953 objects, 16213680 bytes
5.3% text_stream_array 2726 x 100 = 272600 objects, 15352832 bytes
3.6% parse_node 129367 objects, 10349360 bytes
2.5% verb_conjugation 160 objects, 7425280 bytes
2.2% inter_symbol_array 71 x 1024 = 72704 objects, 6400224 bytes
@ -46,9 +46,9 @@ Total memory consumption was 280631K = 274 MB
---- index_lexicon_entry 395 objects, 142200 bytes
---- nonterminal 759 objects, 139656 bytes
---- nascent_array 1947 objects, 124608 bytes
---- documentation_ref 1275 objects, 112200 bytes
---- documentation_ref 1274 objects, 112112 bytes
---- inference 1703 objects, 108992 bytes
---- hierarchy_location 732 objects, 105408 bytes
---- hierarchy_location 733 objects, 105552 bytes
---- imperative_defn 1376 objects, 99072 bytes
---- anl_entry_array 2 x 1000 = 2000 objects, 96064 bytes
---- noun_usage 2401 objects, 96040 bytes
@ -56,7 +56,7 @@ Total memory consumption was 280631K = 274 MB
---- lexical_cluster 2516 objects, 80512 bytes
---- pcalc_term_array 2 x 1000 = 2000 objects, 80064 bytes
---- kind_variable_declaration 1652 objects, 79296 bytes
---- inter_tree 6 objects, 79152 bytes
---- inter_tree 6 objects, 79200 bytes
---- inter_schema 1507 objects, 72336 bytes
---- label_namespace 1468 objects, 70464 bytes
---- rulebook 407 objects, 65120 bytes
@ -110,7 +110,7 @@ Total memory consumption was 280631K = 274 MB
---- literal_text 147 objects, 12936 bytes
---- adjective_iname_holder 320 objects, 12800 bytes
---- pathname 292 objects, 11680 bytes
---- stopwatch_timer 144 objects, 11520 bytes
---- stopwatch_timer 141 objects, 11280 bytes
---- filename 208 objects, 8320 bytes
---- equation_node 68 objects, 7616 bytes
---- understanding_item_array 3 x 100 = 300 objects, 7296 bytes
@ -239,9 +239,9 @@ Total memory consumption was 280631K = 274 MB
35.8% was used for memory not allocated for objects:
15.6% text stream storage 44997680 bytes in 280860 claims
15.6% text stream storage 44997640 bytes in 280859 claims
3.4% dictionary storage 9945088 bytes in 17678 claims
---- sorting 1008 bytes in 3 claims
---- sorting 984 bytes in 3 claims
2.5% source text 7200000 bytes in 3 claims
3.7% source text details 10800000 bytes in 2 claims
---- linguistic stock array 81920 bytes in 2 claims
@ -255,5 +255,5 @@ Total memory consumption was 280631K = 274 MB
---- emitter array storage 175040 bytes in 2060 claims
---- code generation workspace for objects 9200 bytes in 9 claims
20.8% was overhead - 59991576 bytes = 58585K = 57 MB
20.8% was overhead - 59999024 bytes = 58592K = 57 MB

View file

@ -1,29 +1,30 @@
100.0% in inform7 run
66.0% in compilation to Inter
25.4% in //ImperativeDefinitions::compile_first_block//
8.5% in //Sequence::compile_function_resources//
7.0% in //Strings::compile_responses//
6.0% in //InferenceSubjects::emit_all//
3.8% in //MajorNodes::pre_pass//
66.1% in compilation to Inter
25.3% in //ImperativeDefinitions::compile_first_block//
8.6% in //Sequence::compile_function_resources//
7.1% in //Strings::compile_responses//
6.1% in //InferenceSubjects::emit_all//
3.7% in //MajorNodes::pre_pass//
3.2% in //MajorNodes::pass_1//
2.0% in //RTRules::RulePrintingRule_routine//
1.8% in //RTRules::rulebooks_array_array//
1.6% in //ImperativeDefinitions::assess_all//
1.7% in //ImperativeDefinitions::assess_all//
1.0% in //RTVerbs::ConjugateVerb//
0.5% in //RTRules::compile_rulebooks//
0.5% in //World::stage_V//
0.3% in //MajorNodes::pass_2//
0.3% in //World::stage_V//
0.3% in //RTRelations::compile_defined_relations//
0.1% in //RTCommandGrammars::compile_all//
0.1% in //RTKinds::compile_data_type_support_routines//
0.1% in //RTRelations::compile_defined_relations//
0.1% in //Task::make_built_in_kind_constructors//
3.3% not specifically accounted for
0.1% in //World::stages_II_and_III//
2.9% not specifically accounted for
31.4% in running Inter pipeline
10.7% in step preparation
9.6% in inter step 2/13: link
7.0% in inter step 13/13: generate inform6 -> auto.inf
11.5% in step preparation
9.5% in inter step 2/13: link
7.1% in inter step 13/13: generate inform6 -> auto.inf
0.5% in inter step 9/13: make-identifiers-unique
0.3% in inter step 12/13: eliminate-redundant-operations
0.3% in inter step 9/13: make-identifiers-unique
0.1% in inter step 10/13: reconcile-verbs
0.1% in inter step 11/13: eliminate-redundant-labels
0.1% in inter step 4/13: parse-linked-matter
@ -31,6 +32,6 @@
0.1% in inter step 6/13: assimilate
0.1% in inter step 7/13: resolve-external-symbols
0.1% in inter step 8/13: inspect-plugs
2.0% not specifically accounted for
2.0% in supervisor
1.2% not specifically accounted for
1.8% in supervisor
0.6% not specifically accounted for

View file

@ -112,7 +112,7 @@ var_person_asked _ doc179 "12.3" "12.3. Giving instructions to other people"
rules_per _ doc180 "12.4" "12.4. Persuasion"
rules_fail var_reason _ doc181 "12.5" "12.5. Unsuccessful attempts"
PM_ActionMisapplied PM_ActionClauseUnknown PM_ActionBothValues PM_ActionAlreadyExists PM_GrammarMismatchesAction PM_MultiwordPastParticiple PM_MatchedAsTooLong NEWACTIONS ph_requirestouch ph_requirestouch2 ph_requirescarried ph_requirescarried2 ph_requireslight _ doc183 "12.7" "12.7. New actions"
PM_BadOptionalAPClause PM_BadMatchingSyntax PM_ActionVarValue PM_ActionVarUnknownKOV PM_ActionVarOverspecific PM_ActionVarAnd PM_ActionVarsPastTense _ doc186 "12.10" "12.10. Action variables"
PM_BadMatchingSyntax PM_ActionVarValue PM_ActionVarUnknownKOV PM_ActionVarOverspecific PM_ActionVarAnd PM_ActionVarsPastTense _ doc186 "12.10" "12.10. Action variables"
PM_RuleWithComma PM_DuplicateRuleName _ doc188 "12.12" "12.12. Check rules for actions by other people"
OUTOFWORLD _ doc191 "12.15" "12.15. Out of world actions"
rules_ri _ doc192 "12.16" "12.16. Reaching inside and reaching outside rules"

View file

@ -214,14 +214,12 @@ so on. Those absolute basics are made here.
@<Generate inter, part 3@> =
Task::advance_stage_to(INTER3_CSEQ, I"Generating inter (3)",
-1, debugging, sequence_timer);
BENCH(Lists::check)
BENCH(ListLiterals::compile)
BENCH(Sequence::compile_literal_resources)
BENCH(PhraseRequests::invoke_to_begin)
BENCH(Closures::compile_closures)
BENCH(Sequence::compile_function_resources)
BENCH(Strings::compile_responses)
BENCH(Lists::check)
BENCH(ListLiterals::compile)
BENCH(Sequence::compile_literal_resources)
BENCH(RTRelations::compile_defined_relations)
BENCH(Sequence::compile_function_resources)
BENCH(TextSubstitutions::allow_no_further_text_subs)
@ -237,8 +235,7 @@ so on. Those absolute basics are made here.
Task::advance_stage_to(INTER5_CSEQ, I"Generating inter (5)",
-1, debugging, sequence_timer);
BENCH(RTMeasurements::compile_test_functions)
BENCH(Lists::check)
BENCH(ListLiterals::compile)
BENCH(Sequence::compile_literal_resources)
BENCH(TextLiterals::compile)
BENCH(RTKinds::compile_heap_allocator)
BENCH(RTKinds::compile_structures)
@ -321,3 +318,21 @@ void Sequence::compile_function_resources(void) {
LOG(".... Sequence::compile_function_resources completed in %d iteration%s\n",
iterations, (iterations == 1)?"":"s");
}
@ And very similarly:
=
void Sequence::compile_literal_resources(void) {
int repeat = TRUE, iterations = 0;
while (repeat) {
repeat = FALSE; iterations++;
if (ListLiterals::compile_support_matter() > 0) repeat = TRUE;
if ((problem_count > 0) && (iterations > 10)) repeat = FALSE;
}
iterations--; /* since the final round is one where everyone does nothing */
if (iterations > 0)
LOG(".... Sequence::compile_literal_resources completed in %d iteration%s\n",
iterations, (iterations == 1)?"":"s");
}

View file

@ -92,8 +92,10 @@ kinds of value:
if (Kinds::get_construct(kind_of_constant) == CON_list_of) {
wording W = Node::get_text(value);
literal_list *ll = Lists::find_literal(Wordings::first_wn(W) + 1);
inter_name *N = ListLiterals::compile_literal_list(ll);
if (N) Emit::holster_iname(VH, N);
if (ll) {
inter_name *N = ListLiterals::compile_literal_list(ll);
if (N) Emit::holster_iname(VH, N);
}
return;
}
if (Kinds::get_construct(kind_of_constant) == CON_phrase) {

View file

@ -741,6 +741,7 @@ void Hierarchy::establish(void) {
@e DEFAULT_CLOSURE_FN_HL
@e GPR_FN_HL
@e INSTANCE_GPR_FN_HL
@e INSTANCE_LIST_HL
@e FIRST_INSTANCE_HL
@e NEXT_INSTANCE_HL
@e COUNT_INSTANCE_1_HL
@ -796,6 +797,7 @@ void Hierarchy::establish(void) {
H_F_U(DEFAULT_CLOSURE_FN_HL, I"default_closure_fn")
H_F_U(GPR_FN_HL, I"gpr_fn")
H_F_U(INSTANCE_GPR_FN_HL, I"instance_gpr_fn")
H_C_U(INSTANCE_LIST_HL, I"instance_list")
H_C_S(FIRST_INSTANCE_HL, I"_First")
H_C_S(NEXT_INSTANCE_HL, I"_Next")
H_C_T(COUNT_INSTANCE_1_HL, I"IK1_Count")

View file

@ -2,139 +2,194 @@
Each enclosure contains the literal lists needed by its functions.
@ Literal lists arise from source text such as:
@h Runtime representation.
Literal lists arise from source text such as:
= (text as Inform 7)
let Q be { 2, 3, 5, 7, 11 };
let Q be { 60, 168 };
=
The data to hold |{ 2, 3, 5, 7, 11 }| has to go somewhere, and it goes into
a block constant inside the enclosure for the function which contained this
definition.
The data to hold |{ 60, 168 }| has to be stored somehow. As with all
kinds for which values cannot be stored in a single word, we use a double
pointer:
= (text)
small block: large block:
Q ----------------> pointer ----------------> block value header
0 strong kind ID for entries
number of entries
the entries
=
So in this particular example, the result would be:
= (text)
small block: large block:
Q ----------------> pointer ----------------> block value header
0 NUMBER_TY
2
60
168
=
So the small block always occupies 2 words, the second being initially 0 and
used at runtime; the large block can be any size we need. The runtime code has
elaborate ways to extend or contract dynamic lists, but these of course are
constants, so we simply make the large blocks exactly the right size.
We make the large block first:
=
packaging_state ListLiterals::begin_large_block(inter_name *iname, kind *list_kind,
int no_entries) {
packaging_state save = EmitArrays::begin(iname, K_value);
RTKinds::emit_block_value_header(list_kind, TRUE, no_entries + 2);
RTKinds::emit_strong_id(Kinds::unary_construction_material(list_kind));
EmitArrays::numeric_entry((inter_ti) no_entries);
return save;
}
void ListLiterals::end_large_block(packaging_state save) {
EmitArrays::end(save);
}
@ And then make the small block pointing to it:
=
inter_name *ListLiterals::small_block(inter_name *large_block) {
inter_name *N = Hierarchy::new_block_constant_iname();
packaging_state save = EmitArrays::begin(N, K_value);
EmitArrays::iname_entry(large_block);
EmitArrays::numeric_entry(0);
EmitArrays::end(save);
return N;
}
@h Default values for list kinds.
The default list is the empty list, but note from the above representation
that the empty list of numbers (say) is different from the empty list of texts:
= (text)
small block: large block:
----> pointer ----------------> block value header
NUMBER_TY
0
small block: large block:
----> pointer ----------------> block value header
TEXT_TY
0
=
So each different kind K needs its own large block for making the default value
of "list of K": see //RTKinds::compile_structures//. This block is easily made:
=
void ListLiterals::default_large_block(inter_name *iname, kind *list_kind) {
packaging_state save = ListLiterals::begin_large_block(iname, list_kind, 0);
ListLiterals::end_large_block(save);
}
@h Literals.
To return to the example:
= (text as Inform 7)
let Q be { 60, 168 };
=
Each list literal like |{ 60, 168 }| in imperative code results in a |literal_list|
object, and here we return its value:
=
inter_name *ListLiterals::compile_literal_list(literal_list *ll) {
if (ll) {
Lists::kind_of_ll(ll, FALSE);
inter_name *N = Hierarchy::new_block_constant_iname();
packaging_state save = EmitArrays::begin_late(N, K_value);
EmitArrays::iname_entry(ListLiterals::iname(ll));
EmitArrays::numeric_entry(0);
EmitArrays::end(save);
return N;
}
return NULL;
Lists::kind_of_ll(ll, FALSE);
return ListLiterals::small_block(ListLiterals::large_block_iname(ll));
}
inter_name *ListLiterals::iname(literal_list *ll) {
inter_name *ListLiterals::large_block_iname(literal_list *ll) {
if (ll->ll_iname == NULL)
ll->ll_iname = Hierarchy::iname_in_enclosure(LITERALS_HAP, LIST_LITERAL_HL);
return ll->ll_iname;
}
@ Using:
@ The large blocks are then compiled in due course by the following coroutine
(see //core: How To Compile//):
=
void ListLiterals::compile(void) {
int ListLiterals::compile_support_matter(void) {
int N = 0;
literal_list *ll;
if (problem_count == 0)
LOOP_OVER(ll, literal_list)
if ((ll->list_compiled == FALSE) && (ll->ll_iname)) {
ll->list_compiled = TRUE;
ll->list_compiled = TRUE; N++;
current_sentence = ll->list_text;
Lists::kind_of_ll(ll, TRUE);
if (problem_count == 0) @<Actually compile the list array@>;
if (problem_count == 0) @<Compile the large block for this literal@>;
}
return N;
}
@ These are I6 word arrays, with the contents:
(a) a zero word, used as a flag at run-time;
(b) the strong kind ID of the kind of entry the list holds (not the kind of
the list!);
(c) the number of entries in the list; and
(d) that number of values, each representing one entry.
@<Actually compile the list array@> =
packaging_state save = EmitArrays::begin(ll->ll_iname, K_value);
@<Compile the large block for this literal@> =
llist_entry *lle;
int n = 0;
for (lle = ll->first_llist_entry; lle; lle = lle->next_llist_entry) n++;
RTKinds::emit_block_value_header(Lists::kind_of_ll(ll, FALSE), TRUE, n+2);
RTKinds::emit_strong_id(ll->entry_kind);
EmitArrays::numeric_entry((inter_ti) n);
packaging_state save =
ListLiterals::begin_large_block(ll->ll_iname, Lists::kind_of_ll(ll, FALSE), n);
for (lle = ll->first_llist_entry; lle; lle = lle->next_llist_entry)
CompileValues::to_array_entry_of_kind(
lle->llist_entry_value, ll->entry_kind);
EmitArrays::end(save);
ListLiterals::end_large_block(save);
@ The default list of any given kind is empty.
@h The instance list for a kind.
For kinds of object and enumerations, Inform sometimes chooses to compile its
own literal list, even though this is not specified anywhere in the source text.
Not all kinds have these: obviously, there can be no instance list for |K_real_number|.
The following returns -1 if |K| is similarly unsuitable, or a non-negative value
for the number of instances it has:
=
void ListLiterals::compile_default_list(inter_name *identifier, kind *K) {
packaging_state save = EmitArrays::begin(identifier, K_value);
RTKinds::emit_block_value_header(K, TRUE, 2);
RTKinds::emit_strong_id(Kinds::unary_construction_material(K));
EmitArrays::numeric_entry(0);
EmitArrays::end(save);
}
int ListLiterals::extent_of_instance_list(kind *K) {
if (Kinds::Behaviour::is_an_enumeration(K))
return Kinds::Behaviour::get_highest_valid_value_as_integer(K);
if (Kinds::Behaviour::is_subkind_of_object(K)) {
int N = 0;
instance *I;
LOOP_OVER_INSTANCES(I, K) N++;
return N;
}
return -1;
int N = -1;
if (Kinds::Behaviour::is_an_enumeration(K)) @<Count entries for an enumeration@>;
if (Kinds::Behaviour::is_subkind_of_object(K)) @<Count entries for a kind of object@>;
return N;
}
@<Count entries for an enumeration@> =
N = Kinds::Behaviour::get_highest_valid_value_as_integer(K);
@<Count entries for a kind of object@> =
N = 0;
instance *I;
LOOP_OVER_INSTANCES(I, K) N++;
@ And the following then constructs the literal list, on demand:
=
inter_name *ListLiterals::get_instance_list(kind *K) {
int N = ListLiterals::extent_of_instance_list(K);
if (N < 0) return NULL;
inter_name *iname = Kinds::Constructors::list_iname(Kinds::get_construct(K));
if (iname == NULL) {
TEMPORARY_TEXT(ILN)
WRITE_TO(ILN, "ILIST_");
Kinds::Textual::write(ILN, K);
Str::truncate(ILN, 31);
LOOP_THROUGH_TEXT(pos, ILN) {
Str::put(pos, Characters::toupper(Str::get(pos)));
if (Characters::isalnum(Str::get(pos)) == FALSE) Str::put(pos, '_');
}
iname = Hierarchy::make_iname_with_specific_translation(ILIST_HL,
InterSymbolsTables::render_identifier_unique(Produce::main_scope(Emit::tree()), ILN),
Kinds::Behaviour::package(K));
DISCARD_TEXT(ILN)
Hierarchy::make_available(iname);
packaging_state save = EmitArrays::begin(iname, K_value);
RTKinds::emit_block_value_header(Kinds::unary_con(CON_list_of, K), TRUE, N + 2);
RTKinds::emit_strong_id(K);
EmitArrays::numeric_entry((inter_ti) N);
if (Kinds::Behaviour::is_an_enumeration(K)) {
for (int i = 1; i <= N; i++) {
EmitArrays::numeric_entry((inter_ti) i);
}
}
if (Kinds::Behaviour::is_subkind_of_object(K)) {
instance *I = PL::Counting::next_instance_of(NULL, K);
while (I) {
EmitArrays::iname_entry(RTInstances::iname(I));
I = PL::Counting::next_instance_of(I, K);
}
}
EmitArrays::end(save);
Kinds::Constructors::set_list_iname(Kinds::get_construct(K), iname);
inter_name *large_block_iname = Kinds::Constructors::list_iname(Kinds::get_construct(K));
if (large_block_iname == NULL) {
large_block_iname =
Hierarchy::make_iname_in(INSTANCE_LIST_HL, Kinds::Behaviour::package(K));
packaging_state save = ListLiterals::begin_large_block(
large_block_iname, Kinds::unary_con(CON_list_of, K), N);
if (Kinds::Behaviour::is_an_enumeration(K)) @<Compile entries for an enumeration@>;
if (Kinds::Behaviour::is_subkind_of_object(K)) @<Compile entries for a kind of object@>;
ListLiterals::end_large_block(save);
Kinds::Constructors::set_list_iname(Kinds::get_construct(K), large_block_iname);
}
inter_name *bc = Hierarchy::new_block_constant_iname();
packaging_state save = EmitArrays::begin_late(bc, K_value);
EmitArrays::iname_entry(iname);
EmitArrays::numeric_entry(0);
EmitArrays::end(save);
return bc;
return ListLiterals::small_block(large_block_iname);
}
@ A little dubiously, for an enumeration ("Colour is a kind of value. The
colours are red, green and blue."), the entries are just the numbers 1, 2, 3, ...
That never seems a good use of memory, but it is still more efficient to store
one copy of this than to have to construct it frequently at runtime.
@<Compile entries for an enumeration@> =
for (int i = 1; i <= N; i++)
EmitArrays::numeric_entry((inter_ti) i);
@ Note that the instances are given in the order preferred by //Instance Counting//,
not in creation order, as a simple |LOOP_OVER_INSTANCES| would have done.
@<Compile entries for a kind of object@> =
instance *I = PL::Counting::next_instance_of(NULL, K);
while (I) {
EmitArrays::iname_entry(RTInstances::iname(I));
I = PL::Counting::next_instance_of(I, K);
}

View file

@ -102,12 +102,15 @@ int RTKinds::compile_default_value_vh(value_holster *VH, kind *K,
(Kinds::get_construct(K) == CON_phrase) ||
(Kinds::get_construct(K) == CON_relation)) {
if (Kinds::get_construct(K) == CON_list_of) {
inter_name *N = Hierarchy::new_block_constant_iname();
inter_name *N = ListLiterals::small_block(RTKinds::compile_default_value_inner(K));
/* Hierarchy::new_block_constant_iname();
packaging_state save = EmitArrays::begin_late(N, K_value);
inter_name *rks_symb = RTKinds::compile_default_value_inner(K);
EmitArrays::iname_entry(rks_symb);
EmitArrays::numeric_entry(0);
EmitArrays::end(save);
*/
if (N) Emit::holster_iname(VH, N);
} else if (Kinds::eq(K, K_stored_action)) {
inter_name *N = Hierarchy::new_block_constant_iname();
@ -715,7 +718,7 @@ void RTKinds::compile_structures(void) {
} else if (Kinds::get_construct(K) == CON_relation) {
RTRelations::compile_default_relation(identifier, K);
} else if (Kinds::get_construct(K) == CON_list_of) {
ListLiterals::compile_default_list(identifier, K);
ListLiterals::default_large_block(identifier, K);
} else {
Problems::quote_source(1, current_sentence);
Problems::quote_kind(2, K);

View file

@ -245,14 +245,3 @@ void Lists::check_one(wording W) {
literal_list *ll = Lists::find_literal(incipit+1);
if (ll) Lists::kind_of_ll(ll, TRUE);
}
@ And this checks every list, with problem messages on:
=
void Lists::check(void) {
if (problem_count == 0) {
literal_list *ll;
LOOP_OVER(ll, literal_list)
Lists::kind_of_ll(ll, TRUE);
}
}

View file

@ -1,5 +1,5 @@
Size of lexicon: 3098 excerpt meanings
Stored among 840 words out of total vocabulary of 10562
Stored among 840 words out of total vocabulary of 10561
710 words have a start list: longest belongs to report (with 293 meanings)
15 words have an end list: longest belongs to case (with 6 meanings)
29 words have a middle list: longest belongs to to (with 4 meanings)