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

Abolished action iname renaming

This commit is contained in:
Graham Nelson 2019-04-18 09:51:47 +01:00
parent 00f98e0c5a
commit 20d024c37e
16 changed files with 210 additions and 224 deletions

View file

@ -129,12 +129,9 @@ create a new nonphrasal stack frame.
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">kernel_name</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">, *</span><span class="identifier">public_name</span><span class="plain"> = </span><span class="identifier">currently_compiling_iname</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">currently_compiling_in_frame</span><span class="plain">-</span><span class="element">&gt;allocated_pointers</span><span class="plain">) ||</span>
<span class="plain">(</span><span class="identifier">currently_compiling_in_frame</span><span class="plain">-</span><span class="element">&gt;no_formal_parameters_needed</span><span class="plain"> &gt; 0)) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Packaging::houseed_in_function</span><span class="plain">(</span><span class="identifier">public_name</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">public_name</span><span class="plain">))</span>
<span class="identifier">kernel_name</span><span class="plain"> = </span><span class="functiontext">Hierarchy::make_kernel_iname</span><span class="plain">(</span><span class="functiontext">Packaging::home_of</span><span class="plain">(</span><span class="identifier">public_name</span><span class="plain">));</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"routine not housed in function"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="functiontext">Packaging::house_with</span><span class="plain">(</span><span class="identifier">kernel_name</span><span class="plain">, </span><span class="identifier">public_name</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"routine not housed in function"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">needed</span><span class="plain"> = </span><span class="functiontext">LocalVariables::count</span><span class="plain">(</span><span class="identifier">currently_compiling_in_frame</span><span class="plain">);</span>

View file

@ -425,7 +425,7 @@
<p class="endnote">The function Emit::kind_to_symbol is used in <a href="#SP4">&#167;4</a>, <a href="#SP5">&#167;5</a>.</p>
<p class="endnote">The function Emit::extern is used in 27/hl (<a href="27-hl.html#SP1">&#167;1</a>).</p>
<p class="endnote">The function Emit::extern is used in 27/in (<a href="27-in.html#SP8">&#167;8</a>).</p>
<p class="endnote">The function Emit::response is used in 17/rs (<a href="17-rs.html#SP7_1">&#167;7.1</a>).</p>

View file

@ -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::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">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">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>
@ -204,17 +204,15 @@
<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::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">InterNames::externalise_symbol</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">nrl</span><span class="plain">-</span><span class="element">&gt;access_name</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::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::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::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>
@ -329,7 +327,7 @@
<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</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="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">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::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>
@ -362,7 +360,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::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="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">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>
@ -412,7 +410,7 @@
<span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"subpackage in wrong superpackage"</span><span class="plain">);</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">Packaging::supply_iname</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">, </span><span class="identifier">hap</span><span class="plain">-</span><span class="element">&gt;counter</span><span class="plain">), </span><span class="identifier">R</span><span class="plain">, </span><span class="identifier">hap</span><span class="plain">-</span><span class="element">&gt;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">Packaging::supply_iname</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">, </span><span class="identifier">hap</span><span class="plain">-</span><span class="element">&gt;counter</span><span class="plain">), </span><span class="identifier">hap</span><span class="plain">-</span><span class="element">&gt;type</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>

View file

@ -148,6 +148,8 @@
<span class="definitionkeyword">enum</span> <span class="constant">MISTAKEACTION_HL</span>
<span class="definitionkeyword">enum</span> <span class="constant">ACTIONS_HAP</span>
<span class="definitionkeyword">enum</span> <span class="constant">ACTION_BASE_NAME_HL</span>
<span class="definitionkeyword">enum</span> <span class="constant">WAIT_HL</span>
<span class="definitionkeyword">enum</span> <span class="constant">TRANSLATED_BASE_NAME_HL</span>
<span class="definitionkeyword">enum</span> <span class="constant">DOUBLE_SHARP_NAME_HL</span>
<span class="definitionkeyword">enum</span> <span class="constant">PERFORM_FN_HL</span>
<span class="definitionkeyword">enum</span> <span class="constant">CHECK_RB_HL</span>
@ -177,6 +179,8 @@
<span class="functiontext">HierarchyLocations::ap</span><span class="plain">(</span><span class="constant">ACTIONS_HAP</span><span class="plain">, </span><span class="identifier">local_actions</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"action"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"_action"</span><span class="plain">);</span>
<span class="reserved">location_requirement</span><span class="plain"> </span><span class="identifier">in_action</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">"_action"</span><span class="plain">);</span>
<span class="functiontext">HierarchyLocations::con</span><span class="plain">(</span><span class="constant">ACTION_BASE_NAME_HL</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"A"</span><span class="plain">, </span><span class="functiontext">Translation::uniqued</span><span class="plain">(), </span><span class="identifier">in_action</span><span class="plain">);</span>
<span class="functiontext">HierarchyLocations::con</span><span class="plain">(</span><span class="constant">WAIT_HL</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Wait"</span><span class="plain">, </span><span class="functiontext">Translation::same</span><span class="plain">(), </span><span class="identifier">in_action</span><span class="plain">);</span>
<span class="functiontext">HierarchyLocations::con</span><span class="plain">(</span><span class="constant">TRANSLATED_BASE_NAME_HL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="functiontext">Translation::imposed</span><span class="plain">(), </span><span class="identifier">in_action</span><span class="plain">);</span>
<span class="functiontext">HierarchyLocations::con</span><span class="plain">(</span><span class="constant">DOUBLE_SHARP_NAME_HL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="functiontext">Translation::prefix</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"##"</span><span class="plain">), </span><span class="identifier">in_action</span><span class="plain">);</span>
<span class="functiontext">HierarchyLocations::func</span><span class="plain">(</span><span class="constant">PERFORM_FN_HL</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"perform_fn"</span><span class="plain">, </span><span class="functiontext">Translation::suffix</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"Sub"</span><span class="plain">), </span><span class="identifier">in_action</span><span class="plain">);</span>
<span class="functiontext">HierarchyLocations::package</span><span class="plain">(</span><span class="constant">CHECK_RB_HL</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"check_rb"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"_rulebook"</span><span class="plain">, </span><span class="identifier">in_action</span><span class="plain">);</span>
@ -1882,7 +1886,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::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="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">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>
@ -1891,7 +1895,7 @@
<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::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="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>
@ -1900,7 +1904,7 @@
<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::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="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>

View file

@ -73,7 +73,7 @@ any text to be stored, is used only for a small proportion of inames.)
<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_name_generator</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">generated_by</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">location_in_hierarchy</span><span class="plain">;</span>
@ -84,7 +84,7 @@ any text to be stored, is used only for a small proportion of inames.)
<p class="inwebparagraph"></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 is private to this section.</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>
@ -95,18 +95,18 @@ any text to be stored, is used only for a small proportion of inames.)
<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">if</span><span class="plain"> (</span><span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;generated_by</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;generated_by</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="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;generated_by</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="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;generated_by</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="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;generated_by</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="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;generated_by</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>
@ -137,7 +137,7 @@ for some inames it never will.
<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;generated_by</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>
@ -225,23 +225,23 @@ a memo to attach):
<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">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">G</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">G</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 generator"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">G</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 generator 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">G</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">G</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">G</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="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">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">G</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">G</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="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="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">G</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">G</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 generator"</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">G</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>
@ -255,39 +255,30 @@ a memo to attach):
<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>
<p class="inwebparagraph"><a id="SP7"></a><b>&#167;7. </b></p>
<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="reserved">package_request</span><span class="plain"> *</span><span class="functiontext">InterNames::location</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;location_in_hierarchy</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="endnote">The function InterNames::location is used in 27/pc (<a href="27-pc.html#SP4">&#167;4</a>, <a href="27-pc.html#SP5">&#167;5</a>, <a href="27-pc.html#SP6">&#167;6</a>, <a href="27-pc.html#SP8">&#167;8</a>).</p>
<p class="inwebparagraph"><a id="SP8"></a><b>&#167;8. Conversion of inames to symbols. </b>The purpose of inames is not quite to represent identifier names occurring in
given packages inside the Inter hierarchy: it would be more accurate to say
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.
given packages.
</p>
<p class="inwebparagraph">Conversion is done on-demand, and thus left as late as possible. It happens
automatically in the following function:
automatically in one of the following two functions:
</p>
@ -303,6 +294,11 @@ automatically in the following function:
<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::externalise_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">inter_name</span><span class="plain"> *</span><span class="identifier">ext_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">internal_error</span><span class="plain">(</span><span class="string">"iname already converted"</span><span class="plain">);</span>
<span class="identifier">iname</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain"> = </span><span class="functiontext">Emit::extern</span><span class="plain">(</span><span class="identifier">ext_iname</span><span class="plain">, </span><span class="identifier">K_value</span><span class="plain">);;</span>
<span class="plain">}</span>
@ -408,6 +404,8 @@ automatically in the following function:
<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::externalise_symbol is used in 27/hl (<a href="27-hl.html#SP1">&#167;1</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>

View file

@ -84,13 +84,12 @@
<pre class="display">
<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="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="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;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>
<span class="identifier">R</span><span class="plain">-</span><span class="element">&gt;parent_request</span><span class="plain"> = </span><span class="functiontext">InterNames::location</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="element">&gt;write_position</span><span class="plain"> = </span><span class="identifier">Inter::Bookmarks::new_IRS</span><span class="plain">(</span><span class="functiontext">Emit::repository</span><span class="plain">());</span>
<span class="identifier">R</span><span class="plain">-</span><span class="element">&gt;counters</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">R</span><span class="plain">;</span>
@ -135,7 +134,7 @@
<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;location_in_hierarchy</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">InterNames::location</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_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>
@ -229,8 +228,9 @@
<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;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="reserved">package_request</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain"> = </span><span class="functiontext">InterNames::location</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">P</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">P</span><span class="plain">));</span>
<span class="plain">}</span>
</pre>
@ -253,7 +253,7 @@
<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::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="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>
@ -262,7 +262,7 @@
<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::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="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>
@ -290,7 +290,7 @@
<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::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="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="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>
<span class="plain">}</span>
@ -385,7 +385,7 @@
<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>
<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">plain_ptype</span><span class="plain">);</span>
<span class="identifier">ADD_TO_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">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>
</pre>
@ -436,10 +436,9 @@
<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::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">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">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">P</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">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::explicitly_named</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"call"</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">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>
<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>
@ -449,38 +448,25 @@
<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_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::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">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="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">P</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">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::explicitly_named</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"call"</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">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>
<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::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::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">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="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">P</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">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::explicitly_named</span><span class="plain">(</span><span class="identifier">translation</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">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;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;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;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">package_request</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain"> = </span><span class="functiontext">InterNames::location</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">P</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">P</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>
@ -497,10 +483,6 @@
<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 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>).</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>
<hr class="tocbar">

