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

Simplified inter names further

This commit is contained in:
Graham Nelson 2019-04-18 01:53:27 +01:00
parent 4f267ab64c
commit 00f98e0c5a
44 changed files with 713 additions and 704 deletions

View file

@ -113,10 +113,8 @@
<span class="definitionkeyword">enum</span> <span class="constant">dval_written_MT</span>
<span class="definitionkeyword">enum</span> <span class="constant">nascent_array_MT</span>
<span class="definitionkeyword">enum</span> <span class="constant">value_holster_array_MT</span>
<span class="definitionkeyword">enum</span> <span class="constant">inter_namespace_MT</span>
<span class="definitionkeyword">enum</span> <span class="constant">inter_name_MT</span>
<span class="definitionkeyword">enum</span> <span class="constant">inter_name_family_MT</span>
<span class="definitionkeyword">enum</span> <span class="constant">inter_name_consumption_token_MT</span>
<span class="definitionkeyword">enum</span> <span class="constant">inter_name_array_MT</span>
<span class="definitionkeyword">enum</span> <span class="constant">inter_name_generator_array_MT</span>
<span class="definitionkeyword">enum</span> <span class="constant">adjective_iname_holder_MT</span>
<span class="definitionkeyword">enum</span> <span class="constant">compilation_module_MT</span>
<span class="definitionkeyword">enum</span> <span class="constant">inter_schema_MT</span>
@ -160,10 +158,6 @@
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">implication</span><span class="plain">)</span>
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">inference_subject</span><span class="plain">)</span>
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">instance</span><span class="plain">)</span>
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">inter_namespace</span><span class="plain">)</span>
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">inter_name</span><span class="plain">)</span>
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">inter_name_family</span><span class="plain">)</span>
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">inter_name_consumption_token</span><span class="plain">)</span>
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">internal_test_case</span><span class="plain">)</span>
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">inv_token_problem_token</span><span class="plain">)</span>
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">kind_interaction</span><span class="plain">)</span>
@ -231,6 +225,8 @@
<span class="identifier">ALLOCATE_IN_ARRAYS</span><span class="plain">(</span><span class="reserved">i6_schema</span><span class="plain">, 100)</span>
<span class="identifier">ALLOCATE_IN_ARRAYS</span><span class="plain">(</span><span class="reserved">inference</span><span class="plain">, 100)</span>
<span class="identifier">ALLOCATE_IN_ARRAYS</span><span class="plain">(</span><span class="reserved">instance_usage</span><span class="plain">, 200)</span>
<span class="identifier">ALLOCATE_IN_ARRAYS</span><span class="plain">(</span><span class="reserved">inter_name</span><span class="plain">, 1000)</span>
<span class="identifier">ALLOCATE_IN_ARRAYS</span><span class="plain">(</span><span class="reserved">inter_name_generator</span><span class="plain">, 1000)</span>
<span class="identifier">ALLOCATE_IN_ARRAYS</span><span class="plain">(</span><span class="reserved">invocation_options</span><span class="plain">, 100)</span>
<span class="identifier">ALLOCATE_IN_ARRAYS</span><span class="plain">(</span><span class="reserved">local_variable</span><span class="plain">, 100)</span>
<span class="identifier">ALLOCATE_IN_ARRAYS</span><span class="plain">(</span><span class="reserved">pcalc_func</span><span class="plain">, 1000)</span>

View file

@ -91,6 +91,8 @@ error.
</pre>
<pre class="display">
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">unique_qi_counter</span><span class="plain"> = 0;</span>
<span class="reserved">i6_schema</span><span class="plain"> *</span><span class="functiontext">Calculus::Schemas::new</span><span class="plain">(</span><span class="reserved">char</span><span class="plain"> *</span><span class="identifier">fmt</span><span class="plain">, ...) {</span>
<span class="identifier">va_list</span><span class="plain"> </span><span class="identifier">ap</span><span class="plain">; </span> <span class="comment">the variable argument list signified by the dots</span>
<span class="reserved">i6_schema</span><span class="plain"> *</span><span class="identifier">sch</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">i6_schema</span><span class="plain">);</span>
@ -191,7 +193,7 @@ an integer; <code class="display"><span class="extract">%s</span></code>, a C st
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">N</span><span class="plain"> = </span><span class="identifier">sch</span><span class="plain">-</span><span class="element">&gt;no_quoted_inames</span><span class="plain">++;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">N</span><span class="plain"> &gt;= 2) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"too many inter_name quotes"</span><span class="plain">);</span>
<span class="identifier">sch</span><span class="plain">-</span><span class="element">&gt;quoted_inames</span><span class="plain">[</span><span class="identifier">N</span><span class="plain">] = </span><span class="identifier">iname</span><span class="plain">;</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"QUOTED_INAME_%d_%08x"</span><span class="plain">, </span><span class="identifier">N</span><span class="plain">, </span><span class="identifier">iname</span><span class="plain">-&gt;</span><span class="identifier">allocation_id</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"QUOTED_INAME_%d_%08x"</span><span class="plain">, </span><span class="identifier">N</span><span class="plain">, </span><span class="identifier">unique_qi_counter</span><span class="plain">++);</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">case</span><span class="plain"> </span><span class="character">'N'</span><span class="plain">: </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%N"</span><span class="plain">, </span><span class="identifier">va_arg</span><span class="plain">(</span><span class="identifier">ap</span><span class="plain">, </span><span class="reserved">int</span><span class="plain">)); </span><span class="reserved">break</span><span class="plain">;</span>

View file

