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:
parent
8c2ebbffd3
commit
f40c55ba53
|
@ -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
|
||||
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
Prerelease: alpha.1
|
||||
Build Date: 20 April 2021
|
||||
Build Number: 6R86
|
||||
Build Date: 21 April 2021
|
||||
Build Number: 6R87
|
||||
|
|
|
@ -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>§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">§2.11</a>, <a href="1-htc.html#SP2_13">§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">() > </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"> > </span><span class="constant-syntax">0</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">iterations</span><span class="plain-syntax"> > </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"> > </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">❮</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">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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">§2.1</a>, <a href="4-ll.html#SP3">§3</a><br/>Text Literals - <a href="4-tl.html#SP13_1">§13.1</a><br/>Text Substitutions - <a href="4-ts.html#SP11">§11</a><br/>Responses - <a href="4-rsp.html#SP5_1">§5.1</a>, <a href="4-rsp.html#SP6_3">§6.3</a><br/>Runtime Support for Kinds - <a href="5-rsfk.html#SP18_1">§18.1</a><br/>List Together - <a href="5-lt.html#SP3_1">§3.1</a><br/>Rules - <a href="5-rls.html#SP8_1_1">§8.1.1</a>, <a href="5-rls.html#SP12">§12</a><br/>Activities - <a href="5-act.html#SP2">§2</a><br/>Verbs at Run Time - <a href="5-vart.html#SP4">§4</a><br/>Relations at Run Time - <a href="5-rart.html#SP4_1">§4.1</a>, <a href="5-rart.html#SP5">§5</a>, <a href="5-rart.html#SP9">§9</a>, <a href="5-rart.html#SP9_3">§9.3</a><br/>Runtime Support for Tables - <a href="5-rsft.html#SP4_3">§4.3</a><br/>Chronology - <a href="5-chr.html#SP5">§5</a><br/>Naming - <a href="6-nmn.html#SP2">§2</a><br/>The Player - <a href="6-tp.html#SP1">§1</a><br/>The Map - <a href="6-tm.html#SP2_2">§2.2</a>, <a href="6-tm.html#SP3">§3</a><br/>Actions - <a href="7-act.html#SP1">§1</a><br/>Parsing - <a href="8-prs.html#SP2">§2</a><br/>Figures - <a href="9-fgr.html#SP1">§1</a><br/>Sound Effects - <a href="9-se.html#SP1">§1</a><br/>External Files - <a href="9-ef.html#SP1">§1</a><br/>Test Scripts - <a href="10-ts.html#SP3">§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">§1</a>, <a href="4-ll.html#SP2">§2</a><br/>Text Literals - <a href="4-tl.html#SP13_1">§13.1</a><br/>Text Substitutions - <a href="4-ts.html#SP11">§11</a><br/>Responses - <a href="4-rsp.html#SP5_1">§5.1</a>, <a href="4-rsp.html#SP6_3">§6.3</a><br/>Runtime Support for Kinds - <a href="5-rsfk.html#SP18_1">§18.1</a><br/>List Together - <a href="5-lt.html#SP3_1">§3.1</a><br/>Rules - <a href="5-rls.html#SP8_1_1">§8.1.1</a>, <a href="5-rls.html#SP12">§12</a><br/>Activities - <a href="5-act.html#SP2">§2</a><br/>Verbs at Run Time - <a href="5-vart.html#SP4">§4</a><br/>Relations at Run Time - <a href="5-rart.html#SP4_1">§4.1</a>, <a href="5-rart.html#SP5">§5</a>, <a href="5-rart.html#SP9">§9</a>, <a href="5-rart.html#SP9_3">§9.3</a><br/>Runtime Support for Tables - <a href="5-rsft.html#SP4_3">§4.3</a><br/>Chronology - <a href="5-chr.html#SP5">§5</a><br/>Naming - <a href="6-nmn.html#SP2">§2</a><br/>The Player - <a href="6-tp.html#SP1">§1</a><br/>The Map - <a href="6-tm.html#SP2_2">§2.2</a>, <a href="6-tm.html#SP3">§3</a><br/>Actions - <a href="7-act.html#SP1">§1</a><br/>Parsing - <a href="8-prs.html#SP2">§2</a><br/>Figures - <a href="9-fgr.html#SP1">§1</a><br/>Sound Effects - <a href="9-se.html#SP1">§1</a><br/>External Files - <a href="9-ef.html#SP1">§1</a><br/>Test Scripts - <a href="10-ts.html#SP3">§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">§1</a>, <a href="4-ll.html#SP3">§3</a><br/>Text Literals - <a href="4-tl.html#SP14">§14</a><br/>Text Substitutions - <a href="4-ts.html#SP7_1">§7.1</a><br/>Runtime Support for Kinds - <a href="5-rsfk.html#SP5">§5</a><br/>Action Patterns - <a href="7-ap.html#SP5">§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">§14</a><br/>Text Substitutions - <a href="4-ts.html#SP7_1">§7.1</a><br/>Runtime Support for Kinds - <a href="5-rsfk.html#SP5">§5</a><br/>Action Patterns - <a href="7-ap.html#SP5">§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">§1</a>, <a href="4-ll.html#SP2_1">§2.1</a>, <a href="4-ll.html#SP3">§3</a><br/>Responses - <a href="4-rsp.html#SP6_3">§6.3</a>, <a href="4-rsp.html#SP6_3_1_1">§6.3.1.1</a>, <a href="4-rsp.html#SP6_3_1_2">§6.3.1.2</a><br/>Runtime Support for Kinds - <a href="5-rsfk.html#SP5">§5</a>, <a href="5-rsfk.html#SP11">§11</a>, <a href="5-rsfk.html#SP18_1_1_1">§18.1.1.1</a>, <a href="5-rsfk.html#SP18_1_1_2">§18.1.1.2</a>, <a href="5-rsfk.html#SP22">§22</a><br/>Rules - <a href="5-rls.html#SP8_1_1">§8.1.1</a>, <a href="5-rls.html#SP8_1_2">§8.1.2</a>, <a href="5-rls.html#SP12">§12</a><br/>Activities - <a href="5-act.html#SP2">§2</a><br/>Verbs at Run Time - <a href="5-vart.html#SP4">§4</a><br/>Relations at Run Time - <a href="5-rart.html#SP4_1">§4.1</a>, <a href="5-rart.html#SP4_1_3">§4.1.3</a>, <a href="5-rart.html#SP5">§5</a>, <a href="5-rart.html#SP8">§8</a>, <a href="5-rart.html#SP9_2">§9.2</a>, <a href="5-rart.html#SP9_3">§9.3</a><br/>Runtime Support for Tables - <a href="5-rsft.html#SP4_1_1_1_1_3">§4.1.1.1.1.3</a>, <a href="5-rsft.html#SP4_1_1_1_1_4">§4.1.1.1.1.4</a>, <a href="5-rsft.html#SP4_2_3">§4.2.3</a>, <a href="5-rsft.html#SP4_3">§4.3</a><br/>Chronology - <a href="5-chr.html#SP5">§5</a><br/>The Player - <a href="6-tp.html#SP1">§1</a><br/>The Map - <a href="6-tm.html#SP2_2">§2.2</a><br/>Timed Rules - <a href="6-tr.html#SP1">§1</a><br/>Actions - <a href="7-act.html#SP1">§1</a>, <a href="7-act.html#SP2">§2</a><br/>Action Patterns - <a href="7-ap.html#SP5">§5</a><br/>Figures - <a href="9-fgr.html#SP1">§1</a><br/>Sound Effects - <a href="9-se.html#SP1">§1</a><br/>External Files - <a href="9-ef.html#SP1">§1</a><br/>Test Scripts - <a href="10-ts.html#SP3">§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">§1</a>, <a href="4-ll.html#SP2">§2</a>, <a href="4-ll.html#SP7_1">§7.1</a><br/>Responses - <a href="4-rsp.html#SP6_3">§6.3</a>, <a href="4-rsp.html#SP6_3_1_1">§6.3.1.1</a>, <a href="4-rsp.html#SP6_3_1_2">§6.3.1.2</a><br/>Runtime Support for Kinds - <a href="5-rsfk.html#SP5">§5</a>, <a href="5-rsfk.html#SP11">§11</a>, <a href="5-rsfk.html#SP18_1_1_1">§18.1.1.1</a>, <a href="5-rsfk.html#SP18_1_1_2">§18.1.1.2</a>, <a href="5-rsfk.html#SP22">§22</a><br/>Rules - <a href="5-rls.html#SP8_1_1">§8.1.1</a>, <a href="5-rls.html#SP8_1_2">§8.1.2</a>, <a href="5-rls.html#SP12">§12</a><br/>Activities - <a href="5-act.html#SP2">§2</a><br/>Verbs at Run Time - <a href="5-vart.html#SP4">§4</a><br/>Relations at Run Time - <a href="5-rart.html#SP4_1">§4.1</a>, <a href="5-rart.html#SP4_1_3">§4.1.3</a>, <a href="5-rart.html#SP5">§5</a>, <a href="5-rart.html#SP8">§8</a>, <a href="5-rart.html#SP9_2">§9.2</a>, <a href="5-rart.html#SP9_3">§9.3</a><br/>Runtime Support for Tables - <a href="5-rsft.html#SP4_1_1_1_1_3">§4.1.1.1.1.3</a>, <a href="5-rsft.html#SP4_1_1_1_1_4">§4.1.1.1.1.4</a>, <a href="5-rsft.html#SP4_2_3">§4.2.3</a>, <a href="5-rsft.html#SP4_3">§4.3</a><br/>Chronology - <a href="5-chr.html#SP5">§5</a><br/>The Player - <a href="6-tp.html#SP1">§1</a><br/>The Map - <a href="6-tm.html#SP2_2">§2.2</a><br/>Timed Rules - <a href="6-tr.html#SP1">§1</a><br/>Actions - <a href="7-act.html#SP1">§1</a>, <a href="7-act.html#SP2">§2</a><br/>Action Patterns - <a href="7-ap.html#SP5">§5</a><br/>Figures - <a href="9-fgr.html#SP1">§1</a><br/>Sound Effects - <a href="9-se.html#SP1">§1</a><br/>External Files - <a href="9-ef.html#SP1">§1</a><br/>Test Scripts - <a href="10-ts.html#SP3">§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">§1</a>, <a href="4-ll.html#SP3">§3</a><br/>Text Literals - <a href="4-tl.html#SP13_1">§13.1</a>, <a href="4-tl.html#SP14">§14</a><br/>Text Substitutions - <a href="4-ts.html#SP7_1">§7.1</a>, <a href="4-ts.html#SP11">§11</a><br/>Responses - <a href="4-rsp.html#SP5_1">§5.1</a>, <a href="4-rsp.html#SP6_3_1_1">§6.3.1.1</a><br/>Runtime Support for Kinds - <a href="5-rsfk.html#SP5">§5</a>, <a href="5-rsfk.html#SP11">§11</a>, <a href="5-rsfk.html#SP14">§14</a>, <a href="5-rsfk.html#SP22">§22</a><br/>List Together - <a href="5-lt.html#SP3_1">§3.1</a><br/>Rules - <a href="5-rls.html#SP12">§12</a><br/>Activities - <a href="5-act.html#SP2">§2</a><br/>Verbs at Run Time - <a href="5-vart.html#SP4">§4</a><br/>Relations at Run Time - <a href="5-rart.html#SP4_1_2">§4.1.2</a>, <a href="5-rart.html#SP4_1_2_1">§4.1.2.1</a>, <a href="5-rart.html#SP4_1_3">§4.1.3</a>, <a href="5-rart.html#SP4_1_6">§4.1.6</a>, <a href="5-rart.html#SP5">§5</a>, <a href="5-rart.html#SP9_2">§9.2</a><br/>Runtime Support for Tables - <a href="5-rsft.html#SP4_1_1_1">§4.1.1.1</a>, <a href="5-rsft.html#SP4_1_1_1_1_5">§4.1.1.1.1.5</a>, <a href="5-rsft.html#SP4_3">§4.3</a><br/>Chronology - <a href="5-chr.html#SP5">§5</a><br/>Naming - <a href="6-nmn.html#SP2">§2</a><br/>The Player - <a href="6-tp.html#SP1">§1</a><br/>The Map - <a href="6-tm.html#SP2_2">§2.2</a>, <a href="6-tm.html#SP3">§3</a><br/>Timed Rules - <a href="6-tr.html#SP1">§1</a><br/>Actions - <a href="7-act.html#SP2">§2</a>, <a href="7-act.html#SP3">§3</a><br/>Action Patterns - <a href="7-ap.html#SP5">§5</a><br/>Command Grammar Lines - <a href="8-cgl.html#SP2">§2</a>, <a href="8-cgl.html#SP5">§5</a>, <a href="8-cgl.html#SP7">§7</a>, <a href="8-cgl.html#SP10">§10</a><br/>Noun Filter Tokens - <a href="8-nft.html#SP3">§3</a><br/>External Files - <a href="9-ef.html#SP1">§1</a><br/>Test Scripts - <a href="10-ts.html#SP3">§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">§2</a>, <a href="4-ll.html#SP7_2">§7.2</a><br/>Text Literals - <a href="4-tl.html#SP13_1">§13.1</a>, <a href="4-tl.html#SP14">§14</a><br/>Text Substitutions - <a href="4-ts.html#SP7_1">§7.1</a>, <a href="4-ts.html#SP11">§11</a><br/>Responses - <a href="4-rsp.html#SP5_1">§5.1</a>, <a href="4-rsp.html#SP6_3_1_1">§6.3.1.1</a><br/>Runtime Support for Kinds - <a href="5-rsfk.html#SP5">§5</a>, <a href="5-rsfk.html#SP11">§11</a>, <a href="5-rsfk.html#SP14">§14</a>, <a href="5-rsfk.html#SP22">§22</a><br/>List Together - <a href="5-lt.html#SP3_1">§3.1</a><br/>Rules - <a href="5-rls.html#SP12">§12</a><br/>Activities - <a href="5-act.html#SP2">§2</a><br/>Verbs at Run Time - <a href="5-vart.html#SP4">§4</a><br/>Relations at Run Time - <a href="5-rart.html#SP4_1_2">§4.1.2</a>, <a href="5-rart.html#SP4_1_2_1">§4.1.2.1</a>, <a href="5-rart.html#SP4_1_3">§4.1.3</a>, <a href="5-rart.html#SP4_1_6">§4.1.6</a>, <a href="5-rart.html#SP5">§5</a>, <a href="5-rart.html#SP9_2">§9.2</a><br/>Runtime Support for Tables - <a href="5-rsft.html#SP4_1_1_1">§4.1.1.1</a>, <a href="5-rsft.html#SP4_1_1_1_1_5">§4.1.1.1.1.5</a>, <a href="5-rsft.html#SP4_3">§4.3</a><br/>Chronology - <a href="5-chr.html#SP5">§5</a><br/>Naming - <a href="6-nmn.html#SP2">§2</a><br/>The Player - <a href="6-tp.html#SP1">§1</a><br/>The Map - <a href="6-tm.html#SP2_2">§2.2</a>, <a href="6-tm.html#SP3">§3</a><br/>Timed Rules - <a href="6-tr.html#SP1">§1</a><br/>Actions - <a href="7-act.html#SP2">§2</a>, <a href="7-act.html#SP3">§3</a><br/>Action Patterns - <a href="7-ap.html#SP5">§5</a><br/>Command Grammar Lines - <a href="8-cgl.html#SP2">§2</a>, <a href="8-cgl.html#SP5">§5</a>, <a href="8-cgl.html#SP7">§7</a>, <a href="8-cgl.html#SP10">§10</a><br/>Noun Filter Tokens - <a href="8-nft.html#SP3">§3</a><br/>External Files - <a href="9-ef.html#SP1">§1</a><br/>Test Scripts - <a href="10-ts.html#SP3">§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">§1</a>, <a href="4-ll.html#SP2_1">§2.1</a>, <a href="4-ll.html#SP3">§3</a><br/>Text Literals - <a href="4-tl.html#SP13_1">§13.1</a>, <a href="4-tl.html#SP14">§14</a><br/>Text Substitutions - <a href="4-ts.html#SP7_1">§7.1</a>, <a href="4-ts.html#SP11">§11</a><br/>Responses - <a href="4-rsp.html#SP5_1">§5.1</a>, <a href="4-rsp.html#SP6_3">§6.3</a><br/>Runtime Support for Kinds - <a href="5-rsfk.html#SP5">§5</a>, <a href="5-rsfk.html#SP18_1">§18.1</a><br/>List Together - <a href="5-lt.html#SP3_1">§3.1</a><br/>Rules - <a href="5-rls.html#SP8_1_5">§8.1.5</a>, <a href="5-rls.html#SP12">§12</a><br/>Activities - <a href="5-act.html#SP2">§2</a><br/>Verbs at Run Time - <a href="5-vart.html#SP4">§4</a><br/>Relations at Run Time - <a href="5-rart.html#SP4_1">§4.1</a>, <a href="5-rart.html#SP4_1_2">§4.1.2</a>, <a href="5-rart.html#SP5">§5</a>, <a href="5-rart.html#SP9">§9</a>, <a href="5-rart.html#SP9_3">§9.3</a><br/>Runtime Support for Tables - <a href="5-rsft.html#SP4_1_1_1">§4.1.1.1</a>, <a href="5-rsft.html#SP4_1_1_1_1">§4.1.1.1.1</a>, <a href="5-rsft.html#SP4_2">§4.2</a>, <a href="5-rsft.html#SP4_3">§4.3</a><br/>Chronology - <a href="5-chr.html#SP5">§5</a><br/>Naming - <a href="6-nmn.html#SP2">§2</a><br/>The Player - <a href="6-tp.html#SP1">§1</a><br/>The Map - <a href="6-tm.html#SP2_2">§2.2</a>, <a href="6-tm.html#SP3">§3</a><br/>Timed Rules - <a href="6-tr.html#SP1">§1</a><br/>Actions - <a href="7-act.html#SP1">§1</a>, <a href="7-act.html#SP2">§2</a><br/>Action Patterns - <a href="7-ap.html#SP5">§5</a><br/>Parsing - <a href="8-prs.html#SP2">§2</a><br/>Command Grammars - <a href="8-cg.html#SP7">§7</a><br/>Figures - <a href="9-fgr.html#SP1">§1</a><br/>Sound Effects - <a href="9-se.html#SP1">§1</a><br/>External Files - <a href="9-ef.html#SP1">§1</a><br/>Test Scripts - <a href="10-ts.html#SP3">§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">§1</a>, <a href="4-ll.html#SP2">§2</a><br/>Text Literals - <a href="4-tl.html#SP13_1">§13.1</a>, <a href="4-tl.html#SP14">§14</a><br/>Text Substitutions - <a href="4-ts.html#SP7_1">§7.1</a>, <a href="4-ts.html#SP11">§11</a><br/>Responses - <a href="4-rsp.html#SP5_1">§5.1</a>, <a href="4-rsp.html#SP6_3">§6.3</a><br/>Runtime Support for Kinds - <a href="5-rsfk.html#SP5">§5</a>, <a href="5-rsfk.html#SP18_1">§18.1</a><br/>List Together - <a href="5-lt.html#SP3_1">§3.1</a><br/>Rules - <a href="5-rls.html#SP8_1_5">§8.1.5</a>, <a href="5-rls.html#SP12">§12</a><br/>Activities - <a href="5-act.html#SP2">§2</a><br/>Verbs at Run Time - <a href="5-vart.html#SP4">§4</a><br/>Relations at Run Time - <a href="5-rart.html#SP4_1">§4.1</a>, <a href="5-rart.html#SP4_1_2">§4.1.2</a>, <a href="5-rart.html#SP5">§5</a>, <a href="5-rart.html#SP9">§9</a>, <a href="5-rart.html#SP9_3">§9.3</a><br/>Runtime Support for Tables - <a href="5-rsft.html#SP4_1_1_1">§4.1.1.1</a>, <a href="5-rsft.html#SP4_1_1_1_1">§4.1.1.1.1</a>, <a href="5-rsft.html#SP4_2">§4.2</a>, <a href="5-rsft.html#SP4_3">§4.3</a><br/>Chronology - <a href="5-chr.html#SP5">§5</a><br/>Naming - <a href="6-nmn.html#SP2">§2</a><br/>The Player - <a href="6-tp.html#SP1">§1</a><br/>The Map - <a href="6-tm.html#SP2_2">§2.2</a>, <a href="6-tm.html#SP3">§3</a><br/>Timed Rules - <a href="6-tr.html#SP1">§1</a><br/>Actions - <a href="7-act.html#SP1">§1</a>, <a href="7-act.html#SP2">§2</a><br/>Action Patterns - <a href="7-ap.html#SP5">§5</a><br/>Parsing - <a href="8-prs.html#SP2">§2</a><br/>Command Grammars - <a href="8-cg.html#SP7">§7</a><br/>Figures - <a href="9-fgr.html#SP1">§1</a><br/>Sound Effects - <a href="9-se.html#SP1">§1</a><br/>External Files - <a href="9-ef.html#SP1">§1</a><br/>Test Scripts - <a href="10-ts.html#SP3">§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>
|
||||
|
|
|
@ -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">)-></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">§4</a>, <a href="2-emt.html#SP5">§5</a>, <a href="2-emt.html#SP7">§7</a>, <a href="2-emt.html#SP8">§8</a>, <a href="2-emt.html#SP9">§9</a>, <a href="2-emt.html#SP10">§10</a>, <a href="2-emt.html#SP11">§11</a>, <a href="2-emt.html#SP12">§12</a>, <a href="2-emt.html#SP14">§14</a>, <a href="2-emt.html#SP15">§15</a>, <a href="2-emt.html#SP16">§16</a>, <a href="2-emt.html#SP17">§17</a>, <a href="2-emt.html#SP19">§19</a>, <a href="2-emt.html#SP22">§22</a><br/>Hierarchy - <a href="2-hrr.html#SP1">§1</a>, <a href="2-hrr.html#SP2">§2</a>, <a href="2-hrr.html#SP9">§9</a>, <a href="2-hrr.html#SP11">§11</a>, <a href="2-hrr.html#SP12">§12</a>, <a href="2-hrr.html#SP13">§13</a>, <a href="2-hrr.html#SP14">§14</a>, <a href="2-hrr.html#SP15">§15</a>, <a href="2-hrr.html#SP16">§16</a>, <a href="2-hrr.html#SP17">§17</a>, <a href="2-hrr.html#SP19">§19</a>, <a href="2-hrr.html#SP20">§20</a>, <a href="2-hrr.html#SP21">§21</a>, <a href="2-hrr.html#SP22">§22</a>, <a href="2-hrr.html#SP23">§23</a>, <a href="2-hrr.html#SP24">§24</a>, <a href="2-hrr.html#SP25">§25</a><br/>Compilation Units - <a href="2-cu.html#SP2_1">§2.1</a><br/>Emit Code - <a href="2-ec.html#SP2">§2</a>, <a href="2-ec.html#SP3">§3</a>, <a href="2-ec.html#SP4">§4</a>, <a href="2-ec.html#SP5">§5</a>, <a href="2-ec.html#SP7">§7</a>, <a href="2-ec.html#SP8">§8</a>, <a href="2-ec.html#SP9">§9</a>, <a href="2-ec.html#SP10">§10</a>, <a href="2-ec.html#SP11">§11</a>, <a href="2-ec.html#SP12">§12</a>, <a href="2-ec.html#SP13">§13</a><br/>Emit Arrays - <a href="2-ea.html#SP4">§4</a>, <a href="2-ea.html#SP6">§6</a><br/>List Literals - <a href="4-ll.html#SP3">§3</a><br/>Text Substitutions - <a href="4-ts.html#SP11">§11</a><br/>Runtime Support for Kinds - <a href="5-rsfk.html#SP5">§5</a>, <a href="5-rsfk.html#SP6">§6</a>, <a href="5-rsfk.html#SP9">§9</a>, <a href="5-rsfk.html#SP26">§26</a><br/>Rules - <a href="5-rls.html#SP2">§2</a><br/>Variables - <a href="5-vrb.html#SP1">§1</a>, <a href="5-vrb.html#SP8">§8</a><br/>Relations at Run Time - <a href="5-rart.html#SP18">§18</a><br/>Command Grammars - <a href="8-cg.html#SP1">§1</a><br/>Command Grammar Lines - <a href="8-cgl.html#SP10">§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">§4</a>, <a href="2-emt.html#SP5">§5</a>, <a href="2-emt.html#SP7">§7</a>, <a href="2-emt.html#SP8">§8</a>, <a href="2-emt.html#SP9">§9</a>, <a href="2-emt.html#SP10">§10</a>, <a href="2-emt.html#SP11">§11</a>, <a href="2-emt.html#SP12">§12</a>, <a href="2-emt.html#SP14">§14</a>, <a href="2-emt.html#SP15">§15</a>, <a href="2-emt.html#SP16">§16</a>, <a href="2-emt.html#SP17">§17</a>, <a href="2-emt.html#SP19">§19</a>, <a href="2-emt.html#SP22">§22</a><br/>Hierarchy - <a href="2-hrr.html#SP1">§1</a>, <a href="2-hrr.html#SP2">§2</a>, <a href="2-hrr.html#SP9">§9</a>, <a href="2-hrr.html#SP11">§11</a>, <a href="2-hrr.html#SP12">§12</a>, <a href="2-hrr.html#SP13">§13</a>, <a href="2-hrr.html#SP14">§14</a>, <a href="2-hrr.html#SP15">§15</a>, <a href="2-hrr.html#SP16">§16</a>, <a href="2-hrr.html#SP17">§17</a>, <a href="2-hrr.html#SP19">§19</a>, <a href="2-hrr.html#SP20">§20</a>, <a href="2-hrr.html#SP21">§21</a>, <a href="2-hrr.html#SP22">§22</a>, <a href="2-hrr.html#SP23">§23</a>, <a href="2-hrr.html#SP24">§24</a>, <a href="2-hrr.html#SP25">§25</a><br/>Compilation Units - <a href="2-cu.html#SP2_1">§2.1</a><br/>Emit Code - <a href="2-ec.html#SP2">§2</a>, <a href="2-ec.html#SP3">§3</a>, <a href="2-ec.html#SP4">§4</a>, <a href="2-ec.html#SP5">§5</a>, <a href="2-ec.html#SP7">§7</a>, <a href="2-ec.html#SP8">§8</a>, <a href="2-ec.html#SP9">§9</a>, <a href="2-ec.html#SP10">§10</a>, <a href="2-ec.html#SP11">§11</a>, <a href="2-ec.html#SP12">§12</a>, <a href="2-ec.html#SP13">§13</a><br/>Emit Arrays - <a href="2-ea.html#SP4">§4</a>, <a href="2-ea.html#SP6">§6</a><br/>Text Substitutions - <a href="4-ts.html#SP11">§11</a><br/>Runtime Support for Kinds - <a href="5-rsfk.html#SP5">§5</a>, <a href="5-rsfk.html#SP6">§6</a>, <a href="5-rsfk.html#SP9">§9</a>, <a href="5-rsfk.html#SP26">§26</a><br/>Rules - <a href="5-rls.html#SP2">§2</a><br/>Variables - <a href="5-vrb.html#SP1">§1</a>, <a href="5-vrb.html#SP8">§8</a><br/>Relations at Run Time - <a href="5-rart.html#SP18">§18</a><br/>Command Grammars - <a href="8-cg.html#SP1">§1</a><br/>Command Grammar Lines - <a href="8-cgl.html#SP10">§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>
|
||||
|
||||
|
|
|
@ -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">§17</a><br/>Text Substitutions - <a href="4-ts.html#SP4">§4</a><br/>Responses - <a href="4-rsp.html#SP4">§4</a>, <a href="4-rsp.html#SP5_1">§5.1</a><br/>Runtime Support for Kinds - <a href="5-rsfk.html#SP15_1_1">§15.1.1</a>, <a href="5-rsfk.html#SP17">§17</a><br/>List Together - <a href="5-lt.html#SP2">§2</a><br/>Rules - <a href="5-rls.html#SP2">§2</a>, <a href="5-rls.html#SP11">§11</a>, <a href="5-rls.html#SP12">§12</a><br/>Activities - <a href="5-act.html#SP2">§2</a><br/>Equations Support - <a href="5-es.html#SP1">§1</a><br/>Measurements - <a href="5-msr.html#SP1">§1</a><br/>Instance Counting - <a href="5-ic.html#SP9">§9</a><br/>Adjectives - <a href="5-adj.html#SP2">§2</a>, <a href="5-adj.html#SP6">§6</a><br/>Verbs at Run Time - <a href="5-vart.html#SP2">§2</a><br/>Relations at Run Time - <a href="5-rart.html#SP1">§1</a>, <a href="5-rart.html#SP4_1_2">§4.1.2</a>, <a href="5-rart.html#SP9">§9</a>, <a href="5-rart.html#SP9_3">§9.3</a><br/>Runtime Support for Tables - <a href="5-rsft.html#SP2">§2</a>, <a href="5-rsft.html#SP3">§3</a><br/>Chronology - <a href="5-chr.html#SP2">§2</a><br/>Naming - <a href="6-nmn.html#SP2">§2</a><br/>Backdrops - <a href="6-bck.html#SP1">§1</a><br/>Regions - <a href="6-rgn.html#SP1">§1</a><br/>The Map - <a href="6-tm.html#SP1">§1</a>, <a href="6-tm.html#SP3">§3</a><br/>Actions - <a href="7-act.html#SP1">§1</a><br/>Named Action Patterns - <a href="7-nap.html#SP1">§1</a><br/>Parsing - <a href="8-prs.html#SP2">§2</a><br/>Command Grammars - <a href="8-cg.html#SP1">§1</a>, <a href="8-cg.html#SP7">§7</a><br/>Command Grammar Lines - <a href="8-cgl.html#SP2">§2</a>, <a href="8-cgl.html#SP7">§7</a><br/>Noun Filter Tokens - <a href="8-nft.html#SP2">§2</a><br/>General Parsing Routines - <a href="8-gpr.html#SP3">§3</a>, <a href="8-gpr.html#SP4">§4</a><br/>Looping Over Scope - <a href="8-los.html#SP2">§2</a><br/>Test Scripts - <a href="10-ts.html#SP2">§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">§17</a><br/>List Literals - <a href="4-ll.html#SP7">§7</a><br/>Text Substitutions - <a href="4-ts.html#SP4">§4</a><br/>Responses - <a href="4-rsp.html#SP4">§4</a>, <a href="4-rsp.html#SP5_1">§5.1</a><br/>Runtime Support for Kinds - <a href="5-rsfk.html#SP15_1_1">§15.1.1</a>, <a href="5-rsfk.html#SP17">§17</a><br/>List Together - <a href="5-lt.html#SP2">§2</a><br/>Rules - <a href="5-rls.html#SP2">§2</a>, <a href="5-rls.html#SP11">§11</a>, <a href="5-rls.html#SP12">§12</a><br/>Activities - <a href="5-act.html#SP2">§2</a><br/>Equations Support - <a href="5-es.html#SP1">§1</a><br/>Measurements - <a href="5-msr.html#SP1">§1</a><br/>Instance Counting - <a href="5-ic.html#SP9">§9</a><br/>Adjectives - <a href="5-adj.html#SP2">§2</a>, <a href="5-adj.html#SP6">§6</a><br/>Verbs at Run Time - <a href="5-vart.html#SP2">§2</a><br/>Relations at Run Time - <a href="5-rart.html#SP1">§1</a>, <a href="5-rart.html#SP4_1_2">§4.1.2</a>, <a href="5-rart.html#SP9">§9</a>, <a href="5-rart.html#SP9_3">§9.3</a><br/>Runtime Support for Tables - <a href="5-rsft.html#SP2">§2</a>, <a href="5-rsft.html#SP3">§3</a><br/>Chronology - <a href="5-chr.html#SP2">§2</a><br/>Naming - <a href="6-nmn.html#SP2">§2</a><br/>Backdrops - <a href="6-bck.html#SP1">§1</a><br/>Regions - <a href="6-rgn.html#SP1">§1</a><br/>The Map - <a href="6-tm.html#SP1">§1</a>, <a href="6-tm.html#SP3">§3</a><br/>Actions - <a href="7-act.html#SP1">§1</a><br/>Named Action Patterns - <a href="7-nap.html#SP1">§1</a><br/>Parsing - <a href="8-prs.html#SP2">§2</a><br/>Command Grammars - <a href="8-cg.html#SP1">§1</a>, <a href="8-cg.html#SP7">§7</a><br/>Command Grammar Lines - <a href="8-cgl.html#SP2">§2</a>, <a href="8-cgl.html#SP7">§7</a><br/>Noun Filter Tokens - <a href="8-nft.html#SP2">§2</a><br/>General Parsing Routines - <a href="8-gpr.html#SP3">§3</a>, <a href="8-gpr.html#SP4">§4</a><br/>Looping Over Scope - <a href="8-los.html#SP2">§2</a><br/>Test Scripts - <a href="10-ts.html#SP2">§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">§3</a><br/>Runtime Support for Kinds - <a href="5-rsfk.html#SP26">§26</a><br/>Actions - <a href="7-act.html#SP1">§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">§26</a><br/>Actions - <a href="7-act.html#SP1">§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">§18</a><br/>List Literals - <a href="4-ll.html#SP1">§1</a><br/>Text Literals - <a href="4-tl.html#SP6">§6</a>, <a href="4-tl.html#SP13_2">§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">§18</a><br/>List Literals - <a href="4-ll.html#SP4">§4</a><br/>Text Literals - <a href="4-tl.html#SP6">§6</a>, <a href="4-tl.html#SP13_2">§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">§1</a>, <a href="4-ll.html#SP3">§3</a><br/>Text Literals - <a href="4-tl.html#SP9_3_1">§9.3.1</a>, <a href="4-tl.html#SP13_2">§13.2</a>, <a href="4-tl.html#SP14">§14</a><br/>Text Substitutions - <a href="4-ts.html#SP7_1">§7.1</a><br/>Runtime Support for Kinds - <a href="5-rsfk.html#SP5">§5</a><br/>Action Patterns - <a href="7-ap.html#SP5">§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">§2</a><br/>Text Literals - <a href="4-tl.html#SP9_3_1">§9.3.1</a>, <a href="4-tl.html#SP13_2">§13.2</a>, <a href="4-tl.html#SP14">§14</a><br/>Text Substitutions - <a href="4-ts.html#SP7_1">§7.1</a><br/>Runtime Support for Kinds - <a href="5-rsfk.html#SP5">§5</a><br/>Action Patterns - <a href="7-ap.html#SP5">§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">§14</a><br/>Fundamental Constants - <a href="3-fc.html#SP1_1">§1.1</a>, <a href="3-fc.html#SP1_2">§1.2</a>, <a href="3-fc.html#SP2">§2</a><br/>Use Options - <a href="3-uo.html#SP1_3">§1.3</a><br/>Extensions - <a href="3-ext.html#SP1_1">§1.1</a>, <a href="3-ext.html#SP1_2">§1.2</a>, <a href="3-ext.html#SP1_3">§1.3</a><br/>List Literals - <a href="4-ll.html#SP3">§3</a><br/>Responses - <a href="4-rsp.html#SP6_3">§6.3</a><br/>Runtime Support for Kinds - <a href="5-rsfk.html#SP18_3">§18.3</a>, <a href="5-rsfk.html#SP26">§26</a>, <a href="5-rsfk.html#SP26_6_1">§26.6.1</a>, <a href="5-rsfk.html#SP26_6_2">§26.6.2</a>, <a href="5-rsfk.html#SP26_6_3">§26.6.3</a>, <a href="5-rsfk.html#SP26_6_4">§26.6.4</a>, <a href="5-rsfk.html#SP26_6_5">§26.6.5</a>, <a href="5-rsfk.html#SP26_6_6">§26.6.6</a>, <a href="5-rsfk.html#SP27">§27</a><br/>Rules - <a href="5-rls.html#SP2">§2</a>, <a href="5-rls.html#SP5">§5</a>, <a href="5-rls.html#SP7">§7</a>, <a href="5-rls.html#SP10">§10</a>, <a href="5-rls.html#SP12">§12</a>, <a href="5-rls.html#SP14">§14</a><br/>Activities - <a href="5-act.html#SP2">§2</a><br/>Variables - <a href="5-vrb.html#SP7_1">§7.1</a><br/>Properties - <a href="5-prp.html#SP5">§5</a><br/>Noun Identifiers - <a href="5-ni.html#SP1">§1</a><br/>Verbs at Run Time - <a href="5-vart.html#SP4">§4</a><br/>Relations at Run Time - <a href="5-rart.html#SP1">§1</a>, <a href="5-rart.html#SP3">§3</a>, <a href="5-rart.html#SP4">§4</a>, <a href="5-rart.html#SP6">§6</a><br/>Runtime Support for Tables - <a href="5-rsft.html#SP2">§2</a>, <a href="5-rsft.html#SP4_2">§4.2</a><br/>Chronology - <a href="5-chr.html#SP5">§5</a>, <a href="5-chr.html#SP6">§6</a>, <a href="5-chr.html#SP7">§7</a><br/>Naming - <a href="6-nmn.html#SP1">§1</a>, <a href="6-nmn.html#SP2">§2</a><br/>Bibliographic Data - <a href="6-bd.html#SP1_1">§1.1</a>, <a href="6-bd.html#SP1_2">§1.2</a>, <a href="6-bd.html#SP1_3">§1.3</a>, <a href="6-bd.html#SP1_4">§1.4</a>, <a href="6-bd.html#SP1_5">§1.5</a>, <a href="6-bd.html#SP2">§2</a><br/>Spatial - <a href="6-spt.html#SP1">§1</a><br/>The Player - <a href="6-tp.html#SP1">§1</a><br/>The Map - <a href="6-tm.html#SP2_1">§2.1</a>, <a href="6-tm.html#SP2_2">§2.2</a><br/>The Score - <a href="6-ts.html#SP1">§1</a><br/>Timed Rules - <a href="6-tr.html#SP1">§1</a><br/>Scenes - <a href="6-scn.html#SP2">§2</a>, <a href="6-scn.html#SP6">§6</a><br/>Actions - <a href="7-act.html#SP1">§1</a>, <a href="7-act.html#SP2">§2</a><br/>Command Grammars - <a href="8-cg.html#SP2">§2</a><br/>Command Grammar Lines - <a href="8-cgl.html#SP2">§2</a><br/>Tokens Parsing Values - <a href="8-tpv.html#SP1">§1</a><br/>External Files - <a href="9-ef.html#SP1">§1</a><br/>Showme Command - <a href="10-sc.html#SP2">§2</a><br/>Test Scripts - <a href="10-ts.html#SP3">§3</a><br/>Internal Test Cases - <a href="10-itc.html#SP4">§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">§14</a><br/>Fundamental Constants - <a href="3-fc.html#SP1_1">§1.1</a>, <a href="3-fc.html#SP1_2">§1.2</a>, <a href="3-fc.html#SP2">§2</a><br/>Use Options - <a href="3-uo.html#SP1_3">§1.3</a><br/>Extensions - <a href="3-ext.html#SP1_1">§1.1</a>, <a href="3-ext.html#SP1_2">§1.2</a>, <a href="3-ext.html#SP1_3">§1.3</a><br/>Responses - <a href="4-rsp.html#SP6_3">§6.3</a><br/>Runtime Support for Kinds - <a href="5-rsfk.html#SP18_3">§18.3</a>, <a href="5-rsfk.html#SP26">§26</a>, <a href="5-rsfk.html#SP26_6_1">§26.6.1</a>, <a href="5-rsfk.html#SP26_6_2">§26.6.2</a>, <a href="5-rsfk.html#SP26_6_3">§26.6.3</a>, <a href="5-rsfk.html#SP26_6_4">§26.6.4</a>, <a href="5-rsfk.html#SP26_6_5">§26.6.5</a>, <a href="5-rsfk.html#SP26_6_6">§26.6.6</a>, <a href="5-rsfk.html#SP27">§27</a><br/>Rules - <a href="5-rls.html#SP2">§2</a>, <a href="5-rls.html#SP5">§5</a>, <a href="5-rls.html#SP7">§7</a>, <a href="5-rls.html#SP10">§10</a>, <a href="5-rls.html#SP12">§12</a>, <a href="5-rls.html#SP14">§14</a><br/>Activities - <a href="5-act.html#SP2">§2</a><br/>Variables - <a href="5-vrb.html#SP7_1">§7.1</a><br/>Properties - <a href="5-prp.html#SP5">§5</a><br/>Noun Identifiers - <a href="5-ni.html#SP1">§1</a><br/>Verbs at Run Time - <a href="5-vart.html#SP4">§4</a><br/>Relations at Run Time - <a href="5-rart.html#SP1">§1</a>, <a href="5-rart.html#SP3">§3</a>, <a href="5-rart.html#SP4">§4</a>, <a href="5-rart.html#SP6">§6</a><br/>Runtime Support for Tables - <a href="5-rsft.html#SP2">§2</a>, <a href="5-rsft.html#SP4_2">§4.2</a><br/>Chronology - <a href="5-chr.html#SP5">§5</a>, <a href="5-chr.html#SP6">§6</a>, <a href="5-chr.html#SP7">§7</a><br/>Naming - <a href="6-nmn.html#SP1">§1</a>, <a href="6-nmn.html#SP2">§2</a><br/>Bibliographic Data - <a href="6-bd.html#SP1_1">§1.1</a>, <a href="6-bd.html#SP1_2">§1.2</a>, <a href="6-bd.html#SP1_3">§1.3</a>, <a href="6-bd.html#SP1_4">§1.4</a>, <a href="6-bd.html#SP1_5">§1.5</a>, <a href="6-bd.html#SP2">§2</a><br/>Spatial - <a href="6-spt.html#SP1">§1</a><br/>The Player - <a href="6-tp.html#SP1">§1</a><br/>The Map - <a href="6-tm.html#SP2_1">§2.1</a>, <a href="6-tm.html#SP2_2">§2.2</a><br/>The Score - <a href="6-ts.html#SP1">§1</a><br/>Timed Rules - <a href="6-tr.html#SP1">§1</a><br/>Scenes - <a href="6-scn.html#SP2">§2</a>, <a href="6-scn.html#SP6">§6</a><br/>Actions - <a href="7-act.html#SP1">§1</a>, <a href="7-act.html#SP2">§2</a><br/>Command Grammars - <a href="8-cg.html#SP2">§2</a><br/>Command Grammar Lines - <a href="8-cgl.html#SP2">§2</a><br/>Tokens Parsing Values - <a href="8-tpv.html#SP1">§1</a><br/>External Files - <a href="9-ef.html#SP1">§1</a><br/>Showme Command - <a href="10-sc.html#SP2">§2</a><br/>Test Scripts - <a href="10-ts.html#SP3">§3</a><br/>Internal Test Cases - <a href="10-itc.html#SP4">§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>
|
||||
|
|
|
@ -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>§1. </b>Literal lists arise from source text such as:
|
||||
<ul class="toc"><li><a href="4-ll.html#SP1">§1. Runtime representation</a></li><li><a href="4-ll.html#SP3">§3. Default values for list kinds</a></li><li><a href="4-ll.html#SP4">§4. Literals</a></li><li><a href="4-ll.html#SP6">§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>§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 ----------------> pointer ----------------> 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 ----------------> pointer ----------------> 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">§3</a>, <a href="4-ll.html#SP5_1">§5.1</a>, <a href="4-ll.html#SP7">§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">§3</a>, <a href="4-ll.html#SP5_1">§5.1</a>, <a href="4-ll.html#SP7">§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>§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">§4</a>, <a href="4-ll.html#SP7">§7</a><br/>Runtime Support for Kinds - <a href="5-rsfk.html#SP5">§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>§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"> ----> pointer ----------------> 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"> ----> pointer ----------------> 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">§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>§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">-></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">-></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">-></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>§2. </b>Using:
|
||||
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>§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">-></span><span class="identifier-syntax">list_compiled</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">ll</span><span class="plain-syntax">-></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">-></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">-></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">-></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>§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>§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">-></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">-></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">-></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">-></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">-></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">-></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">-></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">-></span><span class="identifier-syntax">llist_entry_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">ll</span><span class="plain-syntax">-></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">§2</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>§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">§5</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>§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">§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"> < </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"> <= </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">§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>§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">§6</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP6_2" class="paragraph-anchor"></a><b>§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">§6</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>§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"> < </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>§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"> <= </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">§7</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP7_2" class="paragraph-anchor"></a><b>§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">§7</a>.</li></ul>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="3-ext.html">❮</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">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
|
|
@ -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">§8</a>, <a href="5-ic.html#SP9">§9</a><br/>List Literals - <a href="4-ll.html#SP3">§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">§8</a>, <a href="5-ic.html#SP9">§9</a><br/>List Literals - <a href="4-ll.html#SP7_2">§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>
|
||||
|
|
|
@ -91,7 +91,7 @@ function togglePopup(material_id) {
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="plain-syntax">-></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">§2</a>, <a href="5-ins.html#SP4">§4</a><br/>List Literals - <a href="4-ll.html#SP3">§3</a><br/>Runtime Support for Kinds - <a href="5-rsfk.html#SP5">§5</a>, <a href="5-rsfk.html#SP26_3">§26.3</a><br/>Naming - <a href="6-nmn.html#SP2">§2</a><br/>The Player - <a href="6-tp.html#SP1">§1</a><br/>Backdrops - <a href="6-bck.html#SP2_1">§2.1</a><br/>Regions - <a href="6-rgn.html#SP2">§2</a><br/>The Map - <a href="6-tm.html#SP2_2">§2.2</a>, <a href="6-tm.html#SP3">§3</a>, <a href="6-tm.html#SP4">§4</a><br/>Action Patterns - <a href="7-ap.html#SP5">§5</a>, <a href="7-ap.html#SP6_1_1_1">§6.1.1.1</a><br/>Tokens Parsing Values - <a href="8-tpv.html#SP1_1">§1.1</a><br/>Test Scripts - <a href="10-ts.html#SP3">§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">§2</a>, <a href="5-ins.html#SP4">§4</a><br/>List Literals - <a href="4-ll.html#SP7_2">§7.2</a><br/>Runtime Support for Kinds - <a href="5-rsfk.html#SP5">§5</a>, <a href="5-rsfk.html#SP26_3">§26.3</a><br/>Naming - <a href="6-nmn.html#SP2">§2</a><br/>The Player - <a href="6-tp.html#SP1">§1</a><br/>Backdrops - <a href="6-bck.html#SP2_1">§2.1</a><br/>Regions - <a href="6-rgn.html#SP2">§2</a><br/>The Map - <a href="6-tm.html#SP2_2">§2.2</a>, <a href="6-tm.html#SP3">§3</a>, <a href="6-tm.html#SP4">§4</a><br/>Action Patterns - <a href="7-ap.html#SP5">§5</a>, <a href="7-ap.html#SP6_1_1_1">§6.1.1.1</a><br/>Tokens Parsing Values - <a href="8-tpv.html#SP1_1">§1.1</a><br/>Test Scripts - <a href="10-ts.html#SP3">§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">-></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>
|
||||
|
|
|
@ -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">§18.1.1</a>, <a href="5-rsfk.html#SP18_1_1_1">§18.1.1.1</a>, <a href="5-rsfk.html#SP18_1_1_2">§18.1.1.2</a><br/>List Literals - <a href="4-ll.html#SP2_1">§2.1</a>, <a href="4-ll.html#SP3">§3</a><br/>Relations at Run Time - <a href="5-rart.html#SP4_1_4">§4.1.4</a>, <a href="5-rart.html#SP5">§5</a><br/>Actions - <a href="7-act.html#SP2">§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">§18.1.1</a>, <a href="5-rsfk.html#SP18_1_1_1">§18.1.1.1</a>, <a href="5-rsfk.html#SP18_1_1_2">§18.1.1.2</a><br/>List Literals - <a href="4-ll.html#SP1">§1</a><br/>Relations at Run Time - <a href="5-rart.html#SP4_1_4">§4.1.4</a>, <a href="5-rart.html#SP5">§5</a><br/>Actions - <a href="7-act.html#SP2">§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">-></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">§5</a><br/>List Literals - <a href="4-ll.html#SP2_1">§2.1</a>, <a href="4-ll.html#SP3">§3</a><br/>Relations at Run Time - <a href="5-rart.html#SP4_1">§4.1</a>, <a href="5-rart.html#SP5">§5</a><br/>Action Patterns - <a href="7-ap.html#SP5">§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">§5</a><br/>List Literals - <a href="4-ll.html#SP1">§1</a><br/>Relations at Run Time - <a href="5-rart.html#SP4_1">§4.1</a>, <a href="5-rart.html#SP5">§5</a><br/>Action Patterns - <a href="7-ap.html#SP5">§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>
|
||||
|
|
|
@ -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">§2</a>, <a href="3-ll.html#SP9">§9</a>, <a href="3-ll.html#SP10">§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">§2</a>, <a href="3-ll.html#SP9">§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">-></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 —
|
|||
<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>§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">❮</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">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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");
|
||||
}
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in a new issue