View file

@ -83,7 +83,7 @@
<p class="endnote">The function Translation::uniqued is used in 27/hr (<a href="27-hr.html#SP1_4">&#167;1.4</a>, <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_14">&#167;1.14</a>, <a href="27-hr.html#SP1_16">&#167;1.16</a>, <a href="27-hr.html#SP1_20">&#167;1.20</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_28">&#167;1.28</a>, <a href="27-hr.html#SP1_30">&#167;1.30</a>, <a href="27-hr.html#SP1_32">&#167;1.32</a>, <a href="27-hr.html#SP1_36">&#167;1.36</a>, <a href="27-hr.html#SP1_38">&#167;1.38</a>, <a href="27-hr.html#SP1_40">&#167;1.40</a>, <a href="27-hr.html#SP1_42">&#167;1.42</a>, <a href="27-hr.html#SP1_46">&#167;1.46</a>).</p>
<p class="endnote">The function Translation::imposed is used in 27/hr (<a href="27-hr.html#SP1_28">&#167;1.28</a>).</p>
<p class="endnote">The function Translation::imposed 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>).</p>
<p class="endnote">The function Translation::to is used in 27/hr (<a href="27-hr.html#SP1_4">&#167;1.4</a>, <a href="27-hr.html#SP1_10">&#167;1.10</a>, <a href="27-hr.html#SP1_12">&#167;1.12</a>, <a href="27-hr.html#SP1_18">&#167;1.18</a>, <a href="27-hr.html#SP1_22">&#167;1.22</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_36">&#167;1.36</a>, <a href="27-hr.html#SP1_38">&#167;1.38</a>, <a href="27-hr.html#SP1_40">&#167;1.40</a>, <a href="27-hr.html#SP1_42">&#167;1.42</a>, <a href="27-hr.html#SP1_48">&#167;1.48</a>).</p>

View file

@ -48,6 +48,7 @@ and maximum below are always equal.
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">it_optional</span><span class="plain">; </span> <span class="comment">noun optional when describing the second noun?</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">abbreviable</span><span class="plain">; </span> <span class="comment">preposition optional when describing the second noun?</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">translated</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">translated_name</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">an_base_iname</span><span class="plain">; </span> <span class="comment">e.g., <code class="display"><span class="extract">Take</span></code></span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">an_iname</span><span class="plain">; </span> <span class="comment">e.g., <code class="display"><span class="extract">##Take</span></code></span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">inter_name</span><span class="plain"> *</span><span class="identifier">an_routine_iname</span><span class="plain">; </span> <span class="comment">e.g., <code class="display"><span class="extract">TakeSub</span></code></span>
@ -329,9 +330,10 @@ make that explicit: for instance, "taking" becomes "the taking action".
<span class="identifier">an</span><span class="plain">-</span><span class="element">&gt;it_optional</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="identifier">an</span><span class="plain">-</span><span class="element">&gt;abbreviable</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="identifier">an</span><span class="plain">-</span><span class="element">&gt;translated</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="identifier">an</span><span class="plain">-</span><span class="element">&gt;translated_name</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">an</span><span class="plain">-</span><span class="element">&gt;an_package</span><span class="plain"> = </span><span class="identifier">Hierarchy::local_package</span><span class="plain">(</span><span class="identifier">ACTIONS_HAP</span><span class="plain">);</span>
<span class="identifier">an</span><span class="plain">-</span><span class="element">&gt;an_base_iname</span><span class="plain"> = </span><span class="identifier">Hierarchy::make_iname_with_memo</span><span class="plain">(</span><span class="identifier">ACTION_BASE_NAME_HL</span><span class="plain">, </span><span class="identifier">an</span><span class="plain">-</span><span class="element">&gt;an_package</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">);</span>
<span class="identifier">an</span><span class="plain">-</span><span class="element">&gt;an_base_iname</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">an</span><span class="plain">-</span><span class="element">&gt;use_verb_routine_in_I6_library</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="identifier">an</span><span class="plain">-</span><span class="element">&gt;check_rules</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">an</span><span class="plain">-</span><span class="element">&gt;carry_out_rules</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
@ -406,10 +408,7 @@ make that explicit: for instance, "taking" becomes "the taking action".
<span class="identifier">an</span><span class="plain">-</span><span class="element">&gt;it_optional</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="identifier">an2</span><span class="plain">-</span><span class="element">&gt;it_optional</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">make_ds</span><span class="plain">) {</span>
<span class="identifier">InterNames::override_action_base_iname</span><span class="plain">(</span><span class="identifier">an</span><span class="plain">-</span><span class="element">&gt;an_base_iname</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Wait"</span><span class="plain">);</span>
<span class="functiontext">PL::Actions::double_sharp</span><span class="plain">(</span><span class="identifier">an</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">an</span><span class="plain">;</span>
<span class="plain">}</span>
@ -552,7 +551,7 @@ then that's what "listening" will match.)
<span class="plain">}</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="functiontext">PL::Actions::identifier</span><span class="plain">(</span><span class="reserved">action_name</span><span class="plain"> *</span><span class="identifier">an</span><span class="plain">) {</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">InterNames::to_text</span><span class="plain">(</span><span class="identifier">an</span><span class="plain">-</span><span class="element">&gt;an_base_iname</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">InterNames::to_text</span><span class="plain">(</span><span class="functiontext">PL::Actions::base_iname</span><span class="plain">(</span><span class="identifier">an</span><span class="plain">));</span>
<span class="plain">}</span>
<span class="reserved">action_name</span><span class="plain"> *</span><span class="functiontext">PL::Actions::Wait</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
@ -560,9 +559,21 @@ then that's what "listening" will match.)
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">waiting_action</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">inter_name</span><span class="plain"> *</span><span class="functiontext">PL::Actions::base_iname</span><span class="plain">(</span><span class="reserved">action_name</span><span class="plain"> *</span><span class="identifier">an</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">an</span><span class="plain">-</span><span class="element">&gt;an_base_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">waiting_action</span><span class="plain"> == </span><span class="identifier">an</span><span class="plain">)</span>
<span class="identifier">an</span><span class="plain">-</span><span class="element">&gt;an_base_iname</span><span class="plain"> = </span><span class="identifier">Hierarchy::make_iname_in</span><span class="plain">(</span><span class="identifier">WAIT_HL</span><span class="plain">, </span><span class="identifier">an</span><span class="plain">-</span><span class="element">&gt;an_package</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">an</span><span class="plain">-</span><span class="element">&gt;translated_name</span><span class="plain">) &gt; 0)</span>
<span class="identifier">an</span><span class="plain">-</span><span class="element">&gt;an_base_iname</span><span class="plain"> = </span><span class="identifier">Hierarchy::make_iname_with_specific_name</span><span class="plain">(</span><span class="identifier">TRANSLATED_BASE_NAME_HL</span><span class="plain">, </span><span class="identifier">an</span><span class="plain">-</span><span class="element">&gt;translated_name</span><span class="plain">, </span><span class="identifier">an</span><span class="plain">-</span><span class="element">&gt;an_package</span><span class="plain">);</span>
<span class="reserved">else</span>
<span class="identifier">an</span><span class="plain">-</span><span class="element">&gt;an_base_iname</span><span class="plain"> = </span><span class="identifier">Hierarchy::make_iname_with_memo</span><span class="plain">(</span><span class="identifier">ACTION_BASE_NAME_HL</span><span class="plain">, </span><span class="identifier">an</span><span class="plain">-</span><span class="element">&gt;an_package</span><span class="plain">, </span><span class="identifier">an</span><span class="plain">-</span><span class="element">&gt;present_name</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">an</span><span class="plain">-</span><span class="element">&gt;an_base_iname</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">inter_name</span><span class="plain"> *</span><span class="functiontext">PL::Actions::double_sharp</span><span class="plain">(</span><span class="reserved">action_name</span><span class="plain"> *</span><span class="identifier">an</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">an</span><span class="plain">-</span><span class="element">&gt;an_iname</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
<span class="identifier">an</span><span class="plain">-</span><span class="element">&gt;an_iname</span><span class="plain"> = </span><span class="identifier">Hierarchy::derive_iname_in</span><span class="plain">(</span><span class="identifier">DOUBLE_SHARP_NAME_HL</span><span class="plain">, </span><span class="identifier">an</span><span class="plain">-</span><span class="element">&gt;an_base_iname</span><span class="plain">, </span><span class="identifier">an</span><span class="plain">-</span><span class="element">&gt;an_package</span><span class="plain">);</span>
<span class="identifier">an</span><span class="plain">-</span><span class="element">&gt;an_iname</span><span class="plain"> = </span><span class="identifier">Hierarchy::derive_iname_in</span><span class="plain">(</span><span class="identifier">DOUBLE_SHARP_NAME_HL</span><span class="plain">, </span><span class="functiontext">PL::Actions::base_iname</span><span class="plain">(</span><span class="identifier">an</span><span class="plain">), </span><span class="identifier">an</span><span class="plain">-</span><span class="element">&gt;an_package</span><span class="plain">);</span>
<span class="identifier">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="identifier">Packaging::enter</span><span class="plain">(</span><span class="identifier">an</span><span class="plain">-</span><span class="element">&gt;an_package</span><span class="plain">);</span>
<span class="identifier">Emit::ds_named_pseudo_numeric_constant</span><span class="plain">(</span><span class="identifier">an</span><span class="plain">-</span><span class="element">&gt;an_iname</span><span class="plain">, </span><span class="identifier">K_value</span><span class="plain">, (</span><span class="identifier">inter_t</span><span class="plain">) </span><span class="identifier">an</span><span class="plain">-&gt;</span><span class="identifier">allocation_id</span><span class="plain">);</span>
<span class="identifier">InterNames::annotate_i</span><span class="plain">(</span><span class="identifier">an</span><span class="plain">-</span><span class="element">&gt;an_iname</span><span class="plain">, </span><span class="identifier">ACTION_IANN</span><span class="plain">, 1);</span>
@ -573,7 +584,7 @@ then that's what "listening" will match.)
<span class="identifier">inter_name</span><span class="plain"> *</span><span class="functiontext">PL::Actions::Sub</span><span class="plain">(</span><span class="reserved">action_name</span><span class="plain"> *</span><span class="identifier">an</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">an</span><span class="plain">-</span><span class="element">&gt;an_routine_iname</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">)</span>
<span class="identifier">an</span><span class="plain">-</span><span class="element">&gt;an_routine_iname</span><span class="plain"> = </span><span class="identifier">Hierarchy::derive_iname_in</span><span class="plain">(</span><span class="identifier">PERFORM_FN_HL</span><span class="plain">, </span><span class="identifier">an</span><span class="plain">-</span><span class="element">&gt;an_base_iname</span><span class="plain">, </span><span class="identifier">an</span><span class="plain">-</span><span class="element">&gt;an_package</span><span class="plain">);</span>
<span class="identifier">an</span><span class="plain">-</span><span class="element">&gt;an_routine_iname</span><span class="plain"> = </span><span class="identifier">Hierarchy::derive_iname_in</span><span class="plain">(</span><span class="identifier">PERFORM_FN_HL</span><span class="plain">, </span><span class="functiontext">PL::Actions::base_iname</span><span class="plain">(</span><span class="identifier">an</span><span class="plain">), </span><span class="identifier">an</span><span class="plain">-</span><span class="element">&gt;an_package</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">an</span><span class="plain">-</span><span class="element">&gt;an_routine_iname</span><span class="plain">;</span>
<span class="plain">}</span>
@ -619,7 +630,9 @@ then that's what "listening" will match.)
<p class="endnote">The function PL::Actions::Wait appears nowhere else.</p>
<p class="endnote">The function PL::Actions::double_sharp is used in <a href="#SP16">&#167;16</a>, <a href="#SP37">&#167;37</a>, 4/anl (<a href="4-anl.html#SP9">&#167;9</a>), 4/ap (<a href="4-ap.html#SP29">&#167;29</a>, <a href="4-ap.html#SP35">&#167;35</a>).</p>
<p class="endnote">The function PL::Actions::base_iname is used in <a href="#SP22">&#167;22</a>.</p>
<p class="endnote">The function PL::Actions::double_sharp is used in <a href="#SP37">&#167;37</a>, 4/anl (<a href="4-anl.html#SP9">&#167;9</a>), 4/ap (<a href="4-ap.html#SP29">&#167;29</a>, <a href="4-ap.html#SP35">&#167;35</a>).</p>
<p class="endnote">The function PL::Actions::Sub is used in <a href="#SP36">&#167;36</a>.</p>
@ -654,18 +667,18 @@ names of significance in the I6 library.
<span class="reserved">return</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">an</span><span class="plain">-</span><span class="element">&gt;translated</span><span class="plain">) {</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"Tried action name %W = %n\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">, </span><span class="identifier">an</span><span class="plain">-</span><span class="element">&gt;an_base_iname</span><span class="plain">);</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"Tried action name %W = %n\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">, </span><span class="functiontext">PL::Actions::base_iname</span><span class="plain">(</span><span class="identifier">an</span><span class="plain">));</span>
<span class="identifier">Problems::Issue::sentence_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_TranslatesActionAlready</span><span class="plain">),</span>
<span class="string">"this action has already been translated"</span><span class="plain">,</span>
<span class="string">"so there must be some duplication somewhere."</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">an</span><span class="plain">-</span><span class="element">&gt;an_base_iname</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"too late for action base name translation"</span><span class="plain">);</span>
<span class="identifier">an</span><span class="plain">-</span><span class="element">&gt;translated</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">TO</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">TO</span><span class="plain">, </span><span class="string">"%N"</span><span class="plain">, </span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">ParseTree::get_text</span><span class="plain">(</span><span class="identifier">p2</span><span class="plain">)));</span>
<span class="identifier">InterNames::override_action_base_iname</span><span class="plain">(</span><span class="identifier">an</span><span class="plain">-</span><span class="element">&gt;an_base_iname</span><span class="plain">, </span><span class="identifier">TO</span><span class="plain">);</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">TO</span><span class="plain">);</span>
<span class="identifier">LOGIF</span><span class="plain">(</span><span class="identifier">ACTION_CREATIONS</span><span class="plain">, </span><span class="string">"Translated action: $l as %n\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">an</span><span class="plain">, </span><span class="identifier">an</span><span class="plain">-</span><span class="element">&gt;an_base_iname</span><span class="plain">);</span>
<span class="identifier">an</span><span class="plain">-</span><span class="element">&gt;translated_name</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">an</span><span class="plain">-</span><span class="element">&gt;translated_name</span><span class="plain">, </span><span class="string">"%N"</span><span class="plain">, </span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">ParseTree::get_text</span><span class="plain">(</span><span class="identifier">p2</span><span class="plain">)));</span>
<span class="identifier">LOGIF</span><span class="plain">(</span><span class="identifier">ACTION_CREATIONS</span><span class="plain">, </span><span class="string">"Translated action: $l as %n\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">an</span><span class="plain">, </span><span class="functiontext">PL::Actions::base_iname</span><span class="plain">(</span><span class="identifier">an</span><span class="plain">));</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">PL::Actions::get_stem_length</span><span class="plain">(</span><span class="reserved">action_name</span><span class="plain"> *</span><span class="identifier">an</span><span class="plain">) {</span>

View file

@ -43,7 +43,7 @@ documentation.
<pre class="display">
<span class="reserved">typedef</span><span class="plain"> </span><span class="reserved">struct</span><span class="plain"> </span><span class="reserved">documentation_ref</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">symbol</span><span class="plain">; </span> <span class="comment">Reference is by this piece of text</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">doc_symbol</span><span class="plain">; </span> <span class="comment">Reference is by this piece of text</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">section</span><span class="plain">; </span> <span class="comment">HTML page number</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">used_already</span><span class="plain">; </span> <span class="comment">Has this been used in a problem message already?</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">usage_count</span><span class="plain">; </span> <span class="comment">For statistical purposes</span>
@ -59,7 +59,7 @@ documentation.
<p class="inwebparagraph"></p>
<p class="endnote">The structure documentation_ref is accessed in 3/ifs and here.</p>
<p class="endnote">The structure documentation_ref is private to this section.</p>
<p class="inwebparagraph"><a id="SP3"></a><b>&#167;3. </b></p>
@ -108,8 +108,8 @@ references:
<span class="plain">}</span>
<span class="identifier">LOOP_THROUGH_WORDING</span><span class="plain">(</span><span class="identifier">i</span><span class="plain">, </span><span class="identifier">SW</span><span class="plain">) {</span>
<span class="reserved">documentation_ref</span><span class="plain"> *</span><span class="identifier">dr</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">documentation_ref</span><span class="plain">);</span>
<span class="identifier">dr</span><span class="plain">-</span><span class="element">&gt;symbol</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">dr</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain">, </span><span class="string">"%+W"</span><span class="plain">, </span><span class="identifier">Wordings::one_word</span><span class="plain">(</span><span class="identifier">i</span><span class="plain">));</span>
<span class="identifier">dr</span><span class="plain">-</span><span class="element">&gt;doc_symbol</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">dr</span><span class="plain">-</span><span class="element">&gt;doc_symbol</span><span class="plain">, </span><span class="string">"%+W"</span><span class="plain">, </span><span class="identifier">Wordings::one_word</span><span class="plain">(</span><span class="identifier">i</span><span class="plain">));</span>
<span class="identifier">dr</span><span class="plain">-</span><span class="element">&gt;section</span><span class="plain"> = </span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">RW</span><span class="plain">);</span>
<span class="identifier">dr</span><span class="plain">-</span><span class="element">&gt;used_already</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="identifier">dr</span><span class="plain">-</span><span class="element">&gt;usage_count</span><span class="plain"> = 0;</span>
@ -142,7 +142,7 @@ extension (say <code class="display"><span class="extract">doc24</span></code>);
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Index::DocReferences::validate_if_possible</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">temp</span><span class="plain">) {</span>
<span class="reserved">documentation_ref</span><span class="plain"> *</span><span class="identifier">dr</span><span class="plain">;</span>
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">dr</span><span class="plain">, </span><span class="reserved">documentation_ref</span><span class="plain">)</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">dr</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain">, </span><span class="identifier">temp</span><span class="plain">))</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">dr</span><span class="plain">-</span><span class="element">&gt;doc_symbol</span><span class="plain">, </span><span class="identifier">temp</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>
@ -160,7 +160,7 @@ extension (say <code class="display"><span class="extract">doc24</span></code>);
<span class="identifier">wchar_t</span><span class="plain"> *</span><span class="functiontext">Index::DocReferences::link_if_possible_once</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">temp</span><span class="plain">, </span><span class="identifier">wchar_t</span><span class="plain"> **</span><span class="identifier">chap</span><span class="plain">, </span><span class="identifier">wchar_t</span><span class="plain"> **</span><span class="identifier">sec</span><span class="plain">) {</span>
<span class="reserved">documentation_ref</span><span class="plain"> *</span><span class="identifier">dr</span><span class="plain">;</span>
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">dr</span><span class="plain">, </span><span class="reserved">documentation_ref</span><span class="plain">)</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">dr</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain">, </span><span class="identifier">temp</span><span class="plain">)) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">dr</span><span class="plain">-</span><span class="element">&gt;doc_symbol</span><span class="plain">, </span><span class="identifier">temp</span><span class="plain">)) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">dr</span><span class="plain">-</span><span class="element">&gt;used_already</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">) {</span>
<span class="identifier">wchar_t</span><span class="plain"> *</span><span class="identifier">leaf</span><span class="plain"> = </span><span class="identifier">Lexer::word_text</span><span class="plain">(</span><span class="identifier">dr</span><span class="plain">-</span><span class="element">&gt;section</span><span class="plain">);</span>
<span class="plain">*</span><span class="identifier">chap</span><span class="plain"> = </span><span class="identifier">dr</span><span class="plain">-</span><span class="element">&gt;chapter_reference</span><span class="plain">;</span>
@ -227,7 +227,7 @@ such a phrase, it increments the usage count by calling the following:
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Log::aspect_switched_on</span><span class="plain">(</span><span class="identifier">PHRASE_USAGE_DA</span><span class="plain">)) {</span>
<span class="reserved">documentation_ref</span><span class="plain"> *</span><span class="identifier">dr</span><span class="plain">;</span>
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">dr</span><span class="plain">, </span><span class="reserved">documentation_ref</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">dr</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain">, </span><span class="identifier">symb</span><span class="plain">)) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">dr</span><span class="plain">-</span><span class="element">&gt;doc_symbol</span><span class="plain">, </span><span class="identifier">symb</span><span class="plain">)) {</span>
<span class="identifier">extension_file</span><span class="plain"> *</span><span class="identifier">loc</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">at_word</span><span class="plain"> &gt;= 0) {</span>
<span class="identifier">source_file</span><span class="plain"> *</span><span class="identifier">pos</span><span class="plain"> = </span><span class="identifier">Lexer::file_of_origin</span><span class="plain">(</span><span class="identifier">at_word</span><span class="plain">);</span>
@ -261,8 +261,8 @@ especially, but to be accumulated over a whole corpus of source texts, e.g.:
<span class="identifier">LOGIF</span><span class="plain">(</span><span class="identifier">PHRASE_USAGE</span><span class="plain">, </span><span class="string">"The following shows how often each built-in phrase was used:\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
<span class="reserved">documentation_ref</span><span class="plain"> *</span><span class="identifier">dr</span><span class="plain">;</span>
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">dr</span><span class="plain">, </span><span class="reserved">documentation_ref</span><span class="plain">)</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::begins_with_wide_string</span><span class="plain">(</span><span class="identifier">dr</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"ph"</span><span class="plain">))</span>
<span class="identifier">LOGIF</span><span class="plain">(</span><span class="identifier">PHRASE_USAGE</span><span class="plain">, </span><span class="string">"USAGE: %S %d %d %d\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">dr</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">Str::begins_with_wide_string</span><span class="plain">(</span><span class="identifier">dr</span><span class="plain">-</span><span class="element">&gt;doc_symbol</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"ph"</span><span class="plain">))</span>
<span class="identifier">LOGIF</span><span class="plain">(</span><span class="identifier">PHRASE_USAGE</span><span class="plain">, </span><span class="string">"USAGE: %S %d %d %d\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">dr</span><span class="plain">-</span><span class="element">&gt;doc_symbol</span><span class="plain">,</span>
<span class="identifier">dr</span><span class="plain">-</span><span class="element">&gt;usage_count</span><span class="plain">, </span><span class="identifier">dr</span><span class="plain">-</span><span class="element">&gt;sr_usage_count</span><span class="plain">, </span><span class="identifier">dr</span><span class="plain">-</span><span class="element">&gt;ext_usage_count</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
@ -447,7 +447,7 @@ nothing at all &mdash; not issuing any internal errors.
<span class="reserved">documentation_ref</span><span class="plain"> *</span><span class="functiontext">Index::DocReferences::name_to_dr</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">fn</span><span class="plain">) {</span>
<span class="reserved">documentation_ref</span><span class="plain"> *</span><span class="identifier">dr</span><span class="plain">;</span>
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">dr</span><span class="plain">, </span><span class="reserved">documentation_ref</span><span class="plain">)</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">dr</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain">, </span><span class="identifier">fn</span><span class="plain">))</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">dr</span><span class="plain">-</span><span class="element">&gt;doc_symbol</span><span class="plain">, </span><span class="identifier">fn</span><span class="plain">))</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">dr</span><span class="plain">;</span>
&lt;<span class="cwebmacro">Complain about a bad documentation reference</span> <span class="cwebmacronumber">13.1</span>&gt;<span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
@ -471,7 +471,7 @@ nothing at all &mdash; not issuing any internal errors.
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">problem_count</span><span class="plain"> == 0) {</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"Bad ref was &lt;%s&gt;. Known references are:\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">fn</span><span class="plain">);</span>
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">dr</span><span class="plain">, </span><span class="reserved">documentation_ref</span><span class="plain">)</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"%S = %+N\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">dr</span><span class="plain">-</span><span class="element">&gt;symbol</span><span class="plain">, </span><span class="identifier">dr</span><span class="plain">-</span><span class="element">&gt;section</span><span class="plain">);</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"%S = %+N\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">dr</span><span class="plain">-</span><span class="element">&gt;doc_symbol</span><span class="plain">, </span><span class="identifier">dr</span><span class="plain">-</span><span class="element">&gt;section</span><span class="plain">);</span>
<span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"Bad index documentation reference"</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>

View file

@ -82,12 +82,9 @@ void Routines::end_in_current_package(void) {
inter_name *kernel_name = NULL, *public_name = currently_compiling_iname;
if ((currently_compiling_in_frame->allocated_pointers) ||
(currently_compiling_in_frame->no_formal_parameters_needed > 0)) {
if (Packaging::houseed_in_function(public_name)) {
if (Packaging::houseed_in_function(public_name))
kernel_name = Hierarchy::make_kernel_iname(Packaging::home_of(public_name));
} else {
internal_error("routine not housed in function");
}
Packaging::house_with(kernel_name, public_name);
else internal_error("routine not housed in function");
}
int needed = LocalVariables::count(currently_compiling_in_frame);

View file

@ -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::explicitly_named(name, R), R, NULL);
inter_name *iname = Packaging::function(InterNames::explicitly_named(name, R), NULL);
if (trans) InterNames::change_translation(iname, trans);
return iname;
}
@ -194,17 +194,15 @@ 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::explicitly_named(nrl->access_name, Hierarchy::template());
nrl->equates_to_iname->symbol = Emit::extern(nrl->access_name, K_value);
InterNames::externalise_symbol(nrl->equates_to_iname, nrl->access_name);
Packaging::exit(save);
} else if (Str::len(nrl->function_package_name) > 0) {
nrl->equates_to_iname = Packaging::function_text(
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::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::explicitly_named(nrl->access_name, nrl->requirements.this_mundane_package);
@ -265,7 +263,7 @@ 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(
InterNames::explicitly_named(nrl->function_package_name, P), P, NULL);
InterNames::explicitly_named(nrl->function_package_name, P), NULL);
} else {
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);
@ -290,7 +288,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::explicitly_named(nrl->access_name, P), P, nrl->package_type);
return Packaging::request(InterNames::explicitly_named(nrl->access_name, P), nrl->package_type);
}
=
@ -342,7 +340,7 @@ package_request *HierarchyLocations::attach_new_package(compilation_module *C, p
internal_error("subpackage in wrong superpackage");
}
return Packaging::request(Packaging::supply_iname(R, hap->counter), R, hap->type);
return Packaging::request(Packaging::supply_iname(R, hap->counter), hap->type);
}
@