@ -1218,7 +1218,7 @@ each such kind, and needed at run-time.
<pre class="display">
<span class="reserved">package_request</span><span class="plain"> *</span><span class="functiontext">Kinds::RunTime::package</span><span class="plain">(</span><span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">K</span><span class="plain">) {</span>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain"> = </span><span class="functiontext">Kinds::RunTime::iname</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;eventual_owner</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">Packaging::home_of</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>

View file

@ -84,7 +84,7 @@
<p class="inwebparagraph"></p>
<p class="endnote">The function Holsters::data_acceptable is used in 13/rsfk (<a href="13-rsfk.html#SP4">&#167;4</a>), 14/rv (<a href="14-rv.html#SP24_1">&#167;24.1</a>, <a href="14-rv.html#SP24_2">&#167;24.2</a>, <a href="14-rv.html#SP24_3">&#167;24.3</a>, <a href="14-rv.html#SP24_3_1">&#167;24.3.1</a>), 15/ep (<a href="15-ep.html#SP11">&#167;11</a>), 15/vp (<a href="15-vp.html#SP11">&#167;11</a>), 17/ts (<a href="17-ts.html#SP8">&#167;8</a>, <a href="17-ts.html#SP8_1">&#167;8.1</a>), 17/rs (<a href="17-rs.html#SP5">&#167;5</a>, <a href="17-rs.html#SP12">&#167;12</a>, <a href="17-rs.html#SP12_1_1">&#167;12.1.1</a>), 27/in (<a href="27-in.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Holsters::data_acceptable is used in 13/rsfk (<a href="13-rsfk.html#SP4">&#167;4</a>), 14/rv (<a href="14-rv.html#SP24_1">&#167;24.1</a>, <a href="14-rv.html#SP24_2">&#167;24.2</a>, <a href="14-rv.html#SP24_3">&#167;24.3</a>, <a href="14-rv.html#SP24_3_1">&#167;24.3.1</a>), 15/ep (<a href="15-ep.html#SP11">&#167;11</a>), 15/vp (<a href="15-vp.html#SP11">&#167;11</a>), 17/ts (<a href="17-ts.html#SP8">&#167;8</a>, <a href="17-ts.html#SP8_1">&#167;8.1</a>), 17/rs (<a href="17-rs.html#SP5">&#167;5</a>, <a href="17-rs.html#SP12">&#167;12</a>, <a href="17-rs.html#SP12_1_1">&#167;12.1.1</a>), 27/in (<a href="27-in.html#SP8">&#167;8</a>).</p>
<p class="endnote">The function Holsters::to_val_mode is used in 5/nv (<a href="5-nv.html#SP25">&#167;25</a>), 13/rsfk (<a href="13-rsfk.html#SP4">&#167;4</a>), 14/cfs (<a href="14-cfs.html#SP7">&#167;7</a>).</p>
@ -112,7 +112,7 @@
<p class="inwebparagraph"></p>
<p class="endnote">The function Holsters::holster_pair is used in 5/nv (<a href="5-nv.html#SP25_1">&#167;25.1</a>), 13/rsfk (<a href="13-rsfk.html#SP4">&#167;4</a>), 14/rv (<a href="14-rv.html#SP24_1">&#167;24.1</a>, <a href="14-rv.html#SP24_3">&#167;24.3</a>), 15/ep (<a href="15-ep.html#SP11">&#167;11</a>), 15/vp (<a href="15-vp.html#SP11">&#167;11</a>), 17/rs (<a href="17-rs.html#SP12">&#167;12</a>), 27/in (<a href="27-in.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Holsters::holster_pair is used in 5/nv (<a href="5-nv.html#SP25_1">&#167;25.1</a>), 13/rsfk (<a href="13-rsfk.html#SP4">&#167;4</a>), 14/rv (<a href="14-rv.html#SP24_1">&#167;24.1</a>, <a href="14-rv.html#SP24_3">&#167;24.3</a>), 15/ep (<a href="15-ep.html#SP11">&#167;11</a>), 15/vp (<a href="15-vp.html#SP11">&#167;11</a>), 17/rs (<a href="17-rs.html#SP12">&#167;12</a>), 27/in (<a href="27-in.html#SP8">&#167;8</a>).</p>
<p class="endnote">The function Holsters::unholster_pair is used in 5/nv (<a href="5-nv.html#SP16">&#167;16</a>, <a href="5-nv.html#SP25">&#167;25</a>), 13/rsfk (<a href="13-rsfk.html#SP4">&#167;4</a>), 14/cfs (<a href="14-cfs.html#SP9">&#167;9</a>), 15/epv (<a href="15-epv.html#SP2_1">&#167;2.1</a>), 26/iti (<a href="26-iti.html#SP9">&#167;9</a>).</p>

View file

@ -245,12 +245,22 @@ since Inform always compiles code which knows which kind it's looping over.
<pre class="display">
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="functiontext">PL::Counting::first_instance</span><span class="plain">(</span><span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">K</span><span class="plain">) {</span>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain"> = </span><span class="functiontext">Hierarchy::derive_iname_in</span><span class="plain">(</span><span class="constant">FIRST_INSTANCE_HL</span><span class="plain">, </span><span class="functiontext">Kinds::RunTime::iname</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">), </span><span class="identifier">Kinds::Behaviour::package</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">));</span>
<span class="identifier">kind_constructor</span><span class="plain"> *</span><span class="identifier">con</span><span class="plain"> = </span><span class="identifier">Kinds::get_construct</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">);</span>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain"> = </span><span class="identifier">Kinds::Constructors::first_instance_iname</span><span class="plain">(</span><span class="identifier">con</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">iname</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
<span class="identifier">iname</span><span class="plain"> = </span><span class="functiontext">Hierarchy::derive_iname_in</span><span class="plain">(</span><span class="constant">FIRST_INSTANCE_HL</span><span class="plain">, </span><span class="functiontext">Kinds::RunTime::iname</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">), </span><span class="identifier">Kinds::Behaviour::package</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">));</span>
<span class="identifier">Kinds::Constructors::set_first_instance_iname</span><span class="plain">(</span><span class="identifier">con</span><span class="plain">, </span><span class="identifier">iname</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">iname</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="functiontext">PL::Counting::next_instance</span><span class="plain">(</span><span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">K</span><span class="plain">) {</span>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain"> = </span><span class="functiontext">Hierarchy::derive_iname_in</span><span class="plain">(</span><span class="constant">NEXT_INSTANCE_HL</span><span class="plain">, </span><span class="functiontext">Kinds::RunTime::iname</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">), </span><span class="identifier">Kinds::Behaviour::package</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">));</span>
<span class="identifier">kind_constructor</span><span class="plain"> *</span><span class="identifier">con</span><span class="plain"> = </span><span class="identifier">Kinds::get_construct</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">);</span>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain"> = </span><span class="identifier">Kinds::Constructors::next_instance_iname</span><span class="plain">(</span><span class="identifier">con</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">iname</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
<span class="identifier">iname</span><span class="plain"> = </span><span class="functiontext">Hierarchy::derive_iname_in</span><span class="plain">(</span><span class="constant">NEXT_INSTANCE_HL</span><span class="plain">, </span><span class="functiontext">Kinds::RunTime::iname</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">), </span><span class="identifier">Kinds::Behaviour::package</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">));</span>
<span class="identifier">Kinds::Constructors::set_next_instance_iname</span><span class="plain">(</span><span class="identifier">con</span><span class="plain">, </span><span class="identifier">iname</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">iname</span><span class="plain">;</span>
<span class="plain">}</span>

View file

@ -430,7 +430,7 @@ text for the response than the one we first created.
<span class="plain">}</span>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">ts_iname</span><span class="plain"> = </span><span class="functiontext">Strings::TextSubstitutions::text_substitution_iname</span><span class="plain">(</span><span class="identifier">ts</span><span class="plain">);</span>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">rc_iname</span><span class="plain"> = </span><span class="functiontext">Strings::response_constant_iname</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">, </span><span class="identifier">marker</span><span class="plain">);</span>
<span class="reserved">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="functiontext">Packaging::enter</span><span class="plain">(</span><span class="identifier">rc_iname</span><span class="plain">-</span><span class="element">&gt;eventual_owner</span><span class="plain">);</span>
<span class="reserved">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="functiontext">Packaging::enter_home_of</span><span class="plain">(</span><span class="identifier">rc_iname</span><span class="plain">);</span>
<span class="functiontext">Emit::response</span><span class="plain">(</span><span class="identifier">rc_iname</span><span class="plain">, </span><span class="identifier">R</span><span class="plain">, </span><span class="identifier">marker</span><span class="plain">, </span><span class="identifier">ts_iname</span><span class="plain">);</span>
<span class="functiontext">Packaging::exit</span><span class="plain">(</span><span class="identifier">save</span><span class="plain">);</span>
<span class="plain">}</span>

View file

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

View file

@ -610,13 +610,13 @@ response to "requests". All other phrases are compiled just once.
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">effect</span><span class="plain"> = </span><span class="functiontext">Phrases::Usage::get_effect</span><span class="plain">(&amp;(</span><span class="identifier">ph</span><span class="plain">-</span><span class="element">&gt;usage_data</span><span class="plain">));</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">effect</span><span class="plain"> == </span><span class="constant">RULE_NOT_IN_RULEBOOK_EFF</span><span class="plain">) </span><span class="identifier">effect</span><span class="plain"> = </span><span class="constant">RULE_IN_RULEBOOK_EFF</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">effect</span><span class="plain"> == </span><span class="constant">TO_PHRASE_EFF</span><span class="plain">) {</span>
<span class="reserved">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="functiontext">Packaging::enter</span><span class="plain">(</span><span class="identifier">req</span><span class="plain">-</span><span class="element">&gt;req_iname</span><span class="plain">-</span><span class="element">&gt;eventual_owner</span><span class="plain">);</span>
<span class="reserved">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="functiontext">Packaging::enter_home_of</span><span class="plain">(</span><span class="identifier">req</span><span class="plain">-</span><span class="element">&gt;req_iname</span><span class="plain">);</span>
<span class="functiontext">Routines::Compile::routine</span><span class="plain">(</span><span class="identifier">ph</span><span class="plain">, </span><span class="identifier">legible</span><span class="plain">, </span><span class="identifier">req</span><span class="plain">, </span><span class="identifier">acl</span><span class="plain">);</span>
<span class="functiontext">Packaging::exit</span><span class="plain">(</span><span class="identifier">save</span><span class="plain">);</span>
&lt;<span class="cwebmacro">Move along the progress bar if it's this phrase's first compilation</span> <span class="cwebmacronumber">12.1</span>&gt;<span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ph</span><span class="plain">-</span><span class="element">&gt;at_least_one_compiled_form_needed</span><span class="plain">) {</span>
<span class="reserved">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="functiontext">Packaging::enter</span><span class="plain">(</span><span class="functiontext">Phrases::iname</span><span class="plain">(</span><span class="identifier">ph</span><span class="plain">)-</span><span class="element">&gt;eventual_owner</span><span class="plain">);</span>
<span class="reserved">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="functiontext">Packaging::enter_home_of</span><span class="plain">(</span><span class="functiontext">Phrases::iname</span><span class="plain">(</span><span class="identifier">ph</span><span class="plain">));</span>
<span class="functiontext">Routines::Compile::routine</span><span class="plain">(</span><span class="identifier">ph</span><span class="plain">, </span><span class="identifier">legible</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">acl</span><span class="plain">);</span>
<span class="functiontext">Packaging::exit</span><span class="plain">(</span><span class="identifier">save</span><span class="plain">);</span>
&lt;<span class="cwebmacro">Move along the progress bar if it's this phrase's first compilation</span> <span class="cwebmacronumber">12.1</span>&gt;<span class="plain">;</span>

View file

@ -36,7 +36,6 @@ generates labels <code class="display"><span class="extract">L_0</span></code>,
<pre class="display">
<span class="reserved">typedef</span><span class="plain"> </span><span class="reserved">struct</span><span class="plain"> </span><span class="reserved">label_namespace</span><span class="plain"> {</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">base_prefix</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">label_prefix</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">label_counter</span><span class="plain">; </span> <span class="comment">next free ID number for this label namespace</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">allocate_storage</span><span class="plain">; </span> <span class="comment">number of words of memory to reserve for each label</span>
@ -63,9 +62,7 @@ reserves no memory.
<span class="string">"a label namespace prefix is too long"</span><span class="plain">,</span>
<span class="string">"and should be shortened to a few alphabetic characters."</span><span class="plain">);</span>
<span class="reserved">label_namespace</span><span class="plain"> *</span><span class="identifier">lns</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">label_namespace</span><span class="plain">);</span>
<span class="identifier">lns</span><span class="plain">-</span><span class="element">&gt;base_prefix</span><span class="plain"> = </span><span class="identifier">Str::duplicate</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">);</span>
<span class="identifier">lns</span><span class="plain">-</span><span class="element">&gt;label_prefix</span><span class="plain"> = </span><span class="identifier">Str::new</span><span class="plain">();</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">lns</span><span class="plain">-</span><span class="element">&gt;label_prefix</span><span class="plain">, </span><span class="string">"%S%S"</span><span class="plain">, </span><span class="identifier">cm</span><span class="plain">-</span><span class="element">&gt;namespace</span><span class="plain">-</span><span class="element">&gt;namespace_prefix</span><span class="plain">, </span><span class="identifier">name</span><span class="plain">);</span>
<span class="identifier">lns</span><span class="plain">-</span><span class="element">&gt;label_prefix</span><span class="plain"> = </span><span class="identifier">Str::duplicate</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">);</span>
<span class="reserved">package_request</span><span class="plain"> *</span><span class="identifier">PR2</span><span class="plain"> = </span><span class="functiontext">Hierarchy::synoptic_package</span><span class="plain">(</span><span class="constant">LABEL_STORAGES_HAP</span><span class="plain">);</span>
<span class="identifier">lns</span><span class="plain">-</span><span class="element">&gt;label_storage_iname</span><span class="plain"> = </span><span class="functiontext">Hierarchy::make_iname_in</span><span class="plain">(</span><span class="constant">LABEL_ASSOCIATED_STORAGE_HL</span><span class="plain">, </span><span class="identifier">PR2</span><span class="plain">);</span>
@ -91,7 +88,7 @@ optimising.
<span class="reserved">label_namespace</span><span class="plain"> *</span><span class="functiontext">JumpLabels::namespace_by_prefix</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">, </span><span class="reserved">compilation_module</span><span class="plain"> *</span><span class="identifier">cm</span><span class="plain">) {</span>
<span class="reserved">label_namespace</span><span class="plain"> *</span><span class="identifier">lns</span><span class="plain">;</span>
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">lns</span><span class="plain">, </span><span class="reserved">label_namespace</span><span class="plain">)</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">lns</span><span class="plain">-</span><span class="element">&gt;module</span><span class="plain"> == </span><span class="identifier">cm</span><span class="plain">) &amp;&amp; (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">lns</span><span class="plain">-</span><span class="element">&gt;base_prefix</span><span class="plain">)))</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">lns</span><span class="plain">-</span><span class="element">&gt;module</span><span class="plain"> == </span><span class="identifier">cm</span><span class="plain">) &amp;&amp; (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">lns</span><span class="plain">-</span><span class="element">&gt;label_prefix</span><span class="plain">)))</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">lns</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="plain">}</span>
@ -175,9 +172,6 @@ specification <code class="display"><span class="extract">--&gt; 0</span></code>
<span class="functiontext">Packaging::exit</span><span class="plain">(</span><span class="identifier">save</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">JumpLabels::reset</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
@ -186,8 +180,6 @@ specification <code class="display"><span class="extract">--&gt; 0</span></code>
<p class="endnote">The function JumpLabels::compile_necessary_storage is used in 1/mr (<a href="1-mr.html#SP4_14">&#167;4.14</a>).</p>
<p class="endnote">The function JumpLabels::reset is used in 26/rt (<a href="26-rt.html#SP3">&#167;3</a>).</p>
<hr class="tocbar">
<ul class="toc"><li><a href="26-lt.html">Back to 'List Together'</a></li><li><a href="26-ct.html">Continue with 'Compiled Text'</a></li></ul><hr class="tocbar">
<!--End of weave-->

View file

@ -61,14 +61,13 @@ we need to keep track of:
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Routines::begin_framed</span><span class="plain">(</span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain">, </span><span class="reserved">ph_stack_frame</span><span class="plain"> *</span><span class="identifier">phsf</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">iname</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"no iname for routine"</span><span class="plain">);</span>
<span class="reserved">package_request</span><span class="plain"> *</span><span class="identifier">R</span><span class="plain"> = </span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;eventual_owner</span><span class="plain">;</span>
<span class="reserved">package_request</span><span class="plain"> *</span><span class="identifier">R</span><span class="plain"> = </span><span class="functiontext">Packaging::home_of</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">R</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) || (</span><span class="identifier">R</span><span class="plain"> == </span><span class="functiontext">Hierarchy::main</span><span class="plain">())) {</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"Routine outside of package: ................................................ %n\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">iname</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">STDERR</span><span class="plain">, </span><span class="string">"Routine outside of package: %n\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">iname</span><span class="plain">);</span>
<span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"routine outside of package"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="identifier">currently_compiling_iname</span><span class="plain"> = </span><span class="identifier">iname</span><span class="plain">;</span>
<span class="functiontext">JumpLabels::reset</span><span class="plain">();</span>
&lt;<span class="cwebmacro">Prepare a suitable stack frame</span> <span class="cwebmacronumber">3.1</span>&gt;<span class="plain">;</span>
@ -131,7 +130,7 @@ create a new nonphrasal stack frame.
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">currently_compiling_in_frame</span><span class="plain">-</span><span class="element">&gt;allocated_pointers</span><span class="plain">) ||</span>
<span class="plain">(</span><span class="identifier">currently_compiling_in_frame</span><span class="plain">-</span><span class="element">&gt;no_formal_parameters_needed</span><span class="plain"> &gt; 0)) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Packaging::houseed_in_function</span><span class="plain">(</span><span class="identifier">public_name</span><span class="plain">)) {</span>
<span class="identifier">kernel_name</span><span class="plain"> = </span><span class="functiontext">Hierarchy::make_kernel_iname</span><span class="plain">(</span><span class="identifier">public_name</span><span class="plain">-</span><span class="element">&gt;eventual_owner</span><span class="plain">);</span>
<span class="identifier">kernel_name</span><span class="plain"> = </span><span class="functiontext">Hierarchy::make_kernel_iname</span><span class="plain">(</span><span class="functiontext">Packaging::home_of</span><span class="plain">(</span><span class="identifier">public_name</span><span class="plain">));</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"routine not housed in function"</span><span class="plain">);</span>
<span class="plain">}</span>

View file

@ -14,10 +14,10 @@
<pre class="display">
<span class="reserved">typedef</span><span class="plain"> </span><span class="reserved">struct</span><span class="plain"> </span><span class="reserved">compilation_module</span><span class="plain"> {</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inter_namespace</span><span class="plain"> *</span><span class="identifier">namespace</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">package_request</span><span class="plain"> *</span><span class="identifier">resources</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">submodule_requests</span><span class="plain"> </span><span class="identifier">subpackages</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">hanging_from</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">abbreviation</span><span class="plain">;</span>
<span class="identifier">MEMORY_MANAGEMENT</span>
<span class="plain">} </span><span class="reserved">compilation_module</span><span class="plain">;</span>
@ -27,7 +27,7 @@
<p class="inwebparagraph"></p>
<p class="endnote">The structure compilation_module is accessed in 26/jl, 27/pc, 27/in and here.</p>
<p class="endnote">The structure compilation_module is accessed in 27/pc and here.</p>
<p class="inwebparagraph"><a id="SP2"></a><b>&#167;2. </b></p>
@ -61,18 +61,14 @@
<span class="reserved">compilation_module</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">compilation_module</span><span class="plain">);</span>
<span class="identifier">C</span><span class="plain">-</span><span class="element">&gt;hanging_from</span><span class="plain"> = </span><span class="identifier">from</span><span class="plain">;</span>
<span class="identifier">C</span><span class="plain">-</span><span class="element">&gt;resources</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">C</span><span class="plain">-&gt;</span><span class="identifier">allocation_id</span><span class="plain"> == 0) </span><span class="identifier">C</span><span class="plain">-</span><span class="element">&gt;namespace</span><span class="plain"> = </span><span class="functiontext">InterNames::root</span><span class="plain">();</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">C</span><span class="plain">-&gt;</span><span class="identifier">allocation_id</span><span class="plain"> == 0) </span><span class="identifier">C</span><span class="plain">-</span><span class="element">&gt;abbreviation</span><span class="plain"> = </span><span class="identifier">I</span><span class="string">"root"</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> {</span>
<span class="identifier">C</span><span class="plain">-</span><span class="element">&gt;abbreviation</span><span class="plain"> = </span><span class="identifier">Str::new</span><span class="plain">();</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">from</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"unlocated CM"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Modules::markable</span><span class="plain">(</span><span class="identifier">from</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"inappropriate CM"</span><span class="plain">);</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">pfx</span><span class="plain">);</span>
<span class="reserved">char</span><span class="plain"> *</span><span class="identifier">x</span><span class="plain"> = </span><span class="string">""</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">C</span><span class="plain">-&gt;</span><span class="identifier">allocation_id</span><span class="plain"> == 1) &amp;&amp; (</span><span class="identifier">export_mode</span><span class="plain">)) </span><span class="identifier">x</span><span class="plain"> = </span><span class="string">"x"</span><span class="plain">;</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">pfx</span><span class="plain">, </span><span class="string">"m%s%d"</span><span class="plain">, </span><span class="identifier">x</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">-&gt;</span><span class="identifier">allocation_id</span><span class="plain">);</span>
<span class="identifier">C</span><span class="plain">-</span><span class="element">&gt;namespace</span><span class="plain"> = </span><span class="functiontext">InterNames::new_namespace</span><span class="plain">(</span><span class="identifier">pfx</span><span class="plain">);</span>
<span class="identifier">Str::clear</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">-</span><span class="element">&gt;namespace</span><span class="plain">-</span><span class="element">&gt;unmarked_prefix</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">-</span><span class="element">&gt;namespace</span><span class="plain">-</span><span class="element">&gt;unmarked_prefix</span><span class="plain">, </span><span class="string">"m%d"</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">-&gt;</span><span class="identifier">allocation_id</span><span class="plain">);</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">pfx</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">-</span><span class="element">&gt;abbreviation</span><span class="plain">, </span><span class="string">"m%s%d"</span><span class="plain">, </span><span class="identifier">x</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">-&gt;</span><span class="identifier">allocation_id</span><span class="plain">);</span>
<span class="identifier">ParseTree::set_module</span><span class="plain">(</span><span class="identifier">from</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">);</span>
<span class="functiontext">Modules::propagate_downwards</span><span class="plain">(</span><span class="identifier">from</span><span class="plain">-</span><span class="element">&gt;down</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">);</span>
<span class="plain">}</span>

View file

@ -397,9 +397,9 @@
<p class="inwebparagraph"></p>
<p class="endnote">The function Emit::IRS is used in <a href="#SP4">&#167;4</a>, <a href="#SP5">&#167;5</a>, 13/rsfk (<a href="13-rsfk.html#SP5">&#167;5</a>), 17/tl (<a href="17-tl.html#SP13">&#167;13</a>), 26/iti (<a href="26-iti.html#SP9">&#167;9</a>), 27/pc (<a href="27-pc.html#SP2">&#167;2</a>, <a href="27-pc.html#SP6">&#167;6</a>), 27/in (<a href="27-in.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Emit::IRS is used in <a href="#SP4">&#167;4</a>, <a href="#SP5">&#167;5</a>, 13/rsfk (<a href="13-rsfk.html#SP5">&#167;5</a>), 17/tl (<a href="17-tl.html#SP13">&#167;13</a>), 26/iti (<a href="26-iti.html#SP9">&#167;9</a>), 27/pc (<a href="27-pc.html#SP2">&#167;2</a>, <a href="27-pc.html#SP6">&#167;6</a>), 27/in (<a href="27-in.html#SP8">&#167;8</a>).</p>
<p class="endnote">The function Emit::repository is used in <a href="#SP4">&#167;4</a>, <a href="#SP5">&#167;5</a>, 1/mr (<a href="1-mr.html#SP4_15">&#167;4.15</a>), 21/rl (<a href="21-rl.html#SP9">&#167;9</a>), 27/pc (<a href="27-pc.html#SP2">&#167;2</a>, <a href="27-pc.html#SP4">&#167;4</a>, <a href="27-pc.html#SP6">&#167;6</a>), 27/in (<a href="27-in.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Emit::repository is used in <a href="#SP4">&#167;4</a>, <a href="#SP5">&#167;5</a>, 1/mr (<a href="1-mr.html#SP4_15">&#167;4.15</a>), 21/rl (<a href="21-rl.html#SP9">&#167;9</a>), 27/pc (<a href="27-pc.html#SP2">&#167;2</a>, <a href="27-pc.html#SP4">&#167;4</a>, <a href="27-pc.html#SP6">&#167;6</a>), 27/in (<a href="27-in.html#SP8">&#167;8</a>).</p>
<p class="endnote">The function Emit::move_write_position is used in 27/pc (<a href="27-pc.html#SP6">&#167;6</a>).</p>
@ -551,7 +551,7 @@ insert them into the Inter stream close to the top.
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::kind</span><span class="plain">(</span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">TID</span><span class="plain">, </span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">super</span><span class="plain">,</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">constructor</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">arity</span><span class="plain">, </span><span class="identifier">kind</span><span class="plain"> **</span><span class="identifier">operand_kinds</span><span class="plain">) {</span>
<span class="reserved">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="functiontext">Packaging::enter</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;eventual_owner</span><span class="plain">);</span>
<span class="reserved">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="functiontext">Packaging::enter_home_of</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">);</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain"> = </span><span class="functiontext">InterNames::to_symbol</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">);</span>
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">SID</span><span class="plain"> = 0;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">S</span><span class="plain">) </span><span class="identifier">SID</span><span class="plain"> = </span><span class="identifier">Inter::SymbolsTables::id_from_IRS_and_symbol</span><span class="plain">(</span><span class="identifier">default_bookmark</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">);</span>
@ -610,7 +610,7 @@ insert them into the Inter stream close to the top.
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::instance_permission</span><span class="plain">(</span><span class="reserved">property</span><span class="plain"> *</span><span class="identifier">prn</span><span class="plain">, </span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">inst_iname</span><span class="plain">) {</span>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">prop_name</span><span class="plain"> = </span><span class="functiontext">Properties::iname</span><span class="plain">(</span><span class="identifier">prn</span><span class="plain">);</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">inst_name</span><span class="plain"> = </span><span class="functiontext">InterNames::to_symbol</span><span class="plain">(</span><span class="identifier">inst_iname</span><span class="plain">);</span>
<span class="reserved">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="functiontext">Packaging::enter</span><span class="plain">(</span><span class="identifier">inst_iname</span><span class="plain">-</span><span class="element">&gt;eventual_owner</span><span class="plain">);</span>
<span class="reserved">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="functiontext">Packaging::enter_home_of</span><span class="plain">(</span><span class="identifier">inst_iname</span><span class="plain">);</span>
<span class="functiontext">Emit::basic_permission</span><span class="plain">(</span><span class="identifier">default_bookmark</span><span class="plain">, </span><span class="identifier">prop_name</span><span class="plain">, </span><span class="identifier">inst_name</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="functiontext">Packaging::exit</span><span class="plain">(</span><span class="identifier">save</span><span class="plain">);</span>
<span class="plain">}</span>
@ -1028,7 +1028,7 @@ insert them into the Inter stream close to the top.
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Emit::IRS</span><span class="plain">() == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"no inter repository"</span><span class="plain">);</span>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">block_iname</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Packaging::houseed_in_function</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">))</span>
<span class="identifier">block_iname</span><span class="plain"> = </span><span class="functiontext">Hierarchy::make_block_iname</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;eventual_owner</span><span class="plain">);</span>
<span class="identifier">block_iname</span><span class="plain"> = </span><span class="functiontext">Hierarchy::make_block_iname</span><span class="plain">(</span><span class="functiontext">Packaging::home_of</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">));</span>
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"routine outside function package"</span><span class="plain">);</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">rsymb</span><span class="plain"> = </span><span class="functiontext">Emit::package</span><span class="plain">(</span><span class="identifier">block_iname</span><span class="plain">, </span><span class="identifier">code_packagetype</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
@ -1191,17 +1191,17 @@ insert them into the Inter stream close to the top.
<p class="endnote">The function Emit::seek_symbol is used in 13/rsfk (<a href="13-rsfk.html#SP5">&#167;5</a>), 27/is (<a href="27-is.html#SP32">&#167;32</a>).</p>
<p class="endnote">The function Emit::new_symbol is used in <a href="#SP3">&#167;3</a>, 27/pc (<a href="27-pc.html#SP2">&#167;2</a>), 27/in (<a href="27-in.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Emit::new_symbol is used in <a href="#SP3">&#167;3</a>, 27/pc (<a href="27-pc.html#SP2">&#167;2</a>), 27/in (<a href="27-in.html#SP8">&#167;8</a>).</p>
<p class="endnote">The function Emit::holding_symbol is used in 13/rsfk (<a href="13-rsfk.html#SP5">&#167;5</a>).</p>
<p class="endnote">The function Emit::new_local_symbol appears nowhere else.</p>
<p class="endnote">The function Emit::annotate_symbol_t is used in 27/in (<a href="27-in.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Emit::annotate_symbol_t is used in 27/in (<a href="27-in.html#SP8">&#167;8</a>).</p>
<p class="endnote">The function Emit::annotate_symbol_w is used in 27/in (<a href="27-in.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Emit::annotate_symbol_w is used in 27/in (<a href="27-in.html#SP8">&#167;8</a>).</p>
<p class="endnote">The function Emit::annotate_symbol_i is used in <a href="#SP3">&#167;3</a>, 27/pc (<a href="27-pc.html#SP2">&#167;2</a>), 27/in (<a href="27-in.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Emit::annotate_symbol_i is used in <a href="#SP3">&#167;3</a>, 27/pc (<a href="27-pc.html#SP2">&#167;2</a>), 27/in (<a href="27-in.html#SP8">&#167;8</a>).</p>
<p class="endnote">The function Emit::annotate_iname_i appears nowhere else.</p>

View file

@ -122,7 +122,7 @@
<span class="reserved">named_resource_location</span><span class="plain"> *</span><span class="identifier">nrl</span><span class="plain"> = </span><span class="functiontext">HierarchyLocations::new</span><span class="plain">();</span>
<span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;access_number</span><span class="plain"> = </span><span class="identifier">id</span><span class="plain">;</span>
<span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;access_name</span><span class="plain"> = </span><span class="identifier">Str::duplicate</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">);</span>
<span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;requirements</span><span class="plain"> = </span><span class="functiontext">HierarchyLocations::this_package</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;eventual_owner</span><span class="plain">);</span>
<span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;requirements</span><span class="plain"> = </span><span class="functiontext">HierarchyLocations::this_package</span><span class="plain">(</span><span class="functiontext">Packaging::home_of</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">));</span>
<span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;equates_to_iname</span><span class="plain"> = </span><span class="identifier">iname</span><span class="plain">;</span>
<span class="functiontext">HierarchyLocations::index</span><span class="plain">(</span><span class="identifier">nrl</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">nrl</span><span class="plain">;</span>
@ -188,7 +188,7 @@
<span class="plain">}</span>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="functiontext">HierarchyLocations::function</span><span class="plain">(</span><span class="reserved">package_request</span><span class="plain"> *</span><span class="identifier">R</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">trans</span><span class="plain">) {</span>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain"> = </span><span class="functiontext">Packaging::function</span><span class="plain">(</span><span class="functiontext">InterNames::one_off</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">R</span><span class="plain">), </span><span class="identifier">R</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain"> = </span><span class="functiontext">Packaging::function</span><span class="plain">(</span><span class="functiontext">InterNames::explicitly_named</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">R</span><span class="plain">), </span><span class="identifier">R</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">trans</span><span class="plain">) </span><span class="functiontext">InterNames::change_translation</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">, </span><span class="identifier">trans</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">iname</span><span class="plain">;</span>
<span class="plain">}</span>
@ -203,21 +203,21 @@
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;requirements.this_mundane_package</span><span class="plain"> == </span><span class="functiontext">Hierarchy::template</span><span class="plain">()) {</span>
<span class="reserved">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="functiontext">Packaging::enter</span><span class="plain">(</span><span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;requirements.this_mundane_package</span><span class="plain">);</span>
<span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;equates_to_iname</span><span class="plain"> = </span><span class="functiontext">InterNames::one_off</span><span class="plain">(</span><span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;access_name</span><span class="plain">, </span><span class="functiontext">Hierarchy::template</span><span class="plain">());</span>
<span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;equates_to_iname</span><span class="plain"> = </span><span class="functiontext">InterNames::explicitly_named</span><span class="plain">(</span><span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;access_name</span><span class="plain">, </span><span class="functiontext">Hierarchy::template</span><span class="plain">());</span>
<span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;equates_to_iname</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain"> = </span><span class="functiontext">Emit::extern</span><span class="plain">(</span><span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;access_name</span><span class="plain">, </span><span class="identifier">K_value</span><span class="plain">);</span>
<span class="functiontext">Packaging::exit</span><span class="plain">(</span><span class="identifier">save</span><span class="plain">);</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;function_package_name</span><span class="plain">) &gt; 0) {</span>
<span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;equates_to_iname</span><span class="plain"> = </span><span class="functiontext">Packaging::function_text</span><span class="plain">(</span>
<span class="functiontext">InterNames::one_off</span><span class="plain">(</span><span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;function_package_name</span><span class="plain">, </span><span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;requirements.this_mundane_package</span><span class="plain">),</span>
<span class="functiontext">InterNames::explicitly_named</span><span class="plain">(</span><span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;function_package_name</span><span class="plain">, </span><span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;requirements.this_mundane_package</span><span class="plain">),</span>
<span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;requirements.this_mundane_package</span><span class="plain">,</span>
<span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;access_name</span><span class="plain">);</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;datum_package_name</span><span class="plain">) &gt; 0) {</span>
<span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;equates_to_iname</span><span class="plain"> = </span><span class="functiontext">Packaging::datum_text</span><span class="plain">(</span>
<span class="functiontext">InterNames::one_off</span><span class="plain">(</span><span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;datum_package_name</span><span class="plain">, </span><span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;requirements.this_mundane_package</span><span class="plain">),</span>
<span class="functiontext">InterNames::explicitly_named</span><span class="plain">(</span><span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;datum_package_name</span><span class="plain">, </span><span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;requirements.this_mundane_package</span><span class="plain">),</span>
<span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;requirements.this_mundane_package</span><span class="plain">,</span>
<span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;access_name</span><span class="plain">);</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;requirements.this_mundane_package</span><span class="plain">) &amp;&amp; (</span><span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;equates_to_iname</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">)) {</span>
<span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;equates_to_iname</span><span class="plain"> = </span><span class="functiontext">InterNames::one_off</span><span class="plain">(</span><span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;access_name</span><span class="plain">, </span><span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;requirements.this_mundane_package</span><span class="plain">);</span>
<span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;equates_to_iname</span><span class="plain"> = </span><span class="functiontext">InterNames::explicitly_named</span><span class="plain">(</span><span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;access_name</span><span class="plain">, </span><span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;requirements.this_mundane_package</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;equates_to_iname</span><span class="plain"> = </span><span class="functiontext">Hierarchy::post_process</span><span class="plain">(</span><span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;access_number</span><span class="plain">, </span><span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;equates_to_iname</span><span class="plain">);</span>
@ -255,22 +255,13 @@
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">);</span>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">temp_iname</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">derive_from</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;trans.faux_letter</span><span class="plain"> &gt;= 0)</span>
<span class="identifier">temp_iname</span><span class="plain"> = </span><span class="functiontext">InterNames::letter_parametrised_name_f</span><span class="plain">(</span><span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;trans.name_generator</span><span class="plain">, </span><span class="identifier">derive_from</span><span class="plain">, </span><span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;trans.faux_letter</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">);</span>
<span class="reserved">else</span>
<span class="identifier">temp_iname</span><span class="plain"> = </span><span class="functiontext">InterNames::new_derived_f</span><span class="plain">(</span><span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;trans.name_generator</span><span class="plain">, </span><span class="identifier">derive_from</span><span class="plain">);</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;trans.localise</span><span class="plain">) {</span>
<span class="identifier">temp_iname</span><span class="plain"> = </span><span class="functiontext">InterNames::new_in_f</span><span class="plain">(</span><span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;trans.name_generator</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">, </span><span class="identifier">fix</span><span class="plain">);</span>
<span class="identifier">temp_iname</span><span class="plain"> = </span><span class="functiontext">InterNames::derived</span><span class="plain">(</span><span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;trans.name_generator</span><span class="plain">, </span><span class="identifier">derive_from</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">);</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="identifier">temp_iname</span><span class="plain"> = </span><span class="functiontext">InterNames::new_f</span><span class="plain">(</span><span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;trans.name_generator</span><span class="plain">, </span><span class="identifier">fix</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (!</span><span class="identifier">Wordings::empty</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">)) {</span>
<span class="functiontext">InterNames::attach_memo</span><span class="plain">(</span><span class="identifier">temp_iname</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">);</span>
<span class="identifier">W</span><span class="plain"> = </span><span class="identifier">EMPTY_WORDING</span><span class="plain">;</span>
<span class="identifier">temp_iname</span><span class="plain"> = </span><span class="functiontext">InterNames::generated</span><span class="plain">(</span><span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;trans.name_generator</span><span class="plain">, </span><span class="identifier">fix</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="identifier">W</span><span class="plain"> = </span><span class="identifier">EMPTY_WORDING</span><span class="plain">;</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="string">"%n"</span><span class="plain">, </span><span class="identifier">temp_iname</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;trans.faux_letter</span><span class="plain"> &gt;= 0) </span><span class="identifier">iname</span><span class="plain"> = </span><span class="identifier">temp_iname</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span>&lt;<span class="cwebmacro">Make the actual iname</span> <span class="cwebmacronumber">1.1</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Make the actual iname</span> <span class="cwebmacronumber">1.1</span>&gt;<span class="plain">;</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">);</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">T</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
@ -337,16 +328,13 @@
<pre class="displaydefn">
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;function_package_name</span><span class="plain">) &gt; 0) {</span>
<span class="identifier">iname</span><span class="plain"> = </span><span class="functiontext">Packaging::function_text</span><span class="plain">(</span>
<span class="functiontext">InterNames::one_off</span><span class="plain">(</span><span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;function_package_name</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">),</span>
<span class="identifier">P</span><span class="plain">,</span>
<span class="identifier">NULL</span><span class="plain">);</span>
<span class="identifier">iname</span><span class="plain"> = </span><span class="functiontext">Packaging::function</span><span class="plain">(</span>
<span class="functiontext">InterNames::explicitly_named</span><span class="plain">(</span><span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;function_package_name</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">), </span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;trans.by_imposition</span><span class="plain">) </span><span class="identifier">iname</span><span class="plain"> = </span><span class="functiontext">InterNames::one_off</span><span class="plain">(</span><span class="identifier">imposed_name</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;access_name</span><span class="plain">) == 0) </span><span class="identifier">iname</span><span class="plain"> = </span><span class="functiontext">InterNames::one_off</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">iname</span><span class="plain"> = </span><span class="functiontext">InterNames::one_off</span><span class="plain">(</span><span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;access_name</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;trans.by_imposition</span><span class="plain">) </span><span class="identifier">iname</span><span class="plain"> = </span><span class="functiontext">InterNames::explicitly_named_with_memo</span><span class="plain">(</span><span class="identifier">imposed_name</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;access_name</span><span class="plain">) == 0) </span><span class="identifier">iname</span><span class="plain"> = </span><span class="functiontext">InterNames::explicitly_named_with_memo</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">iname</span><span class="plain"> = </span><span class="functiontext">InterNames::explicitly_named_with_memo</span><span class="plain">(</span><span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;access_name</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (!</span><span class="identifier">Wordings::empty</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">)) </span><span class="functiontext">InterNames::attach_memo</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">) &gt; 0) &amp;&amp; (</span><span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;access_name</span><span class="plain">)) </span><span class="functiontext">InterNames::change_translation</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">, </span><span class="identifier">T</span><span class="plain">);</span>
</pre>
@ -374,7 +362,7 @@
<span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"subpackage not in enclosing superpackage"</span><span class="plain">);</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"NRL accessed inappropriately"</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">Packaging::request</span><span class="plain">(</span><span class="functiontext">InterNames::one_off</span><span class="plain">(</span><span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;access_name</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">), </span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;package_type</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">Packaging::request</span><span class="plain">(</span><span class="functiontext">InterNames::explicitly_named</span><span class="plain">(</span><span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;access_name</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">), </span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">nrl</span><span class="plain">-</span><span class="element">&gt;package_type</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">typedef</span><span class="plain"> </span><span class="reserved">struct</span><span class="plain"> </span><span class="reserved">hierarchy_attachment_point</span><span class="plain"> {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">hap_id</span><span class="plain">;</span>

View file

@ -767,8 +767,8 @@
<span class="functiontext">HierarchyLocations::func</span><span class="plain">(</span><span class="constant">DEFAULT_CLOSURE_FN_HL</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"default_closure_fn"</span><span class="plain">, </span><span class="functiontext">Translation::uniqued</span><span class="plain">(), </span><span class="identifier">in_kind</span><span class="plain">);</span>
<span class="functiontext">HierarchyLocations::func</span><span class="plain">(</span><span class="constant">GPR_FN_HL</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"gpr_fn"</span><span class="plain">, </span><span class="functiontext">Translation::uniqued</span><span class="plain">(), </span><span class="identifier">in_kind</span><span class="plain">);</span>
<span class="functiontext">HierarchyLocations::func</span><span class="plain">(</span><span class="constant">INSTANCE_GPR_FN_HL</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"instance_gpr_fn"</span><span class="plain">, </span><span class="functiontext">Translation::uniqued</span><span class="plain">(), </span><span class="identifier">in_kind</span><span class="plain">);</span>
<span class="functiontext">HierarchyLocations::con</span><span class="plain">(</span><span class="constant">FIRST_INSTANCE_HL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="functiontext">Translation::suffix_special</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"_First"</span><span class="plain">, </span><span class="constant">FIRST_INSTANCE_INDERIV</span><span class="plain">), </span><span class="identifier">in_kind</span><span class="plain">);</span>
<span class="functiontext">HierarchyLocations::con</span><span class="plain">(</span><span class="constant">NEXT_INSTANCE_HL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="functiontext">Translation::suffix_special</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"_Next"</span><span class="plain">, </span><span class="constant">NEXT_INSTANCE_INDERIV</span><span class="plain">), </span><span class="identifier">in_kind</span><span class="plain">);</span>
<span class="functiontext">HierarchyLocations::con</span><span class="plain">(</span><span class="constant">FIRST_INSTANCE_HL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="functiontext">Translation::suffix</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"_First"</span><span class="plain">), </span><span class="identifier">in_kind</span><span class="plain">);</span>
<span class="functiontext">HierarchyLocations::con</span><span class="plain">(</span><span class="constant">NEXT_INSTANCE_HL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="functiontext">Translation::suffix</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"_Next"</span><span class="plain">), </span><span class="identifier">in_kind</span><span class="plain">);</span>
<span class="functiontext">HierarchyLocations::con</span><span class="plain">(</span><span class="constant">COUNT_INSTANCE_1_HL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="functiontext">Translation::to</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"IK1_Count"</span><span class="plain">), </span><span class="identifier">in_kind</span><span class="plain">);</span>
<span class="functiontext">HierarchyLocations::con</span><span class="plain">(</span><span class="constant">COUNT_INSTANCE_2_HL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="functiontext">Translation::to</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"IK2_Count"</span><span class="plain">), </span><span class="identifier">in_kind</span><span class="plain">);</span>
<span class="functiontext">HierarchyLocations::con</span><span class="plain">(</span><span class="constant">COUNT_INSTANCE_3_HL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="functiontext">Translation::to</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"IK3_Count"</span><span class="plain">), </span><span class="identifier">in_kind</span><span class="plain">);</span>
@ -779,7 +779,7 @@
<span class="functiontext">HierarchyLocations::con</span><span class="plain">(</span><span class="constant">COUNT_INSTANCE_8_HL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="functiontext">Translation::to</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"IK8_Count"</span><span class="plain">), </span><span class="identifier">in_kind</span><span class="plain">);</span>
<span class="functiontext">HierarchyLocations::con</span><span class="plain">(</span><span class="constant">COUNT_INSTANCE_9_HL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="functiontext">Translation::to</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"IK9_Count"</span><span class="plain">), </span><span class="identifier">in_kind</span><span class="plain">);</span>
<span class="functiontext">HierarchyLocations::con</span><span class="plain">(</span><span class="constant">COUNT_INSTANCE_10_HL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="functiontext">Translation::to</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"IK10_Count"</span><span class="plain">), </span><span class="identifier">in_kind</span><span class="plain">);</span>
<span class="functiontext">HierarchyLocations::con</span><span class="plain">(</span><span class="constant">COUNT_INSTANCE_HL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="functiontext">Translation::suffix_special</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"_Count"</span><span class="plain">, </span><span class="constant">COUNT_INSTANCE_INDERIV</span><span class="plain">), </span><span class="identifier">in_kind</span><span class="plain">);</span>
<span class="functiontext">HierarchyLocations::con</span><span class="plain">(</span><span class="constant">COUNT_INSTANCE_HL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="functiontext">Translation::suffix</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"_Count"</span><span class="plain">), </span><span class="identifier">in_kind</span><span class="plain">);</span>
<span class="functiontext">HierarchyLocations::ap</span><span class="plain">(</span><span class="constant">KIND_INLINE_PROPERTIES_HAP</span><span class="plain">, </span><span class="identifier">in_kind</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"inline_property"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"_inline_property"</span><span class="plain">);</span>
<span class="reserved">location_requirement</span><span class="plain"> </span><span class="identifier">in_kind_inline_property</span><span class="plain"> = </span><span class="functiontext">HierarchyLocations::any_package_of_type</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"_inline_property"</span><span class="plain">);</span>
<span class="functiontext">HierarchyLocations::con</span><span class="plain">(</span><span class="constant">KIND_INLINE_PROPERTY_HL</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"inline"</span><span class="plain">, </span><span class="functiontext">Translation::uniqued</span><span class="plain">(), </span><span class="identifier">in_kind_inline_property</span><span class="plain">);</span>
@ -856,7 +856,7 @@
<span class="functiontext">HierarchyLocations::con</span><span class="plain">(</span><span class="constant">CLOSURE_DATA_HL</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"closure_data"</span><span class="plain">, </span><span class="functiontext">Translation::uniqued</span><span class="plain">(), </span><span class="identifier">in_closure</span><span class="plain">);</span>
<span class="functiontext">HierarchyLocations::ap</span><span class="plain">(</span><span class="constant">REQUESTS_HAP</span><span class="plain">, </span><span class="identifier">in_to_phrase</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"request"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"_request"</span><span class="plain">);</span>
<span class="reserved">location_requirement</span><span class="plain"> </span><span class="identifier">in_request</span><span class="plain"> = </span><span class="functiontext">HierarchyLocations::any_package_of_type</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"_request"</span><span class="plain">);</span>
<span class="functiontext">HierarchyLocations::func</span><span class="plain">(</span><span class="constant">PHRASE_FN_HL</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"phrase_fn"</span><span class="plain">, </span><span class="functiontext">Translation::generate_in</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"REQ"</span><span class="plain">), </span><span class="identifier">in_request</span><span class="plain">);</span>
<span class="functiontext">HierarchyLocations::func</span><span class="plain">(</span><span class="constant">PHRASE_FN_HL</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"phrase_fn"</span><span class="plain">, </span><span class="functiontext">Translation::uniqued</span><span class="plain">(), </span><span class="identifier">in_request</span><span class="plain">);</span>
<span class="reserved">location_requirement</span><span class="plain"> </span><span class="identifier">synoptic_phrases</span><span class="plain"> = </span><span class="functiontext">HierarchyLocations::synoptic_submodule</span><span class="plain">(</span><span class="identifier">phrases</span><span class="plain">);</span>
<span class="functiontext">HierarchyLocations::ap</span><span class="plain">(</span><span class="constant">LABEL_STORAGES_HAP</span><span class="plain">, </span><span class="identifier">synoptic_phrases</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"label_storage"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"_label_storage"</span><span class="plain">);</span>
@ -1067,8 +1067,8 @@
<span class="reserved">location_requirement</span><span class="plain"> </span><span class="identifier">local_rules</span><span class="plain"> = </span><span class="functiontext">HierarchyLocations::local_submodule</span><span class="plain">(</span><span class="identifier">rules</span><span class="plain">);</span>
<span class="functiontext">HierarchyLocations::ap</span><span class="plain">(</span><span class="constant">RULES_HAP</span><span class="plain">, </span><span class="identifier">local_rules</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"rule"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"_rule"</span><span class="plain">);</span>
<span class="reserved">location_requirement</span><span class="plain"> </span><span class="identifier">in_rule</span><span class="plain"> = </span><span class="functiontext">HierarchyLocations::any_package_of_type</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"_rule"</span><span class="plain">);</span>
<span class="functiontext">HierarchyLocations::func</span><span class="plain">(</span><span class="constant">SHELL_FN_HL</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"shell_fn"</span><span class="plain">, </span><span class="functiontext">Translation::generate_in</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"I6_Rule_Shell"</span><span class="plain">), </span><span class="identifier">in_rule</span><span class="plain">);</span>
<span class="functiontext">HierarchyLocations::func</span><span class="plain">(</span><span class="constant">RULE_FN_HL</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"rule_fn"</span><span class="plain">, </span><span class="functiontext">Translation::generate_in</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"R"</span><span class="plain">), </span><span class="identifier">in_rule</span><span class="plain">);</span>
<span class="functiontext">HierarchyLocations::func</span><span class="plain">(</span><span class="constant">SHELL_FN_HL</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"shell_fn"</span><span class="plain">, </span><span class="functiontext">Translation::uniqued</span><span class="plain">(), </span><span class="identifier">in_rule</span><span class="plain">);</span>
<span class="functiontext">HierarchyLocations::func</span><span class="plain">(</span><span class="constant">RULE_FN_HL</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"rule_fn"</span><span class="plain">, </span><span class="functiontext">Translation::uniqued</span><span class="plain">(), </span><span class="identifier">in_rule</span><span class="plain">);</span>
<span class="functiontext">HierarchyLocations::con</span><span class="plain">(</span><span class="constant">EXTERIOR_RULE_HL</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"exterior_rule"</span><span class="plain">, </span><span class="functiontext">Translation::uniqued</span><span class="plain">(), </span><span class="identifier">in_rule</span><span class="plain">);</span>
<span class="functiontext">HierarchyLocations::func</span><span class="plain">(</span><span class="constant">RESPONDER_FN_HL</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"responder_fn"</span><span class="plain">, </span><span class="functiontext">Translation::suffix</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"M"</span><span class="plain">), </span><span class="identifier">in_rule</span><span class="plain">);</span>
<span class="functiontext">HierarchyLocations::ap</span><span class="plain">(</span><span class="constant">RESPONSES_HAP</span><span class="plain">, </span><span class="identifier">in_rule</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"response"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"_response"</span><span class="plain">);</span>
@ -1866,7 +1866,7 @@
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Hierarchy::make_available</span><span class="plain">(</span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain">) {</span>
<span class="functiontext">HierarchyLocations::make_as</span><span class="plain">(-1, </span><span class="functiontext">InterNames::to_symbol</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">)-&gt;</span><span class="identifier">symbol_name</span><span class="plain">, </span><span class="identifier">iname</span><span class="plain">);</span>
<span class="functiontext">HierarchyLocations::make_as</span><span class="plain">(-1, </span><span class="functiontext">InterNames::to_text</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">), </span><span class="identifier">iname</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="functiontext">Hierarchy::find_by_name</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">) {</span>
@ -1882,7 +1882,7 @@
<span class="reserved">package_request</span><span class="plain"> *</span><span class="identifier">main_pr</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">package_request</span><span class="plain"> *</span><span class="functiontext">Hierarchy::main</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">main_pr</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">)</span>
<span class="identifier">main_pr</span><span class="plain"> = </span><span class="functiontext">Packaging::request</span><span class="plain">(</span><span class="functiontext">InterNames::one_off</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"main"</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">), </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">plain_ptype</span><span class="plain">);</span>
<span class="identifier">main_pr</span><span class="plain"> = </span><span class="functiontext">Packaging::request</span><span class="plain">(</span><span class="functiontext">InterNames::explicitly_named</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"main"</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">), </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">plain_ptype</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">main_pr</span><span class="plain">;</span>
<span class="plain">}</span>
@ -1890,7 +1890,7 @@
<span class="reserved">package_request</span><span class="plain"> *</span><span class="functiontext">Hierarchy::resources</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">resources_pr</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">)</span>
<span class="identifier">resources_pr</span><span class="plain"> = </span><span class="functiontext">Packaging::request</span><span class="plain">(</span>
<span class="functiontext">InterNames::one_off</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"resources"</span><span class="plain">, </span><span class="functiontext">Hierarchy::main</span><span class="plain">()),</span>
<span class="functiontext">InterNames::explicitly_named</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"resources"</span><span class="plain">, </span><span class="functiontext">Hierarchy::main</span><span class="plain">()),</span>
<span class="functiontext">Hierarchy::main</span><span class="plain">(), </span><span class="identifier">plain_ptype</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">resources_pr</span><span class="plain">;</span>
<span class="plain">}</span>
@ -1899,7 +1899,7 @@
<span class="reserved">package_request</span><span class="plain"> *</span><span class="functiontext">Hierarchy::template</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">template_pr</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">)</span>
<span class="identifier">template_pr</span><span class="plain"> = </span><span class="functiontext">Packaging::request</span><span class="plain">(</span>
<span class="functiontext">InterNames::one_off</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"template"</span><span class="plain">, </span><span class="functiontext">Hierarchy::resources</span><span class="plain">()),</span>
<span class="functiontext">InterNames::explicitly_named</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"template"</span><span class="plain">, </span><span class="functiontext">Hierarchy::resources</span><span class="plain">()),</span>
<span class="functiontext">Hierarchy::resources</span><span class="plain">(), </span><span class="identifier">module_ptype</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">template_pr</span><span class="plain">;</span>
<span class="plain">}</span>
@ -1973,7 +1973,7 @@
<p class="endnote">The function Hierarchy::find_by_name is used in 5/nv (<a href="5-nv.html#SP10">&#167;10</a>), 13/rsfk (<a href="13-rsfk.html#SP7">&#167;7</a>), 21/rl (<a href="21-rl.html#SP9">&#167;9</a>), 22/tp (<a href="22-tp.html#SP8">&#167;8</a>), 27/is (<a href="27-is.html#SP32">&#167;32</a>).</p>
<p class="endnote">The function Hierarchy::main is used in 26/rt (<a href="26-rt.html#SP3">&#167;3</a>), 27/in (<a href="27-in.html#SP2">&#167;2</a>), 27/ei (<a href="27-ei.html#SP3">&#167;3</a>).</p>
<p class="endnote">The function Hierarchy::main is used in 26/rt (<a href="26-rt.html#SP3">&#167;3</a>), 27/ei (<a href="27-ei.html#SP3">&#167;3</a>).</p>
<p class="endnote">The function Hierarchy::resources is used in 27/pc (<a href="27-pc.html#SP7">&#167;7</a>), 27/ei (<a href="27-ei.html#SP3">&#167;3</a>).</p>

View file

@ -9,284 +9,352 @@
<body>
<!--Weave of '27/in' generated by 7-->
<ul class="crumbs"><li><a href="../webs.html">&#9733;</a></li><li><a href="index.html">core</a></li><li><a href="index.html#27">Chapter 27: Bridge to Inter Module</a></li><li><b>Inter Namespace</b></li></ul><p class="inwebparagraph"><a id="SP1"></a><b>&#167;1. </b></p>
<ul class="crumbs"><li><a href="../webs.html">&#9733;</a></li><li><a href="index.html">core</a></li><li><a href="index.html#27">Chapter 27: Bridge to Inter Module</a></li><li><b>Inter Namespace</b></li></ul><p class="purpose">To manage identifiers, which have names and positions in the Inter hierarchy.</p>
<ul class="toc"><li><a href="#SP1">&#167;1. Families</a></li><li><a href="#SP2">&#167;2. Printing inames</a></li><li><a href="#SP4">&#167;4. Making new inames</a></li><li><a href="#SP8">&#167;8. Conversion of inames to symbols</a></li></ul><hr class="tocbar">
<p class="inwebparagraph"><a id="SP1"></a><b>&#167;1. Families. </b>Each inter name comes from a "generator". Some are one-shot, and produce just
one name before being discarded; others produce a numbered sequence of names
in a given pattern, counting upwards from 1 (<code class="display"><span class="extract">example_1</span></code>, <code class="display"><span class="extract">example_2</span></code>, ...);
and others still derive new names from existing ones (for example, turning
<code class="display"><span class="extract">fish</span></code> amd <code class="display"><span class="extract">rumour</span></code> into <code class="display"><span class="extract">fishmonger</span></code> and <code class="display"><span class="extract">rumourmonger</span></code>).
</p>
<pre class="definitions">
<span class="definitionkeyword">enum</span> <span class="constant">UNIQUE_FUSAGE</span><span class="definitionkeyword"> from </span><span class="constant">1</span>
<span class="definitionkeyword">enum</span> <span class="constant">UNIQUE_PER_NAMESPACE_FUSAGE</span>
<span class="definitionkeyword">enum</span> <span class="constant">MANY_PER_NAMESPACE_FUSAGE</span>
<span class="definitionkeyword">enum</span> <span class="constant">DERIVED_FUSAGE</span>
<span class="definitionkeyword">enum</span> <span class="constant">UNIQUE_INGEN</span><span class="definitionkeyword"> from </span><span class="constant">1</span>
<span class="definitionkeyword">enum</span> <span class="constant">MULTIPLE_INGEN</span>
<span class="definitionkeyword">enum</span> <span class="constant">DERIVED_INGEN</span>
</pre>
<pre class="display">
<span class="reserved">typedef</span><span class="plain"> </span><span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inter_namespace</span><span class="plain"> {</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">namespace_prefix</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">unmarked_prefix</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">exporting</span><span class="plain">;</span>
<span class="identifier">MEMORY_MANAGEMENT</span>
<span class="plain">} </span><span class="reserved">inter_namespace</span><span class="plain">;</span>
<span class="reserved">typedef</span><span class="plain"> </span><span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inter_name_generator</span><span class="plain"> {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">ingen</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">name_stem</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">no_generated</span><span class="plain">; </span> <span class="comment">relevamt only for <code class="display"><span class="extract">MULTIPLE_INGEN</span></code></span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">derived_prefix</span><span class="plain">; </span> <span class="comment">relevamt only for <code class="display"><span class="extract">DERIVED_INGEN</span></code></span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">derived_suffix</span><span class="plain">; </span> <span class="comment">relevamt only for <code class="display"><span class="extract">DERIVED_INGEN</span></code></span>
<span class="plain">} </span><span class="reserved">inter_name_generator</span><span class="plain">;</span>
<span class="reserved">inter_namespace</span><span class="plain"> *</span><span class="identifier">root_namespace</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">inter_name_generator</span><span class="plain"> *</span><span class="functiontext">InterNames::single_use_generator</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">) {</span>
<span class="reserved">inter_name_generator</span><span class="plain"> *</span><span class="identifier">F</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">inter_name_generator</span><span class="plain">);</span>
<span class="identifier">F</span><span class="plain">-</span><span class="element">&gt;ingen</span><span class="plain"> = </span><span class="constant">UNIQUE_INGEN</span><span class="plain">;</span>
<span class="identifier">F</span><span class="plain">-</span><span class="element">&gt;name_stem</span><span class="plain"> = </span><span class="identifier">Str::duplicate</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">);</span>
<span class="identifier">F</span><span class="plain">-</span><span class="element">&gt;derived_prefix</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">F</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">typedef</span><span class="plain"> </span><span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inter_name_family</span><span class="plain"> {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">fusage</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">family_name</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inter_name_consumption_token</span><span class="plain"> *</span><span class="identifier">first_ict</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inter_name_family</span><span class="plain"> *</span><span class="identifier">derivative_of</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">derived_prefix</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">derived_suffix</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">mark_exports</span><span class="plain">;</span>
<span class="identifier">MEMORY_MANAGEMENT</span>
<span class="plain">} </span><span class="reserved">inter_name_family</span><span class="plain">;</span>
<span class="reserved">inter_name_generator</span><span class="plain"> *</span><span class="functiontext">InterNames::multiple_use_generator</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">prefix</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">stem</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">suffix</span><span class="plain">) {</span>
<span class="reserved">inter_name_generator</span><span class="plain"> *</span><span class="identifier">gen</span><span class="plain"> = </span><span class="functiontext">InterNames::single_use_generator</span><span class="plain">(</span><span class="identifier">stem</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">prefix</span><span class="plain">) &gt; 0) {</span>
<span class="identifier">gen</span><span class="plain">-</span><span class="element">&gt;ingen</span><span class="plain"> = </span><span class="constant">DERIVED_INGEN</span><span class="plain">;</span>
<span class="identifier">gen</span><span class="plain">-</span><span class="element">&gt;derived_prefix</span><span class="plain"> = </span><span class="identifier">Str::duplicate</span><span class="plain">(</span><span class="identifier">prefix</span><span class="plain">);</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">suffix</span><span class="plain">) &gt; 0) {</span>
<span class="identifier">gen</span><span class="plain">-</span><span class="element">&gt;ingen</span><span class="plain"> = </span><span class="constant">DERIVED_INGEN</span><span class="plain">;</span>
<span class="identifier">gen</span><span class="plain">-</span><span class="element">&gt;derived_suffix</span><span class="plain"> = </span><span class="identifier">Str::duplicate</span><span class="plain">(</span><span class="identifier">suffix</span><span class="plain">);</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="identifier">gen</span><span class="plain">-</span><span class="element">&gt;ingen</span><span class="plain"> = </span><span class="constant">MULTIPLE_INGEN</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">gen</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
<span class="reserved">typedef</span><span class="plain"> </span><span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inter_name_consumption_token</span><span class="plain"> {</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inter_namespace</span><span class="plain"> *</span><span class="identifier">for_namespace</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">no_consumed</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inter_name_consumption_token</span><span class="plain"> *</span><span class="identifier">next_ict</span><span class="plain">;</span>
<span class="identifier">MEMORY_MANAGEMENT</span>
<span class="plain">} </span><span class="reserved">inter_name_consumption_token</span><span class="plain">;</span>
<p class="inwebparagraph"></p>
<p class="endnote">The function InterNames::single_use_generator is used in <a href="#SP5">&#167;5</a>.</p>
<p class="endnote">The function InterNames::multiple_use_generator is used in 27/tr (<a href="27-tr.html#SP1">&#167;1</a>).</p>
<p class="endnote">The structure inter_name_generator is private to this section.</p>
<p class="inwebparagraph"><a id="SP2"></a><b>&#167;2. Printing inames. </b>Inter names are stored not in textual form, but in terms of what would be
required to generate that text. (The memo field, which in principle allows
any text to be stored, is used only for a small proportion of inames.)
</p>
<pre class="display">
<span class="reserved">typedef</span><span class="plain"> </span><span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inter_name</span><span class="plain"> {</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inter_namespace</span><span class="plain"> *</span><span class="identifier">namespace</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inter_name_family</span><span class="plain"> *</span><span class="identifier">family</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inter_name_generator</span><span class="plain"> *</span><span class="identifier">family</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">unique_number</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">symbol</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">package_request</span><span class="plain"> *</span><span class="identifier">eventual_owner</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">package_request</span><span class="plain"> *</span><span class="identifier">location_in_hierarchy</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">memo</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">override</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">derived_from</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inter_name</span><span class="plain"> **</span><span class="identifier">parametrised_derivatives</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">compilation_module</span><span class="plain"> *</span><span class="identifier">declared_in</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">to_mark</span><span class="plain">;</span>
<span class="identifier">MEMORY_MANAGEMENT</span>
<span class="plain">} </span><span class="reserved">inter_name</span><span class="plain">;</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The structure inter_namespace is accessed in 26/jl, 27/cm and here.</p>
<p class="endnote">The structure inter_name is accessed in 27/hl, 27/pc and here.</p>
<p class="endnote">The structure inter_name_family is private to this section.</p>
<p class="endnote">The structure inter_name_consumption_token is private to this section.</p>
<p class="endnote">The structure inter_name is accessed in 5/ins, 5/nv, 13/rsfk, 17/rs, 21/rl2, 22/ph, 26/jl, 26/rt, 27/hl, 27/cm, 27/pc, 27/ei and here.</p>
<p class="inwebparagraph"><a id="SP2"></a><b>&#167;2. </b></p>
<p class="inwebparagraph"><a id="SP3"></a><b>&#167;3. </b>This implements the <code class="display"><span class="extract">%n</span></code> escape, which prints an iname:
</p>
<pre class="display">
<span class="reserved">inter_namespace</span><span class="plain"> *</span><span class="functiontext">InterNames::new_namespace</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">prefix</span><span class="plain">) {</span>
<span class="reserved">inter_namespace</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">inter_namespace</span><span class="plain">);</span>
<span class="identifier">S</span><span class="plain">-</span><span class="element">&gt;namespace_prefix</span><span class="plain"> = </span><span class="identifier">Str::duplicate</span><span class="plain">(</span><span class="identifier">prefix</span><span class="plain">);</span>
<span class="identifier">S</span><span class="plain">-</span><span class="element">&gt;unmarked_prefix</span><span class="plain"> = </span><span class="identifier">Str::duplicate</span><span class="plain">(</span><span class="identifier">prefix</span><span class="plain">);</span>
<span class="identifier">S</span><span class="plain">-</span><span class="element">&gt;exporting</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">S</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">inter_namespace</span><span class="plain"> *</span><span class="functiontext">InterNames::root</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">root_namespace</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">root_namespace</span><span class="plain"> = </span><span class="functiontext">InterNames::new_namespace</span><span class="plain">(</span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">root_namespace</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">inter_name_family</span><span class="plain"> *</span><span class="functiontext">InterNames::new_family</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">fu</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">) {</span>
<span class="reserved">inter_name_family</span><span class="plain"> *</span><span class="identifier">F</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">inter_name_family</span><span class="plain">);</span>
<span class="identifier">F</span><span class="plain">-</span><span class="element">&gt;fusage</span><span class="plain"> = </span><span class="identifier">fu</span><span class="plain">;</span>
<span class="identifier">F</span><span class="plain">-</span><span class="element">&gt;family_name</span><span class="plain"> = </span><span class="identifier">Str::duplicate</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">);</span>
<span class="identifier">F</span><span class="plain">-</span><span class="element">&gt;first_ict</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">F</span><span class="plain">-</span><span class="element">&gt;derivative_of</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">F</span><span class="plain">-</span><span class="element">&gt;derived_prefix</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">F</span><span class="plain">-</span><span class="element">&gt;derived_suffix</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">F</span><span class="plain">-</span><span class="element">&gt;mark_exports</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">F</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">inter_name_consumption_token</span><span class="plain"> *</span><span class="functiontext">InterNames::new_ict</span><span class="plain">(</span><span class="reserved">inter_namespace</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">S</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"no namespace"</span><span class="plain">);</span>
<span class="reserved">inter_name_consumption_token</span><span class="plain"> *</span><span class="identifier">T</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">inter_name_consumption_token</span><span class="plain">);</span>
<span class="identifier">T</span><span class="plain">-</span><span class="element">&gt;for_namespace</span><span class="plain"> = </span><span class="identifier">S</span><span class="plain">;</span>
<span class="identifier">T</span><span class="plain">-</span><span class="element">&gt;no_consumed</span><span class="plain"> = 1;</span>
<span class="identifier">T</span><span class="plain">-</span><span class="element">&gt;next_ict</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">T</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="functiontext">InterNames::new_in_space</span><span class="plain">(</span><span class="reserved">inter_namespace</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">inter_name_family</span><span class="plain"> *</span><span class="identifier">F</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">suppress_count</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">S</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"no namespace"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">F</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"no family"</span><span class="plain">);</span>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">N</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">inter_name</span><span class="plain">);</span>
<span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;namespace</span><span class="plain"> = </span><span class="identifier">S</span><span class="plain">;</span>
<span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;family</span><span class="plain"> = </span><span class="identifier">F</span><span class="plain">;</span>
<span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;unique_number</span><span class="plain"> = 0;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">F</span><span class="plain">-</span><span class="element">&gt;fusage</span><span class="plain"> == </span><span class="constant">UNIQUE_FUSAGE</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"not a family name"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">F</span><span class="plain">-</span><span class="element">&gt;fusage</span><span class="plain"> != </span><span class="constant">DERIVED_FUSAGE</span><span class="plain">) &amp;&amp; (</span><span class="identifier">suppress_count</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">)) {</span>
<span class="reserved">inter_name_consumption_token</span><span class="plain"> *</span><span class="identifier">ict</span><span class="plain"> = </span><span class="identifier">F</span><span class="plain">-</span><span class="element">&gt;first_ict</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ict</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
<span class="identifier">F</span><span class="plain">-</span><span class="element">&gt;first_ict</span><span class="plain"> = </span><span class="functiontext">InterNames::new_ict</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">);</span>
<span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;unique_number</span><span class="plain"> = 1;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="reserved">while</span><span class="plain"> (</span><span class="identifier">ict</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ict</span><span class="plain">-</span><span class="element">&gt;for_namespace</span><span class="plain"> == </span><span class="identifier">S</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">F</span><span class="plain">-</span><span class="element">&gt;fusage</span><span class="plain"> == </span><span class="constant">UNIQUE_PER_NAMESPACE_FUSAGE</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"one per namespace, please"</span><span class="plain">);</span>
<span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;unique_number</span><span class="plain"> = ++</span><span class="identifier">ict</span><span class="plain">-</span><span class="element">&gt;no_consumed</span><span class="plain">;</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ict</span><span class="plain">-</span><span class="element">&gt;next_ict</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
<span class="identifier">ict</span><span class="plain">-</span><span class="element">&gt;next_ict</span><span class="plain"> = </span><span class="functiontext">InterNames::new_ict</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">);</span>
<span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;unique_number</span><span class="plain"> = 1;</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">ict</span><span class="plain"> = </span><span class="identifier">ict</span><span class="plain">-</span><span class="element">&gt;next_ict</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">InterNames::writer</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">char</span><span class="plain"> *</span><span class="identifier">format_string</span><span class="plain">, </span><span class="reserved">void</span><span class="plain"> *</span><span class="identifier">vI</span><span class="plain">) {</span>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain"> = (</span><span class="reserved">inter_name</span><span class="plain"> *) </span><span class="identifier">vI</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">iname</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&lt;no-inter-name&gt;"</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;family</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"bad inter_name"</span><span class="plain">);</span>
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;family</span><span class="plain">-</span><span class="element">&gt;ingen</span><span class="plain">) {</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">DERIVED_INGEN</span><span class="plain">:</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%S"</span><span class="plain">, </span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;family</span><span class="plain">-</span><span class="element">&gt;derived_prefix</span><span class="plain">);</span>
<span class="functiontext">InterNames::writer</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">format_string</span><span class="plain">, </span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;derived_from</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%S"</span><span class="plain">, </span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;family</span><span class="plain">-</span><span class="element">&gt;derived_suffix</span><span class="plain">);</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">UNIQUE_INGEN</span><span class="plain">:</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%S"</span><span class="plain">, </span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;family</span><span class="plain">-</span><span class="element">&gt;name_stem</span><span class="plain">);</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">MULTIPLE_INGEN</span><span class="plain">:</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%S"</span><span class="plain">, </span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;family</span><span class="plain">-</span><span class="element">&gt;name_stem</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;unique_number</span><span class="plain"> &gt;= 0) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%d"</span><span class="plain">, </span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;unique_number</span><span class="plain">);</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">default</span><span class="plain">: </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"unknown ingen"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;memo</span><span class="plain">) &gt; 0) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"_%S"</span><span class="plain">, </span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;memo</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;memo</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;derived_from</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;parametrised_derivatives</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;declared_in</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;to_mark</span><span class="plain"> = 0;</span>
<span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;eventual_owner</span><span class="plain"> = </span><span class="functiontext">Hierarchy::main</span><span class="plain">();</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">N</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
<span class="reserved">inter_name_family</span><span class="plain"> *</span><span class="functiontext">InterNames::name_generator</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">prefix</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">stem</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">suffix</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">fusage</span><span class="plain"> = </span><span class="constant">MANY_PER_NAMESPACE_FUSAGE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">prefix</span><span class="plain">) &gt; 0) || (</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">suffix</span><span class="plain">) &gt; 0)) </span><span class="identifier">fusage</span><span class="plain"> = </span><span class="constant">DERIVED_FUSAGE</span><span class="plain">;</span>
<span class="reserved">inter_name_family</span><span class="plain"> *</span><span class="identifier">family</span><span class="plain"> = </span><span class="functiontext">InterNames::new_family</span><span class="plain">(</span><span class="identifier">fusage</span><span class="plain">, </span><span class="identifier">stem</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">prefix</span><span class="plain">) &gt; 0) </span><span class="identifier">family</span><span class="plain">-</span><span class="element">&gt;derived_prefix</span><span class="plain"> = </span><span class="identifier">Str::duplicate</span><span class="plain">(</span><span class="identifier">prefix</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">suffix</span><span class="plain">) &gt; 0) </span><span class="identifier">family</span><span class="plain">-</span><span class="element">&gt;derived_suffix</span><span class="plain"> = </span><span class="identifier">Str::duplicate</span><span class="plain">(</span><span class="identifier">suffix</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">family</span><span class="plain">;</span>
<p class="inwebparagraph"></p>
<p class="endnote">The function InterNames::writer is used in 1/cm (<a href="1-cm.html#SP6_3">&#167;6.3</a>).</p>
<p class="inwebparagraph"><a id="SP4"></a><b>&#167;4. Making new inames. </b>We can now make a new iname, which is easy unless there's a memo to attach.
For example, attaching the wording "printing the name of a dark room" to
an iname which would otherwise just be <code class="display"><span class="extract">V12</span></code> produces <code class="display"><span class="extract">V12_printing_the_name_of_a_da</span></code>.
Memos exist almost largely to make the Inter code easier for human eyes to read,
as in this case, but sometimes, as with kind names like <code class="display"><span class="extract">K2_thing</span></code>, they're
needed because template or explicit I6 inclusion code makes references to them.
</p>
<p class="inwebparagraph">Although most inter names are eventually used to create symbols in the
Inter hierarchy's symbols table, this does not happen immediately, and
for some inames it never will.
</p>
<pre class="display">
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="functiontext">InterNames::new</span><span class="plain">(</span><span class="reserved">inter_name_generator</span><span class="plain"> *</span><span class="identifier">F</span><span class="plain">, </span><span class="reserved">package_request</span><span class="plain"> *</span><span class="identifier">R</span><span class="plain">, </span><span class="identifier">wording</span><span class="plain"> </span><span class="identifier">W</span><span class="plain">) {</span>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">inter_name</span><span class="plain">);</span>
<span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;family</span><span class="plain"> = </span><span class="identifier">F</span><span class="plain">;</span>
<span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;unique_number</span><span class="plain"> = 0;</span>
<span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;derived_from</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;location_in_hierarchy</span><span class="plain"> = </span><span class="identifier">R</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Wordings::empty</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">)) {</span>
<span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;memo</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;memo</span><span class="plain"> = </span><span class="identifier">Str::new</span><span class="plain">();</span>
&lt;<span class="cwebmacro">Fill the memo with up to 28 characters of text from the given wording</span> <span class="cwebmacronumber">4.1</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Ensure that the name, as now extended by the memo, is a legal Inter identifier</span> <span class="cwebmacronumber">4.2</span>&gt;<span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">iname</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="functiontext">InterNames::one_off</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">, </span><span class="reserved">package_request</span><span class="plain"> *</span><span class="identifier">R</span><span class="plain">) {</span>
<span class="reserved">inter_name_family</span><span class="plain"> *</span><span class="identifier">F</span><span class="plain"> = </span><span class="functiontext">InterNames::new_family</span><span class="plain">(</span><span class="constant">UNIQUE_FUSAGE</span><span class="plain">, </span><span class="identifier">name</span><span class="plain">);</span>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">N</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">inter_name</span><span class="plain">);</span>
<span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;namespace</span><span class="plain"> = </span><span class="functiontext">InterNames::root</span><span class="plain">();</span>
<span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;family</span><span class="plain"> = </span><span class="identifier">F</span><span class="plain">;</span>
<span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;unique_number</span><span class="plain"> = 1;</span>
<span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;memo</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;override</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;derived_from</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;parametrised_derivatives</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;declared_in</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;to_mark</span><span class="plain"> = 0;</span>
<span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;eventual_owner</span><span class="plain"> = </span><span class="identifier">R</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">N</span><span class="plain">;</span>
<span class="plain">}</span>
<p class="inwebparagraph"></p>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">InterNames::attach_memo</span><span class="plain">(</span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">N</span><span class="plain">, </span><span class="identifier">wording</span><span class="plain"> </span><span class="identifier">W</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"too late to attach memo"</span><span class="plain">);</span>
<span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;memo</span><span class="plain"> = </span><span class="identifier">Str::new</span><span class="plain">();</span>
<p class="endnote">The function InterNames::new is used in <a href="#SP5">&#167;5</a>, <a href="#SP6">&#167;6</a>.</p>
<p class="inwebparagraph"><a id="SP4_1"></a><b>&#167;4.1. </b><code class="display">
&lt;<span class="cwebmacrodefn">Fill the memo with up to 28 characters of text from the given wording</span> <span class="cwebmacronumber">4.1</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">c</span><span class="plain"> = 0;</span>
<span class="identifier">LOOP_THROUGH_WORDING</span><span class="plain">(</span><span class="identifier">j</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">) {</span>
<span class="comment">identifier is at this point 32 chars or fewer in length: add at most 30 more</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">c</span><span class="plain">++ &gt; 0) </span><span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;memo</span><span class="plain">, </span><span class="string">" "</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">c</span><span class="plain">++ &gt; 0) </span><span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;memo</span><span class="plain">, </span><span class="string">" "</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Wide::len</span><span class="plain">(</span><span class="identifier">Lexer::word_text</span><span class="plain">(</span><span class="identifier">j</span><span class="plain">)) &gt; 30)</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;memo</span><span class="plain">, </span><span class="string">"etc"</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;memo</span><span class="plain">, </span><span class="string">"%N"</span><span class="plain">, </span><span class="identifier">j</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;memo</span><span class="plain">) &gt; 32) </span><span class="reserved">break</span><span class="plain">;</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;memo</span><span class="plain">, </span><span class="string">"etc"</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;memo</span><span class="plain">, </span><span class="string">"%N"</span><span class="plain">, </span><span class="identifier">j</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;memo</span><span class="plain">) &gt; 32) </span><span class="reserved">break</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">Str::truncate</span><span class="plain">(</span><span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;memo</span><span class="plain">, 28); </span> <span class="comment">it was at worst 62 chars in size, but is now truncated to 28</span>
<span class="identifier">Identifiers::purify</span><span class="plain">(</span><span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;memo</span><span class="plain">);</span>
<span class="identifier">Str::truncate</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;memo</span><span class="plain">, 28); </span> <span class="comment">it was at worst 62 chars in size, but is now truncated to 28</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
<p class="inwebparagraph"><a id="SP4_2"></a><b>&#167;4.2. </b><code class="display">
&lt;<span class="cwebmacrodefn">Ensure that the name, as now extended by the memo, is a legal Inter identifier</span> <span class="cwebmacronumber">4.2</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="identifier">Identifiers::purify</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;memo</span><span class="plain">);</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">NBUFF</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">NBUFF</span><span class="plain">, </span><span class="string">"%n"</span><span class="plain">, </span><span class="identifier">N</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">NBUFF</span><span class="plain">, </span><span class="string">"%n"</span><span class="plain">, </span><span class="identifier">iname</span><span class="plain">);</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">L</span><span class="plain"> = </span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">NBUFF</span><span class="plain">);</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">NBUFF</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">L</span><span class="plain"> &gt; 28) </span><span class="identifier">Str::truncate</span><span class="plain">(</span><span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;memo</span><span class="plain">, </span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;memo</span><span class="plain">) - (</span><span class="identifier">L</span><span class="plain"> - 28));</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">L</span><span class="plain"> &gt; 28) </span><span class="identifier">Str::truncate</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;memo</span><span class="plain">, </span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;memo</span><span class="plain">) - (</span><span class="identifier">L</span><span class="plain"> - 28));</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
<p class="inwebparagraph"><a id="SP5"></a><b>&#167;5. </b>That creation function should be called only by these, which in turn must
be called only from within the current chapter. First, the single-shot cases,
where the caller wants a single name with fixed wording (but possibly with
a memo to attach):
</p>
<pre class="display">
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="functiontext">InterNames::explicitly_named_with_memo</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">, </span><span class="reserved">package_request</span><span class="plain"> *</span><span class="identifier">R</span><span class="plain">, </span><span class="identifier">wording</span><span class="plain"> </span><span class="identifier">W</span><span class="plain">) {</span>
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">InterNames::new</span><span class="plain">(</span><span class="functiontext">InterNames::single_use_generator</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">), </span><span class="identifier">R</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">InterNames::change_translation</span><span class="plain">(</span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">N</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">new_text</span><span class="plain">) {</span>
<span class="identifier">Inter::Symbols::set_translate</span><span class="plain">(</span><span class="functiontext">InterNames::to_symbol</span><span class="plain">(</span><span class="identifier">N</span><span class="plain">), </span><span class="identifier">new_text</span><span class="plain">);</span>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="functiontext">InterNames::explicitly_named</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">, </span><span class="reserved">package_request</span><span class="plain"> *</span><span class="identifier">R</span><span class="plain">) {</span>
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">InterNames::explicitly_named_with_memo</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">R</span><span class="plain">, </span><span class="identifier">EMPTY_WORDING</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function InterNames::explicitly_named_with_memo is used in 27/hl (<a href="27-hl.html#SP1_1">&#167;1.1</a>).</p>
<p class="endnote">The function InterNames::explicitly_named is used in 27/hr (<a href="27-hr.html#SP5">&#167;5</a>), 27/hl (<a href="27-hl.html#SP1">&#167;1</a>, <a href="27-hl.html#SP1_1">&#167;1.1</a>, <a href="27-hl.html#SP2">&#167;2</a>), 27/pc (<a href="27-pc.html#SP7">&#167;7</a>, <a href="27-pc.html#SP7_1">&#167;7.1</a>, <a href="27-pc.html#SP8">&#167;8</a>).</p>
<p class="inwebparagraph"><a id="SP6"></a><b>&#167;6. </b>Second, the generated or derived cases:
</p>
<pre class="display">
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="functiontext">InterNames::multiple</span><span class="plain">(</span><span class="reserved">inter_name_generator</span><span class="plain"> *</span><span class="identifier">F</span><span class="plain">, </span><span class="reserved">package_request</span><span class="plain"> *</span><span class="identifier">R</span><span class="plain">, </span><span class="identifier">wording</span><span class="plain"> </span><span class="identifier">W</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">F</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"no family"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">F</span><span class="plain">-</span><span class="element">&gt;ingen</span><span class="plain"> == </span><span class="constant">UNIQUE_INGEN</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"not a family name"</span><span class="plain">);</span>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain"> = </span><span class="functiontext">InterNames::new</span><span class="plain">(</span><span class="identifier">F</span><span class="plain">, </span><span class="identifier">R</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">F</span><span class="plain">-</span><span class="element">&gt;ingen</span><span class="plain"> != </span><span class="constant">DERIVED_INGEN</span><span class="plain">) </span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;unique_number</span><span class="plain"> = ++</span><span class="identifier">F</span><span class="plain">-</span><span class="element">&gt;no_generated</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">iname</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="functiontext">InterNames::get_translation</span><span class="plain">(</span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">N</span><span class="plain">) {</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">Inter::Symbols::get_translate</span><span class="plain">(</span><span class="functiontext">InterNames::to_symbol</span><span class="plain">(</span><span class="identifier">N</span><span class="plain">));</span>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="functiontext">InterNames::generated</span><span class="plain">(</span><span class="reserved">inter_name_generator</span><span class="plain"> *</span><span class="identifier">F</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">fix</span><span class="plain">, </span><span class="identifier">wording</span><span class="plain"> </span><span class="identifier">W</span><span class="plain">) {</span>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain"> = </span><span class="functiontext">InterNames::multiple</span><span class="plain">(</span><span class="identifier">F</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">fix</span><span class="plain"> != -1) </span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;unique_number</span><span class="plain"> = </span><span class="identifier">fix</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">iname</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="functiontext">InterNames::to_symbol</span><span class="plain">(</span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">N</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;to_mark</span><span class="plain">) </span><span class="identifier">Inter::Symbols::set_flag</span><span class="plain">(</span><span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain">, </span><span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;to_mark</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain">;</span>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="functiontext">InterNames::derived</span><span class="plain">(</span><span class="reserved">inter_name_generator</span><span class="plain"> *</span><span class="identifier">F</span><span class="plain">, </span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">from</span><span class="plain">, </span><span class="identifier">wording</span><span class="plain"> </span><span class="identifier">W</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">F</span><span class="plain">-</span><span class="element">&gt;ingen</span><span class="plain"> != </span><span class="constant">DERIVED_INGEN</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"not a derived family"</span><span class="plain">);</span>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain"> = </span><span class="functiontext">InterNames::multiple</span><span class="plain">(</span><span class="identifier">F</span><span class="plain">, </span><span class="identifier">from</span><span class="plain">-</span><span class="element">&gt;location_in_hierarchy</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">);</span>
<span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;derived_from</span><span class="plain"> = </span><span class="identifier">from</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">iname</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function InterNames::multiple appears nowhere else.</p>
<p class="endnote">The function InterNames::generated is used in 27/hl (<a href="27-hl.html#SP1">&#167;1</a>).</p>
<p class="endnote">The function InterNames::derived is used in 27/hl (<a href="27-hl.html#SP1">&#167;1</a>).</p>
<p class="inwebparagraph"><a id="SP7"></a><b>&#167;7. </b>An ugly necessity is that a handful of inames representing actions have to
be renamed after creation, thanks to sentences such as:
</p>
<blockquote>
<p>The taking action translates into I6 as "Take".</p>
</blockquote>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">InterNames::override_action_base_iname</span><span class="plain">(</span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">to</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">iname</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"no such iname"</span><span class="plain">);</span>
<span class="comment">if (iname-&gt;symbol) internal_error("too late to rename iname");</span>
<span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;family</span><span class="plain">-</span><span class="element">&gt;name_stem</span><span class="plain"> = </span><span class="identifier">Str::duplicate</span><span class="plain">(</span><span class="identifier">to</span><span class="plain">);</span>
<span class="identifier">Str::clear</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;memo</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function InterNames::override_action_base_iname appears nowhere else.</p>
<p class="inwebparagraph"><a id="SP8"></a><b>&#167;8. Conversion of inames to symbols. </b>The purpose of inames is not quite to represent identifier names occurring in
given packages inside the Inter hierarchy: it would be more accurate to say
that they represent potential identifiers, which may or may not be used.
At some point they will probably (but not certainly) undergo "conversion",
when they are matched up with actual symbols in the symbols tables of the
given packages. Once this is done, an iname can't be renamed or moved.
</p>
<p class="inwebparagraph">Conversion is done on-demand, and thus left as late as possible. It happens
automatically in the following function:
</p>
<pre class="display">
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="functiontext">InterNames::to_symbol</span><span class="plain">(</span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">NBUFF</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">NBUFF</span><span class="plain">, </span><span class="string">"%n"</span><span class="plain">, </span><span class="identifier">iname</span><span class="plain">);</span>
<span class="identifier">inter_symbols_table</span><span class="plain"> *</span><span class="identifier">T</span><span class="plain"> = </span><span class="functiontext">Packaging::scope</span><span class="plain">(</span><span class="functiontext">Emit::repository</span><span class="plain">(), </span><span class="identifier">iname</span><span class="plain">);</span>
<span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain"> = </span><span class="functiontext">Emit::new_symbol</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">NBUFF</span><span class="plain">);</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">NBUFF</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">NBUFF</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">NBUFF</span><span class="plain">, </span><span class="string">"%n"</span><span class="plain">, </span><span class="identifier">N</span><span class="plain">);</span>
<span class="identifier">inter_symbols_table</span><span class="plain"> *</span><span class="identifier">T</span><span class="plain"> = </span><span class="functiontext">Packaging::scope</span><span class="plain">(</span><span class="functiontext">Emit::repository</span><span class="plain">(), </span><span class="identifier">N</span><span class="plain">);</span>
<span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain"> = </span><span class="functiontext">Emit::new_symbol</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">NBUFF</span><span class="plain">);</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">NBUFF</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;to_mark</span><span class="plain">) </span><span class="identifier">Inter::Symbols::set_flag</span><span class="plain">(</span><span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain">, </span><span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;to_mark</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="functiontext">InterNames::to_text</span><span class="plain">(</span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">N</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">N</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">InterNames::to_symbol</span><span class="plain">(</span><span class="identifier">N</span><span class="plain">)-&gt;</span><span class="identifier">symbol_name</span><span class="plain">;</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">InterNames::change_translation</span><span class="plain">(</span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">new_text</span><span class="plain">) {</span>
<span class="identifier">Inter::Symbols::set_translate</span><span class="plain">(</span><span class="functiontext">InterNames::to_symbol</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">), </span><span class="identifier">new_text</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="functiontext">InterNames::define_symbol</span><span class="plain">(</span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">N</span><span class="plain">) {</span>
<span class="functiontext">InterNames::to_symbol</span><span class="plain">(</span><span class="identifier">N</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Inter::Symbols::is_predeclared</span><span class="plain">(</span><span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain">)) {</span>
<span class="identifier">Inter::Symbols::undefine</span><span class="plain">(</span><span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain">);</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="functiontext">InterNames::get_translation</span><span class="plain">(</span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain">) {</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">Inter::Symbols::get_translate</span><span class="plain">(</span><span class="functiontext">InterNames::to_symbol</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">));</span>
<span class="plain">}</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="functiontext">InterNames::to_text</span><span class="plain">(</span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">iname</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">InterNames::to_symbol</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">)-&gt;</span><span class="identifier">symbol_name</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="functiontext">InterNames::define_symbol</span><span class="plain">(</span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain">) {</span>
<span class="functiontext">InterNames::to_symbol</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Inter::Symbols::is_predeclared</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain">)) {</span>
<span class="identifier">Inter::Symbols::undefine</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain">) &amp;&amp; (</span><span class="identifier">Inter::Symbols::read_annotation</span><span class="plain">(</span><span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain">, </span><span class="identifier">HOLDING_IANN</span><span class="plain">) == 1)) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Inter::Symbols::read_annotation</span><span class="plain">(</span><span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain">, </span><span class="identifier">DELENDA_EST_IANN</span><span class="plain">) != 1) {</span>
<span class="functiontext">Emit::annotate_symbol_i</span><span class="plain">(</span><span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain">, </span><span class="identifier">DELENDA_EST_IANN</span><span class="plain">, 1);</span>
<span class="identifier">Inter::Symbols::strike_definition</span><span class="plain">(</span><span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain">) &amp;&amp; (</span><span class="identifier">Inter::Symbols::read_annotation</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain">, </span><span class="identifier">HOLDING_IANN</span><span class="plain">) == 1)) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Inter::Symbols::read_annotation</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain">, </span><span class="identifier">DELENDA_EST_IANN</span><span class="plain">) != 1) {</span>
<span class="functiontext">Emit::annotate_symbol_i</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain">, </span><span class="identifier">DELENDA_EST_IANN</span><span class="plain">, 1);</span>
<span class="identifier">Inter::Symbols::strike_definition</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="functiontext">InterNames::destroy_symbol</span><span class="plain">(</span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">N</span><span class="plain">) {</span>
<span class="functiontext">InterNames::to_symbol</span><span class="plain">(</span><span class="identifier">N</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Inter::Symbols::is_predeclared</span><span class="plain">(</span><span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain">)) {</span>
<span class="identifier">Inter::Symbols::undefine</span><span class="plain">(</span><span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain">);</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="functiontext">InterNames::destroy_symbol</span><span class="plain">(</span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain">) {</span>
<span class="functiontext">InterNames::to_symbol</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Inter::Symbols::is_predeclared</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain">)) {</span>
<span class="identifier">Inter::Symbols::undefine</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain">) &amp;&amp; (</span><span class="identifier">Inter::Symbols::read_annotation</span><span class="plain">(</span><span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain">, </span><span class="identifier">HOLDING_IANN</span><span class="plain">) == 1)) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Inter::Symbols::read_annotation</span><span class="plain">(</span><span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain">, </span><span class="identifier">DELENDA_EST_IANN</span><span class="plain">) != 1) {</span>
<span class="functiontext">Emit::annotate_symbol_i</span><span class="plain">(</span><span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain">, </span><span class="identifier">DELENDA_EST_IANN</span><span class="plain">, 1);</span>
<span class="identifier">Inter::Symbols::strike_definition</span><span class="plain">(</span><span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain">) &amp;&amp; (</span><span class="identifier">Inter::Symbols::read_annotation</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain">, </span><span class="identifier">HOLDING_IANN</span><span class="plain">) == 1)) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Inter::Symbols::read_annotation</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain">, </span><span class="identifier">DELENDA_EST_IANN</span><span class="plain">) != 1) {</span>
<span class="functiontext">Emit::annotate_symbol_i</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain">, </span><span class="identifier">DELENDA_EST_IANN</span><span class="plain">, 1);</span>
<span class="identifier">Inter::Symbols::strike_definition</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Inter::Symbols::read_annotation</span><span class="plain">(</span><span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain">, </span><span class="identifier">DELENDA_EST_IANN</span><span class="plain">) != 1) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"Bang"</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">InterNames::writer</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">char</span><span class="plain"> *</span><span class="identifier">format_string</span><span class="plain">, </span><span class="reserved">void</span><span class="plain"> *</span><span class="identifier">vI</span><span class="plain">) {</span>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">N</span><span class="plain"> = (</span><span class="reserved">inter_name</span><span class="plain"> *) </span><span class="identifier">vI</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">N</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&lt;no-inter-name&gt;"</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> {</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;family</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) || (</span><span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;namespace</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">)) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"bad inter_name"</span><span class="plain">);</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">NP</span><span class="plain"> = </span><span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;namespace</span><span class="plain">-</span><span class="element">&gt;namespace_prefix</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;family</span><span class="plain">-</span><span class="element">&gt;mark_exports</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">) </span><span class="identifier">NP</span><span class="plain"> = </span><span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;namespace</span><span class="plain">-</span><span class="element">&gt;unmarked_prefix</span><span class="plain">;</span>
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;family</span><span class="plain">-</span><span class="element">&gt;fusage</span><span class="plain">) {</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">DERIVED_FUSAGE</span><span class="plain">:</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%S"</span><span class="plain">, </span><span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;family</span><span class="plain">-</span><span class="element">&gt;derived_prefix</span><span class="plain">);</span>
<span class="functiontext">InterNames::writer</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">format_string</span><span class="plain">, </span><span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;derived_from</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%S"</span><span class="plain">, </span><span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;family</span><span class="plain">-</span><span class="element">&gt;derived_suffix</span><span class="plain">);</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">UNIQUE_FUSAGE</span><span class="plain">:</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%S"</span><span class="plain">, </span><span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;family</span><span class="plain">-</span><span class="element">&gt;family_name</span><span class="plain">);</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">UNIQUE_PER_NAMESPACE_FUSAGE</span><span class="plain">:</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">NP</span><span class="plain">) &gt; 0) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%S_"</span><span class="plain">, </span><span class="identifier">NP</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%S"</span><span class="plain">, </span><span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;family</span><span class="plain">-</span><span class="element">&gt;family_name</span><span class="plain">);</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">MANY_PER_NAMESPACE_FUSAGE</span><span class="plain">:</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">NP</span><span class="plain">) &gt; 0) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%S_"</span><span class="plain">, </span><span class="identifier">NP</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%S"</span><span class="plain">, </span><span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;family</span><span class="plain">-</span><span class="element">&gt;family_name</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;unique_number</span><span class="plain"> &gt;= 0) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%d"</span><span class="plain">, </span><span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;unique_number</span><span class="plain">);</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">default</span><span class="plain">: </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"unknown fusage"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;memo</span><span class="plain">) &gt; 0) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"_%S"</span><span class="plain">, </span><span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;memo</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Inter::Symbols::read_annotation</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain">, </span><span class="identifier">DELENDA_EST_IANN</span><span class="plain">) != 1) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"Bang"</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">InterNames::set_flag</span><span class="plain">(</span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">f</span><span class="plain">) {</span>
@ -334,73 +402,22 @@
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Inter::Symbols::is_defined</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="functiontext">InterNames::new_f</span><span class="plain">(</span><span class="reserved">inter_name_family</span><span class="plain"> *</span><span class="identifier">F</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">fix</span><span class="plain">) {</span>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain"> = </span><span class="functiontext">InterNames::new_in_space</span><span class="plain">(</span><span class="functiontext">InterNames::root</span><span class="plain">(), </span><span class="identifier">F</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">fix</span><span class="plain"> != -1) </span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;unique_number</span><span class="plain"> = </span><span class="identifier">fix</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">iname</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="functiontext">InterNames::new_in_f</span><span class="plain">(</span><span class="reserved">inter_name_family</span><span class="plain"> *</span><span class="identifier">F</span><span class="plain">, </span><span class="reserved">compilation_module</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">fix</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">C</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="functiontext">InterNames::new_f</span><span class="plain">(</span><span class="identifier">F</span><span class="plain">, </span><span class="identifier">fix</span><span class="plain">);</span>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain"> = </span><span class="functiontext">InterNames::new_in_space</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">-</span><span class="element">&gt;namespace</span><span class="plain">, </span><span class="identifier">F</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">fix</span><span class="plain"> != -1) </span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;unique_number</span><span class="plain"> = </span><span class="identifier">fix</span><span class="plain">;</span>
<span class="functiontext">InterNames::mark</span><span class="plain">(</span><span class="identifier">F</span><span class="plain">, </span><span class="identifier">iname</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">iname</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">InterNames::mark</span><span class="plain">(</span><span class="reserved">inter_name_family</span><span class="plain"> *</span><span class="identifier">F</span><span class="plain">, </span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain">, </span><span class="reserved">compilation_module</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain">) {</span>
<span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;declared_in</span><span class="plain"> = </span><span class="identifier">C</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">compilation_module</span><span class="plain"> *</span><span class="functiontext">InterNames::to_module</span><span class="plain">(</span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">iname</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;declared_in</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="functiontext">InterNames::new_derived_f</span><span class="plain">(</span><span class="reserved">inter_name_family</span><span class="plain"> *</span><span class="identifier">F</span><span class="plain">, </span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">from</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">F</span><span class="plain">-</span><span class="element">&gt;fusage</span><span class="plain"> != </span><span class="constant">DERIVED_FUSAGE</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"not a derived family"</span><span class="plain">);</span>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">N</span><span class="plain"> = </span><span class="functiontext">InterNames::new_in_space</span><span class="plain">(</span><span class="functiontext">InterNames::root</span><span class="plain">(), </span><span class="identifier">F</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">);</span>
<span class="functiontext">Packaging::house_with</span><span class="plain">(</span><span class="identifier">N</span><span class="plain">, </span><span class="identifier">from</span><span class="plain">);</span>
<span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;derived_from</span><span class="plain"> = </span><span class="identifier">from</span><span class="plain">;</span>
<span class="reserved">compilation_module</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain"> = </span><span class="functiontext">InterNames::to_module</span><span class="plain">(</span><span class="identifier">from</span><span class="plain">);</span>
<span class="functiontext">InterNames::mark</span><span class="plain">(</span><span class="identifier">F</span><span class="plain">, </span><span class="identifier">N</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">N</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function InterNames::new_namespace is used in 27/cm (<a href="27-cm.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function InterNames::root is used in 27/cm (<a href="27-cm.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function InterNames::new_family appears nowhere else.</p>
<p class="endnote">The function InterNames::new_ict appears nowhere else.</p>
<p class="endnote">The function InterNames::new_in_space appears nowhere else.</p>
<p class="endnote">The function InterNames::name_generator is used in 27/tr (<a href="27-tr.html#SP1">&#167;1</a>).</p>
<p class="endnote">The function InterNames::one_off is used in 27/hr (<a href="27-hr.html#SP5">&#167;5</a>), 27/hl (<a href="27-hl.html#SP1">&#167;1</a>, <a href="27-hl.html#SP1_1">&#167;1.1</a>, <a href="27-hl.html#SP2">&#167;2</a>), 27/pc (<a href="27-pc.html#SP7">&#167;7</a>, <a href="27-pc.html#SP7_1">&#167;7.1</a>, <a href="27-pc.html#SP8">&#167;8</a>).</p>
<p class="endnote">The function InterNames::attach_memo is used in 27/hl (<a href="27-hl.html#SP1">&#167;1</a>, <a href="27-hl.html#SP1_1">&#167;1.1</a>).</p>
<p class="endnote">The function InterNames::to_symbol is used in 13/rsfk (<a href="13-rsfk.html#SP5">&#167;5</a>), 15/epv (<a href="15-epv.html#SP4">&#167;4</a>), 21/rl (<a href="21-rl.html#SP9">&#167;9</a>, <a href="21-rl.html#SP11_2">&#167;11.2</a>, <a href="21-rl.html#SP22">&#167;22</a>), 26/iti (<a href="26-iti.html#SP9">&#167;9</a>), 27/is (<a href="27-is.html#SP32">&#167;32</a>), 27/ei (<a href="27-ei.html#SP3">&#167;3</a>, <a href="27-ei.html#SP4">&#167;4</a>, <a href="27-ei.html#SP5">&#167;5</a>).</p>
<p class="endnote">The function InterNames::change_translation is used in 5/un (<a href="5-un.html#SP1">&#167;1</a>), 13/rsfk (<a href="13-rsfk.html#SP25">&#167;25</a>), 15/pr (<a href="15-pr.html#SP21">&#167;21</a>), 27/hl (<a href="27-hl.html#SP1">&#167;1</a>, <a href="27-hl.html#SP1_1">&#167;1.1</a>), 27/pc (<a href="27-pc.html#SP8">&#167;8</a>).</p>
<p class="endnote">The function InterNames::get_translation is used in 15/pr (<a href="15-pr.html#SP22_1">&#167;22.1</a>).</p>
<p class="endnote">The function InterNames::to_symbol is used in 13/rsfk (<a href="13-rsfk.html#SP5">&#167;5</a>), 15/epv (<a href="15-epv.html#SP4">&#167;4</a>), 21/rl (<a href="21-rl.html#SP9">&#167;9</a>, <a href="21-rl.html#SP11_2">&#167;11.2</a>, <a href="21-rl.html#SP22">&#167;22</a>), 26/iti (<a href="26-iti.html#SP9">&#167;9</a>), 27/hr (<a href="27-hr.html#SP5">&#167;5</a>), 27/is (<a href="27-is.html#SP32">&#167;32</a>), 27/ei (<a href="27-ei.html#SP3">&#167;3</a>, <a href="27-ei.html#SP4">&#167;4</a>, <a href="27-ei.html#SP5">&#167;5</a>).</p>
<p class="endnote">The function InterNames::to_text is used in 15/vp (<a href="15-vp.html#SP3">&#167;3</a>).</p>
<p class="endnote">The function InterNames::to_text is used in 15/vp (<a href="15-vp.html#SP3">&#167;3</a>), 27/hr (<a href="27-hr.html#SP5">&#167;5</a>).</p>
<p class="endnote">The function InterNames::define_symbol is used in 27/ei (<a href="27-ei.html#SP4">&#167;4</a>).</p>
<p class="endnote">The function InterNames::destroy_symbol appears nowhere else.</p>
<p class="endnote">The function InterNames::writer is used in 1/cm (<a href="1-cm.html#SP6_3">&#167;6.3</a>).</p>
<p class="endnote">The function InterNames::set_flag is used in 27/hr (<a href="27-hr.html#SP5">&#167;5</a>), 27/hl (<a href="27-hl.html#SP1">&#167;1</a>).</p>
<p class="endnote">The function InterNames::clear_flag is used in 5/un (<a href="5-un.html#SP1">&#167;1</a>).</p>
@ -419,56 +436,6 @@
<p class="endnote">The function InterNames::defined is used in 13/rsfk (<a href="13-rsfk.html#SP25">&#167;25</a>).</p>
<p class="endnote">The function InterNames::new_f is used in <a href="#SP3">&#167;3</a>, 27/hl (<a href="27-hl.html#SP1">&#167;1</a>).</p>
<p class="endnote">The function InterNames::new_in_f is used in 27/hl (<a href="27-hl.html#SP1">&#167;1</a>).</p>
<p class="endnote">The function InterNames::mark appears nowhere else.</p>
<p class="endnote">The function InterNames::to_module appears nowhere else.</p>
<p class="endnote">The function InterNames::new_derived_f is used in 27/hl (<a href="27-hl.html#SP1">&#167;1</a>).</p>
<p class="inwebparagraph"><a id="SP3"></a><b>&#167;3. </b></p>
<pre class="definitions">
<span class="definitionkeyword">enum</span> <span class="constant">FIRST_INSTANCE_INDERIV</span><span class="definitionkeyword"> from </span><span class="constant">26</span>
<span class="definitionkeyword">enum</span> <span class="constant">COUNT_INSTANCE_INDERIV</span>
<span class="definitionkeyword">enum</span> <span class="constant">NEXT_INSTANCE_INDERIV</span>
<span class="definitionkeyword">enum</span> <span class="constant">FINAL_INDERIV</span>
</pre>
<pre class="display">
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="functiontext">InterNames::letter_parametrised_name_f</span><span class="plain">(</span><span class="reserved">inter_name_family</span><span class="plain"> *</span><span class="identifier">family</span><span class="plain">, </span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">rname</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">marker</span><span class="plain">, </span><span class="reserved">package_request</span><span class="plain"> *</span><span class="identifier">R</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">rname</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"can't parametrise null name"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">rname</span><span class="plain">-</span><span class="element">&gt;parametrised_derivatives</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
<span class="identifier">rname</span><span class="plain">-</span><span class="element">&gt;parametrised_derivatives</span><span class="plain"> =</span>
<span class="identifier">Memory::I7_calloc</span><span class="plain">(</span><span class="constant">FINAL_INDERIV</span><span class="plain">, </span><span class="reserved">sizeof</span><span class="plain">(</span><span class="reserved">inter_name</span><span class="plain"> *), </span><span class="identifier">INTER_SYMBOLS_MREASON</span><span class="plain">);</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">=0; </span><span class="identifier">i</span><span class="plain">&lt;</span><span class="constant">FINAL_INDERIV</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">++) </span><span class="identifier">rname</span><span class="plain">-</span><span class="element">&gt;parametrised_derivatives</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">] = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">marker</span><span class="plain"> &lt; 0) || (</span><span class="identifier">marker</span><span class="plain"> &gt;= </span><span class="constant">FINAL_INDERIV</span><span class="plain">)) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"respomse parameter out of range"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">rname</span><span class="plain">-</span><span class="element">&gt;parametrised_derivatives</span><span class="plain">[</span><span class="identifier">marker</span><span class="plain">] == </span><span class="identifier">NULL</span><span class="plain">) {</span>
<span class="identifier">rname</span><span class="plain">-</span><span class="element">&gt;parametrised_derivatives</span><span class="plain">[</span><span class="identifier">marker</span><span class="plain">] = </span><span class="functiontext">InterNames::new_f</span><span class="plain">(</span><span class="identifier">family</span><span class="plain">, -1);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">R</span><span class="plain">) </span><span class="functiontext">Packaging::house</span><span class="plain">(</span><span class="identifier">rname</span><span class="plain">-</span><span class="element">&gt;parametrised_derivatives</span><span class="plain">[</span><span class="identifier">marker</span><span class="plain">], </span><span class="identifier">R</span><span class="plain">);</span>
<span class="identifier">rname</span><span class="plain">-</span><span class="element">&gt;parametrised_derivatives</span><span class="plain">[</span><span class="identifier">marker</span><span class="plain">]-</span><span class="element">&gt;derived_from</span><span class="plain"> = </span><span class="identifier">rname</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">rname</span><span class="plain">-</span><span class="element">&gt;parametrised_derivatives</span><span class="plain">[</span><span class="identifier">marker</span><span class="plain">];</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">InterNames::override_action_base_iname</span><span class="plain">(</span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">ab_iname</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">to</span><span class="plain">) {</span>
<span class="identifier">ab_iname</span><span class="plain">-</span><span class="element">&gt;family</span><span class="plain">-</span><span class="element">&gt;family_name</span><span class="plain"> = </span><span class="identifier">Str::duplicate</span><span class="plain">(</span><span class="identifier">to</span><span class="plain">);</span>
<span class="identifier">Str::clear</span><span class="plain">(</span><span class="identifier">ab_iname</span><span class="plain">-</span><span class="element">&gt;memo</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function InterNames::letter_parametrised_name_f is used in 27/hl (<a href="27-hl.html#SP1">&#167;1</a>).</p>
<p class="endnote">The function InterNames::override_action_base_iname appears nowhere else.</p>
<hr class="tocbar">
<ul class="toc"><li><a href="27-pc.html">Back to 'Packaging'</a></li><li><a href="27-is.html">Continue with 'Inter Schemas'</a></li></ul><hr class="tocbar">
<!--End of weave-->

View file

@ -87,7 +87,7 @@
<span class="reserved">package_request</span><span class="plain"> *</span><span class="functiontext">Packaging::request</span><span class="plain">(</span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">, </span><span class="reserved">package_request</span><span class="plain"> *</span><span class="identifier">parent</span><span class="plain">, </span><span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">pt</span><span class="plain">) {</span>
<span class="reserved">package_request</span><span class="plain"> *</span><span class="identifier">R</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">package_request</span><span class="plain">);</span>
<span class="identifier">R</span><span class="plain">-</span><span class="element">&gt;eventual_name</span><span class="plain"> = </span><span class="identifier">name</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">parent</span><span class="plain">) </span><span class="identifier">name</span><span class="plain">-</span><span class="element">&gt;eventual_owner</span><span class="plain"> = </span><span class="identifier">parent</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">parent</span><span class="plain">) </span><span class="identifier">name</span><span class="plain">-</span><span class="element">&gt;location_in_hierarchy</span><span class="plain"> = </span><span class="identifier">parent</span><span class="plain">;</span>
<span class="identifier">R</span><span class="plain">-</span><span class="element">&gt;eventual_type</span><span class="plain"> = </span><span class="identifier">pt</span><span class="plain">;</span>
<span class="identifier">R</span><span class="plain">-</span><span class="element">&gt;actual_package</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">R</span><span class="plain">-</span><span class="element">&gt;parent_request</span><span class="plain"> = </span><span class="identifier">parent</span><span class="plain">;</span>
@ -135,11 +135,11 @@
<span class="plain">}</span>
<span class="reserved">package_request</span><span class="plain"> *</span><span class="functiontext">Packaging::home_of</span><span class="plain">(</span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">N</span><span class="plain">) {</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;eventual_owner</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;location_in_hierarchy</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">packaging_state</span><span class="plain"> </span><span class="functiontext">Packaging::enter_home_of</span><span class="plain">(</span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">N</span><span class="plain">) {</span>
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">Packaging::enter</span><span class="plain">(</span><span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;eventual_owner</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">Packaging::enter</span><span class="plain">(</span><span class="functiontext">Packaging::home_of</span><span class="plain">(</span><span class="identifier">N</span><span class="plain">));</span>
<span class="plain">}</span>
<span class="reserved">packaging_state</span><span class="plain"> </span><span class="functiontext">Packaging::enter_current_enclosure</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
@ -155,9 +155,9 @@
<p class="endnote">The function Packaging::stateless is used in 15/epv (<a href="15-epv.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Packaging::home_of is used in 12/cdp (<a href="12-cdp.html#SP5">&#167;5</a>), 27/hr (<a href="27-hr.html#SP3">&#167;3</a>), 27/hl (<a href="27-hl.html#SP1">&#167;1</a>).</p>
<p class="endnote">The function Packaging::home_of is used in 5/ins (<a href="5-ins.html#SP34">&#167;34</a>), 12/cdp (<a href="12-cdp.html#SP5">&#167;5</a>), 13/rsfk (<a href="13-rsfk.html#SP22">&#167;22</a>), 21/rl2 (<a href="21-rl2.html#SP20">&#167;20</a>), 26/rt (<a href="26-rt.html#SP3">&#167;3</a>, <a href="26-rt.html#SP4">&#167;4</a>), 27/hr (<a href="27-hr.html#SP3">&#167;3</a>), 27/hl (<a href="27-hl.html#SP1">&#167;1</a>), 27/ei (<a href="27-ei.html#SP4">&#167;4</a>).</p>
<p class="endnote">The function Packaging::enter_home_of is used in 6/bp (<a href="6-bp.html#SP42">&#167;42</a>), 6/rlt (<a href="6-rlt.html#SP14">&#167;14</a>, <a href="6-rlt.html#SP15_1">&#167;15.1</a>, <a href="6-rlt.html#SP20">&#167;20</a>, <a href="6-rlt.html#SP20_3">&#167;20.3</a>), 6/nv (<a href="6-nv.html#SP18">&#167;18</a>), 12/cdp (<a href="12-cdp.html#SP2_1_1">&#167;2.1.1</a>), 13/kak (<a href="13-kak.html#SP5">&#167;5</a>), 13/rsfk (<a href="13-rsfk.html#SP4">&#167;4</a>, <a href="13-rsfk.html#SP16_2">&#167;16.2</a>, <a href="13-rsfk.html#SP25">&#167;25</a>), 15/pr (<a href="15-pr.html#SP27">&#167;27</a>), 15/epv (<a href="15-epv.html#SP1_1_2">&#167;1.1.2</a>), 16/ic (<a href="16-ic.html#SP10">&#167;10</a>), 17/tl (<a href="17-tl.html#SP14_1">&#167;14.1</a>, <a href="17-tl.html#SP14_2">&#167;14.2</a>, <a href="17-tl.html#SP16">&#167;16</a>), 17/ts (<a href="17-ts.html#SP8_1">&#167;8.1</a>, <a href="17-ts.html#SP11">&#167;11</a>), 17/rs (<a href="17-rs.html#SP7_3">&#167;7.3</a>), 18/lc (<a href="18-lc.html#SP11">&#167;11</a>, <a href="18-lc.html#SP12_1">&#167;12.1</a>), 19/rsft (<a href="19-rsft.html#SP1_1_1_1">&#167;1.1.1.1</a>, <a href="19-rsft.html#SP1_1_1_1_1">&#167;1.1.1.1.1</a>, <a href="19-rsft.html#SP1_2">&#167;1.2</a>, <a href="19-rsft.html#SP1_3">&#167;1.3</a>), 21/rl2 (<a href="21-rl2.html#SP14">&#167;14</a>, <a href="21-rl2.html#SP20">&#167;20</a>), 21/fao (<a href="21-fao.html#SP10">&#167;10</a>), 21/ac (<a href="21-ac.html#SP6">&#167;6</a>, <a href="21-ac.html#SP8">&#167;8</a>, <a href="21-ac.html#SP14">&#167;14</a>), 22/cs (<a href="22-cs.html#SP8">&#167;8</a>), 22/pav (<a href="22-pav.html#SP8_1">&#167;8.1</a>), 22/tp2 (<a href="22-tp2.html#SP4">&#167;4</a>), 24/ch (<a href="24-ch.html#SP6">&#167;6</a>, <a href="24-ch.html#SP8">&#167;8</a>), 26/vm (<a href="26-vm.html#SP8">&#167;8</a>), 26/uo (<a href="26-uo.html#SP21">&#167;21</a>), 26/lt (<a href="26-lt.html#SP4_1">&#167;4.1</a>), 26/jl (<a href="26-jl.html#SP6">&#167;6</a>), 26/rt (<a href="26-rt.html#SP1">&#167;1</a>), 26/iti (<a href="26-iti.html#SP10">&#167;10</a>), 26/pl (<a href="26-pl.html#SP12">&#167;12</a>), 26/ts (<a href="26-ts.html#SP10">&#167;10</a>), 27/hr (<a href="27-hr.html#SP4">&#167;4</a>), 27/ei (<a href="27-ei.html#SP3">&#167;3</a>, <a href="27-ei.html#SP4">&#167;4</a>).</p>
<p class="endnote">The function Packaging::enter_home_of is used in 5/ins (<a href="5-ins.html#SP34">&#167;34</a>), 5/nv (<a href="5-nv.html#SP16">&#167;16</a>), 6/bp (<a href="6-bp.html#SP42">&#167;42</a>), 6/rlt (<a href="6-rlt.html#SP14">&#167;14</a>, <a href="6-rlt.html#SP15_1">&#167;15.1</a>, <a href="6-rlt.html#SP20">&#167;20</a>, <a href="6-rlt.html#SP20_3">&#167;20.3</a>), 6/nv (<a href="6-nv.html#SP18">&#167;18</a>), 12/cdp (<a href="12-cdp.html#SP2_1_1">&#167;2.1.1</a>), 13/kak (<a href="13-kak.html#SP5">&#167;5</a>), 13/rsfk (<a href="13-rsfk.html#SP4">&#167;4</a>, <a href="13-rsfk.html#SP16_2">&#167;16.2</a>, <a href="13-rsfk.html#SP25">&#167;25</a>), 15/pr (<a href="15-pr.html#SP27">&#167;27</a>), 15/epv (<a href="15-epv.html#SP1_1_2">&#167;1.1.2</a>), 16/ic (<a href="16-ic.html#SP10">&#167;10</a>), 17/tl (<a href="17-tl.html#SP14_1">&#167;14.1</a>, <a href="17-tl.html#SP14_2">&#167;14.2</a>, <a href="17-tl.html#SP16">&#167;16</a>), 17/ts (<a href="17-ts.html#SP8_1">&#167;8.1</a>, <a href="17-ts.html#SP11">&#167;11</a>), 17/rs (<a href="17-rs.html#SP7_1">&#167;7.1</a>, <a href="17-rs.html#SP7_3">&#167;7.3</a>), 18/lc (<a href="18-lc.html#SP11">&#167;11</a>, <a href="18-lc.html#SP12_1">&#167;12.1</a>), 19/rsft (<a href="19-rsft.html#SP1_1_1_1">&#167;1.1.1.1</a>, <a href="19-rsft.html#SP1_1_1_1_1">&#167;1.1.1.1.1</a>, <a href="19-rsft.html#SP1_2">&#167;1.2</a>, <a href="19-rsft.html#SP1_3">&#167;1.3</a>), 21/rl2 (<a href="21-rl2.html#SP14">&#167;14</a>, <a href="21-rl2.html#SP20">&#167;20</a>), 21/fao (<a href="21-fao.html#SP10">&#167;10</a>), 21/ac (<a href="21-ac.html#SP6">&#167;6</a>, <a href="21-ac.html#SP8">&#167;8</a>, <a href="21-ac.html#SP14">&#167;14</a>), 22/cs (<a href="22-cs.html#SP8">&#167;8</a>), 22/ph (<a href="22-ph.html#SP12">&#167;12</a>), 22/pav (<a href="22-pav.html#SP8_1">&#167;8.1</a>), 22/tp2 (<a href="22-tp2.html#SP4">&#167;4</a>), 24/ch (<a href="24-ch.html#SP6">&#167;6</a>, <a href="24-ch.html#SP8">&#167;8</a>), 26/vm (<a href="26-vm.html#SP8">&#167;8</a>), 26/uo (<a href="26-uo.html#SP21">&#167;21</a>), 26/lt (<a href="26-lt.html#SP4_1">&#167;4.1</a>), 26/jl (<a href="26-jl.html#SP6">&#167;6</a>), 26/rt (<a href="26-rt.html#SP1">&#167;1</a>), 26/iti (<a href="26-iti.html#SP10">&#167;10</a>), 26/pl (<a href="26-pl.html#SP12">&#167;12</a>), 26/ts (<a href="26-ts.html#SP10">&#167;10</a>), 27/hr (<a href="27-hr.html#SP4">&#167;4</a>), 27/ei (<a href="27-ei.html#SP3">&#167;3</a>, <a href="27-ei.html#SP4">&#167;4</a>).</p>
<p class="endnote">The function Packaging::enter_current_enclosure appears nowhere else.</p>
@ -229,20 +229,20 @@
<span class="identifier">inter_symbols_table</span><span class="plain"> *</span><span class="functiontext">Packaging::scope</span><span class="plain">(</span><span class="identifier">inter_repository</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">, </span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">N</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">N</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"can't determine scope of null name"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;eventual_owner</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">Inter::get_global_symbols</span><span class="plain">(</span><span class="functiontext">Emit::repository</span><span class="plain">());</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">Inter::Packages::scope</span><span class="plain">(</span><span class="functiontext">Packaging::incarnate</span><span class="plain">(</span><span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;eventual_owner</span><span class="plain">));</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;location_in_hierarchy</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">Inter::get_global_symbols</span><span class="plain">(</span><span class="functiontext">Emit::repository</span><span class="plain">());</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">Inter::Packages::scope</span><span class="plain">(</span><span class="functiontext">Packaging::incarnate</span><span class="plain">(</span><span class="identifier">N</span><span class="plain">-</span><span class="element">&gt;location_in_hierarchy</span><span class="plain">));</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function Packaging::enter is used in <a href="#SP5">&#167;5</a>, 5/ins (<a href="5-ins.html#SP34">&#167;34</a>), 5/nv (<a href="5-nv.html#SP16">&#167;16</a>), 13/rsfk (<a href="13-rsfk.html#SP16_1">&#167;16.1</a>), 15/epv (<a href="15-epv.html#SP2">&#167;2</a>), 17/rs (<a href="17-rs.html#SP6_1">&#167;6.1</a>, <a href="17-rs.html#SP7_1">&#167;7.1</a>), 21/rl (<a href="21-rl.html#SP9">&#167;9</a>), 21/rl2 (<a href="21-rl2.html#SP20">&#167;20</a>), 22/ph (<a href="22-ph.html#SP12">&#167;12</a>), 27/hl (<a href="27-hl.html#SP1">&#167;1</a>), 27/ei (<a href="27-ei.html#SP3">&#167;3</a>, <a href="27-ei.html#SP4">&#167;4</a>).</p>
<p class="endnote">The function Packaging::enter is used in <a href="#SP5">&#167;5</a>, 13/rsfk (<a href="13-rsfk.html#SP16_1">&#167;16.1</a>), 15/epv (<a href="15-epv.html#SP2">&#167;2</a>), 17/rs (<a href="17-rs.html#SP6_1">&#167;6.1</a>), 21/rl (<a href="21-rl.html#SP9">&#167;9</a>), 21/rl2 (<a href="21-rl2.html#SP20">&#167;20</a>), 27/hl (<a href="27-hl.html#SP1">&#167;1</a>), 27/ei (<a href="27-ei.html#SP3">&#167;3</a>, <a href="27-ei.html#SP4">&#167;4</a>).</p>
<p class="endnote">The function Packaging::exit is used in 5/ins (<a href="5-ins.html#SP34">&#167;34</a>), 5/nv (<a href="5-nv.html#SP16">&#167;16</a>), 6/bp (<a href="6-bp.html#SP42">&#167;42</a>), 6/rlt (<a href="6-rlt.html#SP14">&#167;14</a>, <a href="6-rlt.html#SP15_1">&#167;15.1</a>, <a href="6-rlt.html#SP20">&#167;20</a>, <a href="6-rlt.html#SP20_3">&#167;20.3</a>), 6/nv (<a href="6-nv.html#SP18">&#167;18</a>), 12/cdp (<a href="12-cdp.html#SP2_1_1">&#167;2.1.1</a>), 13/kak (<a href="13-kak.html#SP5">&#167;5</a>), 13/rsfk (<a href="13-rsfk.html#SP4">&#167;4</a>, <a href="13-rsfk.html#SP16_1">&#167;16.1</a>, <a href="13-rsfk.html#SP16_2">&#167;16.2</a>, <a href="13-rsfk.html#SP25">&#167;25</a>), 15/pr (<a href="15-pr.html#SP27">&#167;27</a>), 15/epv (<a href="15-epv.html#SP1_1_2">&#167;1.1.2</a>, <a href="15-epv.html#SP2">&#167;2</a>), 16/ic (<a href="16-ic.html#SP10">&#167;10</a>), 17/tl (<a href="17-tl.html#SP14_1">&#167;14.1</a>, <a href="17-tl.html#SP14_2">&#167;14.2</a>, <a href="17-tl.html#SP16">&#167;16</a>), 17/ts (<a href="17-ts.html#SP8_1">&#167;8.1</a>, <a href="17-ts.html#SP11">&#167;11</a>), 17/rs (<a href="17-rs.html#SP6_1">&#167;6.1</a>, <a href="17-rs.html#SP7_1">&#167;7.1</a>, <a href="17-rs.html#SP7_3">&#167;7.3</a>), 18/lc (<a href="18-lc.html#SP11">&#167;11</a>, <a href="18-lc.html#SP12_1">&#167;12.1</a>), 19/rsft (<a href="19-rsft.html#SP1_1_1_1">&#167;1.1.1.1</a>, <a href="19-rsft.html#SP1_1_1_1_1">&#167;1.1.1.1.1</a>, <a href="19-rsft.html#SP1_2">&#167;1.2</a>, <a href="19-rsft.html#SP1_3">&#167;1.3</a>), 21/rl (<a href="21-rl.html#SP9">&#167;9</a>), 21/rl2 (<a href="21-rl2.html#SP14">&#167;14</a>, <a href="21-rl2.html#SP20">&#167;20</a>), 21/fao (<a href="21-fao.html#SP10">&#167;10</a>), 21/ac (<a href="21-ac.html#SP6">&#167;6</a>, <a href="21-ac.html#SP8">&#167;8</a>, <a href="21-ac.html#SP14">&#167;14</a>), 22/cs (<a href="22-cs.html#SP8">&#167;8</a>), 22/ph (<a href="22-ph.html#SP12">&#167;12</a>), 22/pav (<a href="22-pav.html#SP8_1">&#167;8.1</a>), 22/tp2 (<a href="22-tp2.html#SP4">&#167;4</a>), 24/ch (<a href="24-ch.html#SP6">&#167;6</a>, <a href="24-ch.html#SP8">&#167;8</a>), 26/vm (<a href="26-vm.html#SP8">&#167;8</a>), 26/uo (<a href="26-uo.html#SP21">&#167;21</a>), 26/lt (<a href="26-lt.html#SP4_1">&#167;4.1</a>), 26/jl (<a href="26-jl.html#SP6">&#167;6</a>), 26/rt (<a href="26-rt.html#SP4">&#167;4</a>), 26/iti (<a href="26-iti.html#SP10">&#167;10</a>), 26/pl (<a href="26-pl.html#SP12">&#167;12</a>), 26/ts (<a href="26-ts.html#SP10">&#167;10</a>), 27/hr (<a href="27-hr.html#SP4">&#167;4</a>), 27/hl (<a href="27-hl.html#SP1">&#167;1</a>), 27/ei (<a href="27-ei.html#SP3">&#167;3</a>, <a href="27-ei.html#SP4">&#167;4</a>).</p>
<p class="endnote">The function Packaging::incarnate is used in 21/rl (<a href="21-rl.html#SP9">&#167;9</a>), 27/ei (<a href="27-ei.html#SP3">&#167;3</a>).</p>
<p class="endnote">The function Packaging::scope is used in 27/in (<a href="27-in.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Packaging::scope is used in 27/in (<a href="27-in.html#SP8">&#167;8</a>).</p>
<p class="inwebparagraph"><a id="SP7"></a><b>&#167;7. </b></p>
@ -252,7 +252,7 @@
<span class="reserved">package_request</span><span class="plain"> *</span><span class="functiontext">Packaging::request_generic</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">generic_pr</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">)</span>
<span class="identifier">generic_pr</span><span class="plain"> = </span><span class="functiontext">Packaging::request</span><span class="plain">(</span>
<span class="functiontext">InterNames::one_off</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"generic"</span><span class="plain">, </span><span class="functiontext">Hierarchy::resources</span><span class="plain">()),</span>
<span class="functiontext">InterNames::explicitly_named</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"generic"</span><span class="plain">, </span><span class="functiontext">Hierarchy::resources</span><span class="plain">()),</span>
<span class="functiontext">Hierarchy::resources</span><span class="plain">(), </span><span class="identifier">module_ptype</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">generic_pr</span><span class="plain">;</span>
<span class="plain">}</span>
@ -261,7 +261,7 @@
<span class="reserved">package_request</span><span class="plain"> *</span><span class="functiontext">Packaging::request_synoptic</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">synoptic_pr</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">)</span>
<span class="identifier">synoptic_pr</span><span class="plain"> = </span><span class="functiontext">Packaging::request</span><span class="plain">(</span>
<span class="functiontext">InterNames::one_off</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"synoptic"</span><span class="plain">, </span><span class="functiontext">Hierarchy::resources</span><span class="plain">()),</span>
<span class="functiontext">InterNames::explicitly_named</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"synoptic"</span><span class="plain">, </span><span class="functiontext">Hierarchy::resources</span><span class="plain">()),</span>
<span class="functiontext">Hierarchy::resources</span><span class="plain">(), </span><span class="identifier">module_ptype</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">synoptic_pr</span><span class="plain">;</span>
<span class="plain">}</span>
@ -289,7 +289,7 @@
<span class="plain">} </span><span class="reserved">submodule_requests</span><span class="plain">;</span>
<span class="reserved">package_request</span><span class="plain"> *</span><span class="functiontext">Packaging::resources_for_new_submodule</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">, </span><span class="reserved">submodule_requests</span><span class="plain"> *</span><span class="identifier">SR</span><span class="plain">) {</span>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">package_iname</span><span class="plain"> = </span><span class="functiontext">InterNames::one_off</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">, </span><span class="functiontext">Hierarchy::resources</span><span class="plain">());</span>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">package_iname</span><span class="plain"> = </span><span class="functiontext">InterNames::explicitly_named</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">, </span><span class="functiontext">Hierarchy::resources</span><span class="plain">());</span>
<span class="reserved">package_request</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain"> = </span><span class="functiontext">Packaging::request</span><span class="plain">(</span><span class="identifier">package_iname</span><span class="plain">, </span><span class="functiontext">Hierarchy::resources</span><span class="plain">(), </span><span class="identifier">module_ptype</span><span class="plain">);</span>
<span class="functiontext">Packaging::initialise_submodules</span><span class="plain">(</span><span class="identifier">SR</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">P</span><span class="plain">;</span>
@ -382,7 +382,7 @@
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">sr</span><span class="plain">, </span><span class="reserved">submodule_request</span><span class="plain">, </span><span class="identifier">SR</span><span class="plain">-</span><span class="element">&gt;submodules</span><span class="plain">)</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">sid</span><span class="plain"> == </span><span class="identifier">sr</span><span class="plain">-</span><span class="element">&gt;which_submodule</span><span class="plain">)</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">sr</span><span class="plain">-</span><span class="element">&gt;where_found</span><span class="plain">;</span>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain"> = </span><span class="functiontext">InterNames::one_off</span><span class="plain">(</span><span class="identifier">sid</span><span class="plain">-</span><span class="element">&gt;submodule_name</span><span class="plain">, </span><span class="identifier">parent</span><span class="plain">);</span>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain"> = </span><span class="functiontext">InterNames::explicitly_named</span><span class="plain">(</span><span class="identifier">sid</span><span class="plain">-</span><span class="element">&gt;submodule_name</span><span class="plain">, </span><span class="identifier">parent</span><span class="plain">);</span>
<span class="identifier">sr</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">submodule_request</span><span class="plain">);</span>
<span class="identifier">sr</span><span class="plain">-</span><span class="element">&gt;which_submodule</span><span class="plain"> = </span><span class="identifier">sid</span><span class="plain">;</span>
<span class="identifier">sr</span><span class="plain">-</span><span class="element">&gt;where_found</span><span class="plain"> = </span><span class="functiontext">Packaging::request</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">, </span><span class="identifier">parent</span><span class="plain">, </span><span class="identifier">plain_ptype</span><span class="plain">);</span>
@ -431,14 +431,14 @@
<span class="plain">}</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="string">"%S_%d"</span><span class="plain">, </span><span class="identifier">pr_counter_names</span><span class="plain">[</span><span class="identifier">what_for</span><span class="plain">], </span><span class="identifier">N</span><span class="plain">);</span>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain"> = </span><span class="functiontext">InterNames::one_off</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">R</span><span class="plain">);</span>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain"> = </span><span class="functiontext">InterNames::explicitly_named</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">R</span><span class="plain">);</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">iname</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="functiontext">Packaging::function</span><span class="plain">(</span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">function_iname</span><span class="plain">, </span><span class="reserved">package_request</span><span class="plain"> *</span><span class="identifier">R2</span><span class="plain">, </span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">temp_iname</span><span class="plain">) {</span>
<span class="reserved">package_request</span><span class="plain"> *</span><span class="identifier">R3</span><span class="plain"> = </span><span class="functiontext">Packaging::request</span><span class="plain">(</span><span class="identifier">function_iname</span><span class="plain">, </span><span class="identifier">R2</span><span class="plain">, </span><span class="identifier">function_ptype</span><span class="plain">);</span>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain"> = </span><span class="functiontext">InterNames::one_off</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"call"</span><span class="plain">, </span><span class="identifier">R3</span><span class="plain">);</span>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain"> = </span><span class="functiontext">InterNames::explicitly_named</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"call"</span><span class="plain">, </span><span class="identifier">R3</span><span class="plain">);</span>
<span class="functiontext">Packaging::house</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">, </span><span class="identifier">R3</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">temp_iname</span><span class="plain">) {</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">);</span>
@ -451,7 +451,7 @@
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="functiontext">Packaging::function_text</span><span class="plain">(</span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">function_iname</span><span class="plain">, </span><span class="reserved">package_request</span><span class="plain"> *</span><span class="identifier">R2</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">translation</span><span class="plain">) {</span>
<span class="reserved">package_request</span><span class="plain"> *</span><span class="identifier">R3</span><span class="plain"> = </span><span class="functiontext">Packaging::request</span><span class="plain">(</span><span class="identifier">function_iname</span><span class="plain">, </span><span class="identifier">R2</span><span class="plain">, </span><span class="identifier">function_ptype</span><span class="plain">);</span>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain"> = </span><span class="functiontext">InterNames::one_off</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"call"</span><span class="plain">, </span><span class="identifier">R3</span><span class="plain">);</span>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain"> = </span><span class="functiontext">InterNames::explicitly_named</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"call"</span><span class="plain">, </span><span class="identifier">R3</span><span class="plain">);</span>
<span class="functiontext">Packaging::house</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">, </span><span class="identifier">R3</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">translation</span><span class="plain">)</span>
<span class="functiontext">InterNames::change_translation</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">, </span><span class="identifier">translation</span><span class="plain">);</span>
@ -460,7 +460,7 @@
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="functiontext">Packaging::datum_text</span><span class="plain">(</span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">function_iname</span><span class="plain">, </span><span class="reserved">package_request</span><span class="plain"> *</span><span class="identifier">R2</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">translation</span><span class="plain">) {</span>
<span class="reserved">package_request</span><span class="plain"> *</span><span class="identifier">R3</span><span class="plain"> = </span><span class="functiontext">Packaging::request</span><span class="plain">(</span><span class="identifier">function_iname</span><span class="plain">, </span><span class="identifier">R2</span><span class="plain">, </span><span class="identifier">data_ptype</span><span class="plain">);</span>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain"> = </span><span class="functiontext">InterNames::one_off</span><span class="plain">(</span><span class="identifier">translation</span><span class="plain">, </span><span class="identifier">R3</span><span class="plain">);</span>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain"> = </span><span class="functiontext">InterNames::explicitly_named</span><span class="plain">(</span><span class="identifier">translation</span><span class="plain">, </span><span class="identifier">R3</span><span class="plain">);</span>
<span class="functiontext">Packaging::house</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">, </span><span class="identifier">R3</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">iname</span><span class="plain">;</span>
<span class="plain">}</span>
@ -468,19 +468,19 @@
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Packaging::house</span><span class="plain">(</span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain">, </span><span class="reserved">package_request</span><span class="plain"> *</span><span class="identifier">at</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">iname</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"can't house null name"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">at</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"can't house nowhere"</span><span class="plain">);</span>
<span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;eventual_owner</span><span class="plain"> = </span><span class="identifier">at</span><span class="plain">;</span>
<span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;location_in_hierarchy</span><span class="plain"> = </span><span class="identifier">at</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Packaging::house_with</span><span class="plain">(</span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain">, </span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">landlord</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">iname</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"can't house null name"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">landlord</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"can't house with nobody"</span><span class="plain">);</span>
<span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;eventual_owner</span><span class="plain"> = </span><span class="identifier">landlord</span><span class="plain">-</span><span class="element">&gt;eventual_owner</span><span class="plain">;</span>
<span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;location_in_hierarchy</span><span class="plain"> = </span><span class="identifier">landlord</span><span class="plain">-</span><span class="element">&gt;location_in_hierarchy</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Packaging::houseed_in_function</span><span class="plain">(</span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">iname</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;eventual_owner</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;eventual_owner</span><span class="plain">-</span><span class="element">&gt;eventual_type</span><span class="plain"> == </span><span class="identifier">function_ptype</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;location_in_hierarchy</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;location_in_hierarchy</span><span class="plain">-</span><span class="element">&gt;eventual_type</span><span class="plain"> == </span><span class="identifier">function_ptype</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
@ -491,15 +491,15 @@
<p class="endnote">The function Packaging::supply_iname is used in 27/hr (<a href="27-hr.html#SP5">&#167;5</a>), 27/hl (<a href="27-hl.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Packaging::function is used in 27/hl (<a href="27-hl.html#SP1">&#167;1</a>).</p>
<p class="endnote">The function Packaging::function is used in 27/hl (<a href="27-hl.html#SP1">&#167;1</a>, <a href="27-hl.html#SP1_1">&#167;1.1</a>).</p>
<p class="endnote">The function Packaging::function_text is used in 27/hl (<a href="27-hl.html#SP1">&#167;1</a>, <a href="27-hl.html#SP1_1">&#167;1.1</a>).</p>
<p class="endnote">The function Packaging::function_text is used in 27/hl (<a href="27-hl.html#SP1">&#167;1</a>).</p>
<p class="endnote">The function Packaging::datum_text is used in 27/hl (<a href="27-hl.html#SP1">&#167;1</a>).</p>
<p class="endnote">The function Packaging::house is used in 27/in (<a href="27-in.html#SP3">&#167;3</a>).</p>
<p class="endnote">The function Packaging::house appears nowhere else.</p>
<p class="endnote">The function Packaging::house_with is used in 26/rt (<a href="26-rt.html#SP4">&#167;4</a>), 27/in (<a href="27-in.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Packaging::house_with is used in 26/rt (<a href="26-rt.html#SP4">&#167;4</a>).</p>
<p class="endnote">The function Packaging::houseed_in_function is used in 26/rt (<a href="26-rt.html#SP4">&#167;4</a>), 27/ei (<a href="27-ei.html#SP4">&#167;4</a>).</p>

View file

@ -16,11 +16,9 @@
<span class="reserved">typedef</span><span class="plain"> </span><span class="reserved">struct</span><span class="plain"> </span><span class="reserved">name_translation</span><span class="plain"> {</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">translate_to</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">then_make_unique</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inter_name_family</span><span class="plain"> *</span><span class="identifier">name_generator</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">localise</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inter_name_generator</span><span class="plain"> *</span><span class="identifier">name_generator</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">derive</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">by_imposition</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">faux_letter</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">name_translation</span><span class="plain">;</span>
<span class="reserved">name_translation</span><span class="plain"> </span><span class="functiontext">Translation::same</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
@ -28,10 +26,8 @@
<span class="identifier">nt</span><span class="element">.translate_to</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">nt</span><span class="element">.then_make_unique</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="identifier">nt</span><span class="element">.name_generator</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">nt</span><span class="element">.localise</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="identifier">nt</span><span class="element">.derive</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="identifier">nt</span><span class="element">.by_imposition</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="identifier">nt</span><span class="element">.faux_letter</span><span class="plain"> = -1;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">nt</span><span class="plain">;</span>
<span class="plain">}</span>
@ -62,36 +58,21 @@
<span class="reserved">name_translation</span><span class="plain"> </span><span class="functiontext">Translation::prefix</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">) {</span>
<span class="reserved">name_translation</span><span class="plain"> </span><span class="identifier">nt</span><span class="plain"> = </span><span class="functiontext">Translation::same</span><span class="plain">();</span>
<span class="identifier">nt</span><span class="element">.name_generator</span><span class="plain"> = </span><span class="functiontext">InterNames::name_generator</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="identifier">nt</span><span class="element">.name_generator</span><span class="plain"> = </span><span class="functiontext">InterNames::multiple_use_generator</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="identifier">nt</span><span class="element">.derive</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">nt</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">name_translation</span><span class="plain"> </span><span class="functiontext">Translation::suffix</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">) {</span>
<span class="reserved">name_translation</span><span class="plain"> </span><span class="identifier">nt</span><span class="plain"> = </span><span class="functiontext">Translation::same</span><span class="plain">();</span>
<span class="identifier">nt</span><span class="element">.name_generator</span><span class="plain"> = </span><span class="functiontext">InterNames::name_generator</span><span class="plain">(</span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">);</span>
<span class="identifier">nt</span><span class="element">.name_generator</span><span class="plain"> = </span><span class="functiontext">InterNames::multiple_use_generator</span><span class="plain">(</span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">);</span>
<span class="identifier">nt</span><span class="element">.derive</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">nt</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">name_translation</span><span class="plain"> </span><span class="functiontext">Translation::suffix_special</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">faux_letter</span><span class="plain">) {</span>
<span class="reserved">name_translation</span><span class="plain"> </span><span class="identifier">nt</span><span class="plain"> = </span><span class="functiontext">Translation::same</span><span class="plain">();</span>
<span class="identifier">nt</span><span class="element">.name_generator</span><span class="plain"> = </span><span class="functiontext">InterNames::name_generator</span><span class="plain">(</span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">);</span>
<span class="identifier">nt</span><span class="element">.derive</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="identifier">nt</span><span class="element">.faux_letter</span><span class="plain"> = </span><span class="identifier">faux_letter</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">nt</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">name_translation</span><span class="plain"> </span><span class="functiontext">Translation::generate</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">) {</span>
<span class="reserved">name_translation</span><span class="plain"> </span><span class="identifier">nt</span><span class="plain"> = </span><span class="functiontext">Translation::same</span><span class="plain">();</span>
<span class="identifier">nt</span><span class="element">.name_generator</span><span class="plain"> = </span><span class="functiontext">InterNames::name_generator</span><span class="plain">(</span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">nt</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">name_translation</span><span class="plain"> </span><span class="functiontext">Translation::generate_in</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">) {</span>
<span class="reserved">name_translation</span><span class="plain"> </span><span class="identifier">nt</span><span class="plain"> = </span><span class="functiontext">Translation::same</span><span class="plain">();</span>
<span class="identifier">nt</span><span class="element">.name_generator</span><span class="plain"> = </span><span class="functiontext">InterNames::name_generator</span><span class="plain">(</span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="identifier">nt</span><span class="element">.localise</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="identifier">nt</span><span class="element">.name_generator</span><span class="plain"> = </span><span class="functiontext">InterNames::multiple_use_generator</span><span class="plain">(</span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">nt</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
@ -110,14 +91,10 @@
<p class="endnote">The function Translation::prefix is used in 27/hr (<a href="27-hr.html#SP1_4">&#167;1.4</a>).</p>
<p class="endnote">The function Translation::suffix is used in 27/hr (<a href="27-hr.html#SP1_4">&#167;1.4</a>, <a href="27-hr.html#SP1_40">&#167;1.40</a>).</p>
<p class="endnote">The function Translation::suffix_special is used in 27/hr (<a href="27-hr.html#SP1_28">&#167;1.28</a>).</p>
<p class="endnote">The function Translation::suffix is used in 27/hr (<a href="27-hr.html#SP1_4">&#167;1.4</a>, <a href="27-hr.html#SP1_28">&#167;1.28</a>, <a href="27-hr.html#SP1_40">&#167;1.40</a>).</p>
<p class="endnote">The function Translation::generate is used in 27/hr (<a href="27-hr.html#SP1_6">&#167;1.6</a>, <a href="27-hr.html#SP1_8">&#167;1.8</a>, <a href="27-hr.html#SP1_12">&#167;1.12</a>, <a href="27-hr.html#SP1_14">&#167;1.14</a>, <a href="27-hr.html#SP1_22">&#167;1.22</a>, <a href="27-hr.html#SP1_24">&#167;1.24</a>, <a href="27-hr.html#SP1_26">&#167;1.26</a>, <a href="27-hr.html#SP1_28">&#167;1.28</a>, <a href="27-hr.html#SP1_30">&#167;1.30</a>, <a href="27-hr.html#SP1_34">&#167;1.34</a>, <a href="27-hr.html#SP1_36">&#167;1.36</a>, <a href="27-hr.html#SP1_44">&#167;1.44</a>).</p>
<p class="endnote">The function Translation::generate_in is used in 27/hr (<a href="27-hr.html#SP1_32">&#167;1.32</a>, <a href="27-hr.html#SP1_40">&#167;1.40</a>).</p>
<p class="endnote">The structure name_translation is accessed in 27/hl and here.</p>
<hr class="tocbar">

View file

@ -1061,7 +1061,7 @@ declarations) and finally return <code class="display"><span class="extract">TRU
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain"> = </span><span class="functiontext">Instances::iname</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">I</span><span class="plain">-</span><span class="element">&gt;instance_emitted</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">) {</span>
<span class="identifier">I</span><span class="plain">-</span><span class="element">&gt;instance_emitted</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="functiontext">Packaging::enter</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;eventual_owner</span><span class="plain">);</span>
<span class="reserved">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="functiontext">Packaging::enter_home_of</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">);</span>
<span class="functiontext">Emit::instance</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">, </span><span class="functiontext">Instances::to_kind</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">), </span><span class="identifier">I</span><span class="plain">-</span><span class="element">&gt;enumeration_index</span><span class="plain">);</span>
<span class="functiontext">Packaging::exit</span><span class="plain">(</span><span class="identifier">save</span><span class="plain">);</span>
<span class="plain">}</span>
@ -1070,7 +1070,7 @@ declarations) and finally return <code class="display"><span class="extract">TRU
<span class="reserved">package_request</span><span class="plain"> *</span><span class="functiontext">Instances::package</span><span class="plain">(</span><span class="reserved">instance</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">) {</span>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain"> = </span><span class="functiontext">Instances::iname</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;eventual_owner</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">Packaging::home_of</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>

View file

@ -595,7 +595,7 @@ there's very little to say.
<span class="plain">(</span><span class="identifier">nlv</span><span class="plain">-</span><span class="element">&gt;housed_in_variables_array</span><span class="plain">)) {</span>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain"> = </span><span class="functiontext">NonlocalVariables::iname</span><span class="plain">(</span><span class="identifier">nlv</span><span class="plain">);</span>
<span class="reserved">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="functiontext">Packaging::enter</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;eventual_owner</span><span class="plain">);</span>
<span class="reserved">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="functiontext">Packaging::enter_home_of</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">);</span>
<span class="reserved">value_holster</span><span class="plain"> </span><span class="identifier">VH</span><span class="plain"> = </span><span class="functiontext">Holsters::new</span><span class="plain">(</span><span class="constant">INTER_DATA_VHMODE</span><span class="plain">);</span>

View file

@ -821,7 +821,7 @@
</li>
<li>
<p><a href="27-in.html"><spon class="sectiontitle">Inter Namespace</span></a> -
<span class="purpose"></span></p>
<span class="purpose">To manage identifiers, which have names and positions in the Inter hierarchy.</span></p>
</li>
<li>
<p><a href="27-is.html"><spon class="sectiontitle">Inter Schemas</span></a> -

View file

@ -89,7 +89,7 @@ following minimal structure, though it will only be relevant for instances of
<span class="identifier">inter_name</span><span class="plain"> *</span><span class="functiontext">PL::Regions::found_in_iname</span><span class="plain">(</span><span class="identifier">instance</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">PF_I</span><span class="plain">(</span><span class="identifier">regions</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">)-</span><span class="element">&gt;in_region_iname</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
<span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain"> = </span><span class="identifier">Instances::iname</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">);</span>
<span class="identifier">PF_I</span><span class="plain">(</span><span class="identifier">regions</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">)-</span><span class="element">&gt;in_region_iname</span><span class="plain"> = </span><span class="identifier">Hierarchy::make_iname_in</span><span class="plain">(</span><span class="identifier">REGION_FOUND_IN_FN_HL</span><span class="plain">, </span><span class="identifier">iname</span><span class="plain">-&gt;</span><span class="identifier">eventual_owner</span><span class="plain">);</span>
<span class="identifier">PF_I</span><span class="plain">(</span><span class="identifier">regions</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">)-</span><span class="element">&gt;in_region_iname</span><span class="plain"> = </span><span class="identifier">Hierarchy::make_iname_in</span><span class="plain">(</span><span class="identifier">REGION_FOUND_IN_FN_HL</span><span class="plain">, </span><span class="identifier">Packaging::home_of</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">));</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">PF_I</span><span class="plain">(</span><span class="identifier">regions</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">)-</span><span class="element">&gt;in_region_iname</span><span class="plain">;</span>
<span class="plain">}</span>

View file

@ -1406,7 +1406,7 @@ always the way to the other room &mdash; the one we are not in.
<pre class="displaydefn">
<span class="reserved">door_dir_notice</span><span class="plain"> *</span><span class="identifier">notice</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">door_dir_notice</span><span class="plain">);</span>
<span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain"> = </span><span class="identifier">Instances::iname</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">);</span>
<span class="identifier">notice</span><span class="plain">-</span><span class="element">&gt;ddn_iname</span><span class="plain"> = </span><span class="identifier">Hierarchy::make_iname_in</span><span class="plain">(</span><span class="identifier">TSD_DOOR_DIR_FN_HL</span><span class="plain">, </span><span class="identifier">iname</span><span class="plain">-&gt;</span><span class="identifier">eventual_owner</span><span class="plain">);</span>
<span class="identifier">notice</span><span class="plain">-</span><span class="element">&gt;ddn_iname</span><span class="plain"> = </span><span class="identifier">Hierarchy::make_iname_in</span><span class="plain">(</span><span class="identifier">TSD_DOOR_DIR_FN_HL</span><span class="plain">, </span><span class="identifier">Packaging::home_of</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">));</span>
<span class="identifier">notice</span><span class="plain">-</span><span class="element">&gt;door</span><span class="plain"> = </span><span class="identifier">I</span><span class="plain">;</span>
<span class="identifier">notice</span><span class="plain">-</span><span class="element">&gt;R1</span><span class="plain"> = </span><span class="identifier">R1</span><span class="plain">;</span>
<span class="identifier">notice</span><span class="plain">-</span><span class="element">&gt;D1</span><span class="plain"> = </span><span class="identifier">D1</span><span class="plain">;</span>
@ -1432,7 +1432,7 @@ always the other room &mdash; the one we are not in.
<pre class="displaydefn">
<span class="reserved">door_to_notice</span><span class="plain"> *</span><span class="identifier">notice</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">door_to_notice</span><span class="plain">);</span>
<span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain"> = </span><span class="identifier">Instances::iname</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">);</span>
<span class="identifier">notice</span><span class="plain">-</span><span class="element">&gt;dtn_iname</span><span class="plain"> = </span><span class="identifier">Hierarchy::make_iname_in</span><span class="plain">(</span><span class="identifier">TSD_DOOR_TO_FN_HL</span><span class="plain">, </span><span class="identifier">iname</span><span class="plain">-&gt;</span><span class="identifier">eventual_owner</span><span class="plain">);</span>
<span class="identifier">notice</span><span class="plain">-</span><span class="element">&gt;dtn_iname</span><span class="plain"> = </span><span class="identifier">Hierarchy::make_iname_in</span><span class="plain">(</span><span class="identifier">TSD_DOOR_TO_FN_HL</span><span class="plain">, </span><span class="identifier">Packaging::home_of</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">));</span>
<span class="identifier">notice</span><span class="plain">-</span><span class="element">&gt;door</span><span class="plain"> = </span><span class="identifier">I</span><span class="plain">;</span>
<span class="identifier">notice</span><span class="plain">-</span><span class="element">&gt;R1</span><span class="plain"> = </span><span class="identifier">R1</span><span class="plain">;</span>
<span class="identifier">notice</span><span class="plain">-</span><span class="element">&gt;R2</span><span class="plain"> = </span><span class="identifier">R2</span><span class="plain">;</span>

View file

@ -476,11 +476,11 @@ so. These routines allow that to happen.
<pre class="displaydefn">
<span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain"> = </span><span class="identifier">Instances::iname</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">);</span>
<span class="reserved">short_name_notice</span><span class="plain"> *</span><span class="identifier">notice</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">short_name_notice</span><span class="plain">);</span>
<span class="identifier">notice</span><span class="plain">-</span><span class="element">&gt;routine_iname</span><span class="plain"> = </span><span class="identifier">Hierarchy::make_iname_in</span><span class="plain">(</span><span class="identifier">SHORT_NAME_FN_HL</span><span class="plain">, </span><span class="identifier">iname</span><span class="plain">-&gt;</span><span class="identifier">eventual_owner</span><span class="plain">);</span>
<span class="identifier">notice</span><span class="plain">-</span><span class="element">&gt;routine_iname</span><span class="plain"> = </span><span class="identifier">Hierarchy::make_iname_in</span><span class="plain">(</span><span class="identifier">SHORT_NAME_FN_HL</span><span class="plain">, </span><span class="identifier">Packaging::home_of</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">));</span>
<span class="identifier">notice</span><span class="plain">-</span><span class="element">&gt;namee</span><span class="plain"> = </span><span class="identifier">I</span><span class="plain">;</span>
<span class="identifier">notice</span><span class="plain">-</span><span class="element">&gt;after_subject</span><span class="plain"> = </span><span class="identifier">subj</span><span class="plain">;</span>
<span class="identifier">notice</span><span class="plain">-</span><span class="element">&gt;capped</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="identifier">notice</span><span class="plain">-</span><span class="element">&gt;snn_iname</span><span class="plain"> = </span><span class="identifier">Hierarchy::make_iname_in</span><span class="plain">(</span><span class="identifier">SHORT_NAME_PROPERTY_FN_HL</span><span class="plain">, </span><span class="identifier">iname</span><span class="plain">-&gt;</span><span class="identifier">eventual_owner</span><span class="plain">);</span>
<span class="identifier">notice</span><span class="plain">-</span><span class="element">&gt;snn_iname</span><span class="plain"> = </span><span class="identifier">Hierarchy::make_iname_in</span><span class="plain">(</span><span class="identifier">SHORT_NAME_PROPERTY_FN_HL</span><span class="plain">, </span><span class="identifier">Packaging::home_of</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">));</span>
<span class="identifier">faux</span><span class="plain"> = </span><span class="identifier">notice</span><span class="plain">-</span><span class="element">&gt;snn_iname</span><span class="plain">;</span>
</pre>
@ -496,11 +496,11 @@ so. These routines allow that to happen.
<pre class="displaydefn">
<span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain"> = </span><span class="identifier">Instances::iname</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">);</span>
<span class="reserved">short_name_notice</span><span class="plain"> *</span><span class="identifier">notice</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">short_name_notice</span><span class="plain">);</span>
<span class="identifier">notice</span><span class="plain">-</span><span class="element">&gt;routine_iname</span><span class="plain"> = </span><span class="identifier">Hierarchy::make_iname_in</span><span class="plain">(</span><span class="identifier">SHORT_NAME_FN_HL</span><span class="plain">, </span><span class="identifier">iname</span><span class="plain">-&gt;</span><span class="identifier">eventual_owner</span><span class="plain">);</span>
<span class="identifier">notice</span><span class="plain">-</span><span class="element">&gt;routine_iname</span><span class="plain"> = </span><span class="identifier">Hierarchy::make_iname_in</span><span class="plain">(</span><span class="identifier">SHORT_NAME_FN_HL</span><span class="plain">, </span><span class="identifier">Packaging::home_of</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">));</span>
<span class="identifier">notice</span><span class="plain">-</span><span class="element">&gt;namee</span><span class="plain"> = </span><span class="identifier">I</span><span class="plain">;</span>
<span class="identifier">notice</span><span class="plain">-</span><span class="element">&gt;after_subject</span><span class="plain"> = </span><span class="identifier">subj</span><span class="plain">;</span>
<span class="identifier">notice</span><span class="plain">-</span><span class="element">&gt;capped</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="identifier">notice</span><span class="plain">-</span><span class="element">&gt;snn_iname</span><span class="plain"> = </span><span class="identifier">Hierarchy::make_iname_in</span><span class="plain">(</span><span class="identifier">SHORT_NAME_PROPERTY_FN_HL</span><span class="plain">, </span><span class="identifier">iname</span><span class="plain">-&gt;</span><span class="identifier">eventual_owner</span><span class="plain">);</span>
<span class="identifier">notice</span><span class="plain">-</span><span class="element">&gt;snn_iname</span><span class="plain"> = </span><span class="identifier">Hierarchy::make_iname_in</span><span class="plain">(</span><span class="identifier">SHORT_NAME_PROPERTY_FN_HL</span><span class="plain">, </span><span class="identifier">Packaging::home_of</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">));</span>
<span class="identifier">faux</span><span class="plain"> = </span><span class="identifier">notice</span><span class="plain">-</span><span class="element">&gt;snn_iname</span><span class="plain">;</span>
</pre>

View file

@ -672,7 +672,7 @@ following routine finds or creates this for a given property.
<span class="identifier">Properties::EitherOr::set_parsing_grammar</span><span class="plain">(</span><span class="identifier">prn</span><span class="plain">, </span><span class="identifier">gv</span><span class="plain">);</span>
<span class="identifier">gv</span><span class="plain">-</span><span class="element">&gt;prn_understood</span><span class="plain"> = </span><span class="identifier">prn</span><span class="plain">;</span>
<span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain"> = </span><span class="identifier">Properties::iname</span><span class="plain">(</span><span class="identifier">prn</span><span class="plain">);</span>
<span class="identifier">gv</span><span class="plain">-</span><span class="element">&gt;gv_prn_iname</span><span class="plain"> = </span><span class="identifier">Hierarchy::make_iname_in</span><span class="plain">(</span><span class="identifier">EITHER_OR_GPR_FN_HL</span><span class="plain">, </span><span class="identifier">iname</span><span class="plain">-&gt;</span><span class="identifier">eventual_owner</span><span class="plain">);</span>
<span class="identifier">gv</span><span class="plain">-</span><span class="element">&gt;gv_prn_iname</span><span class="plain"> = </span><span class="identifier">Hierarchy::make_iname_in</span><span class="plain">(</span><span class="identifier">EITHER_OR_GPR_FN_HL</span><span class="plain">, </span><span class="identifier">Packaging::home_of</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">));</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">gv</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>

View file

@ -109,6 +109,8 @@ forge new kind constructors.
<span class="plain">#</span><span class="identifier">ifdef</span><span class="plain"> </span><span class="identifier">INTER_MODULE</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">kind_GPR_iname</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">instance_GPR_iname</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">first_instance_iname</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">next_instance_iname</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">pr_iname</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">inc_iname</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">dec_iname</span><span class="plain">;</span>
@ -326,6 +328,8 @@ I6 template files.
<span class="plain">#</span><span class="identifier">ifdef</span><span class="plain"> </span><span class="identifier">INTER_MODULE</span>
<span class="identifier">con</span><span class="plain">-</span><span class="element">&gt;kind_GPR_iname</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">con</span><span class="plain">-</span><span class="element">&gt;instance_GPR_iname</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">con</span><span class="plain">-</span><span class="element">&gt;first_instance_iname</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">con</span><span class="plain">-</span><span class="element">&gt;next_instance_iname</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">con</span><span class="plain">-</span><span class="element">&gt;pr_iname</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">con</span><span class="plain">-</span><span class="element">&gt;inc_iname</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">con</span><span class="plain">-</span><span class="element">&gt;dec_iname</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
@ -492,6 +496,18 @@ of the kind which the constructor makes:
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">UNKNOWN_TY_iname</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"no con symbols yet"</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">con</span><span class="plain">-</span><span class="element">&gt;con_iname</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">inter_name</span><span class="plain"> *</span><span class="functiontext">Kinds::Constructors::first_instance_iname</span><span class="plain">(</span><span class="reserved">kind_constructor</span><span class="plain"> *</span><span class="identifier">con</span><span class="plain">) {</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">con</span><span class="plain">-</span><span class="element">&gt;first_instance_iname</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Kinds::Constructors::set_first_instance_iname</span><span class="plain">(</span><span class="reserved">kind_constructor</span><span class="plain"> *</span><span class="identifier">con</span><span class="plain">, </span><span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain">) {</span>
<span class="identifier">con</span><span class="plain">-</span><span class="element">&gt;first_instance_iname</span><span class="plain"> = </span><span class="identifier">iname</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">inter_name</span><span class="plain"> *</span><span class="functiontext">Kinds::Constructors::next_instance_iname</span><span class="plain">(</span><span class="reserved">kind_constructor</span><span class="plain"> *</span><span class="identifier">con</span><span class="plain">) {</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">con</span><span class="plain">-</span><span class="element">&gt;next_instance_iname</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Kinds::Constructors::set_next_instance_iname</span><span class="plain">(</span><span class="reserved">kind_constructor</span><span class="plain"> *</span><span class="identifier">con</span><span class="plain">, </span><span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain">) {</span>
<span class="identifier">con</span><span class="plain">-</span><span class="element">&gt;next_instance_iname</span><span class="plain"> = </span><span class="identifier">iname</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">#</span><span class="identifier">endif</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="functiontext">Kinds::Constructors::name_in_template_code</span><span class="plain">(</span><span class="reserved">kind_constructor</span><span class="plain"> *</span><span class="identifier">con</span><span class="plain">) {</span>
@ -509,6 +525,14 @@ of the kind which the constructor makes:
<p class="endnote">The function Kinds::Constructors::iname appears nowhere else.</p>
<p class="endnote">The function Kinds::Constructors::first_instance_iname appears nowhere else.</p>
<p class="endnote">The function Kinds::Constructors::set_first_instance_iname appears nowhere else.</p>
<p class="endnote">The function Kinds::Constructors::next_instance_iname appears nowhere else.</p>
<p class="endnote">The function Kinds::Constructors::set_next_instance_iname appears nowhere else.</p>
<p class="endnote">The function Kinds::Constructors::name_in_template_code appears nowhere else.</p>
<p class="inwebparagraph"><a id="SP10"></a><b>&#167;10. </b>We also need to parse this, occasionally (if we needed this more than a

View file

@ -98,8 +98,8 @@ We need to itemise the structures we'll want to allocate:
@e dval_written_MT
@e nascent_array_MT
@e value_holster_array_MT
@e inter_name_MT
@e inter_name_family_MT
@e inter_name_array_MT
@e inter_name_generator_array_MT
@e adjective_iname_holder_MT
@e compilation_module_MT
@e inter_schema_MT
@ -141,8 +141,6 @@ ALLOCATE_INDIVIDUALLY(i6_memory_setting)
ALLOCATE_INDIVIDUALLY(implication)
ALLOCATE_INDIVIDUALLY(inference_subject)
ALLOCATE_INDIVIDUALLY(instance)
ALLOCATE_INDIVIDUALLY(inter_name)
ALLOCATE_INDIVIDUALLY(inter_name_family)
ALLOCATE_INDIVIDUALLY(internal_test_case)
ALLOCATE_INDIVIDUALLY(inv_token_problem_token)
ALLOCATE_INDIVIDUALLY(kind_interaction)
@ -205,6 +203,8 @@ ALLOCATE_IN_ARRAYS(extension_identifier_database_entry, 100)
ALLOCATE_IN_ARRAYS(i6_schema, 100)
ALLOCATE_IN_ARRAYS(inference, 100)
ALLOCATE_IN_ARRAYS(instance_usage, 200)
ALLOCATE_IN_ARRAYS(inter_name, 1000)
ALLOCATE_IN_ARRAYS(inter_name_generator, 1000)
ALLOCATE_IN_ARRAYS(invocation_options, 100)
ALLOCATE_IN_ARRAYS(local_variable, 100)
ALLOCATE_IN_ARRAYS(pcalc_func, 1000)

View file

@ -61,6 +61,8 @@ The following makes up a new schema from a |printf|-style formatted string:
@d MAX_I6_SCHEMA_ATTEMPT 1024 /* plenty of room for conjectural schema overruns */
=
int unique_qi_counter = 0;
i6_schema *Calculus::Schemas::new(char *fmt, ...) {
va_list ap; /* the variable argument list signified by the dots */
i6_schema *sch = CREATE(i6_schema);
@ -123,7 +125,7 @@ an integer; |%s|, a C string; |%S|, a text stream; and |%k|, a kind ID.
int N = sch->no_quoted_inames++;
if (N >= 2) internal_error("too many inter_name quotes");
sch->quoted_inames[N] = iname;
WRITE("QUOTED_INAME_%d_%08x", N, iname->allocation_id);
WRITE("QUOTED_INAME_%d_%08x", N, unique_qi_counter++);
break;
}
case 'N': WRITE("%N", va_arg(ap, int)); break;

View file

@ -907,7 +907,7 @@ typedef struct kind_interaction {
@ =
package_request *Kinds::RunTime::package(kind *K) {
inter_name *iname = Kinds::RunTime::iname(K);
return iname->eventual_owner;
return Packaging::home_of(iname);
}
@

View file

@ -324,7 +324,7 @@ text for the response than the one we first created.
}
inter_name *ts_iname = Strings::TextSubstitutions::text_substitution_iname(ts);
inter_name *rc_iname = Strings::response_constant_iname(R, marker);
packaging_state save = Packaging::enter(rc_iname->eventual_owner);
packaging_state save = Packaging::enter_home_of(rc_iname);
Emit::response(rc_iname, R, marker, ts_iname);
Packaging::exit(save);
}

View file

@ -885,7 +885,7 @@ void Rulebooks::compile_rulebooks(void) {
int par = FALSE;
if (Rulebooks::focus(rb) == PARAMETER_FOCUS) par = TRUE;
LOGIF(RULEBOOK_COMPILATION, "Compiling rulebook: %W = %n (in $X)\n",
rb->primary_name, rb->rb_iname, rb->rb_iname->eventual_owner);
rb->primary_name, rb->rb_iname, Packaging::home_of(rb->rb_iname));
packaging_state save = Packaging::enter_home_of(rb->rb_iname);
Rules::Bookings::list_compile(rb->rule_list, rb->rb_iname, act, par);
Packaging::exit(save);

View file

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

View file

@ -35,7 +35,7 @@ inter_name *currently_compiling_iname = NULL; /* routine we end up with */
=
void Routines::begin_framed(inter_name *iname, ph_stack_frame *phsf) {
if (iname == NULL) internal_error("no iname for routine");
package_request *R = iname->eventual_owner;
package_request *R = Packaging::home_of(iname);
if ((R == NULL) || (R == Hierarchy::main())) {
LOG("Routine outside of package: ................................................ %n\n", iname);
WRITE_TO(STDERR, "Routine outside of package: %n\n", iname);
@ -83,7 +83,7 @@ void Routines::end_in_current_package(void) {
if ((currently_compiling_in_frame->allocated_pointers) ||
(currently_compiling_in_frame->no_formal_parameters_needed > 0)) {
if (Packaging::houseed_in_function(public_name)) {
kernel_name = Hierarchy::make_kernel_iname(public_name->eventual_owner);
kernel_name = Hierarchy::make_kernel_iname(Packaging::home_of(public_name));
} else {
internal_error("routine not housed in function");
}

View file

@ -497,7 +497,7 @@ void Emit::guard(inter_error_message *ERR) {
void Emit::kind(inter_name *iname, inter_t TID, inter_name *super,
int constructor, int arity, kind **operand_kinds) {
packaging_state save = Packaging::enter(iname->eventual_owner);
packaging_state save = Packaging::enter_home_of(iname);
inter_symbol *S = InterNames::to_symbol(iname);
inter_t SID = 0;
if (S) SID = Inter::SymbolsTables::id_from_IRS_and_symbol(default_bookmark, S);
@ -556,7 +556,7 @@ void Emit::permission(property *prn, kind *K, inter_name *name) {
void Emit::instance_permission(property *prn, inter_name *inst_iname) {
inter_name *prop_name = Properties::iname(prn);
inter_symbol *inst_name = InterNames::to_symbol(inst_iname);
packaging_state save = Packaging::enter(inst_iname->eventual_owner);
packaging_state save = Packaging::enter_home_of(inst_iname);
Emit::basic_permission(default_bookmark, prop_name, inst_name, NULL);
Packaging::exit(save);
}
@ -974,7 +974,7 @@ inter_symbol *Emit::block(inter_name *iname) {
if (Emit::IRS() == NULL) internal_error("no inter repository");
inter_name *block_iname = NULL;
if (Packaging::houseed_in_function(iname))
block_iname = Hierarchy::make_block_iname(iname->eventual_owner);
block_iname = Hierarchy::make_block_iname(Packaging::home_of(iname));
else internal_error("routine outside function package");
inter_symbol *rsymb = Emit::package(block_iname, code_packagetype, NULL);

View file

@ -112,7 +112,7 @@ named_resource_location *HierarchyLocations::make_as(int id, text_stream *name,
named_resource_location *nrl = HierarchyLocations::new();
nrl->access_number = id;
nrl->access_name = Str::duplicate(name);
nrl->requirements = HierarchyLocations::this_package(iname->eventual_owner);
nrl->requirements = HierarchyLocations::this_package(Packaging::home_of(iname));
nrl->equates_to_iname = iname;
HierarchyLocations::index(nrl);
return nrl;
@ -178,7 +178,7 @@ inter_name *HierarchyLocations::find_by_name(text_stream *name) {
}
inter_name *HierarchyLocations::function(package_request *R, text_stream *name, text_stream *trans) {
inter_name *iname = Packaging::function(InterNames::make(name, R), R, NULL);
inter_name *iname = Packaging::function(InterNames::explicitly_named(name, R), R, NULL);
if (trans) InterNames::change_translation(iname, trans);
return iname;
}
@ -193,21 +193,21 @@ inter_name *HierarchyLocations::nrl_to_iname(named_resource_location *nrl) {
}
if (nrl->requirements.this_mundane_package == Hierarchy::template()) {
packaging_state save = Packaging::enter(nrl->requirements.this_mundane_package);
nrl->equates_to_iname = InterNames::make(nrl->access_name, Hierarchy::template());
nrl->equates_to_iname = InterNames::explicitly_named(nrl->access_name, Hierarchy::template());
nrl->equates_to_iname->symbol = Emit::extern(nrl->access_name, K_value);
Packaging::exit(save);
} else if (Str::len(nrl->function_package_name) > 0) {
nrl->equates_to_iname = Packaging::function_text(
InterNames::make(nrl->function_package_name, nrl->requirements.this_mundane_package),
InterNames::explicitly_named(nrl->function_package_name, nrl->requirements.this_mundane_package),
nrl->requirements.this_mundane_package,
nrl->access_name);
} else if (Str::len(nrl->datum_package_name) > 0) {
nrl->equates_to_iname = Packaging::datum_text(
InterNames::make(nrl->datum_package_name, nrl->requirements.this_mundane_package),
InterNames::explicitly_named(nrl->datum_package_name, nrl->requirements.this_mundane_package),
nrl->requirements.this_mundane_package,
nrl->access_name);
} else if ((nrl->requirements.this_mundane_package) && (nrl->equates_to_iname == NULL)) {
nrl->equates_to_iname = InterNames::make(nrl->access_name, nrl->requirements.this_mundane_package);
nrl->equates_to_iname = InterNames::explicitly_named(nrl->access_name, nrl->requirements.this_mundane_package);
}
nrl->equates_to_iname = Hierarchy::post_process(nrl->access_number, nrl->equates_to_iname);
@ -245,14 +245,11 @@ inter_name *HierarchyLocations::find_in_package(int id, package_request *P, word
TEMPORARY_TEXT(T);
inter_name *temp_iname = NULL;
if (derive_from) {
temp_iname = InterNames::new_derived_f(nrl->trans.name_generator, derive_from);
temp_iname = InterNames::derived(nrl->trans.name_generator, derive_from, W);
} else {
temp_iname = InterNames::new_f(nrl->trans.name_generator, fix);
}
if (!Wordings::empty(W)) {
InterNames::attach_memo(temp_iname, W);
W = EMPTY_WORDING;
temp_iname = InterNames::generated(nrl->trans.name_generator, fix, W);
}
W = EMPTY_WORDING;
WRITE_TO(T, "%n", temp_iname);
@<Make the actual iname@>;
DISCARD_TEXT(T);
@ -267,16 +264,13 @@ inter_name *HierarchyLocations::find_in_package(int id, package_request *P, word
@<Make the actual iname@> =
if (Str::len(nrl->function_package_name) > 0) {
iname = Packaging::function_text(
InterNames::make(nrl->function_package_name, P),
P,
NULL);
iname = Packaging::function(
InterNames::explicitly_named(nrl->function_package_name, P), P, NULL);
} else {
if (nrl->trans.by_imposition) iname = InterNames::make(imposed_name, P);
else if (Str::len(nrl->access_name) == 0) iname = InterNames::make(T, P);
else iname = InterNames::make(nrl->access_name, P);
if (nrl->trans.by_imposition) iname = InterNames::explicitly_named_with_memo(imposed_name, P, W);
else if (Str::len(nrl->access_name) == 0) iname = InterNames::explicitly_named_with_memo(T, P, W);
else iname = InterNames::explicitly_named_with_memo(nrl->access_name, P, W);
}
if (!Wordings::empty(W)) InterNames::attach_memo(iname, W);
if ((Str::len(T) > 0) && (nrl->access_name)) InterNames::change_translation(iname, T);
@ =
@ -296,7 +290,7 @@ package_request *HierarchyLocations::package_in_package(int id, package_request
internal_error("subpackage not in enclosing superpackage");
} else internal_error("NRL accessed inappropriately");
return Packaging::request(InterNames::make(nrl->access_name, P), P, nrl->package_type);
return Packaging::request(InterNames::explicitly_named(nrl->access_name, P), P, nrl->package_type);
}
=

View file

@ -1570,7 +1570,7 @@ inter_name *Hierarchy::find_by_name(text_stream *name) {
package_request *main_pr = NULL;
package_request *Hierarchy::main(void) {
if (main_pr == NULL)
main_pr = Packaging::request(InterNames::make(I"main", NULL), NULL, plain_ptype);
main_pr = Packaging::request(InterNames::explicitly_named(I"main", NULL), NULL, plain_ptype);
return main_pr;
}
@ -1578,7 +1578,7 @@ package_request *resources_pr = NULL;
package_request *Hierarchy::resources(void) {
if (resources_pr == NULL)
resources_pr = Packaging::request(
InterNames::make(I"resources", Hierarchy::main()),
InterNames::explicitly_named(I"resources", Hierarchy::main()),
Hierarchy::main(), plain_ptype);
return resources_pr;
}
@ -1587,7 +1587,7 @@ package_request *template_pr = NULL;
package_request *Hierarchy::template(void) {
if (template_pr == NULL)
template_pr = Packaging::request(
InterNames::make(I"template", Hierarchy::resources()),
InterNames::explicitly_named(I"template", Hierarchy::resources()),
Hierarchy::resources(), module_ptype);
return template_pr;
}

View file

@ -1,184 +1,265 @@
[InterNames::] Inter Namespace.
@
To manage identifiers, which have names and positions in the Inter hierarchy.
@e UNIQUE_FUSAGE from 1
@e MULTIPLE_FUSAGE
@e DERIVED_FUSAGE
@h Families.
Each inter name comes from a "generator". Some are one-shot, and produce just
one name before being discarded; others produce a numbered sequence of names
in a given pattern, counting upwards from 1 (|example_1|, |example_2|, ...);
and others still derive new names from existing ones (for example, turning
|fish| amd |rumour| into |fishmonger| and |rumourmonger|).
@e UNIQUE_INGEN from 1
@e MULTIPLE_INGEN
@e DERIVED_INGEN
=
typedef struct inter_name_family {
int fusage;
struct text_stream *family_name;
int no_consumed;
struct inter_name_family *derivative_of;
struct text_stream *derived_prefix;
struct text_stream *derived_suffix;
MEMORY_MANAGEMENT
} inter_name_family;
typedef struct inter_name_generator {
int ingen;
struct text_stream *name_stem;
int no_generated; /* relevamt only for |MULTIPLE_INGEN| */
struct text_stream *derived_prefix; /* relevamt only for |DERIVED_INGEN| */
struct text_stream *derived_suffix; /* relevamt only for |DERIVED_INGEN| */
} inter_name_generator;
typedef struct inter_name {
struct inter_name_family *family;
int unique_number;
struct inter_symbol *symbol;
struct package_request *eventual_owner;
struct text_stream *memo;
struct inter_name *derived_from;
struct inter_name **parametrised_derivatives;
MEMORY_MANAGEMENT
} inter_name;
@ =
inter_name_family *InterNames::new_family(int fu, text_stream *name) {
inter_name_family *F = CREATE(inter_name_family);
F->fusage = fu;
F->family_name = Str::duplicate(name);
F->derivative_of = NULL;
inter_name_generator *InterNames::single_use_generator(text_stream *name) {
inter_name_generator *F = CREATE(inter_name_generator);
F->ingen = UNIQUE_INGEN;
F->name_stem = Str::duplicate(name);
F->derived_prefix = NULL;
F->derived_suffix = NULL;
return F;
}
inter_name *InterNames::make_in_family(inter_name_family *F, int suppress_count) {
if (F == NULL) internal_error("no family");
inter_name *N = CREATE(inter_name);
N->family = F;
N->unique_number = 0;
if (F->fusage == UNIQUE_FUSAGE) internal_error("not a family name");
if ((F->fusage != DERIVED_FUSAGE) && (suppress_count == FALSE)) {
N->unique_number = ++F->no_consumed;
inter_name_generator *InterNames::multiple_use_generator(text_stream *prefix, text_stream *stem, text_stream *suffix) {
inter_name_generator *gen = InterNames::single_use_generator(stem);
if (Str::len(prefix) > 0) {
gen->ingen = DERIVED_INGEN;
gen->derived_prefix = Str::duplicate(prefix);
} else if (Str::len(suffix) > 0) {
gen->ingen = DERIVED_INGEN;
gen->derived_suffix = Str::duplicate(suffix);
} else gen->ingen = MULTIPLE_INGEN;
return gen;
}
@h Printing inames.
Inter names are stored not in textual form, but in terms of what would be
required to generate that text. (The memo field, which in principle allows
any text to be stored, is used only for a small proportion of inames.)
=
typedef struct inter_name {
struct inter_name_generator *family;
int unique_number;
struct inter_symbol *symbol;
struct package_request *location_in_hierarchy;
struct text_stream *memo;
struct inter_name *derived_from;
} inter_name;
@ This implements the |%n| escape, which prints an iname:
=
void InterNames::writer(OUTPUT_STREAM, char *format_string, void *vI) {
inter_name *iname = (inter_name *) vI;
if (iname == NULL) WRITE("<no-inter-name>");
else {
if (iname->family == NULL) internal_error("bad inter_name");
switch (iname->family->ingen) {
case DERIVED_INGEN:
WRITE("%S", iname->family->derived_prefix);
InterNames::writer(OUT, format_string, iname->derived_from);
WRITE("%S", iname->family->derived_suffix);
break;
case UNIQUE_INGEN:
WRITE("%S", iname->family->name_stem);
break;
case MULTIPLE_INGEN:
WRITE("%S", iname->family->name_stem);
if (iname->unique_number >= 0) WRITE("%d", iname->unique_number);
break;
default: internal_error("unknown ingen");
}
if (Str::len(iname->memo) > 0) WRITE("_%S", iname->memo);
}
N->symbol = NULL;
N->memo = NULL;
N->derived_from = NULL;
N->parametrised_derivatives = NULL;
N->eventual_owner = Hierarchy::main();
return N;
}
inter_name *InterNames::make(text_stream *name, package_request *R) {
inter_name_family *F = InterNames::new_family(UNIQUE_FUSAGE, name);
inter_name *N = CREATE(inter_name);
N->family = F;
N->unique_number = 1;
N->symbol = NULL;
N->memo = NULL;
N->derived_from = NULL;
N->parametrised_derivatives = NULL;
N->eventual_owner = R;
return N;
@h Making new inames.
We can now make a new iname, which is easy unless there's a memo to attach.
For example, attaching the wording "printing the name of a dark room" to
an iname which would otherwise just be |V12| produces |V12_printing_the_name_of_a_da|.
Memos exist almost largely to make the Inter code easier for human eyes to read,
as in this case, but sometimes, as with kind names like |K2_thing|, they're
needed because template or explicit I6 inclusion code makes references to them.
Although most inter names are eventually used to create symbols in the
Inter hierarchy's symbols table, this does not happen immediately, and
for some inames it never will.
=
inter_name *InterNames::new(inter_name_generator *F, package_request *R, wording W) {
inter_name *iname = CREATE(inter_name);
iname->family = F;
iname->unique_number = 0;
iname->symbol = NULL;
iname->derived_from = NULL;
iname->location_in_hierarchy = R;
if (Wordings::empty(W)) {
iname->memo = NULL;
} else {
iname->memo = Str::new();
@<Fill the memo with up to 28 characters of text from the given wording@>;
@<Ensure that the name, as now extended by the memo, is a legal Inter identifier@>;
}
return iname;
}
inter_name_family *InterNames::name_generator(text_stream *prefix, text_stream *stem, text_stream *suffix) {
int fusage = MULTIPLE_FUSAGE;
if ((Str::len(prefix) > 0) || (Str::len(suffix) > 0)) fusage = DERIVED_FUSAGE;
inter_name_family *family = InterNames::new_family(fusage, stem);
if (Str::len(prefix) > 0) family->derived_prefix = Str::duplicate(prefix);
if (Str::len(suffix) > 0) family->derived_suffix = Str::duplicate(suffix);
return family;
}
void InterNames::attach_memo(inter_name *N, wording W) {
if (N->symbol) internal_error("too late to attach memo");
N->memo = Str::new();
@<Fill the memo with up to 28 characters of text from the given wording@> =
int c = 0;
LOOP_THROUGH_WORDING(j, W) {
/* identifier is at this point 32 chars or fewer in length: add at most 30 more */
if (c++ > 0) WRITE_TO(N->memo, " ");
if (c++ > 0) WRITE_TO(iname->memo, " ");
if (Wide::len(Lexer::word_text(j)) > 30)
WRITE_TO(N->memo, "etc");
else WRITE_TO(N->memo, "%N", j);
if (Str::len(N->memo) > 32) break;
WRITE_TO(iname->memo, "etc");
else WRITE_TO(iname->memo, "%N", j);
if (Str::len(iname->memo) > 32) break;
}
Str::truncate(N->memo, 28); /* it was at worst 62 chars in size, but is now truncated to 28 */
Identifiers::purify(N->memo);
Str::truncate(iname->memo, 28); /* it was at worst 62 chars in size, but is now truncated to 28 */
@<Ensure that the name, as now extended by the memo, is a legal Inter identifier@> =
Identifiers::purify(iname->memo);
TEMPORARY_TEXT(NBUFF);
WRITE_TO(NBUFF, "%n", N);
WRITE_TO(NBUFF, "%n", iname);
int L = Str::len(NBUFF);
DISCARD_TEXT(NBUFF);
if (L > 28) Str::truncate(N->memo, Str::len(N->memo) - (L - 28));
if (L > 28) Str::truncate(iname->memo, Str::len(iname->memo) - (L - 28));
@ That creation function should be called only by these, which in turn must
be called only from within the current chapter. First, the single-shot cases,
where the caller wants a single name with fixed wording (but possibly with
a memo to attach):
=
inter_name *InterNames::explicitly_named_with_memo(text_stream *name, package_request *R, wording W) {
return InterNames::new(InterNames::single_use_generator(name), R, W);
}
void InterNames::change_translation(inter_name *N, text_stream *new_text) {
Inter::Symbols::set_translate(InterNames::to_symbol(N), new_text);
inter_name *InterNames::explicitly_named(text_stream *name, package_request *R) {
return InterNames::explicitly_named_with_memo(name, R, EMPTY_WORDING);
}
text_stream *InterNames::get_translation(inter_name *N) {
return Inter::Symbols::get_translate(InterNames::to_symbol(N));
@ Second, the generated or derived cases:
=
inter_name *InterNames::multiple(inter_name_generator *F, package_request *R, wording W) {
if (F == NULL) internal_error("no family");
if (F->ingen == UNIQUE_INGEN) internal_error("not a family name");
inter_name *iname = InterNames::new(F, R, W);
if (F->ingen != DERIVED_INGEN) iname->unique_number = ++F->no_generated;
return iname;
}
inter_symbol *InterNames::to_symbol(inter_name *N) {
if (N->symbol == NULL) {
inter_name *InterNames::generated(inter_name_generator *F, int fix, wording W) {
inter_name *iname = InterNames::multiple(F, NULL, W);
if (fix != -1) iname->unique_number = fix;
return iname;
}
inter_name *InterNames::derived(inter_name_generator *F, inter_name *from, wording W) {
if (F->ingen != DERIVED_INGEN) internal_error("not a derived family");
inter_name *iname = InterNames::multiple(F, from->location_in_hierarchy, W);
iname->derived_from = from;
return iname;
}
@ An ugly necessity is that a handful of inames representing actions have to
be renamed after creation, thanks to sentences such as:
>> The taking action translates into I6 as "Take".
=
void InterNames::override_action_base_iname(inter_name *iname, text_stream *to) {
if (iname == NULL) internal_error("no such iname");
// if (iname->symbol) internal_error("too late to rename iname");
iname->family->name_stem = Str::duplicate(to);
Str::clear(iname->memo);
}
@h Conversion of inames to symbols.
The purpose of inames is not quite to represent identifier names occurring in
given packages inside the Inter hierarchy: it would be more accurate to say
that they represent potential identifiers, which may or may not be used.
At some point they will probably (but not certainly) undergo "conversion",
when they are matched up with actual symbols in the symbols tables of the
given packages. Once this is done, an iname can't be renamed or moved.
Conversion is done on-demand, and thus left as late as possible. It happens
automatically in the following function:
=
inter_symbol *InterNames::to_symbol(inter_name *iname) {
if (iname->symbol == NULL) {
TEMPORARY_TEXT(NBUFF);
WRITE_TO(NBUFF, "%n", N);
inter_symbols_table *T = Packaging::scope(Emit::repository(), N);
N->symbol = Emit::new_symbol(T, NBUFF);
WRITE_TO(NBUFF, "%n", iname);
inter_symbols_table *T = Packaging::scope(Emit::repository(), iname);
iname->symbol = Emit::new_symbol(T, NBUFF);
DISCARD_TEXT(NBUFF);
}
return N->symbol;
return iname->symbol;
}
text_stream *InterNames::to_text(inter_name *N) {
if (N == NULL) return NULL;
return InterNames::to_symbol(N)->symbol_name;
void InterNames::change_translation(inter_name *iname, text_stream *new_text) {
Inter::Symbols::set_translate(InterNames::to_symbol(iname), new_text);
}
inter_symbol *InterNames::define_symbol(inter_name *N) {
InterNames::to_symbol(N);
if (N->symbol) {
if (Inter::Symbols::is_predeclared(N->symbol)) {
Inter::Symbols::undefine(N->symbol);
}
}
if ((N->symbol) && (Inter::Symbols::read_annotation(N->symbol, HOLDING_IANN) == 1)) {
if (Inter::Symbols::read_annotation(N->symbol, DELENDA_EST_IANN) != 1) {
Emit::annotate_symbol_i(N->symbol, DELENDA_EST_IANN, 1);
Inter::Symbols::strike_definition(N->symbol);
}
return N->symbol;
}
return N->symbol;
text_stream *InterNames::get_translation(inter_name *iname) {
return Inter::Symbols::get_translate(InterNames::to_symbol(iname));
}
inter_symbol *InterNames::destroy_symbol(inter_name *N) {
InterNames::to_symbol(N);
if (N->symbol) {
if (Inter::Symbols::is_predeclared(N->symbol)) {
Inter::Symbols::undefine(N->symbol);
}
}
if ((N->symbol) && (Inter::Symbols::read_annotation(N->symbol, HOLDING_IANN) == 1)) {
if (Inter::Symbols::read_annotation(N->symbol, DELENDA_EST_IANN) != 1) {
Emit::annotate_symbol_i(N->symbol, DELENDA_EST_IANN, 1);
Inter::Symbols::strike_definition(N->symbol);
}
return N->symbol;
} else if (Inter::Symbols::read_annotation(N->symbol, DELENDA_EST_IANN) != 1) internal_error("Bang");
return N->symbol;
text_stream *InterNames::to_text(inter_name *iname) {
if (iname == NULL) return NULL;
return InterNames::to_symbol(iname)->symbol_name;
}
void InterNames::writer(OUTPUT_STREAM, char *format_string, void *vI) {
inter_name *N = (inter_name *) vI;
if (N == NULL) WRITE("<no-inter-name>");
else {
if (N->family == NULL) internal_error("bad inter_name");
switch (N->family->fusage) {
case DERIVED_FUSAGE:
WRITE("%S", N->family->derived_prefix);
InterNames::writer(OUT, format_string, N->derived_from);
WRITE("%S", N->family->derived_suffix);
break;
case UNIQUE_FUSAGE:
WRITE("%S", N->family->family_name);
break;
case MULTIPLE_FUSAGE:
WRITE("%S", N->family->family_name);
if (N->unique_number >= 0) WRITE("%d", N->unique_number);
break;
default: internal_error("unknown fusage");
inter_symbol *InterNames::define_symbol(inter_name *iname) {
InterNames::to_symbol(iname);
if (iname->symbol) {
if (Inter::Symbols::is_predeclared(iname->symbol)) {
Inter::Symbols::undefine(iname->symbol);
}
if (Str::len(N->memo) > 0) WRITE("_%S", N->memo);
}
if ((iname->symbol) && (Inter::Symbols::read_annotation(iname->symbol, HOLDING_IANN) == 1)) {
if (Inter::Symbols::read_annotation(iname->symbol, DELENDA_EST_IANN) != 1) {
Emit::annotate_symbol_i(iname->symbol, DELENDA_EST_IANN, 1);
Inter::Symbols::strike_definition(iname->symbol);
}
return iname->symbol;
}
return iname->symbol;
}
inter_symbol *InterNames::destroy_symbol(inter_name *iname) {
InterNames::to_symbol(iname);
if (iname->symbol) {
if (Inter::Symbols::is_predeclared(iname->symbol)) {
Inter::Symbols::undefine(iname->symbol);
}
}
if ((iname->symbol) && (Inter::Symbols::read_annotation(iname->symbol, HOLDING_IANN) == 1)) {
if (Inter::Symbols::read_annotation(iname->symbol, DELENDA_EST_IANN) != 1) {
Emit::annotate_symbol_i(iname->symbol, DELENDA_EST_IANN, 1);
Inter::Symbols::strike_definition(iname->symbol);
}
return iname->symbol;
} else if (Inter::Symbols::read_annotation(iname->symbol, DELENDA_EST_IANN) != 1) internal_error("Bang");
return iname->symbol;
}
void InterNames::set_flag(inter_name *iname, int f) {
@ -226,22 +307,3 @@ int InterNames::defined(inter_name *iname) {
if (Inter::Symbols::is_defined(S)) return TRUE;
return FALSE;
}
inter_name *InterNames::new_f(inter_name_family *F, int fix) {
inter_name *iname = InterNames::make_in_family(F, FALSE);
if (fix != -1) iname->unique_number = fix;
return iname;
}
inter_name *InterNames::new_derived_f(inter_name_family *F, inter_name *from) {
if (F->fusage != DERIVED_FUSAGE) internal_error("not a derived family");
inter_name *N = InterNames::make_in_family(F, TRUE);
Packaging::house_with(N, from);
N->derived_from = from;
return N;
}
void InterNames::override_action_base_iname(inter_name *ab_iname, text_stream *to) {
ab_iname->family->family_name = Str::duplicate(to);
Str::clear(ab_iname->memo);
}

View file

@ -53,7 +53,7 @@ typedef struct submodule_request_counter {
package_request *Packaging::request(inter_name *name, package_request *parent, inter_symbol *pt) {
package_request *R = CREATE(package_request);
R->eventual_name = name;
if (parent) name->eventual_owner = parent;
if (parent) name->location_in_hierarchy = parent;
R->eventual_type = pt;
R->actual_package = NULL;
R->parent_request = parent;
@ -91,11 +91,11 @@ packaging_state Packaging::stateless(void) {
}
package_request *Packaging::home_of(inter_name *N) {
return N->eventual_owner;
return N->location_in_hierarchy;
}
packaging_state Packaging::enter_home_of(inter_name *N) {
return Packaging::enter(N->eventual_owner);
return Packaging::enter(Packaging::home_of(N));
}
packaging_state Packaging::enter_current_enclosure(void) {
@ -167,8 +167,8 @@ inter_package *Packaging::incarnate(package_request *R) {
inter_symbols_table *Packaging::scope(inter_repository *I, inter_name *N) {
if (N == NULL) internal_error("can't determine scope of null name");
if (N->eventual_owner == NULL) return Inter::get_global_symbols(Emit::repository());
return Inter::Packages::scope(Packaging::incarnate(N->eventual_owner));
if (N->location_in_hierarchy == NULL) return Inter::get_global_symbols(Emit::repository());
return Inter::Packages::scope(Packaging::incarnate(N->location_in_hierarchy));
}
@ =
@ -176,7 +176,7 @@ package_request *generic_pr = NULL;
package_request *Packaging::request_generic(void) {
if (generic_pr == NULL)
generic_pr = Packaging::request(
InterNames::make(I"generic", Hierarchy::resources()),
InterNames::explicitly_named(I"generic", Hierarchy::resources()),
Hierarchy::resources(), module_ptype);
return generic_pr;
}
@ -185,7 +185,7 @@ package_request *synoptic_pr = NULL;
package_request *Packaging::request_synoptic(void) {
if (synoptic_pr == NULL)
synoptic_pr = Packaging::request(
InterNames::make(I"synoptic", Hierarchy::resources()),
InterNames::explicitly_named(I"synoptic", Hierarchy::resources()),
Hierarchy::resources(), module_ptype);
return synoptic_pr;
}
@ -213,7 +213,7 @@ typedef struct submodule_requests {
} submodule_requests;
package_request *Packaging::resources_for_new_submodule(text_stream *name, submodule_requests *SR) {
inter_name *package_iname = InterNames::make(name, Hierarchy::resources());
inter_name *package_iname = InterNames::explicitly_named(name, Hierarchy::resources());
package_request *P = Packaging::request(package_iname, Hierarchy::resources(), module_ptype);
Packaging::initialise_submodules(SR);
return P;
@ -274,7 +274,7 @@ package_request *Packaging::synoptic_resource(submodule_identity *sid) {
LOOP_OVER_LINKED_LIST(sr, submodule_request, SR->submodules)
if (sid == sr->which_submodule)
return sr->where_found;
inter_name *iname = InterNames::make(sid->submodule_name, parent);
inter_name *iname = InterNames::explicitly_named(sid->submodule_name, parent);
sr = CREATE(submodule_request);
sr->which_submodule = sid;
sr->where_found = Packaging::request(iname, parent, plain_ptype);
@ -315,14 +315,14 @@ inter_name *Packaging::supply_iname(package_request *R, int what_for) {
}
TEMPORARY_TEXT(P);
WRITE_TO(P, "%S_%d", pr_counter_names[what_for], N);
inter_name *iname = InterNames::make(P, R);
inter_name *iname = InterNames::explicitly_named(P, R);
DISCARD_TEXT(P);
return iname;
}
inter_name *Packaging::function(inter_name *function_iname, package_request *R2, inter_name *temp_iname) {
package_request *R3 = Packaging::request(function_iname, R2, function_ptype);
inter_name *iname = InterNames::make(I"call", R3);
inter_name *iname = InterNames::explicitly_named(I"call", R3);
Packaging::house(iname, R3);
if (temp_iname) {
TEMPORARY_TEXT(T);
@ -335,7 +335,7 @@ inter_name *Packaging::function(inter_name *function_iname, package_request *R2,
inter_name *Packaging::function_text(inter_name *function_iname, package_request *R2, text_stream *translation) {
package_request *R3 = Packaging::request(function_iname, R2, function_ptype);
inter_name *iname = InterNames::make(I"call", R3);
inter_name *iname = InterNames::explicitly_named(I"call", R3);
Packaging::house(iname, R3);
if (translation)
InterNames::change_translation(iname, translation);
@ -344,7 +344,7 @@ inter_name *Packaging::function_text(inter_name *function_iname, package_request
inter_name *Packaging::datum_text(inter_name *function_iname, package_request *R2, text_stream *translation) {
package_request *R3 = Packaging::request(function_iname, R2, data_ptype);
inter_name *iname = InterNames::make(translation, R3);
inter_name *iname = InterNames::explicitly_named(translation, R3);
Packaging::house(iname, R3);
return iname;
}
@ -352,18 +352,18 @@ inter_name *Packaging::datum_text(inter_name *function_iname, package_request *R
void Packaging::house(inter_name *iname, package_request *at) {
if (iname == NULL) internal_error("can't house null name");
if (at == NULL) internal_error("can't house nowhere");
iname->eventual_owner = at;
iname->location_in_hierarchy = at;
}
void Packaging::house_with(inter_name *iname, inter_name *landlord) {
if (iname == NULL) internal_error("can't house null name");
if (landlord == NULL) internal_error("can't house with nobody");
iname->eventual_owner = landlord->eventual_owner;
iname->location_in_hierarchy = landlord->location_in_hierarchy;
}
int Packaging::houseed_in_function(inter_name *iname) {
if (iname == NULL) return FALSE;
if (iname->eventual_owner == NULL) return FALSE;
if (iname->eventual_owner->eventual_type == function_ptype) return TRUE;
if (iname->location_in_hierarchy == NULL) return FALSE;
if (iname->location_in_hierarchy->eventual_type == function_ptype) return TRUE;
return FALSE;
}

View file

@ -6,7 +6,7 @@
typedef struct name_translation {
struct text_stream *translate_to;
int then_make_unique;
struct inter_name_family *name_generator;
struct inter_name_generator *name_generator;
int derive;
int by_imposition;
} name_translation;
@ -48,20 +48,20 @@ name_translation Translation::to_uniqued(text_stream *S) {
name_translation Translation::prefix(text_stream *S) {
name_translation nt = Translation::same();
nt.name_generator = InterNames::name_generator(S, NULL, NULL);
nt.name_generator = InterNames::multiple_use_generator(S, NULL, NULL);
nt.derive = TRUE;
return nt;
}
name_translation Translation::suffix(text_stream *S) {
name_translation nt = Translation::same();
nt.name_generator = InterNames::name_generator(NULL, NULL, S);
nt.name_generator = InterNames::multiple_use_generator(NULL, NULL, S);
nt.derive = TRUE;
return nt;
}
name_translation Translation::generate(text_stream *S) {
name_translation nt = Translation::same();
nt.name_generator = InterNames::name_generator(NULL, S, NULL);
nt.name_generator = InterNames::multiple_use_generator(NULL, S, NULL);
return nt;
}

View file

@ -711,7 +711,7 @@ inter_name *Instances::emitted_iname(instance *I) {
inter_name *iname = Instances::iname(I);
if (I->instance_emitted == FALSE) {
I->instance_emitted = TRUE;
packaging_state save = Packaging::enter(iname->eventual_owner);
packaging_state save = Packaging::enter_home_of(iname);
Emit::instance(iname, Instances::to_kind(I), I->enumeration_index);
Packaging::exit(save);
}
@ -720,7 +720,7 @@ inter_name *Instances::emitted_iname(instance *I) {
package_request *Instances::package(instance *I) {
inter_name *iname = Instances::iname(I);
return iname->eventual_owner;
return Packaging::home_of(iname);
}
@h Adjectival uses of instances.

View file

@ -415,7 +415,7 @@ int NonlocalVariables::SUBJ_compile_all(void) {
(nlv->housed_in_variables_array)) {
inter_name *iname = NonlocalVariables::iname(nlv);
packaging_state save = Packaging::enter(iname->eventual_owner);
packaging_state save = Packaging::enter_home_of(iname);
value_holster VH = Holsters::new(INTER_DATA_VHMODE);

View file

@ -61,7 +61,7 @@ regions_data *PL::Regions::new_data(inference_subject *subj) {
inter_name *PL::Regions::found_in_iname(instance *I) {
if (PF_I(regions, I)->in_region_iname == NULL) {
inter_name *iname = Instances::iname(I);
PF_I(regions, I)->in_region_iname = Hierarchy::make_iname_in(REGION_FOUND_IN_FN_HL, iname->eventual_owner);
PF_I(regions, I)->in_region_iname = Hierarchy::make_iname_in(REGION_FOUND_IN_FN_HL, Packaging::home_of(iname));
}
return PF_I(regions, I)->in_region_iname;
}

View file

@ -968,7 +968,7 @@ always the way to the other room -- the one we are not in.
@<Assert door-dir for a two-sided door@> =
door_dir_notice *notice = CREATE(door_dir_notice);
inter_name *iname = Instances::iname(I);
notice->ddn_iname = Hierarchy::make_iname_in(TSD_DOOR_DIR_FN_HL, iname->eventual_owner);
notice->ddn_iname = Hierarchy::make_iname_in(TSD_DOOR_DIR_FN_HL, Packaging::home_of(iname));
notice->door = I;
notice->R1 = R1;
notice->D1 = D1;
@ -982,7 +982,7 @@ always the other room -- the one we are not in.
@<Assert door-to for a two-sided door@> =
door_to_notice *notice = CREATE(door_to_notice);
inter_name *iname = Instances::iname(I);
notice->dtn_iname = Hierarchy::make_iname_in(TSD_DOOR_TO_FN_HL, iname->eventual_owner);
notice->dtn_iname = Hierarchy::make_iname_in(TSD_DOOR_TO_FN_HL, Packaging::home_of(iname));
notice->door = I;
notice->R1 = R1;
notice->R2 = R2;

View file

@ -312,21 +312,21 @@ so. These routines allow that to happen.
@<Compose the I6 short-name as a routine dynamically using its owner's short-name@> =
inter_name *iname = Instances::iname(I);
short_name_notice *notice = CREATE(short_name_notice);
notice->routine_iname = Hierarchy::make_iname_in(SHORT_NAME_FN_HL, iname->eventual_owner);
notice->routine_iname = Hierarchy::make_iname_in(SHORT_NAME_FN_HL, Packaging::home_of(iname));
notice->namee = I;
notice->after_subject = subj;
notice->capped = FALSE;
notice->snn_iname = Hierarchy::make_iname_in(SHORT_NAME_PROPERTY_FN_HL, iname->eventual_owner);
notice->snn_iname = Hierarchy::make_iname_in(SHORT_NAME_PROPERTY_FN_HL, Packaging::home_of(iname));
faux = notice->snn_iname;
@<Compose the I6 cap-short-name as a routine dynamically using its owner's cap-short-name@> =
inter_name *iname = Instances::iname(I);
short_name_notice *notice = CREATE(short_name_notice);
notice->routine_iname = Hierarchy::make_iname_in(SHORT_NAME_FN_HL, iname->eventual_owner);
notice->routine_iname = Hierarchy::make_iname_in(SHORT_NAME_FN_HL, Packaging::home_of(iname));
notice->namee = I;
notice->after_subject = subj;
notice->capped = TRUE;
notice->snn_iname = Hierarchy::make_iname_in(SHORT_NAME_PROPERTY_FN_HL, iname->eventual_owner);
notice->snn_iname = Hierarchy::make_iname_in(SHORT_NAME_PROPERTY_FN_HL, Packaging::home_of(iname));
faux = notice->snn_iname;
@ Lastly, then. We don't give this to kinds of room, because it's never necessary

View file

@ -527,7 +527,7 @@ grammar_verb *PL::Parsing::Verbs::for_prn(property *prn) {
Properties::EitherOr::set_parsing_grammar(prn, gv);
gv->prn_understood = prn;
inter_name *iname = Properties::iname(prn);
gv->gv_prn_iname = Hierarchy::make_iname_in(EITHER_OR_GPR_FN_HL, iname->eventual_owner);
gv->gv_prn_iname = Hierarchy::make_iname_in(EITHER_OR_GPR_FN_HL, Packaging::home_of(iname));
return gv;
}