View file

@ -119,6 +119,8 @@ void Hierarchy::establish(void) {
@e ACTIONS_HAP
@e ACTION_BASE_NAME_HL
@e WAIT_HL
@e TRANSLATED_BASE_NAME_HL
@e DOUBLE_SHARP_NAME_HL
@e PERFORM_FN_HL
@e CHECK_RB_HL
@ -144,6 +146,8 @@ void Hierarchy::establish(void) {
HierarchyLocations::ap(ACTIONS_HAP, local_actions, I"action", I"_action");
location_requirement in_action = HierarchyLocations::any_package_of_type(I"_action");
HierarchyLocations::con(ACTION_BASE_NAME_HL, I"A", Translation::uniqued(), in_action);
HierarchyLocations::con(WAIT_HL, I"Wait", Translation::same(), in_action);
HierarchyLocations::con(TRANSLATED_BASE_NAME_HL, NULL, Translation::imposed(), in_action);
HierarchyLocations::con(DOUBLE_SHARP_NAME_HL, NULL, Translation::prefix(I"##"), in_action);
HierarchyLocations::func(PERFORM_FN_HL, I"perform_fn", Translation::suffix(I"Sub"), in_action);
HierarchyLocations::package(CHECK_RB_HL, I"check_rb", I"_rulebook", in_action);
@ -1570,7 +1574,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::explicitly_named(I"main", NULL), NULL, plain_ptype);
main_pr = Packaging::request(InterNames::explicitly_named(I"main", NULL), plain_ptype);
return main_pr;
}
@ -1579,7 +1583,7 @@ package_request *Hierarchy::resources(void) {
if (resources_pr == NULL)
resources_pr = Packaging::request(
InterNames::explicitly_named(I"resources", Hierarchy::main()),
Hierarchy::main(), plain_ptype);
plain_ptype);
return resources_pr;
}
@ -1588,7 +1592,7 @@ package_request *Hierarchy::template(void) {
if (template_pr == NULL)
template_pr = Packaging::request(
InterNames::explicitly_named(I"template", Hierarchy::resources()),
Hierarchy::resources(), module_ptype);
module_ptype);
return template_pr;
}

View file

@ -49,7 +49,7 @@ any text to be stored, is used only for a small proportion of inames.)
=
typedef struct inter_name {
struct inter_name_generator *family;
struct inter_name_generator *generated_by;
int unique_number;
struct inter_symbol *symbol;
struct package_request *location_in_hierarchy;
@ -64,18 +64,18 @@ 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) {
if (iname->generated_by == NULL) internal_error("bad inter_name");
switch (iname->generated_by->ingen) {
case DERIVED_INGEN:
WRITE("%S", iname->family->derived_prefix);
WRITE("%S", iname->generated_by->derived_prefix);
InterNames::writer(OUT, format_string, iname->derived_from);
WRITE("%S", iname->family->derived_suffix);
WRITE("%S", iname->generated_by->derived_suffix);
break;
case UNIQUE_INGEN:
WRITE("%S", iname->family->name_stem);
WRITE("%S", iname->generated_by->name_stem);
break;
case MULTIPLE_INGEN:
WRITE("%S", iname->family->name_stem);
WRITE("%S", iname->generated_by->name_stem);
if (iname->unique_number >= 0) WRITE("%d", iname->unique_number);
break;
default: internal_error("unknown ingen");
@ -99,7 +99,7 @@ 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->generated_by = F;
iname->unique_number = 0;
iname->symbol = NULL;
iname->derived_from = NULL;
@ -151,38 +151,31 @@ inter_name *InterNames::explicitly_named(text_stream *name, package_request *R)
@ 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;
inter_name *InterNames::multiple(inter_name_generator *G, package_request *R, wording W) {
if (G == NULL) internal_error("no generator");
if (G->ingen == UNIQUE_INGEN) internal_error("not a generator name");
inter_name *iname = InterNames::new(G, R, W);
if (G->ingen != DERIVED_INGEN) iname->unique_number = ++G->no_generated;
return iname;
}
inter_name *InterNames::generated(inter_name_generator *F, int fix, wording W) {
inter_name *iname = InterNames::multiple(F, NULL, W);
inter_name *InterNames::generated(inter_name_generator *G, int fix, wording W) {
inter_name *iname = InterNames::multiple(G, 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);
inter_name *InterNames::derived(inter_name_generator *G, inter_name *from, wording W) {
if (G->ingen != DERIVED_INGEN) internal_error("not a derived generator");
inter_name *iname = InterNames::multiple(G, 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);
@ =
package_request *InterNames::location(inter_name *iname) {
if (iname == NULL) return NULL;
return iname->location_in_hierarchy;
}
@h Conversion of inames to symbols.
@ -191,10 +184,10 @@ 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.
given packages.
Conversion is done on-demand, and thus left as late as possible. It happens
automatically in the following function:
automatically in one of the following two functions:
=
inter_symbol *InterNames::to_symbol(inter_name *iname) {
@ -208,6 +201,11 @@ inter_symbol *InterNames::to_symbol(inter_name *iname) {
return iname->symbol;
}
void InterNames::externalise_symbol(inter_name *iname, inter_name *ext_iname) {
if (iname->symbol != NULL) internal_error("iname already converted");
iname->symbol = Emit::extern(ext_iname, K_value);;
}

View file

@ -50,13 +50,12 @@ typedef struct submodule_request_counter {
} submodule_request_counter;
@ =
package_request *Packaging::request(inter_name *name, package_request *parent, inter_symbol *pt) {
package_request *Packaging::request(inter_name *name, inter_symbol *pt) {
package_request *R = CREATE(package_request);
R->eventual_name = name;
if (parent) name->location_in_hierarchy = parent;
R->eventual_type = pt;
R->actual_package = NULL;
R->parent_request = parent;
R->parent_request = InterNames::location(name);
R->write_position = Inter::Bookmarks::new_IRS(Emit::repository());
R->counters = NULL;
return R;
@ -91,7 +90,7 @@ packaging_state Packaging::stateless(void) {
}
package_request *Packaging::home_of(inter_name *N) {
return N->location_in_hierarchy;
return InterNames::location(N);
}
packaging_state Packaging::enter_home_of(inter_name *N) {
@ -167,8 +166,9 @@ 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->location_in_hierarchy == NULL) return Inter::get_global_symbols(Emit::repository());
return Inter::Packages::scope(Packaging::incarnate(N->location_in_hierarchy));
package_request *P = InterNames::location(N);
if (P == NULL) return Inter::get_global_symbols(Emit::repository());
return Inter::Packages::scope(Packaging::incarnate(P));
}
@ =
@ -177,7 +177,7 @@ package_request *Packaging::request_generic(void) {
if (generic_pr == NULL)
generic_pr = Packaging::request(
InterNames::explicitly_named(I"generic", Hierarchy::resources()),
Hierarchy::resources(), module_ptype);
module_ptype);
return generic_pr;
}
@ -186,7 +186,7 @@ package_request *Packaging::request_synoptic(void) {
if (synoptic_pr == NULL)
synoptic_pr = Packaging::request(
InterNames::explicitly_named(I"synoptic", Hierarchy::resources()),
Hierarchy::resources(), module_ptype);
module_ptype);
return synoptic_pr;
}
@ -214,7 +214,7 @@ typedef struct submodule_requests {
package_request *Packaging::resources_for_new_submodule(text_stream *name, submodule_requests *SR) {
inter_name *package_iname = InterNames::explicitly_named(name, Hierarchy::resources());
package_request *P = Packaging::request(package_iname, Hierarchy::resources(), module_ptype);
package_request *P = Packaging::request(package_iname, module_ptype);
Packaging::initialise_submodules(SR);
return P;
}
@ -277,7 +277,7 @@ package_request *Packaging::synoptic_resource(submodule_identity *sid) {
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);
sr->where_found = Packaging::request(iname, plain_ptype);
ADD_TO_LINKED_LIST(sr, submodule_request, SR->submodules);
return sr->where_found;
@ -320,10 +320,9 @@ inter_name *Packaging::supply_iname(package_request *R, int what_for) {
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::explicitly_named(I"call", R3);
Packaging::house(iname, R3);
inter_name *Packaging::function(inter_name *function_iname, inter_name *temp_iname) {
package_request *P = Packaging::request(function_iname, function_ptype);
inter_name *iname = InterNames::explicitly_named(I"call", P);
if (temp_iname) {
TEMPORARY_TEXT(T);
WRITE_TO(T, "%n", temp_iname);
@ -333,37 +332,24 @@ inter_name *Packaging::function(inter_name *function_iname, package_request *R2,
return iname;
}
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::explicitly_named(I"call", R3);
Packaging::house(iname, R3);
inter_name *Packaging::function_text(inter_name *function_iname, text_stream *translation) {
package_request *P = Packaging::request(function_iname, function_ptype);
inter_name *iname = InterNames::explicitly_named(I"call", P);
if (translation)
InterNames::change_translation(iname, translation);
return iname;
}
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::explicitly_named(translation, R3);
Packaging::house(iname, R3);
inter_name *Packaging::datum_text(inter_name *function_iname, text_stream *translation) {
package_request *P = Packaging::request(function_iname, data_ptype);
inter_name *iname = InterNames::explicitly_named(translation, P);
return iname;
}
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->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->location_in_hierarchy = landlord->location_in_hierarchy;
}
int Packaging::houseed_in_function(inter_name *iname) {
if (iname == NULL) return FALSE;
if (iname->location_in_hierarchy == NULL) return FALSE;
if (iname->location_in_hierarchy->eventual_type == function_ptype) return TRUE;
package_request *P = InterNames::location(iname);
if (P == NULL) return FALSE;
if (P->eventual_type == function_ptype) return TRUE;
return FALSE;
}

View file

@ -33,6 +33,7 @@ typedef struct action_name {
int it_optional; /* noun optional when describing the second noun? */
int abbreviable; /* preposition optional when describing the second noun? */
int translated;
struct text_stream *translated_name;
struct inter_name *an_base_iname; /* e.g., |Take| */
struct inter_name *an_iname; /* e.g., |##Take| */
struct inter_name *an_routine_iname; /* e.g., |TakeSub| */
@ -231,9 +232,10 @@ action_name *PL::Actions::act_new(wording W, int implemented_by_I7) {
an->it_optional = TRUE;
an->abbreviable = FALSE;
an->translated = FALSE;
an->translated_name = NULL;
an->an_package = Hierarchy::local_package(ACTIONS_HAP);
an->an_base_iname = Hierarchy::make_iname_with_memo(ACTION_BASE_NAME_HL, an->an_package, W);
an->an_base_iname = NULL;
an->use_verb_routine_in_I6_library = TRUE;
an->check_rules = NULL;
an->carry_out_rules = NULL;
@ -308,10 +310,7 @@ action_name *PL::Actions::act_new(wording W, int implemented_by_I7) {
an->it_optional = FALSE;
an2->it_optional = FALSE;
}
if (make_ds) {
InterNames::override_action_base_iname(an->an_base_iname, I"Wait");
PL::Actions::double_sharp(an);
}
return an;
}
@ -413,7 +412,7 @@ int PL::Actions::abbreviable(action_name *an) {
}
text_stream *PL::Actions::identifier(action_name *an) {
return InterNames::to_text(an->an_base_iname);
return InterNames::to_text(PL::Actions::base_iname(an));
}
action_name *PL::Actions::Wait(void) {
@ -421,9 +420,21 @@ action_name *PL::Actions::Wait(void) {
return waiting_action;
}
inter_name *PL::Actions::base_iname(action_name *an) {
if (an->an_base_iname == NULL) {
if (waiting_action == an)
an->an_base_iname = Hierarchy::make_iname_in(WAIT_HL, an->an_package);
else if (Str::len(an->translated_name) > 0)
an->an_base_iname = Hierarchy::make_iname_with_specific_name(TRANSLATED_BASE_NAME_HL, an->translated_name, an->an_package);
else
an->an_base_iname = Hierarchy::make_iname_with_memo(ACTION_BASE_NAME_HL, an->an_package, an->present_name);
}
return an->an_base_iname;
}
inter_name *PL::Actions::double_sharp(action_name *an) {
if (an->an_iname == NULL) {
an->an_iname = Hierarchy::derive_iname_in(DOUBLE_SHARP_NAME_HL, an->an_base_iname, an->an_package);
an->an_iname = Hierarchy::derive_iname_in(DOUBLE_SHARP_NAME_HL, PL::Actions::base_iname(an), an->an_package);
packaging_state save = Packaging::enter(an->an_package);
Emit::ds_named_pseudo_numeric_constant(an->an_iname, K_value, (inter_t) an->allocation_id);
InterNames::annotate_i(an->an_iname, ACTION_IANN, 1);
@ -434,7 +445,7 @@ inter_name *PL::Actions::double_sharp(action_name *an) {
inter_name *PL::Actions::Sub(action_name *an) {
if (an->an_routine_iname == NULL)
an->an_routine_iname = Hierarchy::derive_iname_in(PERFORM_FN_HL, an->an_base_iname, an->an_package);
an->an_routine_iname = Hierarchy::derive_iname_in(PERFORM_FN_HL, PL::Actions::base_iname(an), an->an_package);
return an->an_routine_iname;
}
@ -486,18 +497,18 @@ void PL::Actions::translates(wording W, parse_node *p2) {
return;
}
if (an->translated) {
LOG("Tried action name %W = %n\n", W, an->an_base_iname);
LOG("Tried action name %W = %n\n", W, PL::Actions::base_iname(an));
Problems::Issue::sentence_problem(_p_(PM_TranslatesActionAlready),
"this action has already been translated",
"so there must be some duplication somewhere.");
return;
}
if (an->an_base_iname) internal_error("too late for action base name translation");
an->translated = TRUE;
TEMPORARY_TEXT(TO);
WRITE_TO(TO, "%N", Wordings::first_wn(ParseTree::get_text(p2)));
InterNames::override_action_base_iname(an->an_base_iname, TO);
DISCARD_TEXT(TO);
LOGIF(ACTION_CREATIONS, "Translated action: $l as %n\n", an, an->an_base_iname);
an->translated_name = Str::new();
WRITE_TO(an->translated_name, "%N", Wordings::first_wn(ParseTree::get_text(p2)));
LOGIF(ACTION_CREATIONS, "Translated action: $l as %n\n", an, PL::Actions::base_iname(an));
}
int PL::Actions::get_stem_length(action_name *an) {

View file

@ -25,7 +25,7 @@ documentation.
=
typedef struct documentation_ref {
struct text_stream *symbol; /* Reference is by this piece of text */
struct text_stream *doc_symbol; /* Reference is by this piece of text */
int section; /* HTML page number */
int used_already; /* Has this been used in a problem message already? */
int usage_count; /* For statistical purposes */
@ -81,8 +81,8 @@ void Index::DocReferences::dref_new(parse_node *p) {
}
LOOP_THROUGH_WORDING(i, SW) {
documentation_ref *dr = CREATE(documentation_ref);
dr->symbol = Str::new();
WRITE_TO(dr->symbol, "%+W", Wordings::one_word(i));
dr->doc_symbol = Str::new();
WRITE_TO(dr->doc_symbol, "%+W", Wordings::one_word(i));
dr->section = Wordings::first_wn(RW);
dr->used_already = FALSE;
dr->usage_count = 0;
@ -106,7 +106,7 @@ extension (say |doc24|); if it does not exist, we return NULL.
int Index::DocReferences::validate_if_possible(text_stream *temp) {
documentation_ref *dr;
LOOP_OVER(dr, documentation_ref)
if (Str::eq(dr->symbol, temp))
if (Str::eq(dr->doc_symbol, temp))
return TRUE;
return FALSE;
}
@ -117,7 +117,7 @@ int Index::DocReferences::validate_if_possible(text_stream *temp) {
wchar_t *Index::DocReferences::link_if_possible_once(text_stream *temp, wchar_t **chap, wchar_t **sec) {
documentation_ref *dr;
LOOP_OVER(dr, documentation_ref)
if (Str::eq(dr->symbol, temp)) {
if (Str::eq(dr->doc_symbol, temp)) {
if (dr->used_already == FALSE) {
wchar_t *leaf = Lexer::word_text(dr->section);
*chap = dr->chapter_reference;
@ -164,7 +164,7 @@ void Index::DocReferences::doc_mark_used(text_stream *symb, int at_word) {
if (Log::aspect_switched_on(PHRASE_USAGE_DA)) {
documentation_ref *dr;
LOOP_OVER(dr, documentation_ref) {
if (Str::eq(dr->symbol, symb)) {
if (Str::eq(dr->doc_symbol, symb)) {
extension_file *loc = NULL;
if (at_word >= 0) {
source_file *pos = Lexer::file_of_origin(at_word);
@ -190,8 +190,8 @@ void Index::DocReferences::log_statistics(void) {
LOGIF(PHRASE_USAGE, "The following shows how often each built-in phrase was used:\n");
documentation_ref *dr;
LOOP_OVER(dr, documentation_ref)
if (Str::begins_with_wide_string(dr->symbol, L"ph"))
LOGIF(PHRASE_USAGE, "USAGE: %S %d %d %d\n", dr->symbol,
if (Str::begins_with_wide_string(dr->doc_symbol, L"ph"))
LOGIF(PHRASE_USAGE, "USAGE: %S %d %d %d\n", dr->doc_symbol,
dr->usage_count, dr->sr_usage_count, dr->ext_usage_count);
}
@ -314,7 +314,7 @@ and we need to search fairly seldom:
documentation_ref *Index::DocReferences::name_to_dr(text_stream *fn) {
documentation_ref *dr;
LOOP_OVER(dr, documentation_ref)
if (Str::eq(dr->symbol, fn))
if (Str::eq(dr->doc_symbol, fn))
return dr;
@<Complain about a bad documentation reference@>;
return NULL;
@ -326,6 +326,6 @@ documentation_ref *Index::DocReferences::name_to_dr(text_stream *fn) {
if (problem_count == 0) {
LOG("Bad ref was <%s>. Known references are:\n", fn);
LOOP_OVER(dr, documentation_ref)
LOG("%S = %+N\n", dr->symbol, dr->section);
LOG("%S = %+N\n", dr->doc_symbol, dr->section);
internal_error("Bad index documentation reference");
}