1
0
Fork 0
mirror of https://github.com/ganelson/inform.git synced 2024-06-26 12:10:44 +03:00

Refactored wiring of symbols

This commit is contained in:
Graham Nelson 2022-01-03 23:40:23 +00:00
parent 6570632bc2
commit 4ff69d1edd
64 changed files with 70410 additions and 2172 deletions

View file

@ -1,6 +1,6 @@
# Inform 7
v10.1.0-alpha.1+6T94 'Krypton' (2 January 2022)
v10.1.0-alpha.1+6T95 'Krypton' (3 January 2022)
## About Inform 7

View file

@ -1,3 +1,3 @@
Prerelease: alpha.1
Build Date: 2 January 2022
Build Number: 6T94
Build Date: 3 January 2022
Build Number: 6T95

View file

@ -236,8 +236,8 @@ a memo to attach):
<span class="reserved-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="function-syntax">InterNames::explicitly_named_in_template</span><button class="popup" onclick="togglePopup('usagePopup7')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup7">Usage of <span class="code-font"><span class="function-syntax">InterNames::explicitly_named_in_template</span></span>:<br/>Hierarchy Locations - <a href="1-hl.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">inter_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">iname</span><span class="plain-syntax"> = </span><a href="1-in.html#SP5" class="function-link"><span class="function-syntax">InterNames::explicitly_named</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><a href="1-bs.html#SP3" class="function-link"><span class="function-syntax">Site::connectors_request</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">plug</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Inter::Connectors::find_plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">plug</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">plug</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Inter::Connectors::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">plug</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Wiring::find_plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">plug</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">plug</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Wiring::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">iname</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">symbol</span><span class="plain-syntax"> = </span><span class="identifier-syntax">plug</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">iname</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>

View file

@ -164,7 +164,7 @@ function togglePopup(material_id) {
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">symb</span><span class="plain-syntax"> = </span><a href="2-eis.html#SP4" class="function-link"><span class="function-syntax">EmitInterSchemas::find_identifier_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">symbol_to_check</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Inter::Packages::scope</span><span class="plain-syntax">(</span><a href="1-pck.html#SP13" class="function-link"><span class="function-syntax">Packaging::incarnate</span></a><span class="plain-syntax">(</span><a href="1-bs.html#SP3" class="function-link"><span class="function-syntax">Site::veneer_request</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">))),</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">second_call</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">while</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">symb</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">symb</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">equated_to</span><span class="plain-syntax">)) </span><span class="identifier-syntax">symb</span><span class="plain-syntax"> = </span><span class="identifier-syntax">symb</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">equated_to</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">symb</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Wiring::cable_end</span><span class="plain-syntax">(</span><span class="identifier-syntax">symb</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">SCHEMA_COMPILATION</span><span class="plain-syntax">, </span><span class="string-syntax">"Symb is $3\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">symb</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Inter::Symbols::is_defined</span><span class="plain-syntax">(</span><span class="identifier-syntax">symb</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">def</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>

View file

@ -76,29 +76,121 @@ function togglePopup(material_id) {
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">typedef</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">wiring_data</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">connects_to</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">wants_to_connect_to</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">no_connections</span><span class="plain-syntax">;</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">wiring_data</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">wiring_data</span><span class="plain-syntax"> </span><span class="function-syntax">Wiring::new_wiring_data</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">Wiring::new_wiring_data</span></span>:<br/>Symbols - <a href="2-sym.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">wiring_data</span><span class="plain-syntax"> </span><span class="identifier-syntax">wd</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">wd</span><span class="plain-syntax">.</span><span class="element-syntax">connects_to</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">wd</span><span class="plain-syntax">.</span><span class="element-syntax">wants_to_connect_to</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">wd</span><span class="plain-syntax">.</span><span class="element-syntax">no_connections</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">wd</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="function-syntax">Wiring::cable_end</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">Wiring::cable_end</span></span>:<br/>Symbols Tables - <a href="2-st.html#SP3">&#167;3</a>, <a href="2-st.html#SP6">&#167;6</a><br/>Transmigration - <a href="2-trn.html#SP1">&#167;1</a>, <a href="2-trn.html#SP3">&#167;3</a>, <a href="2-trn.html#SP4">&#167;4</a><br/>Verifying Inter - <a href="3-vi.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">while</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">S</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">S</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">wiring</span><span class="plain-syntax">.</span><span class="element-syntax">connects_to</span><span class="plain-syntax">)) </span><span class="identifier-syntax">S</span><span class="plain-syntax"> = </span><span class="identifier-syntax">S</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">wiring</span><span class="plain-syntax">.</span><span class="element-syntax">connects_to</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">S</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="function-syntax">Wiring::wired_to</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">Wiring::wired_to</span></span>:<br/>Symbols Tables - <a href="2-st.html#SP9">&#167;9</a><br/>Symbols - <a href="2-sym.html#SP4">&#167;4</a><br/>Inter in Binary Files - <a href="3-iibf.html#SP1_1_4">&#167;1.1.4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">S</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">S</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">wiring</span><span class="plain-syntax">.</span><span class="element-syntax">connects_to</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Wiring::has_no_incoming_connections</span><span class="plain-syntax">(</span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">S</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">S</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">wiring</span><span class="plain-syntax">.</span><span class="element-syntax">no_connections</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Wiring::is_wired</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">Wiring::is_wired</span></span>:<br/><a href="2-cnn.html#SP2">&#167;2</a><br/>Symbols Tables - <a href="2-st.html#SP9">&#167;9</a><br/>Symbols - <a href="2-sym.html#SP4">&#167;4</a><br/>Transmigration - <a href="2-trn.html#SP3">&#167;3</a>, <a href="2-trn.html#SP4">&#167;4</a><br/>Inter in Binary Files - <a href="3-iibf.html#SP1_1_4">&#167;1.1.4</a><br/>Verifying Inter - <a href="3-vi.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="2-cnn.html#SP1" class="function-link"><span class="function-syntax">Wiring::wired_to</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Wiring::wire_to</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">Wiring::wire_to</span></span>:<br/>Symbols Tables - <a href="2-st.html#SP9">&#167;9</a>, <a href="2-st.html#SP10">&#167;10</a><br/>Symbols - <a href="2-sym.html#SP4">&#167;4</a><br/>Transmigration - <a href="2-trn.html#SP1">&#167;1</a>, <a href="2-trn.html#SP3">&#167;3</a>, <a href="2-trn.html#SP3_3">&#167;3.3</a>, <a href="2-trn.html#SP4_1">&#167;4.1</a><br/>Inter in Binary Files - <a href="3-iibf.html#SP1_5">&#167;1.5</a><br/>The Symbol Construct - <a href="4-tsc.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">T</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">S</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"null symbol cannot be wired"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">S</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">metadata_key</span><span class="plain-syntax">) || ((</span><span class="identifier-syntax">T</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">T</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">metadata_key</span><span class="plain-syntax">)))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"metadata keys cannot be wired"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">S</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">wiring</span><span class="plain-syntax">.</span><span class="element-syntax">connects_to</span><span class="plain-syntax"> == </span><span class="identifier-syntax">T</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">S</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">wiring</span><span class="plain-syntax">.</span><span class="element-syntax">connects_to</span><span class="plain-syntax">) </span><span class="identifier-syntax">S</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">wiring</span><span class="plain-syntax">.</span><span class="element-syntax">connects_to</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">wiring</span><span class="plain-syntax">.</span><span class="element-syntax">no_connections</span><span class="plain-syntax">--;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">S</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">wiring</span><span class="plain-syntax">.</span><span class="element-syntax">connects_to</span><span class="plain-syntax"> = </span><span class="identifier-syntax">T</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">S</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">wiring</span><span class="plain-syntax">.</span><span class="element-syntax">wants_to_connect_to</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">T</span><span class="plain-syntax">) </span><span class="identifier-syntax">T</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">wiring</span><span class="plain-syntax">.</span><span class="element-syntax">no_connections</span><span class="plain-syntax">++;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><a href="2-sym.html#SP2" class="function-link"><span class="function-syntax">Inter::Symbols::get_scope</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">) != </span><span class="constant-syntax">SOCKET_ISYMS</span><span class="plain-syntax">) &amp;&amp;</span>
<span class="plain-syntax"> (</span><a href="2-sym.html#SP2" class="function-link"><span class="function-syntax">Inter::Symbols::get_scope</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">) != </span><span class="constant-syntax">PLUG_ISYMS</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><a href="2-sym.html#SP2" class="function-link"><span class="function-syntax">Inter::Symbols::set_scope</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="constant-syntax">EXTERNAL_ISYMS</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">INTER_SYMBOLS</span><span class="plain-syntax">, </span><span class="string-syntax">"Wired $3 to $3\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="identifier-syntax">T</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">W</span><span class="plain-syntax"> = </span><span class="identifier-syntax">S</span><span class="plain-syntax">; </span><span class="identifier-syntax">W</span><span class="plain-syntax">; </span><span class="identifier-syntax">W</span><span class="plain-syntax"> = </span><span class="identifier-syntax">W</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">wiring</span><span class="plain-syntax">.</span><span class="element-syntax">connects_to</span><span class="plain-syntax">, </span><span class="identifier-syntax">c</span><span class="plain-syntax">++)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="constant-syntax">100</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">W</span><span class="plain-syntax"> = </span><span class="identifier-syntax">S</span><span class="plain-syntax">; ((</span><span class="identifier-syntax">W</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> &lt; </span><span class="constant-syntax">20</span><span class="plain-syntax">)); </span><span class="identifier-syntax">W</span><span class="plain-syntax"> = </span><span class="identifier-syntax">W</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">wiring</span><span class="plain-syntax">.</span><span class="element-syntax">connects_to</span><span class="plain-syntax">, </span><span class="identifier-syntax">c</span><span class="plain-syntax">++)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"%d. %S\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">c</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">symbol_name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"..."</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"probably made a circuit in wiring"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Wiring::wire_to_name</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">Wiring::wire_to_name</span></span>:<br/>Inter in Binary Files - <a href="3-iibf.html#SP1_4_2">&#167;1.4.2</a><br/>The Symbol Construct - <a href="4-tsc.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">T</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">S</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"null symbol cannot be wired"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">S</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">metadata_key</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"metadata keys cannot be wired"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">T</span><span class="plain-syntax">) == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"symbols cannot be wired to the empty name"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-cnn.html#SP1" class="function-link"><span class="function-syntax">Wiring::wire_to</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">S</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">wiring</span><span class="plain-syntax">.</span><span class="element-syntax">wants_to_connect_to</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::duplicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">T</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Wiring::is_wired_to_name</span><button class="popup" onclick="togglePopup('usagePopup7')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup7">Usage of <span class="code-font"><span class="function-syntax">Wiring::is_wired_to_name</span></span>:<br/>Symbols Tables - <a href="2-st.html#SP10">&#167;10</a><br/>Symbols - <a href="2-sym.html#SP4">&#167;4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">S</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">wiring</span><span class="plain-syntax">.</span><span class="element-syntax">wants_to_connect_to</span><span class="plain-syntax">) &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="function-syntax">Wiring::wired_to_name</span><button class="popup" onclick="togglePopup('usagePopup8')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup8">Usage of <span class="code-font"><span class="function-syntax">Wiring::wired_to_name</span></span>:<br/><a href="2-cnn.html#SP2">&#167;2</a><br/>Symbols Tables - <a href="2-st.html#SP10">&#167;10</a><br/>Symbols - <a href="2-sym.html#SP4">&#167;4</a><br/>Transmigration - <a href="2-trn.html#SP3">&#167;3</a><br/>Inter in Binary Files - <a href="3-iibf.html#SP1_1_3_2">&#167;1.1.3.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">S</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">S</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">wiring</span><span class="plain-syntax">.</span><span class="element-syntax">wants_to_connect_to</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Wiring::shorten_wiring</span><span class="plain-syntax">(</span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax"> = </span><a href="2-cnn.html#SP1" class="function-link"><span class="function-syntax">Wiring::cable_end</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">S</span><span class="plain-syntax"> != </span><span class="identifier-syntax">E</span><span class="plain-syntax">) &amp;&amp; (</span><a href="2-cnn.html#SP1" class="function-link"><span class="function-syntax">Wiring::wired_to</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">) != </span><span class="identifier-syntax">E</span><span class="plain-syntax">)) </span><a href="2-cnn.html#SP1" class="function-link"><span class="function-syntax">Wiring::wire_to</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Wiring::convert_to_plug</span><button class="popup" onclick="togglePopup('usagePopup9')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup9">Usage of <span class="code-font"><span class="function-syntax">Wiring::convert_to_plug</span></span>:<br/>The Symbol Construct - <a href="4-tsc.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">wanted</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="2-cnn.html#SP1" class="function-link"><span class="function-syntax">Wiring::wire_to_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="identifier-syntax">wanted</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-sym.html#SP2" class="function-link"><span class="function-syntax">Inter::Symbols::set_scope</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="constant-syntax">PLUG_ISYMS</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-sym.html#SP2" class="function-link"><span class="function-syntax">Inter::Symbols::set_type</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="constant-syntax">MISC_ISYMT</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Wiring::convert_to_socket</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">Wiring::convert_to_socket</span></span>:<br/>Symbols Tables - <a href="2-st.html#SP10">&#167;10</a><br/>The Symbol Construct - <a href="4-tsc.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">to</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="2-cnn.html#SP1" class="function-link"><span class="function-syntax">Wiring::wire_to</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="identifier-syntax">to</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-sym.html#SP2" class="function-link"><span class="function-syntax">Inter::Symbols::set_scope</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="constant-syntax">SOCKET_ISYMS</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">unique_plug_number</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="function-syntax">Inter::Connectors::plug</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">Inter::Connectors::plug</span></span>:<br/>Transmigration - <a href="2-trn.html#SP3">&#167;3</a>, <a href="2-trn.html#SP3_3">&#167;3.3</a>, <a href="2-trn.html#SP4_1">&#167;4.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">wanted</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_package</span><span class="plain-syntax"> *</span><span class="identifier-syntax">connectors</span><span class="plain-syntax"> = </span><a href="2-cnn.html#SP1" class="function-link"><span class="function-syntax">Inter::Connectors::connectors_package</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">);</span>
<span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="function-syntax">Wiring::plug</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">Wiring::plug</span></span>:<br/>Transmigration - <a href="2-trn.html#SP3">&#167;3</a>, <a href="2-trn.html#SP3_3">&#167;3.3</a>, <a href="2-trn.html#SP4_1">&#167;4.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">wanted</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_package</span><span class="plain-syntax"> *</span><span class="identifier-syntax">connectors</span><span class="plain-syntax"> = </span><a href="2-cnn.html#SP1" class="function-link"><span class="function-syntax">Wiring::connectors_package</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">PN</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">PN</span><span class="plain-syntax">, </span><span class="string-syntax">"plug_%05d"</span><span class="plain-syntax">, </span><span class="identifier-syntax">unique_plug_number</span><span class="plain-syntax">++);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">plug</span><span class="plain-syntax"> = </span><a href="2-st.html#SP5" class="function-link"><span class="function-syntax">InterSymbolsTables::create_with_unique_name</span></a><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><a href="2-pck.html#SP3" class="function-link"><span class="function-syntax">Inter::Packages::scope</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">connectors</span><span class="plain-syntax">), </span><span class="identifier-syntax">PN</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">PN</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="2-st.html#SP10" class="function-link"><span class="function-syntax">InterSymbolsTables::make_plug</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">plug</span><span class="plain-syntax">, </span><span class="identifier-syntax">wanted</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">INTER_CONNECTORS</span><span class="plain-syntax">, </span><span class="string-syntax">"Plug I%d: $3 seeking %S\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">allocation_id</span><span class="plain-syntax">, </span><span class="identifier-syntax">plug</span><span class="plain-syntax">, </span><span class="identifier-syntax">plug</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">equated_name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-cnn.html#SP1" class="function-link"><span class="function-syntax">Wiring::convert_to_plug</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">plug</span><span class="plain-syntax">, </span><span class="identifier-syntax">wanted</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">INTER_CONNECTORS</span><span class="plain-syntax">, </span><span class="string-syntax">"Plug I%d: $3 seeking %S\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">allocation_id</span><span class="plain-syntax">, </span><span class="identifier-syntax">plug</span><span class="plain-syntax">, </span><a href="2-cnn.html#SP2" class="function-link"><span class="function-syntax">Wiring::plug_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">plug</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">plug</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="function-syntax">Inter::Connectors::socket</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">Inter::Connectors::socket</span></span>:<br/>Transmigration - <a href="2-trn.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">socket_name</span><span class="plain-syntax">, </span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">wired_from</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_package</span><span class="plain-syntax"> *</span><span class="identifier-syntax">connectors</span><span class="plain-syntax"> = </span><a href="2-cnn.html#SP1" class="function-link"><span class="function-syntax">Inter::Connectors::connectors_package</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">);</span>
<span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="function-syntax">Wiring::socket</span><button class="popup" onclick="togglePopup('usagePopup12')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup12">Usage of <span class="code-font"><span class="function-syntax">Wiring::socket</span></span>:<br/>Transmigration - <a href="2-trn.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">socket_name</span><span class="plain-syntax">, </span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">to</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_package</span><span class="plain-syntax"> *</span><span class="identifier-syntax">connectors</span><span class="plain-syntax"> = </span><a href="2-cnn.html#SP1" class="function-link"><span class="function-syntax">Wiring::connectors_package</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">socket</span><span class="plain-syntax"> = </span><a href="2-st.html#SP5" class="function-link"><span class="function-syntax">InterSymbolsTables::create_with_unique_name</span></a><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><a href="2-pck.html#SP3" class="function-link"><span class="function-syntax">Inter::Packages::scope</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">connectors</span><span class="plain-syntax">), </span><span class="identifier-syntax">socket_name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-st.html#SP10" class="function-link"><span class="function-syntax">InterSymbolsTables::make_socket</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">socket</span><span class="plain-syntax">, </span><span class="identifier-syntax">wired_from</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">INTER_CONNECTORS</span><span class="plain-syntax">, </span><span class="string-syntax">"Socket I%d: $3 wired to $3\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">allocation_id</span><span class="plain-syntax">, </span><span class="identifier-syntax">socket</span><span class="plain-syntax">, </span><span class="identifier-syntax">wired_from</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-cnn.html#SP1" class="function-link"><span class="function-syntax">Wiring::convert_to_socket</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">socket</span><span class="plain-syntax">, </span><span class="identifier-syntax">to</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">INTER_CONNECTORS</span><span class="plain-syntax">, </span><span class="string-syntax">"Socket I%d: $3 wired to $3\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">allocation_id</span><span class="plain-syntax">, </span><span class="identifier-syntax">socket</span><span class="plain-syntax">, </span><span class="identifier-syntax">to</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">socket</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">inter_package</span><span class="plain-syntax"> *</span><span class="function-syntax">Inter::Connectors::connectors_package</span><span class="plain-syntax">(</span><span class="reserved-syntax">inter_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">inter_package</span><span class="plain-syntax"> *</span><span class="function-syntax">Wiring::connectors_package</span><span class="plain-syntax">(</span><span class="reserved-syntax">inter_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">I</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"no tree for connectors"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_package</span><span class="plain-syntax"> *</span><span class="identifier-syntax">connectors</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Site::connectors_package</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">connectors</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) {</span>
@ -109,7 +201,7 @@ function togglePopup(material_id) {
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">connectors</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="function-syntax">Inter::Connectors::find_socket</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">Inter::Connectors::find_socket</span></span>:<br/>Transmigration - <a href="2-trn.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">identifier</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="function-syntax">Wiring::find_socket</span><button class="popup" onclick="togglePopup('usagePopup13')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup13">Usage of <span class="code-font"><span class="function-syntax">Wiring::find_socket</span></span>:<br/><a href="2-cnn.html#SP2">&#167;2</a><br/>Transmigration - <a href="2-trn.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">identifier</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_package</span><span class="plain-syntax"> *</span><span class="identifier-syntax">connectors</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Site::connectors_package</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">connectors</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax"> = </span><a href="2-st.html#SP4" class="function-link"><span class="function-syntax">InterSymbolsTables::symbol_from_name_not_equating</span></a><span class="plain-syntax">(</span>
@ -119,7 +211,7 @@ function togglePopup(material_id) {
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="function-syntax">Inter::Connectors::find_plug</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">Inter::Connectors::find_plug</span></span>:<br/>Transmigration - <a href="2-trn.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">identifier</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="function-syntax">Wiring::find_plug</span><button class="popup" onclick="togglePopup('usagePopup14')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup14">Usage of <span class="code-font"><span class="function-syntax">Wiring::find_plug</span></span>:<br/>Transmigration - <a href="2-trn.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">identifier</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_package</span><span class="plain-syntax"> *</span><span class="identifier-syntax">connectors</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Site::connectors_package</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">connectors</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax"> = </span><a href="2-st.html#SP4" class="function-link"><span class="function-syntax">InterSymbolsTables::symbol_from_name_not_equating</span></a><span class="plain-syntax">(</span>
@ -129,31 +221,86 @@ function togglePopup(material_id) {
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Inter::Connectors::wire_plug</span><span class="plain-syntax">(</span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">plug</span><span class="plain-syntax">, </span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">to</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Wiring::wire_plug</span><button class="popup" onclick="togglePopup('usagePopup15')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup15">Usage of <span class="code-font"><span class="function-syntax">Wiring::wire_plug</span></span>:<br/><a href="2-cnn.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">plug</span><span class="plain-syntax">, </span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">to</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">plug</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"no plug"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">INTER_CONNECTORS</span><span class="plain-syntax">, </span><span class="string-syntax">"Plug $3 wired to $3\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">plug</span><span class="plain-syntax">, </span><span class="identifier-syntax">to</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-st.html#SP10" class="function-link"><span class="function-syntax">InterSymbolsTables::equate</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">plug</span><span class="plain-syntax">, </span><span class="identifier-syntax">to</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">plug</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">equated_name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="2-cnn.html#SP1" class="function-link"><span class="function-syntax">Wiring::wire_to</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">plug</span><span class="plain-syntax">, </span><span class="identifier-syntax">to</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Inter::Connectors::is_plug</span><span class="plain-syntax">(</span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Wiring::is_plug</span><button class="popup" onclick="togglePopup('usagePopup16')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup16">Usage of <span class="code-font"><span class="function-syntax">Wiring::is_plug</span></span>:<br/><a href="2-cnn.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">S</span><span class="plain-syntax">) &amp;&amp; (</span><a href="2-sym.html#SP2" class="function-link"><span class="function-syntax">Inter::Symbols::get_scope</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">) == </span><span class="constant-syntax">PLUG_ISYMS</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<ul class="endnotetexts"><li>The structure wiring_data is private to this section.</li></ul>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b>See <a href="2-cnn.html" class="internal">Connectors (in bytecode)</a> for more, but consider this example:
</p>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Inter::Connectors::is_socket</span><span class="plain-syntax">(</span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax">) {</span>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">To</span><span class="plain-syntax"> </span><span class="identifier-syntax">call</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">kit</span><span class="plain-syntax">: (- </span><span class="identifier-syntax">ExampleKitFunction</span><span class="plain-syntax">(); -).</span>
<span class="identifier-syntax">To</span><span class="plain-syntax"> </span><span class="identifier-syntax">begin</span><span class="plain-syntax">:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">call</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">kit</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary">The <a href="../inform7/index.html" class="internal">inform7</a> compiler makes a main source tree out of this. It doesn't have
a definition of <span class="extract"><span class="extract-syntax">ExampleKitFunction</span></span>; that's defined in, say, <span class="extract"><span class="extract-syntax">HypotheticalKit</span></span>,
which is being linked in after compilation. Indeed, the compiler has no way
even to know where in the package hierarchy of the Inter tree for <span class="extract"><span class="extract-syntax">HypotheticalKit</span></span>
this function will be. What to do?
</p>
<p class="commentary">What it does is to create a symbol <span class="extract"><span class="extract-syntax">S</span></span> representing the function which equates like so:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> main</span>
<span class="plain-syntax"> source_text</span>
<span class="plain-syntax"> S (regular symbol) -&gt; main</span>
<span class="plain-syntax"> connectors</span>
<span class="plain-syntax"> ExampleKitFunction (plug symbol)</span>
</pre>
<p class="commentary">Once the Inter code for the kit has been loaded, we also find symbols:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> main</span>
<span class="plain-syntax"> connectors</span>
<span class="plain-syntax"> ExampleKitFunction (socket symbol) -&gt; main</span>
<span class="plain-syntax"> HypotheticalKit</span>
<span class="plain-syntax"> ...</span>
<span class="plain-syntax"> ExampleKitFunction (regular symbol)</span>
</pre>
<p class="commentary">So now we must connect the plug to the socket. <span class="extract"><span class="extract-syntax">S</span></span> will then connect through to
the actual definition, and all will be well.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Wiring::connect_plugs_to_sockets</span><span class="plain-syntax">(</span><span class="reserved-syntax">inter_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_package</span><span class="plain-syntax"> *</span><span class="identifier-syntax">connectors</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Site::connectors_package</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">connectors</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_symbols_table</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ST</span><span class="plain-syntax"> = </span><a href="2-pck.html#SP3" class="function-link"><span class="function-syntax">Inter::Packages::scope</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">connectors</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="function-syntax">&lt;ST-&gt;</span><span class="element-syntax">size</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ST</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">symbol_array</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">];</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="2-cnn.html#SP2" class="function-link"><span class="function-syntax">Wiring::is_loose_plug</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">socket</span><span class="plain-syntax"> = </span><a href="2-cnn.html#SP1" class="function-link"><span class="function-syntax">Wiring::find_socket</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><a href="2-cnn.html#SP2" class="function-link"><span class="function-syntax">Wiring::plug_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">socket</span><span class="plain-syntax">) </span><a href="2-cnn.html#SP1" class="function-link"><span class="function-syntax">Wiring::wire_plug</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="identifier-syntax">socket</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Wiring::is_socket</span><span class="plain-syntax">(</span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">S</span><span class="plain-syntax">) &amp;&amp; (</span><a href="2-sym.html#SP2" class="function-link"><span class="function-syntax">Inter::Symbols::get_scope</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">) == </span><span class="constant-syntax">SOCKET_ISYMS</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Inter::Connectors::is_loose_plug</span><span class="plain-syntax">(</span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">S</span><span class="plain-syntax">) &amp;&amp; (</span><a href="2-sym.html#SP2" class="function-link"><span class="function-syntax">Inter::Symbols::get_scope</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">) == </span><span class="constant-syntax">PLUG_ISYMS</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">S</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">equated_to</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Wiring::is_loose_plug</span><span class="plain-syntax">(</span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><a href="2-cnn.html#SP1" class="function-link"><span class="function-syntax">Wiring::is_plug</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">)) &amp;&amp; (</span><a href="2-cnn.html#SP1" class="function-link"><span class="function-syntax">Wiring::is_wired</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="function-syntax">Inter::Connectors::plug_name</span><span class="plain-syntax">(</span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="2-cnn.html#SP1" class="function-link"><span class="function-syntax">Inter::Connectors::is_loose_plug</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">S</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">equated_name</span><span class="plain-syntax">;</span>
<span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="function-syntax">Wiring::plug_name</span><button class="popup" onclick="togglePopup('usagePopup17')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup17">Usage of <span class="code-font"><span class="function-syntax">Wiring::plug_name</span></span>:<br/><a href="2-cnn.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="2-cnn.html#SP2" class="function-link"><span class="function-syntax">Wiring::is_loose_plug</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="2-cnn.html#SP1" class="function-link"><span class="function-syntax">Wiring::wired_to_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>

View file

@ -279,7 +279,7 @@ function togglePopup(material_id) {
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">pack</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">inter_symbols_table</span><span class="plain-syntax"> *</span><span class="function-syntax">Inter::Packages::scope</span><button class="popup" onclick="togglePopup('usagePopup22')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup22">Usage of <span class="code-font"><span class="function-syntax">Inter::Packages::scope</span></span>:<br/>Inter Trees - <a href="2-it.html#SP2">&#167;2</a><br/>Bookmarks - <a href="2-bkm.html#SP1">&#167;1</a><br/>Symbols Tables - <a href="2-st.html#SP4">&#167;4</a>, <a href="2-st.html#SP7">&#167;7</a>, <a href="2-st.html#SP8">&#167;8</a>, <a href="2-st.html#SP9">&#167;9</a>, <a href="2-st.html#SP10">&#167;10</a>, <a href="2-st.html#SP11">&#167;11</a><br/>Connectors - <a href="2-cnn.html#SP1">&#167;1</a><br/>Transmigration - <a href="2-trn.html#SP1">&#167;1</a>, <a href="2-trn.html#SP_1">&#167;.1</a>, <a href="2-trn.html#SP3">&#167;3</a>, <a href="2-trn.html#SP4">&#167;4</a><br/>Verifying Inter - <a href="3-vi.html#SP1">&#167;1</a><br/>Metadata - <a href="3-mtd.html#SP1">&#167;1</a><br/>The Symbol Construct - <a href="4-tsc.html#SP1">&#167;1</a><br/>The Append Construct - <a href="4-tac.html#SP2">&#167;2</a><br/>The Package Construct - <a href="4-tpc3.html#SP2">&#167;2</a><br/>The Kind Construct - <a href="4-tkc.html#SP2">&#167;2</a><br/>The Constant Construct - <a href="4-tcc2.html#SP2">&#167;2</a><br/>The Instance Construct - <a href="4-tic.html#SP2">&#167;2</a><br/>The PropertyValue Construct - <a href="4-tpc5.html#SP2">&#167;2</a><br/>The Permission Construct - <a href="4-tpc6.html#SP2">&#167;2</a><br/>The Label Construct - <a href="5-tlc.html#SP2">&#167;2</a><br/>The Local Construct - <a href="5-tlc2.html#SP2">&#167;2</a><br/>The Ref Construct - <a href="5-trc.html#SP2">&#167;2</a><br/>The Val Construct - <a href="5-tvc.html#SP2">&#167;2</a><br/>The Lab Construct - <a href="5-tlc3.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_package</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pack</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">inter_symbols_table</span><span class="plain-syntax"> *</span><span class="function-syntax">Inter::Packages::scope</span><button class="popup" onclick="togglePopup('usagePopup22')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup22">Usage of <span class="code-font"><span class="function-syntax">Inter::Packages::scope</span></span>:<br/>Inter Trees - <a href="2-it.html#SP2">&#167;2</a><br/>Bookmarks - <a href="2-bkm.html#SP1">&#167;1</a><br/>Symbols Tables - <a href="2-st.html#SP4">&#167;4</a>, <a href="2-st.html#SP7">&#167;7</a>, <a href="2-st.html#SP8">&#167;8</a>, <a href="2-st.html#SP9">&#167;9</a>, <a href="2-st.html#SP10">&#167;10</a>, <a href="2-st.html#SP11">&#167;11</a><br/>Connectors - <a href="2-cnn.html#SP1">&#167;1</a>, <a href="2-cnn.html#SP2">&#167;2</a><br/>Transmigration - <a href="2-trn.html#SP1">&#167;1</a>, <a href="2-trn.html#SP_1">&#167;.1</a>, <a href="2-trn.html#SP3">&#167;3</a>, <a href="2-trn.html#SP4">&#167;4</a><br/>Verifying Inter - <a href="3-vi.html#SP1">&#167;1</a><br/>Metadata - <a href="3-mtd.html#SP1">&#167;1</a><br/>The Symbol Construct - <a href="4-tsc.html#SP1">&#167;1</a><br/>The Append Construct - <a href="4-tac.html#SP2">&#167;2</a><br/>The Package Construct - <a href="4-tpc3.html#SP2">&#167;2</a><br/>The Kind Construct - <a href="4-tkc.html#SP2">&#167;2</a><br/>The Constant Construct - <a href="4-tcc2.html#SP2">&#167;2</a><br/>The Instance Construct - <a href="4-tic.html#SP2">&#167;2</a><br/>The PropertyValue Construct - <a href="4-tpc5.html#SP2">&#167;2</a><br/>The Permission Construct - <a href="4-tpc6.html#SP2">&#167;2</a><br/>The Label Construct - <a href="5-tlc.html#SP2">&#167;2</a><br/>The Local Construct - <a href="5-tlc2.html#SP2">&#167;2</a><br/>The Ref Construct - <a href="5-trc.html#SP2">&#167;2</a><br/>The Val Construct - <a href="5-tvc.html#SP2">&#167;2</a><br/>The Lab Construct - <a href="5-tlc3.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_package</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pack</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pack</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">pack</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">package_scope</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>

View file

@ -88,7 +88,7 @@ function togglePopup(material_id) {
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">inter_symbols_table</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>The structure inter_symbols_table is accessed in 2/in, 2/tw, 2/pck, 2/sym, 2/trn, 3/iibf and here.</li></ul>
<ul class="endnotetexts"><li>The structure inter_symbols_table is accessed in 2/in, 2/tw, 2/pck, 2/sym, 2/cnn, 2/trn, 3/iibf and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b></p>
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">INITIAL_INTER_SYMBOLS_ID_RANGE</span><span class="plain-syntax"> </span><span class="constant-syntax">16</span>
@ -156,9 +156,7 @@ function togglePopup(material_id) {
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="function-syntax">&lt;T-&gt;</span><span class="element-syntax">size</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">A</span><span class="plain-syntax"> = </span><span class="identifier-syntax">T</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">symbol_array</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">];</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">A</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="identifier-syntax">A</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">symbol_name</span><span class="plain-syntax">))) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">equating</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">while</span><span class="plain-syntax"> (</span><span class="identifier-syntax">A</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">equated_to</span><span class="plain-syntax">) </span><span class="identifier-syntax">A</span><span class="plain-syntax"> = </span><span class="identifier-syntax">A</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">equated_to</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">equating</span><span class="plain-syntax">) </span><span class="identifier-syntax">A</span><span class="plain-syntax"> = </span><a href="2-cnn.html#SP1" class="function-link"><span class="function-syntax">Wiring::cable_end</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">A</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">A</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
@ -167,9 +165,7 @@ function togglePopup(material_id) {
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">de</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">A</span><span class="plain-syntax"> = (</span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *) </span><span class="identifier-syntax">Dictionaries::read_value</span><span class="plain-syntax">(</span><span class="identifier-syntax">T</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">symbols_lookup</span><span class="plain-syntax">, </span><span class="identifier-syntax">S</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">A</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">equating</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">while</span><span class="plain-syntax"> (</span><span class="identifier-syntax">A</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">equated_to</span><span class="plain-syntax">) </span><span class="identifier-syntax">A</span><span class="plain-syntax"> = </span><span class="identifier-syntax">A</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">equated_to</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">equating</span><span class="plain-syntax">) </span><span class="identifier-syntax">A</span><span class="plain-syntax"> = </span><a href="2-cnn.html#SP1" class="function-link"><span class="function-syntax">Wiring::cable_end</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">A</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">A</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
@ -300,8 +296,7 @@ to access this: one following equations, the other not.
<span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="function-syntax">InterSymbolsTables::symbol_from_id</span><button class="popup" onclick="togglePopup('usagePopup12')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup12">Usage of <span class="code-font"><span class="function-syntax">InterSymbolsTables::symbol_from_id</span></span>:<br/><a href="2-st.html#SP7">&#167;7</a><br/>Symbols - <a href="2-sym.html#SP4">&#167;4</a><br/>Transmigration - <a href="2-trn.html#SP3">&#167;3</a>, <a href="2-trn.html#SP3_2">&#167;3.2</a><br/>Inter in Binary Files - <a href="3-iibf.html#SP1_5">&#167;1.5</a><br/>Verifying Inter - <a href="3-vi.html#SP1">&#167;1</a><br/>Inter Data Types - <a href="3-idt.html#SP2">&#167;2</a>, <a href="3-idt.html#SP3">&#167;3</a><br/>Metadata - <a href="3-mtd.html#SP1">&#167;1</a><br/>The Append Construct - <a href="4-tac.html#SP2">&#167;2</a><br/>The Kind Construct - <a href="4-tkc.html#SP2">&#167;2</a><br/>The Constant Construct - <a href="4-tcc2.html#SP2">&#167;2</a><br/>The Instance Construct - <a href="4-tic.html#SP2">&#167;2</a><br/>The PropertyValue Construct - <a href="4-tpc5.html#SP2">&#167;2</a><br/>The Permission Construct - <a href="4-tpc6.html#SP2">&#167;2</a><br/>The Primitive Construct - <a href="4-tpc7.html#SP2">&#167;2</a><br/>The Ref Construct - <a href="5-trc.html#SP2">&#167;2</a><br/>The Val Construct - <a href="5-tvc.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_symbols_table</span><span class="plain-syntax"> *</span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="constant-syntax">inter_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">ID</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax"> = </span><a href="2-st.html#SP6" class="function-link"><span class="function-syntax">InterSymbolsTables::unequated_symbol_from_id</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="identifier-syntax">ID</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">while</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">S</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">S</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">equated_to</span><span class="plain-syntax">)) </span><span class="identifier-syntax">S</span><span class="plain-syntax"> = </span><span class="identifier-syntax">S</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">equated_to</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">S</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="2-cnn.html#SP1" class="function-link"><span class="function-syntax">Wiring::cable_end</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>&#167;7. </b>It's convenient to have some abbreviations for common ways to access the above.
@ -377,16 +372,16 @@ a global symbol in any non-global context.
<span class="plain-syntax"> </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"attempted to equate to global"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="function-syntax">&lt;T-&gt;</span><span class="element-syntax">size</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">T</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">symbol_array</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">]) &amp;&amp; (</span><span class="identifier-syntax">T</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">symbol_array</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">]-&gt;</span><span class="element-syntax">equated_to</span><span class="plain-syntax"> == </span><span class="identifier-syntax">S</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="2-cnn.html#SP1" class="function-link"><span class="function-syntax">Wiring::wired_to</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">T</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">symbol_array</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">]) == </span><span class="identifier-syntax">S</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> (</span><span class="constant-syntax">inter_ti</span><span class="plain-syntax">) </span><span class="identifier-syntax">T</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">symbol_array</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">]-&gt;</span><span class="element-syntax">symbol_ID</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">N</span><span class="plain-syntax"> = </span><a href="2-st.html#SP5" class="function-link"><span class="function-syntax">InterSymbolsTables::render_identifier_unique</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="identifier-syntax">S</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">symbol_name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">X</span><span class="plain-syntax"> = </span><a href="2-st.html#SP3" class="function-link"><span class="function-syntax">InterSymbolsTables::search_inner</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="identifier-syntax">N</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">X</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">equated_to</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="2-st.html#SP10" class="function-link"><span class="function-syntax">InterSymbolsTables::equate</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">X</span><span class="plain-syntax">, </span><span class="identifier-syntax">S</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="2-cnn.html#SP1" class="function-link"><span class="function-syntax">Wiring::is_wired</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">X</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="2-cnn.html#SP1" class="function-link"><span class="function-syntax">Wiring::wire_to</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">X</span><span class="plain-syntax">, </span><span class="identifier-syntax">S</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">INTER_SYMBOLS</span><span class="plain-syntax">, </span><span class="string-syntax">"Equating $3 to new $3\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="identifier-syntax">X</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">X</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">equated_to</span><span class="plain-syntax"> != </span><span class="identifier-syntax">S</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"Want ID for $3 but there's already $3 locally which equates to $3\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="identifier-syntax">X</span><span class="plain-syntax">, </span><span class="identifier-syntax">X</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">equated_to</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="2-cnn.html#SP1" class="function-link"><span class="function-syntax">Wiring::wired_to</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">X</span><span class="plain-syntax">) != </span><span class="identifier-syntax">S</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"Want ID for $3 but there's already $3 locally which is wired to $3\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="identifier-syntax">X</span><span class="plain-syntax">, </span><a href="2-cnn.html#SP1" class="function-link"><span class="function-syntax">Wiring::wired_to</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">X</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"external symbol clash"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">X</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">symbol_ID</span><span class="plain-syntax">;</span>
@ -409,48 +404,7 @@ a global symbol in any non-global context.
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>&#167;10. Equations. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">InterSymbolsTables::equate</span><button class="popup" onclick="togglePopup('usagePopup21')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup21">Usage of <span class="code-font"><span class="function-syntax">InterSymbolsTables::equate</span></span>:<br/><a href="2-st.html#SP9">&#167;9</a><br/>Connectors - <a href="2-cnn.html#SP1">&#167;1</a><br/>Inter in Binary Files - <a href="3-iibf.html#SP1_5">&#167;1.5</a><br/>The Symbol Construct - <a href="4-tsc.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S_from</span><span class="plain-syntax">, </span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S_to</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">S_from</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">S_to</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"bad symbol equation"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">S_from</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">metadata_key</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">S_to</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">metadata_key</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"metadata keys cannot equate"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">S_from</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">equated_to</span><span class="plain-syntax"> = </span><span class="identifier-syntax">S_to</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><a href="2-sym.html#SP2" class="function-link"><span class="function-syntax">Inter::Symbols::get_scope</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">S_from</span><span class="plain-syntax">) != </span><span class="constant-syntax">SOCKET_ISYMS</span><span class="plain-syntax">) &amp;&amp;</span>
<span class="plain-syntax"> (</span><a href="2-sym.html#SP2" class="function-link"><span class="function-syntax">Inter::Symbols::get_scope</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">S_from</span><span class="plain-syntax">) != </span><span class="constant-syntax">PLUG_ISYMS</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><a href="2-sym.html#SP2" class="function-link"><span class="function-syntax">Inter::Symbols::set_scope</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">S_from</span><span class="plain-syntax">, </span><span class="constant-syntax">EXTERNAL_ISYMS</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">INTER_SYMBOLS</span><span class="plain-syntax">, </span><span class="string-syntax">"Equate $3 to $3\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">S_from</span><span class="plain-syntax">, </span><span class="identifier-syntax">S_to</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax"> = </span><span class="identifier-syntax">S_from</span><span class="plain-syntax">; </span><span class="identifier-syntax">S</span><span class="plain-syntax">; </span><span class="identifier-syntax">S</span><span class="plain-syntax"> = </span><span class="identifier-syntax">S</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">equated_to</span><span class="plain-syntax">, </span><span class="identifier-syntax">c</span><span class="plain-syntax">++)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="constant-syntax">20</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax"> = </span><span class="identifier-syntax">S_from</span><span class="plain-syntax">; </span><span class="identifier-syntax">c</span><span class="plain-syntax"> &lt; </span><span class="constant-syntax">20</span><span class="plain-syntax">; </span><span class="identifier-syntax">S</span><span class="plain-syntax"> = </span><span class="identifier-syntax">S</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">equated_to</span><span class="plain-syntax">, </span><span class="identifier-syntax">c</span><span class="plain-syntax">++)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"%d. %S\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">c</span><span class="plain-syntax">, </span><span class="identifier-syntax">S</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">symbol_name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"probably circular symbol equation"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">InterSymbolsTables::equate_textual</span><button class="popup" onclick="togglePopup('usagePopup22')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup22">Usage of <span class="code-font"><span class="function-syntax">InterSymbolsTables::equate_textual</span></span>:<br/>The Symbol Construct - <a href="4-tsc.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S_from</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">S_from</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">name</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">)) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"bad symbol equation"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">S_from</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">equated_to</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">S_from</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">equated_name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::duplicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-sym.html#SP2" class="function-link"><span class="function-syntax">Inter::Symbols::set_scope</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">S_from</span><span class="plain-syntax">, </span><span class="constant-syntax">EXTERNAL_ISYMS</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">InterSymbolsTables::make_plug</span><button class="popup" onclick="togglePopup('usagePopup23')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup23">Usage of <span class="code-font"><span class="function-syntax">InterSymbolsTables::make_plug</span></span>:<br/>Connectors - <a href="2-cnn.html#SP1">&#167;1</a><br/>The Symbol Construct - <a href="4-tsc.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S_from</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">wanted</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">S_from</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">wanted</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">)) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"bad link equation"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">S_from</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">equated_to</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">S_from</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">equated_name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::duplicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">wanted</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-sym.html#SP2" class="function-link"><span class="function-syntax">Inter::Symbols::set_scope</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">S_from</span><span class="plain-syntax">, </span><span class="constant-syntax">PLUG_ISYMS</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-sym.html#SP2" class="function-link"><span class="function-syntax">Inter::Symbols::set_type</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">S_from</span><span class="plain-syntax">, </span><span class="constant-syntax">MISC_ISYMT</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">InterSymbolsTables::make_socket</span><button class="popup" onclick="togglePopup('usagePopup24')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup24">Usage of <span class="code-font"><span class="function-syntax">InterSymbolsTables::make_socket</span></span>:<br/>Connectors - <a href="2-cnn.html#SP1">&#167;1</a><br/>The Symbol Construct - <a href="4-tsc.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S_from</span><span class="plain-syntax">, </span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">wired_from</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">S_from</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"bad link equation"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">S_from</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">equated_to</span><span class="plain-syntax"> = </span><span class="identifier-syntax">wired_from</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="2-sym.html#SP2" class="function-link"><span class="function-syntax">Inter::Symbols::set_scope</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">S_from</span><span class="plain-syntax">, </span><span class="constant-syntax">SOCKET_ISYMS</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">InterSymbolsTables::resolve_forward_references</span><button class="popup" onclick="togglePopup('usagePopup25')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup25">Usage of <span class="code-font"><span class="function-syntax">InterSymbolsTables::resolve_forward_references</span></span>:<br/>Inter in Text Files - <a href="3-iitf.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="reserved-syntax">inter_error_location</span><span class="plain-syntax"> *</span><span class="identifier-syntax">eloc</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">InterSymbolsTables::resolve_forward_references</span><button class="popup" onclick="togglePopup('usagePopup21')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup21">Usage of <span class="code-font"><span class="function-syntax">InterSymbolsTables::resolve_forward_references</span></span>:<br/>Inter in Text Files - <a href="3-iitf.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="reserved-syntax">inter_error_location</span><span class="plain-syntax"> *</span><span class="identifier-syntax">eloc</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="2-it.html#SP5" class="function-link"><span class="function-syntax">InterTree::traverse</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><a href="2-st.html#SP10" class="function-link"><span class="function-syntax">InterSymbolsTables::rfr_visitor</span></a><span class="plain-syntax">, </span><span class="identifier-syntax">eloc</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="constant-syntax">PACKAGE_IST</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
@ -462,14 +416,14 @@ a global symbol in any non-global context.
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">T</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"package with no symbols"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="function-syntax">&lt;T-&gt;</span><span class="element-syntax">size</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">symb</span><span class="plain-syntax"> = </span><span class="identifier-syntax">T</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">symbol_array</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">];</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">symb</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">symb</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">equated_name</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="2-cnn.html#SP1" class="function-link"><span class="function-syntax">Wiring::is_wired_to_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">symb</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">N</span><span class="plain-syntax"> = </span><a href="2-cnn.html#SP1" class="function-link"><span class="function-syntax">Wiring::wired_to_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">symb</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="2-sym.html#SP2" class="function-link"><span class="function-syntax">Inter::Symbols::get_scope</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">symb</span><span class="plain-syntax">) == </span><span class="constant-syntax">PLUG_ISYMS</span><span class="plain-syntax">) </span><span class="reserved-syntax">continue</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S_to</span><span class="plain-syntax"> = </span><a href="2-st.html#SP11" class="function-link"><span class="function-syntax">InterSymbolsTables::url_name_to_symbol</span></a><span class="plain-syntax">(</span><a href="2-pck.html#SP3" class="function-link"><span class="function-syntax">Inter::Packages::tree</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pack</span><span class="plain-syntax">), </span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="identifier-syntax">symb</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">equated_name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">S_to</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><a href="3-ie.html#SP1" class="function-link"><span class="function-syntax">Inter::Errors::issue</span></a><span class="plain-syntax">(</span><a href="3-ie.html#SP1" class="function-link"><span class="function-syntax">Inter::Errors::quoted</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"unable to locate symbol"</span><span class="plain-syntax">, </span><span class="identifier-syntax">symb</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">equated_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">eloc</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S_to</span><span class="plain-syntax"> = </span><a href="2-st.html#SP11" class="function-link"><span class="function-syntax">InterSymbolsTables::url_name_to_symbol</span></a><span class="plain-syntax">(</span><a href="2-pck.html#SP3" class="function-link"><span class="function-syntax">Inter::Packages::tree</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pack</span><span class="plain-syntax">), </span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="identifier-syntax">N</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">S_to</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><a href="3-ie.html#SP1" class="function-link"><span class="function-syntax">Inter::Errors::issue</span></a><span class="plain-syntax">(</span><a href="3-ie.html#SP1" class="function-link"><span class="function-syntax">Inter::Errors::quoted</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"unable to locate symbol"</span><span class="plain-syntax">, </span><span class="identifier-syntax">N</span><span class="plain-syntax">, </span><span class="identifier-syntax">eloc</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="2-sym.html#SP2" class="function-link"><span class="function-syntax">Inter::Symbols::get_scope</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">symb</span><span class="plain-syntax">) == </span><span class="constant-syntax">SOCKET_ISYMS</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="2-st.html#SP10" class="function-link"><span class="function-syntax">InterSymbolsTables::make_socket</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">symb</span><span class="plain-syntax">, </span><span class="identifier-syntax">S_to</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><a href="2-st.html#SP10" class="function-link"><span class="function-syntax">InterSymbolsTables::equate</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">symb</span><span class="plain-syntax">, </span><span class="identifier-syntax">S_to</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">symb</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">equated_name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="2-cnn.html#SP1" class="function-link"><span class="function-syntax">Wiring::convert_to_socket</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">symb</span><span class="plain-syntax">, </span><span class="identifier-syntax">S_to</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><a href="2-cnn.html#SP1" class="function-link"><span class="function-syntax">Wiring::wire_to</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">symb</span><span class="plain-syntax">, </span><span class="identifier-syntax">S_to</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
@ -479,7 +433,7 @@ a global symbol in any non-global context.
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">MAX_URL_SYMBOL_NAME_DEPTH</span><span class="plain-syntax"> </span><span class="constant-syntax">512</span>
</pre>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="function-syntax">InterSymbolsTables::url_name_to_symbol</span><button class="popup" onclick="togglePopup('usagePopup26')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup26">Usage of <span class="code-font"><span class="function-syntax">InterSymbolsTables::url_name_to_symbol</span></span>:<br/><a href="2-st.html#SP10">&#167;10</a><br/>Transmigration - <a href="2-trn.html#SP3_3">&#167;3.3</a><br/>The Symbol Construct - <a href="4-tsc.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="reserved-syntax">inter_symbols_table</span><span class="plain-syntax"> *</span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="function-syntax">InterSymbolsTables::url_name_to_symbol</span><button class="popup" onclick="togglePopup('usagePopup22')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup22">Usage of <span class="code-font"><span class="function-syntax">InterSymbolsTables::url_name_to_symbol</span></span>:<br/><a href="2-st.html#SP10">&#167;10</a><br/>Transmigration - <a href="2-trn.html#SP3_3">&#167;3.3</a><br/>The Symbol Construct - <a href="4-tsc.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="reserved-syntax">inter_symbols_table</span><span class="plain-syntax"> *</span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_symbols_table</span><span class="plain-syntax"> *</span><span class="identifier-syntax">at</span><span class="plain-syntax"> = </span><a href="2-it.html#SP2" class="function-link"><span class="function-syntax">InterTree::global_scope</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::get_first_char</span><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">) == </span><span class="character-syntax">'/'</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_package</span><span class="plain-syntax"> *</span><span class="identifier-syntax">at_P</span><span class="plain-syntax"> = </span><span class="identifier-syntax">I</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">root_package</span><span class="plain-syntax">;</span>
@ -504,7 +458,7 @@ a global symbol in any non-global context.
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">InterSymbolsTables::symbol_to_url_name</span><button class="popup" onclick="togglePopup('usagePopup27')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup27">Usage of <span class="code-font"><span class="function-syntax">InterSymbolsTables::symbol_to_url_name</span></span>:<br/>Symbols - <a href="2-sym.html#SP2">&#167;2</a>, <a href="2-sym.html#SP4">&#167;4</a><br/>Transmigration - <a href="2-trn.html#SP3_3">&#167;3.3</a>, <a href="2-trn.html#SP4_1">&#167;4.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">InterSymbolsTables::symbol_to_url_name</span><button class="popup" onclick="togglePopup('usagePopup23')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup23">Usage of <span class="code-font"><span class="function-syntax">InterSymbolsTables::symbol_to_url_name</span></span>:<br/>Symbols - <a href="2-sym.html#SP2">&#167;2</a>, <a href="2-sym.html#SP4">&#167;4</a><br/>Transmigration - <a href="2-trn.html#SP3_3">&#167;3.3</a>, <a href="2-trn.html#SP4_1">&#167;4.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_package</span><span class="plain-syntax"> *</span><span class="identifier-syntax">chain</span><span class="plain-syntax">[</span><span class="constant-syntax">MAX_URL_SYMBOL_NAME_DEPTH</span><span class="plain-syntax">];</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">chain_length</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_package</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax"> = </span><span class="identifier-syntax">S</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">owning_table</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">owning_package</span><span class="plain-syntax">;</span>

View file

@ -83,8 +83,7 @@ function togglePopup(material_id) {
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">inter_symbols_table</span><span class="plain-syntax"> *</span><span class="identifier-syntax">owning_table</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">symbol_name</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">inter_tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">definition</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">equated_to</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">equated_name</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">wiring_data</span><span class="plain-syntax"> </span><span class="identifier-syntax">wiring</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">symbol_status</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">inter_annotation_set</span><span class="plain-syntax"> </span><span class="identifier-syntax">ann_set</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">translate_text</span><span class="plain-syntax">;</span>
@ -110,8 +109,7 @@ function togglePopup(material_id) {
<span class="plain-syntax"> </span><span class="identifier-syntax">symb</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">symbol_name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::duplicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-sym.html#SP4" class="function-link"><span class="function-syntax">Inter::Symbols::undefine</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">symb</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">symb</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">ann_set</span><span class="plain-syntax"> = </span><a href="2-ann.html#SP2" class="function-link"><span class="function-syntax">Inter::Annotations::new_set</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">symb</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">equated_to</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">symb</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">equated_name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">symb</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">wiring</span><span class="plain-syntax"> = </span><a href="2-cnn.html#SP1" class="function-link"><span class="function-syntax">Wiring::new_wiring_data</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">symb</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">symb</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">translate_text</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">symb</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">link_time</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">symb</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">linked_to</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
@ -130,15 +128,15 @@ function togglePopup(material_id) {
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">S</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">symbol_status</span><span class="plain-syntax"> &amp; </span><span class="constant-syntax">SYMBOL_TYPE_MASK_ISYMT</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Inter::Symbols::get_scope</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">Inter::Symbols::get_scope</span></span>:<br/><a href="2-sym.html#SP4">&#167;4</a>, <a href="2-sym.html#SP5">&#167;5</a><br/>Symbols Tables - <a href="2-st.html#SP10">&#167;10</a><br/>Connectors - <a href="2-cnn.html#SP1">&#167;1</a><br/>Transmigration - <a href="2-trn.html#SP1">&#167;1</a>, <a href="2-trn.html#SP_1">&#167;.1</a>, <a href="2-trn.html#SP3">&#167;3</a><br/>Inter in Binary Files - <a href="3-iibf.html#SP1_4_2">&#167;1.4.2</a>, <a href="3-iibf.html#SP1_1_3_2">&#167;1.1.3.2</a><br/>The Symbol Construct - <a href="4-tsc.html#SP1">&#167;1</a><br/>The Local Construct - <a href="5-tlc2.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Inter::Symbols::get_scope</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">Inter::Symbols::get_scope</span></span>:<br/><a href="2-sym.html#SP4">&#167;4</a>, <a href="2-sym.html#SP5">&#167;5</a><br/>Symbols Tables - <a href="2-st.html#SP10">&#167;10</a><br/>Connectors - <a href="2-cnn.html#SP1">&#167;1</a>, <a href="2-cnn.html#SP2">&#167;2</a><br/>Transmigration - <a href="2-trn.html#SP1">&#167;1</a>, <a href="2-trn.html#SP_1">&#167;.1</a>, <a href="2-trn.html#SP3">&#167;3</a><br/>Inter in Binary Files - <a href="3-iibf.html#SP1_4_2">&#167;1.4.2</a>, <a href="3-iibf.html#SP1_1_3_2">&#167;1.1.3.2</a><br/>The Symbol Construct - <a href="4-tsc.html#SP1">&#167;1</a><br/>The Local Construct - <a href="5-tlc2.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">S</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">symbol_status</span><span class="plain-syntax"> &amp; </span><span class="constant-syntax">SYMBOL_SCOPE_MASK_ISYMT</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Inter::Symbols::set_type</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">Inter::Symbols::set_type</span></span>:<br/><a href="2-sym.html#SP5">&#167;5</a><br/>Symbols Tables - <a href="2-st.html#SP10">&#167;10</a><br/>Inter in Binary Files - <a href="3-iibf.html#SP1_4_2">&#167;1.4.2</a><br/>The Symbol Construct - <a href="4-tsc.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">V</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Inter::Symbols::set_type</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">Inter::Symbols::set_type</span></span>:<br/><a href="2-sym.html#SP5">&#167;5</a><br/>Connectors - <a href="2-cnn.html#SP1">&#167;1</a><br/>Inter in Binary Files - <a href="3-iibf.html#SP1_4_2">&#167;1.4.2</a><br/>The Symbol Construct - <a href="4-tsc.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">V</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">S</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">symbol_status</span><span class="plain-syntax"> = </span><span class="identifier-syntax">S</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">symbol_status</span><span class="plain-syntax"> - (</span><span class="identifier-syntax">S</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">symbol_status</span><span class="plain-syntax"> &amp; </span><span class="constant-syntax">SYMBOL_TYPE_MASK_ISYMT</span><span class="plain-syntax">) + </span><span class="identifier-syntax">V</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Inter::Symbols::set_scope</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">Inter::Symbols::set_scope</span></span>:<br/><a href="2-sym.html#SP5">&#167;5</a><br/>Symbols Tables - <a href="2-st.html#SP10">&#167;10</a><br/>Inter in Binary Files - <a href="3-iibf.html#SP1_4_2">&#167;1.4.2</a><br/>The Symbol Construct - <a href="4-tsc.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">V</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Inter::Symbols::set_scope</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">Inter::Symbols::set_scope</span></span>:<br/><a href="2-sym.html#SP5">&#167;5</a><br/>Connectors - <a href="2-cnn.html#SP1">&#167;1</a><br/>Inter in Binary Files - <a href="3-iibf.html#SP1_4_2">&#167;1.4.2</a><br/>The Symbol Construct - <a href="4-tsc.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">V</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">S</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">symbol_status</span><span class="plain-syntax"> = </span><span class="identifier-syntax">S</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">symbol_status</span><span class="plain-syntax"> - (</span><span class="identifier-syntax">S</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">symbol_status</span><span class="plain-syntax"> &amp; </span><span class="constant-syntax">SYMBOL_SCOPE_MASK_ISYMT</span><span class="plain-syntax">) + </span><span class="identifier-syntax">V</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
@ -194,16 +192,15 @@ function togglePopup(material_id) {
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" %S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">mark</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">symbol_name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="2-sym.html#SP4" class="function-link"><span class="function-syntax">Inter::Symbols::get_flag</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">mark</span><span class="plain-syntax">, </span><span class="constant-syntax">MAKE_NAME_UNIQUE</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"*"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">mark</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">equated_name</span><span class="plain-syntax">) &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" --? %S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">mark</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">equated_name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="2-cnn.html#SP1" class="function-link"><span class="function-syntax">Wiring::is_wired_to_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">mark</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" --? %S"</span><span class="plain-syntax">, </span><a href="2-cnn.html#SP1" class="function-link"><span class="function-syntax">Wiring::wired_to_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">mark</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">trans_name</span><span class="plain-syntax"> = </span><a href="2-sym.html#SP4" class="function-link"><span class="function-syntax">Inter::Symbols::get_translate</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">mark</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">trans_name</span><span class="plain-syntax">) &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" `%S`"</span><span class="plain-syntax">, </span><span class="identifier-syntax">trans_name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">eq</span><span class="plain-syntax"> = </span><span class="identifier-syntax">mark</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">equated_to</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">eq</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="2-cnn.html#SP1" class="function-link"><span class="function-syntax">Wiring::is_wired</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">mark</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" --&gt; "</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-st.html#SP11" class="function-link"><span class="function-syntax">InterSymbolsTables::symbol_to_url_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">eq</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-st.html#SP11" class="function-link"><span class="function-syntax">InterSymbolsTables::symbol_to_url_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><a href="2-cnn.html#SP1" class="function-link"><span class="function-syntax">Wiring::wired_to</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">mark</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
@ -275,6 +272,7 @@ function togglePopup(material_id) {
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Inter::Symbols::remove_from_table</span><span class="plain-syntax">(</span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">index</span><span class="plain-syntax"> = (</span><span class="reserved-syntax">int</span><span class="plain-syntax">) </span><span class="identifier-syntax">S</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">symbol_ID</span><span class="plain-syntax"> - (</span><span class="reserved-syntax">int</span><span class="plain-syntax">) </span><span class="constant-syntax">SYMBOL_BASE_VAL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="2-cnn.html#SP1" class="function-link"><span class="function-syntax">Wiring::wire_to</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">S</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">owning_table</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">symbol_array</span><span class="plain-syntax">[</span><span class="identifier-syntax">index</span><span class="plain-syntax">] = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>

View file

@ -105,27 +105,25 @@ function togglePopup(material_id) {
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="function-syntax">&lt;T-&gt;</span><span class="element-syntax">size</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">symb</span><span class="plain-syntax"> = </span><span class="identifier-syntax">T</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">symbol_array</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">];</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">symb</span><span class="plain-syntax">) &amp;&amp; (</span><a href="2-sym.html#SP2" class="function-link"><span class="function-syntax">Inter::Symbols::get_scope</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">symb</span><span class="plain-syntax">) == </span><span class="constant-syntax">SOCKET_ISYMS</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">target</span><span class="plain-syntax"> = </span><span class="identifier-syntax">symb</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">equated_to</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">while</span><span class="plain-syntax"> (</span><span class="identifier-syntax">target</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">equated_to</span><span class="plain-syntax">) </span><span class="identifier-syntax">target</span><span class="plain-syntax"> = </span><span class="identifier-syntax">target</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">equated_to</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">target</span><span class="plain-syntax"> = </span><a href="2-cnn.html#SP1" class="function-link"><span class="function-syntax">Wiring::cable_end</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">symb</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_package</span><span class="plain-syntax"> *</span><span class="identifier-syntax">target_package</span><span class="plain-syntax"> = </span><span class="identifier-syntax">target</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">owning_table</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">owning_package</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">while</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">target_package</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">target_package</span><span class="plain-syntax"> != </span><span class="identifier-syntax">migrant</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">target_package</span><span class="plain-syntax"> = </span><a href="2-pck.html#SP3" class="function-link"><span class="function-syntax">Inter::Packages::parent</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">target_package</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">target_package</span><span class="plain-syntax"> == </span><span class="identifier-syntax">migrant</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">INTER_CONNECTORS</span><span class="plain-syntax">, </span><span class="string-syntax">"Origin offers socket inside migrant: $3 == $3\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">symb</span><span class="plain-syntax">, </span><span class="identifier-syntax">target</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">equivalent</span><span class="plain-syntax"> = </span><a href="2-cnn.html#SP1" class="function-link"><span class="function-syntax">Inter::Connectors::find_socket</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">destination_tree</span><span class="plain-syntax">, </span><span class="identifier-syntax">symb</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">symbol_name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">equivalent</span><span class="plain-syntax"> = </span><a href="2-cnn.html#SP1" class="function-link"><span class="function-syntax">Wiring::find_socket</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">destination_tree</span><span class="plain-syntax">, </span><span class="identifier-syntax">symb</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">symbol_name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">equivalent</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">e_target</span><span class="plain-syntax"> = </span><span class="identifier-syntax">equivalent</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">equated_to</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">while</span><span class="plain-syntax"> (</span><span class="identifier-syntax">e_target</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">equated_to</span><span class="plain-syntax">) </span><span class="identifier-syntax">e_target</span><span class="plain-syntax"> = </span><span class="identifier-syntax">e_target</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">equated_to</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">e_target</span><span class="plain-syntax"> = </span><a href="2-cnn.html#SP1" class="function-link"><span class="function-syntax">Wiring::cable_end</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">equivalent</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (!</span><a href="2-sym.html#SP4" class="function-link"><span class="function-syntax">Inter::Symbols::is_defined</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">e_target</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">INTER_CONNECTORS</span><span class="plain-syntax">, </span><span class="string-syntax">"Able to match with $3 == $3\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">equivalent</span><span class="plain-syntax">, </span><span class="identifier-syntax">equivalent</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">equated_to</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">equivalent</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">equated_to</span><span class="plain-syntax"> = </span><span class="identifier-syntax">target</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">e_target</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">equated_to</span><span class="plain-syntax"> = </span><span class="identifier-syntax">target</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">INTER_CONNECTORS</span><span class="plain-syntax">, </span><span class="string-syntax">"Able to match with $3 ~~&gt; $3\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">equivalent</span><span class="plain-syntax">, </span><a href="2-cnn.html#SP1" class="function-link"><span class="function-syntax">Wiring::cable_end</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">equivalent</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><a href="2-cnn.html#SP1" class="function-link"><span class="function-syntax">Wiring::wire_to</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">equivalent</span><span class="plain-syntax">, </span><span class="identifier-syntax">target</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-cnn.html#SP1" class="function-link"><span class="function-syntax">Wiring::wire_to</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">e_target</span><span class="plain-syntax">, </span><span class="identifier-syntax">target</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">INTER_CONNECTORS</span><span class="plain-syntax">, </span><span class="string-syntax">"Clash of sockets\n"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><a href="2-cnn.html#SP1" class="function-link"><span class="function-syntax">Inter::Connectors::socket</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">destination_tree</span><span class="plain-syntax">, </span><span class="identifier-syntax">symb</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">symbol_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">symb</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-cnn.html#SP1" class="function-link"><span class="function-syntax">Wiring::socket</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">destination_tree</span><span class="plain-syntax">, </span><span class="identifier-syntax">symb</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">symbol_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">symb</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
@ -254,20 +252,21 @@ function togglePopup(material_id) {
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">T</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"package with no symbols"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="function-syntax">&lt;T-&gt;</span><span class="element-syntax">size</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">symb</span><span class="plain-syntax"> = </span><span class="identifier-syntax">T</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">symbol_array</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">];</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">symb</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">symb</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">equated_to</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">target</span><span class="plain-syntax"> = </span><span class="identifier-syntax">symb</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">equated_to</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">while</span><span class="plain-syntax"> (</span><span class="identifier-syntax">target</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">equated_to</span><span class="plain-syntax">) </span><span class="identifier-syntax">target</span><span class="plain-syntax"> = </span><span class="identifier-syntax">target</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">equated_to</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="2-cnn.html#SP1" class="function-link"><span class="function-syntax">Wiring::is_wired</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">symb</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">target</span><span class="plain-syntax"> = </span><a href="2-cnn.html#SP1" class="function-link"><span class="function-syntax">Wiring::cable_end</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">symb</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="2-sym.html#SP4" class="function-link"><span class="function-syntax">Inter::Symbols::read_annotation</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">target</span><span class="plain-syntax">, </span><span class="constant-syntax">VENEER_IANN</span><span class="plain-syntax">) &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">symb</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">equated_to</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Veneer::find</span><span class="plain-syntax">(</span><span class="identifier-syntax">ipct</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">destination</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">package_head</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tree</span><span class="plain-syntax">, </span><span class="identifier-syntax">target</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">symbol_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">Produce::kind_to_symbol</span><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><a href="2-cnn.html#SP1" class="function-link"><span class="function-syntax">Wiring::wire_to</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">symb</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Veneer::find</span><span class="plain-syntax">(</span><span class="identifier-syntax">ipct</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">destination</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">package_head</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tree</span><span class="plain-syntax">, </span><span class="identifier-syntax">target</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">symbol_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">Produce::kind_to_symbol</span><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">)));</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="2-sym.html#SP2" class="function-link"><span class="function-syntax">Inter::Symbols::get_scope</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">target</span><span class="plain-syntax">) == </span><span class="constant-syntax">PLUG_ISYMS</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">equivalent</span><span class="plain-syntax"> = </span><a href="2-trn.html#SP1" class="function-link"><span class="function-syntax">Inter::Transmigration::cached_equivalent</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">target</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">equivalent</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">equivalent</span><span class="plain-syntax"> = </span><a href="2-cnn.html#SP1" class="function-link"><span class="function-syntax">Inter::Connectors::find_plug</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ipct</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">destination</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">package_head</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tree</span><span class="plain-syntax">, </span><span class="identifier-syntax">target</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">equated_name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">N</span><span class="plain-syntax"> = </span><a href="2-cnn.html#SP1" class="function-link"><span class="function-syntax">Wiring::wired_to_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">target</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">equivalent</span><span class="plain-syntax"> = </span><a href="2-cnn.html#SP1" class="function-link"><span class="function-syntax">Wiring::find_plug</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ipct</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">destination</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">package_head</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tree</span><span class="plain-syntax">, </span><span class="identifier-syntax">N</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">equivalent</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">equivalent</span><span class="plain-syntax"> = </span><a href="2-cnn.html#SP1" class="function-link"><span class="function-syntax">Inter::Connectors::plug</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ipct</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">destination</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">package_head</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tree</span><span class="plain-syntax">, </span><span class="identifier-syntax">target</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">equated_name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">equivalent</span><span class="plain-syntax"> = </span><a href="2-cnn.html#SP1" class="function-link"><span class="function-syntax">Wiring::plug</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ipct</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">destination</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">package_head</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tree</span><span class="plain-syntax">, </span><span class="identifier-syntax">N</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-trn.html#SP1" class="function-link"><span class="function-syntax">Inter::Transmigration::cache</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">target</span><span class="plain-syntax">, </span><span class="identifier-syntax">equivalent</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">symb</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">equated_to</span><span class="plain-syntax"> = </span><span class="identifier-syntax">equivalent</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="2-cnn.html#SP1" class="function-link"><span class="function-syntax">Wiring::wire_to</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">symb</span><span class="plain-syntax">, </span><span class="identifier-syntax">equivalent</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_package</span><span class="plain-syntax"> *</span><span class="identifier-syntax">target_package</span><span class="plain-syntax"> = </span><span class="identifier-syntax">target</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">owning_table</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">owning_package</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">while</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">target_package</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">target_package</span><span class="plain-syntax"> != </span><span class="identifier-syntax">ipct</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">migrant</span><span class="plain-syntax">)) {</span>
@ -359,11 +358,11 @@ function togglePopup(material_id) {
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">equivalent</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) &amp;&amp; (</span><a href="4-tkc.html#SP2" class="function-link"><span class="function-syntax">Inter::Kind::is</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">target</span><span class="plain-syntax">)))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">equivalent</span><span class="plain-syntax"> = </span><a href="2-pck.html#SP3" class="function-link"><span class="function-syntax">Inter::Packages::search_resources</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ipct</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">destination</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">package_head</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tree</span><span class="plain-syntax">, </span><span class="identifier-syntax">target</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">symbol_name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">equivalent</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">equivalent</span><span class="plain-syntax"> = </span><a href="2-cnn.html#SP1" class="function-link"><span class="function-syntax">Inter::Connectors::plug</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ipct</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">destination_tree</span><span class="plain-syntax">, </span><span class="identifier-syntax">URL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">equivalent</span><span class="plain-syntax"> = </span><a href="2-cnn.html#SP1" class="function-link"><span class="function-syntax">Wiring::plug</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ipct</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">destination_tree</span><span class="plain-syntax">, </span><span class="identifier-syntax">URL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">URL</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="2-trn.html#SP1" class="function-link"><span class="function-syntax">Inter::Transmigration::cache</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">target</span><span class="plain-syntax">, </span><span class="identifier-syntax">equivalent</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">symb</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">equated_to</span><span class="plain-syntax"> = </span><span class="identifier-syntax">equivalent</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="2-cnn.html#SP1" class="function-link"><span class="function-syntax">Wiring::wire_to</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">symb</span><span class="plain-syntax">, </span><span class="identifier-syntax">equivalent</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="2-trn.html#SP3">&#167;3</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP1_5" class="paragraph-anchor"></a><b>&#167;1.5. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Correct any references from the origin to the migrant</span><span class="named-paragraph-number">1.5</span></span><span class="comment-syntax"> =</span>
@ -389,9 +388,8 @@ function togglePopup(material_id) {
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">T</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"package with no symbols"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="function-syntax">&lt;T-&gt;</span><span class="element-syntax">size</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">symb</span><span class="plain-syntax"> = </span><span class="identifier-syntax">T</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">symbol_array</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">];</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">symb</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">symb</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">equated_to</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">target</span><span class="plain-syntax"> = </span><span class="identifier-syntax">symb</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">equated_to</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">while</span><span class="plain-syntax"> (</span><span class="identifier-syntax">target</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">equated_to</span><span class="plain-syntax">) </span><span class="identifier-syntax">target</span><span class="plain-syntax"> = </span><span class="identifier-syntax">target</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">equated_to</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="2-cnn.html#SP1" class="function-link"><span class="function-syntax">Wiring::is_wired</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">symb</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">target</span><span class="plain-syntax"> = </span><a href="2-cnn.html#SP1" class="function-link"><span class="function-syntax">Wiring::cable_end</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">symb</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_package</span><span class="plain-syntax"> *</span><span class="identifier-syntax">target_package</span><span class="plain-syntax"> = </span><span class="identifier-syntax">target</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">owning_table</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">owning_package</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">while</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">target_package</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">target_package</span><span class="plain-syntax"> != </span><span class="identifier-syntax">ipct</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">migrant</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">target_package</span><span class="plain-syntax"> = </span><a href="2-pck.html#SP3" class="function-link"><span class="function-syntax">Inter::Packages::parent</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">target_package</span><span class="plain-syntax">);</span>
@ -411,11 +409,11 @@ function togglePopup(material_id) {
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">equivalent</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">URL</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="2-st.html#SP11" class="function-link"><span class="function-syntax">InterSymbolsTables::symbol_to_url_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">URL</span><span class="plain-syntax">, </span><span class="identifier-syntax">target</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">equivalent</span><span class="plain-syntax"> = </span><a href="2-cnn.html#SP1" class="function-link"><span class="function-syntax">Inter::Connectors::plug</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ipct</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">origin_tree</span><span class="plain-syntax">, </span><span class="identifier-syntax">URL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">equivalent</span><span class="plain-syntax"> = </span><a href="2-cnn.html#SP1" class="function-link"><span class="function-syntax">Wiring::plug</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ipct</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">origin_tree</span><span class="plain-syntax">, </span><span class="identifier-syntax">URL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">URL</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="2-trn.html#SP1" class="function-link"><span class="function-syntax">Inter::Transmigration::cache</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">target</span><span class="plain-syntax">, </span><span class="identifier-syntax">equivalent</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">symb</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">equated_to</span><span class="plain-syntax"> = </span><span class="identifier-syntax">equivalent</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="2-cnn.html#SP1" class="function-link"><span class="function-syntax">Wiring::wire_to</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">symb</span><span class="plain-syntax">, </span><span class="identifier-syntax">equivalent</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="2-trn.html#SP4">&#167;4</a>.</li></ul>
<nav role="progress"><div class="progresscontainer">

View file

@ -85,7 +85,7 @@ function togglePopup(material_id) {
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">inter_warehouse</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>The structure inter_warehouse is accessed in 2/in, 2/st, 2/trn, 3/iibf and here.</li></ul>
<ul class="endnotetexts"><li>The structure inter_warehouse is accessed in 2/in, 2/st, 2/cnn, 2/trn, 3/iibf and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b></p>
<pre class="definitions code-font"><span class="definition-keyword">enum</span> <span class="constant-syntax">NO_IRSRC</span><span class="plain-syntax"> </span><span class="identifier-syntax">from</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span>
@ -116,7 +116,7 @@ function togglePopup(material_id) {
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">inter_warehouse_room</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>The structure inter_resource_holder is accessed in 2/st, 2/pck, 2/trn, 3/iibf and here.</li><li>The structure inter_warehouse_room is accessed in 2/in, 2/st, 2/trn, 3/iibf and here.</li></ul>
<ul class="endnotetexts"><li>The structure inter_resource_holder is accessed in 2/st, 2/pck, 2/trn, 3/iibf and here.</li><li>The structure inter_warehouse_room is accessed in 2/in, 2/st, 2/cnn, 2/trn, 3/iibf and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b></p>
<pre class="displayed-code all-displayed-code code-font">

View file

@ -383,14 +383,16 @@ that's the end of the list and therefore the block. (There is no resource 0.)
<span class="plain-syntax"> </span><a href="2-sym.html#SP4" class="function-link"><span class="function-syntax">Inter::Symbols::annotate</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="identifier-syntax">IA</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="2-sym.html#SP2" class="function-link"><span class="function-syntax">Inter::Symbols::get_scope</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">) == </span><span class="constant-syntax">PLUG_ISYMS</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">S</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">equated_name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::new</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">N</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">while</span><span class="plain-syntax"> (</span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">unsigned</span><span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">BinaryFiles::read_int32</span><span class="plain-syntax">(</span><span class="identifier-syntax">fh</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">c</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="3-iibf.html#SP3" class="function-link"><span class="function-syntax">Inter::Binary::read_error</span></a><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">eloc</span><span class="plain-syntax">, </span><span class="identifier-syntax">ftell</span><span class="plain-syntax">(</span><span class="identifier-syntax">fh</span><span class="plain-syntax">), </span><span class="identifier-syntax">I</span><span class="string-syntax">"bytecode incomplete"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PUT_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">equated_name</span><span class="plain-syntax">, (</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="identifier-syntax">c</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PUT_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">N</span><span class="plain-syntax">, (</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="identifier-syntax">c</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><a href="2-cnn.html#SP1" class="function-link"><span class="function-syntax">Wiring::wire_to_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="identifier-syntax">N</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">N</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">INTER_BINARY</span><span class="plain-syntax">, </span><span class="string-syntax">"Read symbol $3\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">S</span><span class="plain-syntax">);</span>
@ -423,7 +425,8 @@ that's the end of the list and therefore the block. (There is no resource 0.)
<span class="plain-syntax"> </span><span class="identifier-syntax">BinaryFiles::write_int32</span><span class="plain-syntax">(</span><span class="identifier-syntax">fh</span><span class="plain-syntax">, (</span><span class="reserved-syntax">unsigned</span><span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax">) </span><span class="identifier-syntax">Str::get</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><a href="2-ann.html#SP2" class="function-link"><span class="function-syntax">Inter::Annotations::set_to_bytecode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">fh</span><span class="plain-syntax">, &amp;(</span><span class="identifier-syntax">symb</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">ann_set</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="2-sym.html#SP2" class="function-link"><span class="function-syntax">Inter::Symbols::get_scope</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">symb</span><span class="plain-syntax">) == </span><span class="constant-syntax">PLUG_ISYMS</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_THROUGH_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">pos</span><span class="plain-syntax">, </span><span class="identifier-syntax">symb</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">equated_name</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">N</span><span class="plain-syntax"> = </span><a href="2-cnn.html#SP1" class="function-link"><span class="function-syntax">Wiring::wired_to_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">symb</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_THROUGH_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">pos</span><span class="plain-syntax">, </span><span class="identifier-syntax">N</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">BinaryFiles::write_int32</span><span class="plain-syntax">(</span><span class="identifier-syntax">fh</span><span class="plain-syntax">, (</span><span class="reserved-syntax">unsigned</span><span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax">) </span><span class="identifier-syntax">Str::get</span><span class="plain-syntax">(</span><span class="identifier-syntax">pos</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">BinaryFiles::write_int32</span><span class="plain-syntax">(</span><span class="identifier-syntax">fh</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
@ -536,7 +539,7 @@ enough that the slot exists for the eventual list to be stored in.
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">from_S</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"no from_S"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">to_S</span><span class="plain-syntax"> = </span><a href="2-st.html#SP6" class="function-link"><span class="function-syntax">InterSymbolsTables::symbol_from_id</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">to_T</span><span class="plain-syntax">, </span><span class="identifier-syntax">to_ID</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">to_S</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"no to_S"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-st.html#SP10" class="function-link"><span class="function-syntax">InterSymbolsTables::equate</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">from_S</span><span class="plain-syntax">, </span><span class="identifier-syntax">to_S</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-cnn.html#SP1" class="function-link"><span class="function-syntax">Wiring::wire_to</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">from_S</span><span class="plain-syntax">, </span><span class="identifier-syntax">to_S</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
</pre>
@ -554,11 +557,13 @@ enough that the slot exists for the eventual list to be stored in.
<span class="plain-syntax"> </span><span class="identifier-syntax">BinaryFiles::write_int32</span><span class="plain-syntax">(</span><span class="identifier-syntax">fh</span><span class="plain-syntax">, (</span><span class="reserved-syntax">unsigned</span><span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax">) </span><span class="identifier-syntax">n</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="function-syntax">&lt;from_T-&gt;</span><span class="element-syntax">size</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">symb</span><span class="plain-syntax"> = </span><span class="identifier-syntax">from_T</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">symbol_array</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">];</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">symb</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">symb</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">equated_to</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="2-cnn.html#SP1" class="function-link"><span class="function-syntax">Wiring::is_wired</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">symb</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">W</span><span class="plain-syntax"> = </span><a href="2-cnn.html#SP1" class="function-link"><span class="function-syntax">Wiring::wired_to</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">symb</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">BinaryFiles::write_int32</span><span class="plain-syntax">(</span><span class="identifier-syntax">fh</span><span class="plain-syntax">, </span><span class="identifier-syntax">symb</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">symbol_ID</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">BinaryFiles::write_int32</span><span class="plain-syntax">(</span><span class="identifier-syntax">fh</span><span class="plain-syntax">, (</span><span class="reserved-syntax">unsigned</span><span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax">) </span><span class="identifier-syntax">symb</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">equated_to</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">owning_table</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">n_index</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">trace_bin</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">STDOUT</span><span class="plain-syntax">, </span><span class="string-syntax">"Write eqn %d -&gt; %d\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">n</span><span class="plain-syntax">, </span><span class="identifier-syntax">symb</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">equated_to</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">owning_table</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">n_index</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">BinaryFiles::write_int32</span><span class="plain-syntax">(</span><span class="identifier-syntax">fh</span><span class="plain-syntax">, </span><span class="identifier-syntax">symb</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">equated_to</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">symbol_ID</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">BinaryFiles::write_int32</span><span class="plain-syntax">(</span><span class="identifier-syntax">fh</span><span class="plain-syntax">, (</span><span class="reserved-syntax">unsigned</span><span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax">) </span><span class="identifier-syntax">W</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">owning_table</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">n_index</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">trace_bin</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">STDOUT</span><span class="plain-syntax">, </span><span class="string-syntax">"Write eqn %d -&gt; %d\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">n</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">owning_table</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">n_index</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">BinaryFiles::write_int32</span><span class="plain-syntax">(</span><span class="identifier-syntax">fh</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">symbol_ID</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">BinaryFiles::write_int32</span><span class="plain-syntax">(</span><span class="identifier-syntax">fh</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>

View file

@ -81,9 +81,10 @@ function togglePopup(material_id) {
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">T</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">T</span><span class="plain-syntax"> = </span><a href="2-in.html#SP3" class="function-link"><span class="function-syntax">Inode::globals</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax"> = </span><a href="2-st.html#SP6" class="function-link"><span class="function-syntax">InterSymbolsTables::unequated_symbol_from_id</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="identifier-syntax">P</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">W</span><span class="plain-syntax">.</span><span class="element-syntax">data</span><span class="plain-syntax">[</span><span class="identifier-syntax">index</span><span class="plain-syntax">]);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">S</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="2-in.html#SP6" class="function-link"><span class="function-syntax">Inode::error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"no symbol for ID (case 1)"</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">S</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">equated_to</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"This is $6 but $3 equates to $3 in $6\n"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><a href="2-pck.html#SP3" class="function-link"><span class="function-syntax">Inter::Packages::container</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">), </span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="identifier-syntax">S</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">equated_to</span><span class="plain-syntax">, </span><a href="2-pck.html#SP3" class="function-link"><span class="function-syntax">Inter::Packages::container</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">equated_to</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">definition</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="2-cnn.html#SP1" class="function-link"><span class="function-syntax">Wiring::is_wired</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax"> = </span><a href="2-cnn.html#SP1" class="function-link"><span class="function-syntax">Wiring::cable_end</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"This is $6 but $3 is wired to $3 in $6\n"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><a href="2-pck.html#SP3" class="function-link"><span class="function-syntax">Inter::Packages::container</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">), </span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">, </span><a href="2-pck.html#SP3" class="function-link"><span class="function-syntax">Inter::Packages::container</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">definition</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="2-in.html#SP6" class="function-link"><span class="function-syntax">Inode::error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"symbol defined outside its native scope"</span><span class="plain-syntax">, </span><span class="identifier-syntax">S</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">symbol_name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">D</span><span class="plain-syntax"> = </span><a href="2-sym.html#SP4" class="function-link"><span class="function-syntax">Inter::Symbols::definition</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">);</span>

View file

@ -153,11 +153,15 @@ function togglePopup(material_id) {
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">equate_name</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="2-sym.html#SP2" class="function-link"><span class="function-syntax">Inter::Symbols::get_scope</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">name_name</span><span class="plain-syntax">) == </span><span class="constant-syntax">PLUG_ISYMS</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="2-st.html#SP10" class="function-link"><span class="function-syntax">InterSymbolsTables::make_plug</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">name_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">equate_name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-cnn.html#SP1" class="function-link"><span class="function-syntax">Wiring::convert_to_plug</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">name_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">equate_name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">eq</span><span class="plain-syntax"> = </span><a href="2-st.html#SP11" class="function-link"><span class="function-syntax">InterSymbolsTables::url_name_to_symbol</span></a><span class="plain-syntax">(</span><a href="2-bkm.html#SP1" class="function-link"><span class="function-syntax">Inter::Bookmarks::tree</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">IBM</span><span class="plain-syntax">), </span><a href="2-bkm.html#SP1" class="function-link"><span class="function-syntax">Inter::Bookmarks::scope</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">IBM</span><span class="plain-syntax">), </span><span class="identifier-syntax">equate_name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">eq</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><a href="2-st.html#SP10" class="function-link"><span class="function-syntax">InterSymbolsTables::equate_textual</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">name_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">equate_name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-st.html#SP10" class="function-link"><span class="function-syntax">InterSymbolsTables::make_socket</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">name_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">eq</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">eq</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="2-cnn.html#SP1" class="function-link"><span class="function-syntax">Wiring::wire_to_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">name_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">equate_name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-sym.html#SP2" class="function-link"><span class="function-syntax">Inter::Symbols::set_scope</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">name_name</span><span class="plain-syntax">, </span><span class="constant-syntax">EXTERNAL_ISYMS</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><a href="2-cnn.html#SP1" class="function-link"><span class="function-syntax">Wiring::convert_to_socket</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">name_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">eq</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax"> = </span><a href="3-ie.html#SP1" class="function-link"><span class="function-syntax">Inter::Errors::plain</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"link symbol not equated"</span><span class="plain-syntax">, </span><span class="identifier-syntax">eloc</span><span class="plain-syntax">); </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
@ -169,8 +173,12 @@ function togglePopup(material_id) {
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">trans_name</span><span class="plain-syntax">) </span><a href="2-sym.html#SP4" class="function-link"><span class="function-syntax">Inter::Symbols::set_translate</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">name_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">trans_name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">equate_name</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">eq</span><span class="plain-syntax"> = </span><a href="2-st.html#SP11" class="function-link"><span class="function-syntax">InterSymbolsTables::url_name_to_symbol</span></a><span class="plain-syntax">(</span><a href="2-bkm.html#SP1" class="function-link"><span class="function-syntax">Inter::Bookmarks::tree</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">IBM</span><span class="plain-syntax">), </span><a href="2-bkm.html#SP1" class="function-link"><span class="function-syntax">Inter::Bookmarks::scope</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">IBM</span><span class="plain-syntax">), </span><span class="identifier-syntax">equate_name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">eq</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><a href="2-st.html#SP10" class="function-link"><span class="function-syntax">InterSymbolsTables::equate_textual</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">name_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">equate_name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><a href="2-st.html#SP10" class="function-link"><span class="function-syntax">InterSymbolsTables::equate</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">name_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">eq</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">eq</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="2-cnn.html#SP1" class="function-link"><span class="function-syntax">Wiring::wire_to_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">name_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">equate_name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-sym.html#SP2" class="function-link"><span class="function-syntax">Inter::Symbols::set_scope</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">name_name</span><span class="plain-syntax">, </span><span class="constant-syntax">EXTERNAL_ISYMS</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><a href="2-cnn.html#SP1" class="function-link"><span class="function-syntax">Wiring::wire_to</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">name_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">eq</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>

View file

@ -271,7 +271,7 @@ be able to resolve conditional compilation matter placed inside, e.g.,
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vi_unchecked</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">InterSymbolsTables::create_with_unique_name</span><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Inter::Bookmarks::scope</span><span class="plain-syntax">(</span><span class="identifier-syntax">in_veneer</span><span class="plain-syntax">), </span><span class="identifier-syntax">I</span><span class="string-syntax">"K_unchecked"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">InterSymbolsTables::equate</span><span class="plain-syntax">(</span><span class="identifier-syntax">vi_unchecked</span><span class="plain-syntax">, </span><span class="identifier-syntax">unchecked_kind_symbol</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Wiring::wire_to</span><span class="plain-syntax">(</span><span class="identifier-syntax">vi_unchecked</span><span class="plain-syntax">, </span><span class="identifier-syntax">unchecked_kind_symbol</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">con_name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">InterSymbolsTables::create_with_unique_name</span><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Inter::Bookmarks::scope</span><span class="plain-syntax">(</span><span class="identifier-syntax">in_veneer</span><span class="plain-syntax">), </span><span class="identifier-syntax">I</span><span class="string-syntax">"WORDSIZE"</span><span class="plain-syntax">);</span>

View file

@ -154,7 +154,7 @@ function togglePopup(material_id) {
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">PipelineErrors::error_with</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">PipelineErrors::error_with</span></span>:<br/>Running Pipelines - <a href="2-rp.html#SP3_1_1">&#167;3.1.1</a><br/>Read, Move, Wipe, Stop Stages - <a href="2-rmwss.html#SP3">&#167;3</a><br/>Connect Plugs Stage - <a href="4-cps.html#SP2_2">&#167;2.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">pipeline_step</span><span class="plain-syntax"> *</span><span class="identifier-syntax">step</span><span class="plain-syntax">, </span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">erm</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">quoted</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">PipelineErrors::error_with</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">PipelineErrors::error_with</span></span>:<br/>Running Pipelines - <a href="2-rp.html#SP3_1_1">&#167;3.1.1</a><br/>Read, Move, Wipe, Stop Stages - <a href="2-rmwss.html#SP3">&#167;3</a><br/>Shorten Wiring Stage - <a href="4-sws.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">pipeline_step</span><span class="plain-syntax"> *</span><span class="identifier-syntax">step</span><span class="plain-syntax">, </span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">erm</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">quoted</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">CORE_MODULE</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-pe.html#SP2_1" class="named-paragraph-link"><span class="named-paragraph">Begin problem message using the module of the same name</span><span class="named-paragraph-number">2.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">full</span><span class="plain-syntax">)</span>

View file

@ -104,7 +104,7 @@ pointers to trees being worked on.
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">S</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<ul class="endnotetexts"><li>The structure inter_pipeline is accessed in 2/rp, 2/pe, 2/ns, 2/rmwss, 3/ps, 3/rccs, 3/css, 4/lbks, 4/cps, 4/dics, 4/mius, 4/rvs, 5/msms, 6/erms, 6/erls, 6/eros and here.</li></ul>
<ul class="endnotetexts"><li>The structure inter_pipeline is accessed in 2/rp, 2/pe, 2/ns, 2/rmwss, 3/ps, 3/rccs, 3/css, 4/lbks, 4/sws, 4/dics, 4/mius, 4/rvs, 5/msms, 6/erms, 6/erls, 6/eros and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b>A <a href="2-pp.html#SP2" class="internal">pipeline_step</a> is really only a choice of <a href="2-pp.html#SP3" class="internal">pipeline_stage</a>, but comes
along with a wide variety of options and parameter settings, so that it looks
much more complicated than it actually is.
@ -136,7 +136,7 @@ much more complicated than it actually is.
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">step</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<ul class="endnotetexts"><li>The structure pipeline_step is accessed in 2/rp, 2/pe, 2/ns, 2/rmwss, 3/ps, 3/rccs, 3/css, 4/lbks, 4/cps, 4/dics, 4/mius, 4/rvs, 5/msms, 6/erms, 6/erls, 6/eros and here.</li></ul>
<ul class="endnotetexts"><li>The structure pipeline_step is accessed in 2/rp, 2/pe, 2/ns, 2/rmwss, 3/ps, 3/rccs, 3/css, 4/lbks, 4/sws, 4/dics, 4/mius, 4/rvs, 5/msms, 6/erms, 6/erls, 6/eros and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b>And a <a href="2-pp.html#SP3" class="internal">pipeline_stage</a> is simply a choice of what to do. For example,
<span class="extract"><span class="extract-syntax">eliminate-redundant-labels</span></span> is a pipeline stage. This would need to be
combined with details of what tree to apply to in order to become a step.
@ -160,7 +160,7 @@ combined with details of what tree to apply to in order to become a step.
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">pipeline_stage</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">pipeline_stage</span><span class="plain-syntax"> *</span><span class="function-syntax">ParsingPipelines::new_stage</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">ParsingPipelines::new_stage</span></span>:<br/>New Stage - <a href="2-ns.html#SP1">&#167;1</a><br/>Read, Move, Wipe, Stop Stages - <a href="2-rmwss.html#SP1">&#167;1</a><br/>Parsing Stages - <a href="3-ps.html#SP1">&#167;1</a><br/>Resolve Conditional Compilation Stage - <a href="3-rccs.html#SP1">&#167;1</a><br/>Compile Splats Stage - <a href="3-css.html#SP1">&#167;1</a><br/>Load Binary Kits Stage - <a href="4-lbks.html#SP3">&#167;3</a><br/>Connect Plugs Stage - <a href="4-cps.html#SP1">&#167;1</a><br/>Detect Indirect Calls Stage - <a href="4-dics.html#SP1">&#167;1</a><br/>Make Identifiers Unique Stage - <a href="4-mius.html#SP1">&#167;1</a><br/>Reconcile Verbs Stage - <a href="4-rvs.html#SP1">&#167;1</a><br/>Make Synoptic Module Stage - <a href="5-msms.html#SP1">&#167;1</a><br/>Eliminate Redundant Matter Stage - <a href="6-erms.html#SP1">&#167;1</a><br/>Eliminate Redundant Labels Stage - <a href="6-erls.html#SP1">&#167;1</a><br/>Eliminate Redundant Operations Stage - <a href="6-eros.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">,</span>
<span class="reserved-syntax">pipeline_stage</span><span class="plain-syntax"> *</span><span class="function-syntax">ParsingPipelines::new_stage</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">ParsingPipelines::new_stage</span></span>:<br/>New Stage - <a href="2-ns.html#SP1">&#167;1</a><br/>Read, Move, Wipe, Stop Stages - <a href="2-rmwss.html#SP1">&#167;1</a><br/>Parsing Stages - <a href="3-ps.html#SP1">&#167;1</a><br/>Resolve Conditional Compilation Stage - <a href="3-rccs.html#SP1">&#167;1</a><br/>Compile Splats Stage - <a href="3-css.html#SP1">&#167;1</a><br/>Load Binary Kits Stage - <a href="4-lbks.html#SP3">&#167;3</a><br/>Shorten Wiring Stage - <a href="4-sws.html#SP1">&#167;1</a><br/>Detect Indirect Calls Stage - <a href="4-dics.html#SP1">&#167;1</a><br/>Make Identifiers Unique Stage - <a href="4-mius.html#SP1">&#167;1</a><br/>Reconcile Verbs Stage - <a href="4-rvs.html#SP1">&#167;1</a><br/>Make Synoptic Module Stage - <a href="5-msms.html#SP1">&#167;1</a><br/>Eliminate Redundant Matter Stage - <a href="6-erms.html#SP1">&#167;1</a><br/>Eliminate Redundant Labels Stage - <a href="6-erls.html#SP1">&#167;1</a><br/>Eliminate Redundant Operations Stage - <a href="6-eros.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> (*</span><span class="identifier-syntax">X</span><span class="plain-syntax">)(</span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">pipeline_step</span><span class="plain-syntax"> *), </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">arg</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">tr</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">pipeline_stage</span><span class="plain-syntax"> *</span><span class="identifier-syntax">stage</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">pipeline_stage</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">stage</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">stage_name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::duplicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">name</span><span class="plain-syntax">);</span>
@ -453,7 +453,7 @@ file to specify a new one.
<span class="plain-syntax"> </span><a href="3-css.html#SP1" class="function-link"><span class="function-syntax">CompileSplatsStage::create_pipeline_stage</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><a href="4-dics.html#SP1" class="function-link"><span class="function-syntax">DetectIndirectCallsStage::create_pipeline_stage</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><a href="6-erms.html#SP1" class="function-link"><span class="function-syntax">EliminateRedundantMatterStage::create_pipeline_stage</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><a href="4-cps.html#SP1" class="function-link"><span class="function-syntax">ConnectPlugsStage::create_pipeline_stage</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><a href="4-sws.html#SP1" class="function-link"><span class="function-syntax">ShortenWiringStage::create_pipeline_stage</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><a href="6-erls.html#SP1" class="function-link"><span class="function-syntax">EliminateRedundantLabelsStage::create_pipeline_stage</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><a href="6-eros.html#SP1" class="function-link"><span class="function-syntax">EliminateRedundantOperationsStage::create_pipeline_stage</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><a href="5-msms.html#SP1" class="function-link"><span class="function-syntax">MakeSynopticModuleStage::create_pipeline_stage</span></a><span class="plain-syntax">();</span>

View file

@ -126,7 +126,7 @@ function togglePopup(material_id) {
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
</pre>
<ul class="endnotetexts"><li>The structure pipeline_step_ephemera is accessed in 2/pp, 2/pe, 2/ns, 2/rmwss, 3/ps, 3/rccs, 3/css, 4/lbks, 4/cps, 4/dics, 4/mius, 4/rvs, 5/msms, 6/erms, 6/erls, 6/eros and here.</li></ul>
<ul class="endnotetexts"><li>The structure pipeline_step_ephemera is accessed in 2/pp, 2/pe, 2/ns, 2/rmwss, 3/ps, 3/rccs, 3/css, 4/lbks, 4/sws, 4/dics, 4/mius, 4/rvs, 5/msms, 6/erms, 6/erls, 6/eros and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b>This outer layer is all just instrumentation, really: we run through the
steps in turn, timing how long each one took us.
</p>
@ -450,7 +450,7 @@ linked in.
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax"> = </span><span class="identifier-syntax">step</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">ephemera</span><span class="plain-syntax">.</span><span class="element-syntax">repository</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax"> = </span><a href="2-rp.html#SP5" class="function-link"><span class="function-syntax">RunningPipelines::get_symbol</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">step</span><span class="plain-syntax">, </span><span class="identifier-syntax">id</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">S</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">S</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">step</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">ephemera</span><span class="plain-syntax">.</span><span class="element-syntax">cached_symbols</span><span class="plain-syntax">[</span><span class="identifier-syntax">id</span><span class="plain-syntax">] = </span><span class="identifier-syntax">Inter::Connectors::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">identifier</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">step</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">ephemera</span><span class="plain-syntax">.</span><span class="element-syntax">cached_symbols</span><span class="plain-syntax">[</span><span class="identifier-syntax">id</span><span class="plain-syntax">] = </span><span class="identifier-syntax">Wiring::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">identifier</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">step</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">ephemera</span><span class="plain-syntax">.</span><span class="element-syntax">cached_symbols</span><span class="plain-syntax">[</span><span class="identifier-syntax">id</span><span class="plain-syntax">];</span>
<span class="plain-syntax">}</span>
</pre>

View file

@ -309,7 +309,7 @@ But in fact it's easier to handle it here.
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">directive</span><span class="plain-syntax"> == </span><span class="identifier-syntax">DEFAULT_I6DIR</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Inter::Connectors::find_socket</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">identifier</span><span class="plain-syntax">) == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Wiring::find_socket</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">identifier</span><span class="plain-syntax">) == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">directive</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CONSTANT_I6DIR</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-css.html#SP3_1_3_1" class="named-paragraph-link"><span class="named-paragraph">Definitely compile something from this splat</span><span class="named-paragraph-number">3.1.3.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
@ -423,10 +423,10 @@ not already there.
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">made_s</span><span class="plain-syntax"> = </span><a href="3-css.html#SP5" class="function-link"><span class="function-syntax">CompileSplatsStage::make_socketed_symbol</span></a><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">content_at</span><span class="plain-syntax">, </span><span class="identifier-syntax">identifier</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">made_s</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">equated_to</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">external_name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">made_s</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">equated_to</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">external_name</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">equated_to</span><span class="plain-syntax"> = </span><span class="identifier-syntax">made_s</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">made_s</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">equated_to</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Wiring::is_wired</span><span class="plain-syntax">(</span><span class="identifier-syntax">made_s</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">external_name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Wiring::wired_to</span><span class="plain-syntax">(</span><span class="identifier-syntax">made_s</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Wiring::wire_to</span><span class="plain-syntax">(</span><span class="identifier-syntax">external_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">made_s</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Wiring::wire_to</span><span class="plain-syntax">(</span><span class="identifier-syntax">made_s</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Inter::Symbols::annotate_i</span><span class="plain-syntax">(</span><span class="identifier-syntax">made_s</span><span class="plain-syntax">, </span><span class="identifier-syntax">ASSIMILATED_IANN</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">directive</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FAKEACTION_I6DIR</span><span class="plain-syntax">) </span><span class="identifier-syntax">Inter::Symbols::annotate_i</span><span class="plain-syntax">(</span><span class="identifier-syntax">made_s</span><span class="plain-syntax">, </span><span class="identifier-syntax">FAKE_ACTION_IANN</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">);</span>
@ -679,7 +679,7 @@ with three things in it:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Inter::Connectors::find_socket</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">value</span><span class="plain-syntax">) == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Wiring::find_socket</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">value</span><span class="plain-syntax">) == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_bookmark</span><span class="plain-syntax"> </span><span class="identifier-syntax">IBM_d</span><span class="plain-syntax"> = </span><a href="3-css.html#SP6" class="function-link"><span class="function-syntax">CompileSplatsStage::make_submodule</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">step</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"actions"</span><span class="plain-syntax">, </span><span class="identifier-syntax">P</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_bookmark</span><span class="plain-syntax"> *</span><span class="identifier-syntax">IBM</span><span class="plain-syntax"> = &amp;</span><span class="identifier-syntax">IBM_d</span><span class="plain-syntax">;</span>
@ -757,8 +757,8 @@ equating it to a function definition elsewhere.
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::delete_first_character</span><span class="plain-syntax">(</span><span class="identifier-syntax">fn_name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">fn_s</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">InterSymbolsTables::create_with_unique_name</span><span class="plain-syntax">(</span><span class="identifier-syntax">Inter::Bookmarks::scope</span><span class="plain-syntax">(</span><span class="identifier-syntax">IBM</span><span class="plain-syntax">), </span><span class="identifier-syntax">fn_name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">existing_fn_s</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Inter::Connectors::find_socket</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">fn_name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">existing_fn_s</span><span class="plain-syntax">) </span><span class="identifier-syntax">InterSymbolsTables::equate</span><span class="plain-syntax">(</span><span class="identifier-syntax">fn_s</span><span class="plain-syntax">, </span><span class="identifier-syntax">existing_fn_s</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">existing_fn_s</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Wiring::find_socket</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">fn_name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">existing_fn_s</span><span class="plain-syntax">) </span><span class="identifier-syntax">Wiring::wire_to</span><span class="plain-syntax">(</span><span class="identifier-syntax">fn_s</span><span class="plain-syntax">, </span><span class="identifier-syntax">existing_fn_s</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">fn_name</span><span class="plain-syntax">)</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-css.html#SP3_1_3_1_4_5_3_1">&#167;3.1.3.1.4.5.3.1</a>.</li></ul>
@ -1028,8 +1028,8 @@ which have a single global namespace for functoons and variables anyway.
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">identifier</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">new_symbol</span><span class="plain-syntax"> = </span><span class="identifier-syntax">InterSymbolsTables::create_with_unique_name</span><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Inter::Bookmarks::scope</span><span class="plain-syntax">(</span><span class="identifier-syntax">IBM</span><span class="plain-syntax">), </span><span class="identifier-syntax">identifier</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Inter::Connectors::find_socket</span><span class="plain-syntax">(</span><span class="identifier-syntax">Inter::Bookmarks::tree</span><span class="plain-syntax">(</span><span class="identifier-syntax">IBM</span><span class="plain-syntax">), </span><span class="identifier-syntax">identifier</span><span class="plain-syntax">) == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Inter::Connectors::socket</span><span class="plain-syntax">(</span><span class="identifier-syntax">Inter::Bookmarks::tree</span><span class="plain-syntax">(</span><span class="identifier-syntax">IBM</span><span class="plain-syntax">), </span><span class="identifier-syntax">identifier</span><span class="plain-syntax">, </span><span class="identifier-syntax">new_symbol</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Wiring::find_socket</span><span class="plain-syntax">(</span><span class="identifier-syntax">Inter::Bookmarks::tree</span><span class="plain-syntax">(</span><span class="identifier-syntax">IBM</span><span class="plain-syntax">), </span><span class="identifier-syntax">identifier</span><span class="plain-syntax">) == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Wiring::socket</span><span class="plain-syntax">(</span><span class="identifier-syntax">Inter::Bookmarks::tree</span><span class="plain-syntax">(</span><span class="identifier-syntax">IBM</span><span class="plain-syntax">), </span><span class="identifier-syntax">identifier</span><span class="plain-syntax">, </span><span class="identifier-syntax">new_symbol</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">new_symbol</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
@ -1282,8 +1282,7 @@ from command parser grammar: slightly different syntax applies there.
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">match_results</span><span class="plain-syntax"> </span><span class="identifier-syntax">mr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Regexp::create_mr</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Regexp::match</span><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">mr</span><span class="plain-syntax">, </span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"scope=(%i+)"</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">symb</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Inter::Connectors::find_socket</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0]);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">while</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">symb</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">symb</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">equated_to</span><span class="plain-syntax">)) </span><span class="identifier-syntax">symb</span><span class="plain-syntax"> = </span><span class="identifier-syntax">symb</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">equated_to</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">symb</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Wiring::cable_end</span><span class="plain-syntax">(</span><span class="identifier-syntax">Wiring::find_socket</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0]));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">symb</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Inter::Symbols::read_annotation</span><span class="plain-syntax">(</span><span class="identifier-syntax">symb</span><span class="plain-syntax">, </span><span class="identifier-syntax">SCOPE_FILTER_IANN</span><span class="plain-syntax">) != </span><span class="constant-syntax">1</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Inter::Symbols::annotate_i</span><span class="plain-syntax">(</span><span class="identifier-syntax">symb</span><span class="plain-syntax">, </span><span class="identifier-syntax">SCOPE_FILTER_IANN</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">);</span>
@ -1291,8 +1290,7 @@ from command parser grammar: slightly different syntax applies there.
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Regexp::match</span><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">mr</span><span class="plain-syntax">, </span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"noun=(%i+)"</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">symb</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Inter::Connectors::find_socket</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0]);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">while</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">symb</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">symb</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">equated_to</span><span class="plain-syntax">)) </span><span class="identifier-syntax">symb</span><span class="plain-syntax"> = </span><span class="identifier-syntax">symb</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">equated_to</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">symb</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Wiring::cable_end</span><span class="plain-syntax">(</span><span class="identifier-syntax">Wiring::find_socket</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0]));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">symb</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Inter::Symbols::read_annotation</span><span class="plain-syntax">(</span><span class="identifier-syntax">symb</span><span class="plain-syntax">, </span><span class="identifier-syntax">NOUN_FILTER_IANN</span><span class="plain-syntax">) != </span><span class="constant-syntax">1</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Inter::Symbols::annotate_i</span><span class="plain-syntax">(</span><span class="identifier-syntax">symb</span><span class="plain-syntax">, </span><span class="identifier-syntax">NOUN_FILTER_IANN</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">);</span>
@ -1305,7 +1303,7 @@ from command parser grammar: slightly different syntax applies there.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">symb</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Inter::Connectors::find_socket</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">S</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">symb</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Wiring::find_socket</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">S</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">symb</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Inter::Symbols::to_data</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">pack</span><span class="plain-syntax">, </span><span class="identifier-syntax">symb</span><span class="plain-syntax">, </span><span class="identifier-syntax">val1</span><span class="plain-syntax">, </span><span class="identifier-syntax">val2</span><span class="plain-syntax">); </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
@ -1497,9 +1495,9 @@ and let the linker stage worry about what it means later on.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">result_s</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Inter::Connectors::find_socket</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">t</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">material</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">result_s</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Wiring::find_socket</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">t</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">material</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">result_s</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">result_s</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">Inter::Connectors::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">t</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">material</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">Wiring::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">t</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">material</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-css.html#SP10">&#167;10</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP11" class="paragraph-anchor"></a><b>&#167;11. </b>The above algorithm needs a lot of names for partial results of expressions,

View file

@ -180,7 +180,7 @@ though as it happens this transformation would work just as well either way:
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-dics.html#SP2_1">&#167;2.1</a>.</li></ul>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="4-cps.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-pm.html">1</a></li><li class="progresschapter"><a href="2-pp.html">2</a></li><li class="progresschapter"><a href="3-ps.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresssection"><a href="4-lbks.html">lbks</a></li><li class="progresssection"><a href="4-cps.html">cps</a></li><li class="progresscurrent">dics</li><li class="progresssection"><a href="4-mius.html">mius</a></li><li class="progresssection"><a href="4-rvs.html">rvs</a></li><li class="progresschapter"><a href="5-msms.html">5</a></li><li class="progresschapter"><a href="6-erms.html">6</a></li><li class="progressnext"><a href="4-mius.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="4-sws.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-pm.html">1</a></li><li class="progresschapter"><a href="2-pp.html">2</a></li><li class="progresschapter"><a href="3-ps.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresssection"><a href="4-lbks.html">lbks</a></li><li class="progresssection"><a href="4-sws.html">sws</a></li><li class="progresscurrent">dics</li><li class="progresssection"><a href="4-mius.html">mius</a></li><li class="progresssection"><a href="4-rvs.html">rvs</a></li><li class="progresschapter"><a href="5-msms.html">5</a></li><li class="progresschapter"><a href="6-erms.html">6</a></li><li class="progressnext"><a href="4-mius.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -130,6 +130,8 @@ made by <a href="../supervisor-module/index.html" class="internal">supervisor</a
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-lbks.html#SP3_1" class="named-paragraph-link"><span class="named-paragraph">Load the Inter for the kit into the sidecar</span><span class="named-paragraph-number">3.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-lbks.html#SP3_2" class="named-paragraph-link"><span class="named-paragraph">Migrate the bulk of the code from the sidecar to the main tree</span><span class="named-paragraph-number">3.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax"> = </span><span class="identifier-syntax">step</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">ephemera</span><span class="plain-syntax">.</span><span class="element-syntax">repository</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Wiring::connect_plugs_to_sockets</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
@ -172,7 +174,7 @@ of the sidecar and put it into the main tree.
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-lbks.html#SP3">&#167;3</a>.</li></ul>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="3-css.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-pm.html">1</a></li><li class="progresschapter"><a href="2-pp.html">2</a></li><li class="progresschapter"><a href="3-ps.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresscurrent">lbks</li><li class="progresssection"><a href="4-cps.html">cps</a></li><li class="progresssection"><a href="4-dics.html">dics</a></li><li class="progresssection"><a href="4-mius.html">mius</a></li><li class="progresssection"><a href="4-rvs.html">rvs</a></li><li class="progresschapter"><a href="5-msms.html">5</a></li><li class="progresschapter"><a href="6-erms.html">6</a></li><li class="progressnext"><a href="4-cps.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="3-css.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-pm.html">1</a></li><li class="progresschapter"><a href="2-pp.html">2</a></li><li class="progresschapter"><a href="3-ps.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresscurrent">lbks</li><li class="progresssection"><a href="4-sws.html">sws</a></li><li class="progresssection"><a href="4-dics.html">dics</a></li><li class="progresssection"><a href="4-mius.html">mius</a></li><li class="progresssection"><a href="4-rvs.html">rvs</a></li><li class="progresschapter"><a href="5-msms.html">5</a></li><li class="progresschapter"><a href="6-erms.html">6</a></li><li class="progressnext"><a href="4-sws.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -154,7 +154,7 @@ translation in that case.
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbols_table</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ST</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Inter::Packages::scope</span><span class="plain-syntax">(</span><span class="identifier-syntax">Q</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="function-syntax">&lt;ST-&gt;</span><span class="identifier-syntax">size</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ST</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">symbol_array</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">];</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">S</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">S</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">equated_to</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) &amp;&amp;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">S</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">Wiring::is_wired</span><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">Inter::Symbols::get_flag</span><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="identifier-syntax">MAKE_NAME_UNIQUE</span><span class="plain-syntax">))) {</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-mius.html#SP3_1" class="named-paragraph-link"><span class="named-paragraph">Give this symbol a unique translation</span><span class="named-paragraph-number">3.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Inter::Symbols::clear_flag</span><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="identifier-syntax">MAKE_NAME_UNIQUE</span><span class="plain-syntax">);</span>
@ -185,7 +185,7 @@ translation in that case.
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-mius.html#SP3">&#167;3</a>.</li></ul>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="4-dics.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-pm.html">1</a></li><li class="progresschapter"><a href="2-pp.html">2</a></li><li class="progresschapter"><a href="3-ps.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresssection"><a href="4-lbks.html">lbks</a></li><li class="progresssection"><a href="4-cps.html">cps</a></li><li class="progresssection"><a href="4-dics.html">dics</a></li><li class="progresscurrent">mius</li><li class="progresssection"><a href="4-rvs.html">rvs</a></li><li class="progresschapter"><a href="5-msms.html">5</a></li><li class="progresschapter"><a href="6-erms.html">6</a></li><li class="progressnext"><a href="4-rvs.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="4-dics.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-pm.html">1</a></li><li class="progresschapter"><a href="2-pp.html">2</a></li><li class="progresschapter"><a href="3-ps.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresssection"><a href="4-lbks.html">lbks</a></li><li class="progresssection"><a href="4-sws.html">sws</a></li><li class="progresssection"><a href="4-dics.html">dics</a></li><li class="progresscurrent">mius</li><li class="progresssection"><a href="4-rvs.html">rvs</a></li><li class="progresschapter"><a href="5-msms.html">5</a></li><li class="progresschapter"><a href="6-erms.html">6</a></li><li class="progressnext"><a href="4-rvs.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -146,7 +146,7 @@ affecting the world model) over testing commands.
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-rvs.html#SP1_1">&#167;1.1</a> (twice).</li></ul>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="4-mius.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-pm.html">1</a></li><li class="progresschapter"><a href="2-pp.html">2</a></li><li class="progresschapter"><a href="3-ps.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresssection"><a href="4-lbks.html">lbks</a></li><li class="progresssection"><a href="4-cps.html">cps</a></li><li class="progresssection"><a href="4-dics.html">dics</a></li><li class="progresssection"><a href="4-mius.html">mius</a></li><li class="progresscurrent">rvs</li><li class="progresschapter"><a href="5-msms.html">5</a></li><li class="progresschapter"><a href="6-erms.html">6</a></li><li class="progressnext"><a href="5-msms.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="4-mius.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-pm.html">1</a></li><li class="progresschapter"><a href="2-pp.html">2</a></li><li class="progresschapter"><a href="3-ps.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresssection"><a href="4-lbks.html">lbks</a></li><li class="progresssection"><a href="4-sws.html">sws</a></li><li class="progresssection"><a href="4-dics.html">dics</a></li><li class="progresssection"><a href="4-mius.html">mius</a></li><li class="progresscurrent">rvs</li><li class="progresschapter"><a href="5-msms.html">5</a></li><li class="progresschapter"><a href="6-erms.html">6</a></li><li class="progressnext"><a href="5-msms.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -1,7 +1,7 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Connect Plugs Stage</title>
<title>Shorten Wiring Stage</title>
<link href="../docs-assets/Breadcrumbs.css" rel="stylesheet" rev="stylesheet" type="text/css">
<meta name="viewport" content="width=device-width initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@ -68,56 +68,17 @@ function togglePopup(material_id) {
</ul>
</nav>
<main role="main">
<!--Weave of 'Connect Plugs Stage' generated by Inweb-->
<!--Weave of 'Shorten Wiring Stage' generated by Inweb-->
<div class="breadcrumbs">
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../compiler.html">Inter Modules</a></li><li><a href="index.html">pipeline</a></li><li><a href="index.html#4">Chapter 4: Linking Stages</a></li><li><b>Connect Plugs Stage</b></li></ul></div>
<p class="purpose">To reconcile symbol references made across compilation unit boundaries.</p>
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../compiler.html">Inter Modules</a></li><li><a href="index.html">pipeline</a></li><li><a href="index.html#4">Chapter 4: Linking Stages</a></li><li><b>Shorten Wiring Stage</b></li></ul></div>
<p class="purpose">To catch missing resources with suitable errors, to remove plugs and sockets as no longer necessary, and to shorten wiring as much as possible.</p>
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. </b>See <a href="../bytecode-module/2-cnn.html" class="internal">Connectors (in bytecode)</a> for more, but consider this example:
</p>
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">To</span><span class="plain-syntax"> </span><span class="identifier-syntax">call</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">kit</span><span class="plain-syntax">: (- </span><span class="identifier-syntax">ExampleKitFunction</span><span class="plain-syntax">(); -).</span>
<span class="identifier-syntax">To</span><span class="plain-syntax"> </span><span class="identifier-syntax">begin</span><span class="plain-syntax">:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">call</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">kit</span><span class="plain-syntax">.</span>
</pre>
<p class="commentary">The <a href="../inform7/index.html" class="internal">inform7</a> compiler makes a main source tree out of this. It doesn't have
a definition of <span class="extract"><span class="extract-syntax">ExampleKitFunction</span></span>; that's defined in, say, <span class="extract"><span class="extract-syntax">HypotheticalKit</span></span>,
which is being linked in after compilation. Indeed, the compiler has no way
even to know where in the package hierarchy of the Inter tree for <span class="extract"><span class="extract-syntax">HypotheticalKit</span></span>
this function will be. What to do?
</p>
<p class="commentary">What it does is to create a symbol <span class="extract"><span class="extract-syntax">S</span></span> representing the function which equates like so:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> main</span>
<span class="plain-syntax"> source_text</span>
<span class="plain-syntax"> S (regular symbol) -&gt; main</span>
<span class="plain-syntax"> connectors</span>
<span class="plain-syntax"> ExampleKitFunction (plug symbol)</span>
</pre>
<p class="commentary">Once the Inter code for the kit has been loaded, we also find symbols:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> main</span>
<span class="plain-syntax"> connectors</span>
<span class="plain-syntax"> ExampleKitFunction (socket symbol) -&gt; main</span>
<span class="plain-syntax"> HypotheticalKit</span>
<span class="plain-syntax"> ...</span>
<span class="plain-syntax"> ExampleKitFunction (regular symbol)</span>
</pre>
<p class="commentary">So now we must connect the plug to the socket. <span class="extract"><span class="extract-syntax">S</span></span> will then connect through to
the actual definition, and all will be well.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ConnectPlugsStage::create_pipeline_stage</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">ConnectPlugsStage::create_pipeline_stage</span></span>:<br/>Parsing Pipelines - <a href="2-pp.html#SP10">&#167;10</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="2-pp.html#SP3" class="function-link"><span class="function-syntax">ParsingPipelines::new_stage</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"connect-plugs"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><a href="4-cps.html#SP2" class="function-link"><span class="function-syntax">ConnectPlugsStage::run</span></a><span class="plain-syntax">, </span><span class="constant-syntax">NO_STAGE_ARG</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ShortenWiringStage::create_pipeline_stage</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">ShortenWiringStage::create_pipeline_stage</span></span>:<br/>Parsing Pipelines - <a href="2-pp.html#SP10">&#167;10</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="2-pp.html#SP3" class="function-link"><span class="function-syntax">ParsingPipelines::new_stage</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"shorten-wiring"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><a href="4-sws.html#SP2" class="function-link"><span class="function-syntax">ShortenWiringStage::run</span></a><span class="plain-syntax">, </span><span class="constant-syntax">NO_STAGE_ARG</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b>In practice, linking errors can occur when the source text refers to a function
@ -133,39 +94,12 @@ and report these errors efficiently, so we keep the bad names in both a dictiona
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bad_plug_names</span><span class="plain-syntax">; </span><span class="comment-syntax"> of </span><span class="extract"><span class="extract-syntax">text_stream</span></span>
<span class="plain-syntax">} </span><span class="reserved-syntax">plug_inspection_state</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ConnectPlugsStage::run</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">ConnectPlugsStage::run</span></span>:<br/><a href="4-cps.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">pipeline_step</span><span class="plain-syntax"> *</span><span class="identifier-syntax">step</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ShortenWiringStage::run</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">ShortenWiringStage::run</span></span>:<br/><a href="4-sws.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">pipeline_step</span><span class="plain-syntax"> *</span><span class="identifier-syntax">step</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax"> = </span><span class="identifier-syntax">step</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">ephemera</span><span class="plain-syntax">.</span><span class="element-syntax">repository</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_package</span><span class="plain-syntax"> *</span><span class="identifier-syntax">connectors</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Site::connectors_package</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">connectors</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="4-cps.html#SP2_1" class="named-paragraph-link"><span class="named-paragraph">Try to connect plugs and sockets</span><span class="named-paragraph-number">2.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-cps.html#SP2_2" class="named-paragraph-link"><span class="named-paragraph">Check that there are now no symbols which connect to loose plugs</span><span class="named-paragraph-number">2.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<ul class="endnotetexts"><li>The structure plug_inspection_state is private to this section.</li></ul>
<p class="commentary firstcommentary"><a id="SP2_1" class="paragraph-anchor"></a><b>&#167;2.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Try to connect plugs and sockets</span><span class="named-paragraph-number">2.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbols_table</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ST</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Inter::Packages::scope</span><span class="plain-syntax">(</span><span class="identifier-syntax">connectors</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="function-syntax">&lt;ST-&gt;</span><span class="identifier-syntax">size</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ST</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">symbol_array</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">];</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Inter::Connectors::is_loose_plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">socket</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Inter::Connectors::find_socket</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">Inter::Connectors::plug_name</span><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">socket</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Inter::Connectors::wire_plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="identifier-syntax">socket</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-cps.html#SP2">&#167;2</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP2_2" class="paragraph-anchor"></a><b>&#167;2.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Check that there are now no symbols which connect to loose plugs</span><span class="named-paragraph-number">2.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">plug_inspection_state</span><span class="plain-syntax"> </span><span class="identifier-syntax">state</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">state</span><span class="plain-syntax">.</span><span class="identifier-syntax">bad_plugs</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Dictionaries::new</span><span class="plain-syntax">(16, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">state</span><span class="plain-syntax">.</span><span class="identifier-syntax">bad_plug_names</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NEW_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">InterTree::traverse</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><a href="4-cps.html#SP3" class="function-link"><span class="function-syntax">ConnectPlugsStage::visitor</span></a><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">state</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">PACKAGE_IST</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">InterTree::traverse</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><a href="4-sws.html#SP3" class="function-link"><span class="function-syntax">ShortenWiringStage::visitor</span></a><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">state</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">PACKAGE_IST</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">LinkedLists::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">state</span><span class="plain-syntax">.</span><span class="element-syntax">bad_plug_names</span><span class="plain-syntax">) &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">NS</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">N</span><span class="plain-syntax">;</span>
@ -178,8 +112,33 @@ and report these errors efficiently, so we keep the bad names in both a dictiona
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">NS</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_package</span><span class="plain-syntax"> *</span><span class="identifier-syntax">connectors</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Site::connectors_package</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">connectors</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbols_table</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ST</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Inter::Packages::scope</span><span class="plain-syntax">(</span><span class="identifier-syntax">connectors</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="function-syntax">&lt;ST-&gt;</span><span class="identifier-syntax">size</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ST</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">symbol_array</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">];</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">Wiring::is_plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">)) &amp;&amp; (</span><span class="identifier-syntax">Wiring::has_no_incoming_connections</span><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">)))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Inter::Symbols::remove_from_table</span><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="function-syntax">&lt;ST-&gt;</span><span class="identifier-syntax">size</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ST</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">symbol_array</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">];</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">Wiring::is_socket</span><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">)) &amp;&amp; (</span><span class="identifier-syntax">Wiring::has_no_incoming_connections</span><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">)))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Inter::Symbols::remove_from_table</span><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">errors</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="function-syntax">&lt;ST-&gt;</span><span class="identifier-syntax">size</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ST</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">symbol_array</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">];</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">S</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"Connector not deleted: %3\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">S</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">errors</span><span class="plain-syntax">++;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">errors</span><span class="plain-syntax"> &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"plugs and sockets mismanaged"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-cps.html#SP2">&#167;2</a>.</li></ul>
<ul class="endnotetexts"><li>The structure plug_inspection_state is private to this section.</li></ul>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b>Note that it is not necessarily an error to have a loose plug, that is, a plug
which does not connect to any socket. It is only an error if a symbol is trying
to connect to this plug. So we make a traverse of the tree to look for such symbols.
@ -191,18 +150,17 @@ we simplify just to <span class="extract"><span class="extract-syntax">S1 -&gt;
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ConnectPlugsStage::visitor</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">ConnectPlugsStage::visitor</span></span>:<br/><a href="4-cps.html#SP2_2">&#167;2.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">inter_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">v_state</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ShortenWiringStage::visitor</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">ShortenWiringStage::visitor</span></span>:<br/><a href="4-sws.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">inter_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">v_state</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">plug_inspection_state</span><span class="plain-syntax"> *</span><span class="identifier-syntax">state</span><span class="plain-syntax"> = (</span><span class="reserved-syntax">plug_inspection_state</span><span class="plain-syntax"> *) </span><span class="identifier-syntax">v_state</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_package</span><span class="plain-syntax"> *</span><span class="identifier-syntax">Q</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Inter::Package::defined_by_frame</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbols_table</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ST</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Inter::Packages::scope</span><span class="plain-syntax">(</span><span class="identifier-syntax">Q</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="function-syntax">&lt;ST-&gt;</span><span class="identifier-syntax">size</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ST</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">symbol_array</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">];</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax"> = </span><span class="identifier-syntax">S</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">while</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">E</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">equated_to</span><span class="plain-syntax">)) </span><span class="identifier-syntax">E</span><span class="plain-syntax"> = </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">equated_to</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">S</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">S</span><span class="plain-syntax"> != </span><span class="identifier-syntax">E</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">S</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">equated_to</span><span class="plain-syntax"> = </span><span class="identifier-syntax">E</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Inter::Connectors::is_loose_plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-cps.html#SP3_1" class="named-paragraph-link"><span class="named-paragraph">This is an error, because a loose plug has been used</span><span class="named-paragraph-number">3.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Wiring::cable_end</span><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">S</span><span class="plain-syntax"> != </span><span class="identifier-syntax">E</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Wiring::shorten_wiring</span><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Wiring::is_loose_plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-sws.html#SP3_1" class="named-paragraph-link"><span class="named-paragraph">This is an error, because a loose plug has been used</span><span class="named-paragraph-number">3.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
@ -211,15 +169,15 @@ we simplify just to <span class="extract"><span class="extract-syntax">S1 -&gt;
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">N</span><span class="plain-syntax"> = </span><span class="identifier-syntax">S</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">equated_to</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">equated_name</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">N</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Wiring::plug_name</span><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Dictionaries::find</span><span class="plain-syntax">(</span><span class="identifier-syntax">state</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">bad_plugs</span><span class="plain-syntax">, </span><span class="identifier-syntax">N</span><span class="plain-syntax">) == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Dictionaries::create</span><span class="plain-syntax">(</span><span class="identifier-syntax">state</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">bad_plugs</span><span class="plain-syntax">, </span><span class="identifier-syntax">N</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ADD_TO_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">N</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax">, </span><span class="identifier-syntax">state</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">bad_plug_names</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-cps.html#SP3">&#167;3</a>.</li></ul>
<ul class="endnotetexts"><li>This code is used in <a href="4-sws.html#SP3">&#167;3</a>.</li></ul>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="4-lbks.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-pm.html">1</a></li><li class="progresschapter"><a href="2-pp.html">2</a></li><li class="progresschapter"><a href="3-ps.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresssection"><a href="4-lbks.html">lbks</a></li><li class="progresscurrent">cps</li><li class="progresssection"><a href="4-dics.html">dics</a></li><li class="progresssection"><a href="4-mius.html">mius</a></li><li class="progresssection"><a href="4-rvs.html">rvs</a></li><li class="progresschapter"><a href="5-msms.html">5</a></li><li class="progresschapter"><a href="6-erms.html">6</a></li><li class="progressnext"><a href="4-dics.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="4-lbks.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-pm.html">1</a></li><li class="progresschapter"><a href="2-pp.html">2</a></li><li class="progresschapter"><a href="3-ps.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresssection"><a href="4-lbks.html">lbks</a></li><li class="progresscurrent">sws</li><li class="progresssection"><a href="4-dics.html">dics</a></li><li class="progresssection"><a href="4-mius.html">mius</a></li><li class="progresssection"><a href="4-rvs.html">rvs</a></li><li class="progresschapter"><a href="5-msms.html">5</a></li><li class="progresschapter"><a href="6-erms.html">6</a></li><li class="progressnext"><a href="4-dics.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -163,7 +163,7 @@ in <span class="extract"><span class="extract-syntax">texts</span></span>.
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ref_s</span><span class="plain-syntax"> = </span><a href="5-su.html#SP3" class="function-link"><span class="function-syntax">Synoptic::new_symbol</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pack</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"ref_to_text"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">InterSymbolsTables::equate</span><span class="plain-syntax">(</span><span class="identifier-syntax">ref_s</span><span class="plain-syntax">, </span><span class="identifier-syntax">latest_s</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Wiring::wire_to</span><span class="plain-syntax">(</span><span class="identifier-syntax">ref_s</span><span class="plain-syntax">, </span><span class="identifier-syntax">latest_s</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">val1</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">val2</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Inter::Symbols::to_data</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">Inter::Packages::container</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">), </span><span class="identifier-syntax">ref_s</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">val1</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">val2</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">P</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">W</span><span class="plain-syntax">.</span><span class="identifier-syntax">data</span><span class="plain-syntax">[</span><span class="identifier-syntax">FORMAT_CONST_IFLD</span><span class="plain-syntax">] = </span><span class="identifier-syntax">CONSTANT_DIRECT</span><span class="plain-syntax">;</span>

View file

@ -102,6 +102,8 @@ function togglePopup(material_id) {
<span class="plain-syntax"> </span><a href="5-uo.html#SP1" class="function-link"><span class="function-syntax">SynopticUseOptions::compile</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">step</span><span class="plain-syntax">, </span><span class="identifier-syntax">inv</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="5-vrb.html#SP1" class="function-link"><span class="function-syntax">SynopticVerbs::compile</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">step</span><span class="plain-syntax">, </span><span class="identifier-syntax">inv</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="5-tst.html#SP1" class="function-link"><span class="function-syntax">SynopticTests::compile</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">step</span><span class="plain-syntax">, </span><span class="identifier-syntax">inv</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Wiring::connect_plugs_to_sockets</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>

View file

@ -101,13 +101,13 @@
<span class="plain-syntax"> </span><span class="identifier-syntax">HierarchyLocations::ctr</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">id</span><span class="plain-syntax">, </span><span class="identifier-syntax">n</span><span class="plain-syntax">, </span><span class="identifier-syntax">Translation::same</span><span class="plain-syntax">(), </span><span class="identifier-syntax">req</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">iname</span><span class="plain-syntax"> = </span><span class="identifier-syntax">HierarchyLocations::find</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">id</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax"> = </span><span class="identifier-syntax">InterNames::to_symbol</span><span class="plain-syntax">(</span><span class="identifier-syntax">iname</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Inter::Connectors::socket</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">InterNames::to_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">iname</span><span class="plain-syntax">), </span><span class="identifier-syntax">S</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Wiring::socket</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">InterNames::to_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">iname</span><span class="plain-syntax">), </span><span class="identifier-syntax">S</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="definition-keyword">define</span> <span class="identifier-syntax">SYN_FUNCT</span><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">, </span><span class="identifier-syntax">n</span><span class="plain-syntax">, </span><span class="identifier-syntax">t</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HierarchyLocations::fun</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">id</span><span class="plain-syntax">, </span><span class="identifier-syntax">n</span><span class="plain-syntax">, </span><span class="identifier-syntax">Translation::to</span><span class="plain-syntax">(</span><span class="identifier-syntax">t</span><span class="plain-syntax">), </span><span class="identifier-syntax">req</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">iname</span><span class="plain-syntax"> = </span><span class="identifier-syntax">HierarchyLocations::find</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">id</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax"> = </span><span class="identifier-syntax">InterNames::to_symbol</span><span class="plain-syntax">(</span><span class="identifier-syntax">iname</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Inter::Connectors::socket</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">Produce::get_translation</span><span class="plain-syntax">(</span><span class="identifier-syntax">iname</span><span class="plain-syntax">), </span><span class="identifier-syntax">S</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Wiring::socket</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">Produce::get_translation</span><span class="plain-syntax">(</span><span class="identifier-syntax">iname</span><span class="plain-syntax">), </span><span class="identifier-syntax">S</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="definition-keyword">define</span> <span class="identifier-syntax">KIT_PROVIDED</span><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">, </span><span class="identifier-syntax">n</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HierarchyLocations::ctr</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">id</span><span class="plain-syntax">, </span><span class="identifier-syntax">n</span><span class="plain-syntax">, </span><span class="identifier-syntax">Translation::same</span><span class="plain-syntax">(), </span><span class="identifier-syntax">req</span><span class="plain-syntax">);</span>

View file

@ -208,6 +208,15 @@ function togglePopup(material_id) {
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">P</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">W</span><span class="plain-syntax">.</span><span class="identifier-syntax">data</span><span class="plain-syntax">[</span><span class="identifier-syntax">ID_IFLD</span><span class="plain-syntax">] == </span><span class="identifier-syntax">PACKAGE_IST</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_package</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pack</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Inter::Package::defined_by_frame</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ptype</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Inter::Packages::type</span><span class="plain-syntax">(</span><span class="identifier-syntax">pack</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ptype</span><span class="plain-syntax"> == </span><span class="identifier-syntax">PackageTypes::get</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"_kind"</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"Inside $6:\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">pack</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbols_table</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ST</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Inter::Packages::scope</span><span class="plain-syntax">(</span><span class="identifier-syntax">pack</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="function-syntax">&lt;ST-&gt;</span><span class="identifier-syntax">size</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ST</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">symbol_array</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">];</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">S</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">S</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">wiring</span><span class="plain-syntax">.</span><span class="identifier-syntax">no_connections</span><span class="plain-syntax"> &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"I observe $3 (%d)\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="identifier-syntax">S</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">wiring</span><span class="plain-syntax">.</span><span class="identifier-syntax">no_connections</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">tree_inventory_item</span><span class="plain-syntax"> *</span><span class="identifier-syntax">item</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">item</span><span class="plain-syntax">, </span><span class="reserved-syntax">tree_inventory_item</span><span class="plain-syntax">, </span><span class="identifier-syntax">inv</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">items</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ptype</span><span class="plain-syntax"> == </span><span class="identifier-syntax">item</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">required_ptype</span><span class="plain-syntax">) {</span>
@ -347,7 +356,7 @@ function togglePopup(material_id) {
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Inode::extend</span><span class="plain-syntax">(</span><span class="identifier-syntax">synoptic_array_node</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"cannot extend"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_package</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pack</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Inter::Packages::container</span><span class="plain-syntax">(</span><span class="identifier-syntax">synoptic_array_node</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">local_S</span><span class="plain-syntax"> = </span><span class="identifier-syntax">InterSymbolsTables::create_with_unique_name</span><span class="plain-syntax">(</span><span class="identifier-syntax">Inter::Packages::scope</span><span class="plain-syntax">(</span><span class="identifier-syntax">pack</span><span class="plain-syntax">), </span><span class="identifier-syntax">S</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">symbol_name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">InterSymbolsTables::equate</span><span class="plain-syntax">(</span><span class="identifier-syntax">local_S</span><span class="plain-syntax">, </span><span class="identifier-syntax">S</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Wiring::wire_to</span><span class="plain-syntax">(</span><span class="identifier-syntax">local_S</span><span class="plain-syntax">, </span><span class="identifier-syntax">S</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">val1</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">val2</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Inter::Symbols::to_data</span><span class="plain-syntax">(</span><span class="identifier-syntax">Inter::Packages::tree</span><span class="plain-syntax">(</span><span class="identifier-syntax">pack</span><span class="plain-syntax">), </span><span class="identifier-syntax">pack</span><span class="plain-syntax">, </span><span class="identifier-syntax">local_S</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">val1</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">val2</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">synoptic_array_node</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">W</span><span class="plain-syntax">.</span><span class="identifier-syntax">data</span><span class="plain-syntax">[</span><span class="identifier-syntax">synoptic_array_node</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">W</span><span class="plain-syntax">.</span><span class="identifier-syntax">extent</span><span class="plain-syntax">-2] = </span><span class="identifier-syntax">ALIAS_IVAL</span><span class="plain-syntax">;</span>

View file

@ -173,10 +173,9 @@ be included.
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbols_table</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tab</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Inter::Packages::scope</span><span class="plain-syntax">(</span><span class="identifier-syntax">pack</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="function-syntax">&lt;tab-&gt;</span><span class="identifier-syntax">size</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">symb</span><span class="plain-syntax"> = </span><span class="identifier-syntax">tab</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">symbol_array</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">];</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">symb</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">symb</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">equated_to</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">to</span><span class="plain-syntax"> = </span><span class="identifier-syntax">symb</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">while</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">to</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">to</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">equated_to</span><span class="plain-syntax">)) </span><span class="identifier-syntax">to</span><span class="plain-syntax"> = </span><span class="identifier-syntax">to</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">equated_to</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_package</span><span class="plain-syntax"> *</span><span class="identifier-syntax">needed</span><span class="plain-syntax"> = </span><span class="identifier-syntax">to</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">owning_table</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">owning_package</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Wiring::is_wired</span><span class="plain-syntax">(</span><span class="identifier-syntax">symb</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">E</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Wiring::cable_end</span><span class="plain-syntax">(</span><span class="identifier-syntax">symb</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_package</span><span class="plain-syntax"> *</span><span class="identifier-syntax">needed</span><span class="plain-syntax"> = </span><span class="identifier-syntax">E</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">owning_table</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">owning_package</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="6-erms.html#SP3" class="function-link"><span class="function-syntax">EliminateRedundantMatterStage::preserve</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">needed</span><span class="plain-syntax">, </span><span class="identifier-syntax">step</span><span class="plain-syntax">, </span><span class="identifier-syntax">pack</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"it's an external symbol"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>

View file

@ -147,9 +147,9 @@
<span class="sectionpurpose">Reading other Inter trees as binary files, and attaching them at given points in the main Inter tree.</span></p>
</li>
<li>
<p class="sectionentry"><a href="4-cps.html">
<spon class="sectiontitle">Connect Plugs Stage</span></a> -
<span class="sectionpurpose">To reconcile symbol references made across compilation unit boundaries.</span></p>
<p class="sectionentry"><a href="4-sws.html">
<spon class="sectiontitle">Shorten Wiring Stage</span></a> -
<span class="sectionpurpose">To catch missing resources with suitable errors, to remove plugs and sockets as no longer necessary, and to shorten wiring as much as possible.</span></p>
</li>
<li>
<p class="sectionentry"><a href="4-dics.html">

View file

@ -180,7 +180,7 @@ what package it belongs to, the "context" referred to below:
</pre>
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. Kinds. </b>Inter has a very simple, and non-binding, system of "kinds" &mdash; a much simpler
one than Inform. We need symbols to refer to some basic Inter kinds, and here
they are. (See also <a href="../pipeline-module/3-ns.html" class="internal">New Stage (in pipeline)</a>, where a matching set is made for
they are. (See also <a href="../pipeline-module/2-ns.html" class="internal">New Stage (in pipeline)</a>, where a matching set is made for
other Inter business: we want to keep this minimum set matching.)
</p>

View file

@ -2321,7 +2321,7 @@ available", using the following, which creates a socket. Again, see
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">ma_as</span><span class="plain-syntax">) == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">ma_as</span><span class="plain-syntax"> = </span><span class="identifier-syntax">InterNames::to_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">iname</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PackageTypes::get</span><span class="plain-syntax">(</span><a href="2-emt.html#SP1" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">I</span><span class="string-syntax">"_linkage"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax"> = </span><span class="identifier-syntax">InterNames::to_symbol</span><span class="plain-syntax">(</span><span class="identifier-syntax">iname</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Inter::Connectors::socket</span><span class="plain-syntax">(</span><a href="2-emt.html#SP1" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">ma_as</span><span class="plain-syntax">, </span><span class="identifier-syntax">S</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Wiring::socket</span><span class="plain-syntax">(</span><a href="2-emt.html#SP1" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">ma_as</span><span class="plain-syntax">, </span><span class="identifier-syntax">S</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP18" class="paragraph-anchor"></a><b>&#167;18. Adding packages at attachment points. </b>Consider the following example piece of declaration:

View file

@ -153,7 +153,7 @@ source text, and nothing else.
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. Making literals. </b>This was once a rather elegantly complicated algorithm involving searches on
a red-black tree in order to compile the texts in alphabetical order, but in
April 2021 that was replaced by an Inter pipeline stage which collates the text
much later in the process. See <a href="../pipeline-module/4-lt.html" class="internal">Literal Text (in pipeline)</a>.
much later in the process. See <a href="../pipeline-module/5-lt.html" class="internal">Literal Text (in pipeline)</a>.
</p>
<pre class="displayed-code all-displayed-code code-font">

View file

@ -384,7 +384,7 @@ taken something" would be a past tense condition: see above.)
<ul class="endnotetexts"><li>This code is used in <a href="5-chr.html#SP7">&#167;7</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP7_2" class="paragraph-anchor"></a><b>&#167;7.2. </b>The test compiled here relies entirely on a slew of arrays being correctly
maintained. Those arrays are all managed by code compiled in linking (see
<a href="../pipeline-module/4-chr.html" class="internal">Chronology (in pipeline)</a>, code which has regularly been calling our own AHC
<a href="../pipeline-module/5-chr.html" class="internal">Chronology (in pipeline)</a>, code which has regularly been calling our own AHC
function throughout play.
</p>

View file

@ -431,7 +431,7 @@ compiled code, of course.
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">nlv</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">compilation_data</span><span class="plain-syntax">.</span><span class="element-syntax">lvalue_nve</span><span class="plain-syntax">.</span><span class="element-syntax">iname_form</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax"> = </span><span class="identifier-syntax">InterNames::to_symbol</span><span class="plain-syntax">(</span><span class="identifier-syntax">iname</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">H</span><span class="plain-syntax"> = </span><span class="identifier-syntax">InterNames::to_symbol</span><span class="plain-syntax">(</span><span class="identifier-syntax">nlv</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">compilation_data</span><span class="plain-syntax">.</span><span class="element-syntax">lvalue_nve</span><span class="plain-syntax">.</span><span class="element-syntax">iname_form</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">InterSymbolsTables::equate</span><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="identifier-syntax">H</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Wiring::wire_to</span><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="identifier-syntax">H</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-hrr.html#SP23" class="function-link"><span class="function-syntax">Hierarchy::apply_metadata_from_iname</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pack</span><span class="plain-syntax">, </span><span class="constant-syntax">VARIABLE_COUNTERPART_MD_HL</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">nlv</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">compilation_data</span><span class="plain-syntax">.</span><span class="element-syntax">lvalue_nve</span><span class="plain-syntax">.</span><span class="element-syntax">iname_form</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>

View file

@ -1,13 +1,13 @@
Total memory consumption was 400875K = 391 MB
Total memory consumption was 403231K = 394 MB
61.0% was used for 2026336 objects, in 380039 frames in 306 x 800K = 244800K = 239 MB:
61.3% was used for 2026336 objects, in 380039 frames in 309 x 800K = 247200K = 241 MB:
10.1% inter_tree_node_array 58 x 8192 = 475136 objects, 41813824 bytes
7.2% text_stream_array 5299 x 100 = 529900 objects, 29843968 bytes
4.7% linked_list 34785 objects, 19479600 bytes
3.9% inter_symbol_array 140 x 1024 = 143360 objects, 16060800 bytes
4.1% inter_symbol_array 140 x 1024 = 143360 objects, 17207680 bytes
2.5% parse_node 129462 objects, 10356960 bytes
1.8% verb_conjugation 160 objects, 7425280 bytes
1.7% verb_conjugation 160 objects, 7425280 bytes
1.3% parse_node_annotation_array 345 x 500 = 172500 objects, 5531040 bytes
0.8% pcalc_prop_array 25 x 1000 = 25000 objects, 3400800 bytes
0.8% inter_name_array 69 x 1000 = 69000 objects, 3314208 bytes
@ -235,9 +235,9 @@ Total memory consumption was 400875K = 391 MB
---- by_function_bp_data 1 object, 40 bytes
---- kind_template_definition 1 object, 40 bytes
38.9% was used for memory not allocated for objects:
38.6% was used for memory not allocated for objects:
20.3% text stream storage 83581616 bytes in 547918 claims
20.2% text stream storage 83536636 bytes in 547918 claims
4.4% dictionary storage 18457600 bytes in 33309 claims
---- sorting 736 bytes in 3 claims
1.7% source text 7200000 bytes in 3 claims
@ -255,5 +255,5 @@ Total memory consumption was 400875K = 391 MB
---- code generation workspace for objects 1336 bytes in 4 claims
---- emitter array storage 161792 bytes in 2062 claims
18.7% was overhead - 77002168 bytes = 75197K = 73 MB
18.9% was overhead - 78312888 bytes = 76477K = 74 MB

View file

@ -1,11 +1,11 @@
100.0% in inform7 run
57.4% in compilation to Inter
41.3% in //Sequence::undertake_queued_tasks//
3.5% in //MajorNodes::pre_pass//
56.8% in compilation to Inter
41.1% in //Sequence::undertake_queued_tasks//
3.6% in //MajorNodes::pre_pass//
2.6% in //MajorNodes::pass_1//
2.1% in //RTPhrasebook::compile_entries//
1.3% in //ImperativeDefinitions::assess_all//
1.2% in //RTKindConstructors::compile//
2.2% in //RTPhrasebook::compile_entries//
1.4% in //ImperativeDefinitions::assess_all//
1.1% in //RTKindConstructors::compile//
0.4% in //MajorNodes::pass_2//
0.4% in //Sequence::undertake_queued_tasks//
0.4% in //World::stage_V//
@ -15,20 +15,19 @@
0.1% in //InferenceSubjects::emit_all//
0.1% in //RTKindConstructors::compile_permissions//
0.1% in //Task::make_built_in_kind_constructors//
0.1% in //World::stages_II_and_III//
2.3% not specifically accounted for
40.5% in running Inter pipeline
10.6% in step preparation
10.0% in inter step 7/14: make-synoptic-module
8.2% in inter step 5/14: load-binary-kits
6.9% in inter step 14/14: generate inform6 -> auto.inf
2.0% not specifically accounted for
41.1% in running Inter pipeline
11.0% in step preparation
10.3% in inter step 6/14: make-synoptic-module
8.1% in inter step 5/14: load-binary-kits
7.0% in inter step 14/14: generate inform6 -> auto.inf
1.5% in inter step 10/14: make-identifiers-unique
0.3% in inter step 13/14: eliminate-redundant-operations
0.3% in inter step 4/14: compile-splats
0.3% in inter step 8/14: connect-plugs
0.3% in inter step 7/14: shorten-wiring
0.1% in inter step 11/14: reconcile-verbs
0.1% in inter step 12/14: eliminate-redundant-labels
0.1% in inter step 9/14: detect-indirect-calls
1.7% not specifically accounted for
1.5% not specifically accounted for
1.7% in supervisor
0.4% not specifically accounted for

View file

@ -1,7 +1,7 @@
load-binary-kits
optionally-generate text -> *tout
make-synoptic-module
connect-plugs
shorten-wiring
optionally-generate text -> *tout
detect-indirect-calls
make-identifiers-unique
reconcile-verbs

File diff suppressed because one or more lines are too long

View file

@ -2122,7 +2122,7 @@ void Hierarchy::make_available(inter_name *iname) {
if (Str::len(ma_as) == 0) ma_as = InterNames::to_text(iname);
PackageTypes::get(Emit::tree(), I"_linkage");
inter_symbol *S = InterNames::to_symbol(iname);
Inter::Connectors::socket(Emit::tree(), ma_as, S);
Wiring::socket(Emit::tree(), ma_as, S);
}
@h Adding packages at attachment points.

View file

@ -339,7 +339,7 @@ int RTVariables::compile(inference_subject_family *f, int ignored) {
if (nlv->compilation_data.lvalue_nve.iname_form) {
inter_symbol *S = InterNames::to_symbol(iname);
inter_symbol *H = InterNames::to_symbol(nlv->compilation_data.lvalue_nve.iname_form);
InterSymbolsTables::equate(S, H);
Wiring::wire_to(S, H);
Hierarchy::apply_metadata_from_iname(pack, VARIABLE_COUNTERPART_MD_HL,
nlv->compilation_data.lvalue_nve.iname_form);
}

View file

@ -150,8 +150,8 @@ inter_name *InterNames::explicitly_named(text_stream *name, package_request *R)
inter_name *InterNames::explicitly_named_in_template(inter_tree *I, text_stream *name) {
inter_name *iname = InterNames::explicitly_named(name, Site::connectors_request(I));
inter_symbol *plug = Inter::Connectors::find_plug(I, name);
if (plug == NULL) plug = Inter::Connectors::plug(I, name);
inter_symbol *plug = Wiring::find_plug(I, name);
if (plug == NULL) plug = Wiring::plug(I, name);
iname->symbol = plug;
return iname;
}

View file

@ -86,7 +86,7 @@ int EmitInterSchemas::process_conditionals(inter_tree *I, inter_schema_node *isn
inter_symbol *symb = EmitInterSchemas::find_identifier_text(I, symbol_to_check,
Inter::Packages::scope(Packaging::incarnate(Site::veneer_request(I))),
second_call);
while ((symb) && (symb->equated_to)) symb = symb->equated_to;
symb = Wiring::cable_end(symb);
LOGIF(SCHEMA_COMPILATION, "Symb is $3\n", symb);
if (Inter::Symbols::is_defined(symb)) {
def = TRUE;

View file

@ -1,31 +1,123 @@
[Inter::Connectors::] Connectors.
[Wiring::] Connectors.
To manage link symbols.
@ =
typedef struct wiring_data {
struct inter_symbol *connects_to;
struct text_stream *wants_to_connect_to;
int no_connections;
} wiring_data;
wiring_data Wiring::new_wiring_data(inter_symbol *S) {
wiring_data wd;
wd.connects_to = NULL;
wd.wants_to_connect_to = NULL;
wd.no_connections = 0;
return wd;
}
inter_symbol *Wiring::cable_end(inter_symbol *S) {
while ((S) && (S->wiring.connects_to)) S = S->wiring.connects_to;
return S;
}
inter_symbol *Wiring::wired_to(inter_symbol *S) {
if (S) return S->wiring.connects_to;
return NULL;
}
int Wiring::has_no_incoming_connections(inter_symbol *S) {
if ((S) && (S->wiring.no_connections == 0)) return TRUE;
return FALSE;
}
int Wiring::is_wired(inter_symbol *S) {
if (Wiring::wired_to(S)) return TRUE;
return FALSE;
}
void Wiring::wire_to(inter_symbol *S, inter_symbol *T) {
if (S == NULL) internal_error("null symbol cannot be wired");
if ((S->metadata_key) || ((T) && (T->metadata_key)))
internal_error("metadata keys cannot be wired");
if (S->wiring.connects_to == T) return;
if (S->wiring.connects_to) S->wiring.connects_to->wiring.no_connections--;
S->wiring.connects_to = T;
S->wiring.wants_to_connect_to = NULL;
if (T) T->wiring.no_connections++;
if ((Inter::Symbols::get_scope(S) != SOCKET_ISYMS) &&
(Inter::Symbols::get_scope(S) != PLUG_ISYMS))
Inter::Symbols::set_scope(S, EXTERNAL_ISYMS);
LOGIF(INTER_SYMBOLS, "Wired $3 to $3\n", S, T);
int c = 0;
for (inter_symbol *W = S; W; W = W->wiring.connects_to, c++)
if (c == 100) {
c = 0;
for (inter_symbol *W = S; ((W) && (c < 20)); W = W->wiring.connects_to, c++)
LOG("%d. %S\n", c, W->symbol_name);
LOG("...");
internal_error("probably made a circuit in wiring");
}
}
void Wiring::wire_to_name(inter_symbol *S, text_stream *T) {
if (S == NULL) internal_error("null symbol cannot be wired");
if (S->metadata_key) internal_error("metadata keys cannot be wired");
if (Str::len(T) == 0) internal_error("symbols cannot be wired to the empty name");
Wiring::wire_to(S, NULL);
S->wiring.wants_to_connect_to = Str::duplicate(T);
}
int Wiring::is_wired_to_name(inter_symbol *S) {
if ((S) && (Str::len(S->wiring.wants_to_connect_to) > 0)) return TRUE;
return FALSE;
}
text_stream *Wiring::wired_to_name(inter_symbol *S) {
if (S) return S->wiring.wants_to_connect_to;
return NULL;
}
void Wiring::shorten_wiring(inter_symbol *S) {
inter_symbol *E = Wiring::cable_end(S);
if ((S != E) && (Wiring::wired_to(S) != E)) Wiring::wire_to(S, E);
}
void Wiring::convert_to_plug(inter_symbol *S, text_stream *wanted) {
Wiring::wire_to_name(S, wanted);
Inter::Symbols::set_scope(S, PLUG_ISYMS);
Inter::Symbols::set_type(S, MISC_ISYMT);
}
void Wiring::convert_to_socket(inter_symbol *S, inter_symbol *to) {
Wiring::wire_to(S, to);
Inter::Symbols::set_scope(S, SOCKET_ISYMS);
}
int unique_plug_number = 1;
inter_symbol *Inter::Connectors::plug(inter_tree *I, text_stream *wanted) {
inter_package *connectors = Inter::Connectors::connectors_package(I);
inter_symbol *Wiring::plug(inter_tree *I, text_stream *wanted) {
inter_package *connectors = Wiring::connectors_package(I);
TEMPORARY_TEXT(PN)
WRITE_TO(PN, "plug_%05d", unique_plug_number++);
inter_symbol *plug = InterSymbolsTables::create_with_unique_name(
Inter::Packages::scope(connectors), PN);
DISCARD_TEXT(PN)
InterSymbolsTables::make_plug(plug, wanted);
LOGIF(INTER_CONNECTORS, "Plug I%d: $3 seeking %S\n", I->allocation_id, plug, plug->equated_name);
Wiring::convert_to_plug(plug, wanted);
LOGIF(INTER_CONNECTORS, "Plug I%d: $3 seeking %S\n", I->allocation_id, plug, Wiring::plug_name(plug));
return plug;
}
inter_symbol *Inter::Connectors::socket(inter_tree *I, text_stream *socket_name, inter_symbol *wired_from) {
inter_package *connectors = Inter::Connectors::connectors_package(I);
inter_symbol *Wiring::socket(inter_tree *I, text_stream *socket_name, inter_symbol *to) {
inter_package *connectors = Wiring::connectors_package(I);
inter_symbol *socket = InterSymbolsTables::create_with_unique_name(
Inter::Packages::scope(connectors), socket_name);
InterSymbolsTables::make_socket(socket, wired_from);
LOGIF(INTER_CONNECTORS, "Socket I%d: $3 wired to $3\n", I->allocation_id, socket, wired_from);
Wiring::convert_to_socket(socket, to);
LOGIF(INTER_CONNECTORS, "Socket I%d: $3 wired to $3\n", I->allocation_id, socket, to);
return socket;
}
inter_package *Inter::Connectors::connectors_package(inter_tree *I) {
inter_package *Wiring::connectors_package(inter_tree *I) {
if (I == NULL) internal_error("no tree for connectors");
inter_package *connectors = Site::connectors_package(I);
if (connectors == NULL) {
@ -36,7 +128,7 @@ inter_package *Inter::Connectors::connectors_package(inter_tree *I) {
return connectors;
}
inter_symbol *Inter::Connectors::find_socket(inter_tree *I, text_stream *identifier) {
inter_symbol *Wiring::find_socket(inter_tree *I, text_stream *identifier) {
inter_package *connectors = Site::connectors_package(I);
if (connectors) {
inter_symbol *S = InterSymbolsTables::symbol_from_name_not_equating(
@ -46,7 +138,7 @@ inter_symbol *Inter::Connectors::find_socket(inter_tree *I, text_stream *identif
return NULL;
}
inter_symbol *Inter::Connectors::find_plug(inter_tree *I, text_stream *identifier) {
inter_symbol *Wiring::find_plug(inter_tree *I, text_stream *identifier) {
inter_package *connectors = Site::connectors_package(I);
if (connectors) {
inter_symbol *S = InterSymbolsTables::symbol_from_name_not_equating(
@ -56,30 +148,76 @@ inter_symbol *Inter::Connectors::find_plug(inter_tree *I, text_stream *identifie
return NULL;
}
void Inter::Connectors::wire_plug(inter_symbol *plug, inter_symbol *to) {
void Wiring::wire_plug(inter_symbol *plug, inter_symbol *to) {
if (plug == NULL) internal_error("no plug");
LOGIF(INTER_CONNECTORS, "Plug $3 wired to $3\n", plug, to);
InterSymbolsTables::equate(plug, to);
plug->equated_name = NULL;
Wiring::wire_to(plug, to);
}
int Inter::Connectors::is_plug(inter_symbol *S) {
int Wiring::is_plug(inter_symbol *S) {
if ((S) && (Inter::Symbols::get_scope(S) == PLUG_ISYMS)) return TRUE;
return FALSE;
}
int Inter::Connectors::is_socket(inter_symbol *S) {
@ See //bytecode: Connectors// for more, but consider this example:
= (text as Inform 7)
To call the kit: (- ExampleKitFunction(); -).
To begin:
call the kit.
=
The //inform7// compiler makes a main source tree out of this. It doesn't have
a definition of |ExampleKitFunction|; that's defined in, say, |HypotheticalKit|,
which is being linked in after compilation. Indeed, the compiler has no way
even to know where in the package hierarchy of the Inter tree for |HypotheticalKit|
this function will be. What to do?
What it does is to create a symbol |S| representing the function which equates like so:
= (text)
main
source_text
S (regular symbol) -> main
connectors
ExampleKitFunction (plug symbol)
=
Once the Inter code for the kit has been loaded, we also find symbols:
= (text)
main
connectors
ExampleKitFunction (socket symbol) -> main
HypotheticalKit
...
ExampleKitFunction (regular symbol)
=
So now we must connect the plug to the socket. |S| will then connect through to
the actual definition, and all will be well.
=
void Wiring::connect_plugs_to_sockets(inter_tree *I) {
inter_package *connectors = Site::connectors_package(I);
if (connectors) {
inter_symbols_table *ST = Inter::Packages::scope(connectors);
for (int i=0; i<ST->size; i++) {
inter_symbol *S = ST->symbol_array[i];
if (Wiring::is_loose_plug(S)) {
inter_symbol *socket = Wiring::find_socket(I, Wiring::plug_name(S));
if (socket) Wiring::wire_plug(S, socket);
}
}
}
}
int Wiring::is_socket(inter_symbol *S) {
if ((S) && (Inter::Symbols::get_scope(S) == SOCKET_ISYMS)) return TRUE;
return FALSE;
}
int Inter::Connectors::is_loose_plug(inter_symbol *S) {
if ((S) && (Inter::Symbols::get_scope(S) == PLUG_ISYMS) && (S->equated_to == NULL))
return TRUE;
int Wiring::is_loose_plug(inter_symbol *S) {
if ((Wiring::is_plug(S)) && (Wiring::is_wired(S) == FALSE)) return TRUE;
return FALSE;
}
text_stream *Inter::Connectors::plug_name(inter_symbol *S) {
if (Inter::Connectors::is_loose_plug(S)) return S->equated_name;
text_stream *Wiring::plug_name(inter_symbol *S) {
if (Wiring::is_loose_plug(S)) return Wiring::wired_to_name(S);
return NULL;
}

View file

@ -82,9 +82,7 @@ inter_symbol *InterSymbolsTables::search_inner(inter_symbols_table *T, text_stre
for (int i=0; i<T->size; i++) {
inter_symbol *A = T->symbol_array[i];
if ((A) && (Str::eq(S, A->symbol_name))) {
if (equating) {
while (A->equated_to) A = A->equated_to;
}
if (equating) A = Wiring::cable_end(A);
return A;
}
}
@ -93,9 +91,7 @@ inter_symbol *InterSymbolsTables::search_inner(inter_symbols_table *T, text_stre
if (de) {
inter_symbol *A = (inter_symbol *) Dictionaries::read_value(T->symbols_lookup, S);
if (A) {
if (equating) {
while (A->equated_to) A = A->equated_to;
}
if (equating) A = Wiring::cable_end(A);
return A;
}
}
@ -226,8 +222,7 @@ inter_symbol *InterSymbolsTables::unequated_symbol_from_id(inter_symbols_table *
inter_symbol *InterSymbolsTables::symbol_from_id(inter_symbols_table *T, inter_ti ID) {
inter_symbol *S = InterSymbolsTables::unequated_symbol_from_id(T, ID);
while ((S) && (S->equated_to)) S = S->equated_to;
return S;
return Wiring::cable_end(S);
}
@ It's convenient to have some abbreviations for common ways to access the above.
@ -300,16 +295,16 @@ inter_ti InterSymbolsTables::id_from_symbol_inner(inter_symbols_table *G, inter_
internal_error("attempted to equate to global");
}
for (int i=0; i<T->size; i++)
if ((T->symbol_array[i]) && (T->symbol_array[i]->equated_to == S))
if (Wiring::wired_to(T->symbol_array[i]) == S)
return (inter_ti) T->symbol_array[i]->symbol_ID;
text_stream *N = InterSymbolsTables::render_identifier_unique(T, S->symbol_name);
inter_symbol *X = InterSymbolsTables::search_inner(T, N, TRUE, 0, FALSE);
if (X->equated_to == NULL) {
InterSymbolsTables::equate(X, S);
if (Wiring::is_wired(X) == FALSE) {
Wiring::wire_to(X, S);
LOGIF(INTER_SYMBOLS, "Equating $3 to new $3\n", S, X);
}
if (X->equated_to != S) {
LOG("Want ID for $3 but there's already $3 locally which equates to $3\n", S, X, X->equated_to);
if (Wiring::wired_to(X) != S) {
LOG("Want ID for $3 but there's already $3 locally which is wired to $3\n", S, X, Wiring::wired_to(X));
internal_error("external symbol clash");
}
return X->symbol_ID;
@ -332,47 +327,6 @@ inter_ti InterSymbolsTables::id_from_IRS_and_symbol(inter_bookmark *IBM, inter_s
@h Equations.
=
void InterSymbolsTables::equate(inter_symbol *S_from, inter_symbol *S_to) {
if ((S_from == NULL) || (S_to == NULL))
internal_error("bad symbol equation");
if ((S_from->metadata_key) || (S_to->metadata_key))
internal_error("metadata keys cannot equate");
S_from->equated_to = S_to;
if ((Inter::Symbols::get_scope(S_from) != SOCKET_ISYMS) &&
(Inter::Symbols::get_scope(S_from) != PLUG_ISYMS))
Inter::Symbols::set_scope(S_from, EXTERNAL_ISYMS);
LOGIF(INTER_SYMBOLS, "Equate $3 to $3\n", S_from, S_to);
int c = 0;
for (inter_symbol *S = S_from; S; S = S->equated_to, c++)
if (c == 20) {
c = 0;
for (inter_symbol *S = S_from; c < 20; S = S->equated_to, c++)
LOG("%d. %S\n", c, S->symbol_name);
internal_error("probably circular symbol equation");
}
}
void InterSymbolsTables::equate_textual(inter_symbol *S_from, text_stream *name) {
if ((S_from == NULL) || (name == NULL)) internal_error("bad symbol equation");
S_from->equated_to = NULL;
S_from->equated_name = Str::duplicate(name);
Inter::Symbols::set_scope(S_from, EXTERNAL_ISYMS);
}
void InterSymbolsTables::make_plug(inter_symbol *S_from, text_stream *wanted) {
if ((S_from == NULL) || (wanted == NULL)) internal_error("bad link equation");
S_from->equated_to = NULL;
S_from->equated_name = Str::duplicate(wanted);
Inter::Symbols::set_scope(S_from, PLUG_ISYMS);
Inter::Symbols::set_type(S_from, MISC_ISYMT);
}
void InterSymbolsTables::make_socket(inter_symbol *S_from, inter_symbol *wired_from) {
if (S_from == NULL) internal_error("bad link equation");
S_from->equated_to = wired_from;
Inter::Symbols::set_scope(S_from, SOCKET_ISYMS);
}
void InterSymbolsTables::resolve_forward_references(inter_tree *I, inter_error_location *eloc) {
InterTree::traverse(I, InterSymbolsTables::rfr_visitor, eloc, NULL, PACKAGE_IST);
}
@ -385,14 +339,14 @@ void InterSymbolsTables::rfr_visitor(inter_tree *I, inter_tree_node *P, void *st
if (T == NULL) internal_error("package with no symbols");
for (int i=0; i<T->size; i++) {
inter_symbol *symb = T->symbol_array[i];
if ((symb) && (symb->equated_name)) {
if (Wiring::is_wired_to_name(symb)) {
text_stream *N = Wiring::wired_to_name(symb);
if (Inter::Symbols::get_scope(symb) == PLUG_ISYMS) continue;
inter_symbol *S_to = InterSymbolsTables::url_name_to_symbol(Inter::Packages::tree(pack), T, symb->equated_name);
if (S_to == NULL) Inter::Errors::issue(Inter::Errors::quoted(I"unable to locate symbol", symb->equated_name, eloc));
inter_symbol *S_to = InterSymbolsTables::url_name_to_symbol(Inter::Packages::tree(pack), T, N);
if (S_to == NULL) Inter::Errors::issue(Inter::Errors::quoted(I"unable to locate symbol", N, eloc));
else if (Inter::Symbols::get_scope(symb) == SOCKET_ISYMS)
InterSymbolsTables::make_socket(symb, S_to);
else InterSymbolsTables::equate(symb, S_to);
symb->equated_name = NULL;
Wiring::convert_to_socket(symb, S_to);
else Wiring::wire_to(symb, S_to);
}
}
}

View file

@ -10,8 +10,7 @@ typedef struct inter_symbol {
struct inter_symbols_table *owning_table;
struct text_stream *symbol_name;
struct inter_tree_node *definition;
struct inter_symbol *equated_to;
struct text_stream *equated_name;
struct wiring_data wiring;
int symbol_status;
struct inter_annotation_set ann_set;
struct text_stream *translate_text;
@ -34,8 +33,7 @@ inter_symbol *Inter::Symbols::new(text_stream *name, inter_symbols_table *T, int
symb->symbol_name = Str::duplicate(name);
Inter::Symbols::undefine(symb);
symb->ann_set = Inter::Annotations::new_set();
symb->equated_to = NULL;
symb->equated_name = NULL;
symb->wiring = Wiring::new_wiring_data(symb);
symb->translate_text = NULL;
symb->link_time = 0;
symb->linked_to = NULL;
@ -114,16 +112,15 @@ void Inter::Symbols::write_declaration(OUTPUT_STREAM, inter_symbol *mark, int N)
}
WRITE(" %S", mark->symbol_name);
if (Inter::Symbols::get_flag(mark, MAKE_NAME_UNIQUE)) WRITE("*");
if (Str::len(mark->equated_name) > 0) {
WRITE(" --? %S", mark->equated_name);
if (Wiring::is_wired_to_name(mark)) {
WRITE(" --? %S", Wiring::wired_to_name(mark));
}
text_stream *trans_name = Inter::Symbols::get_translate(mark);
if (Str::len(trans_name) > 0)
WRITE(" `%S`", trans_name);
inter_symbol *eq = mark->equated_to;
if (eq) {
if (Wiring::is_wired(mark)) {
WRITE(" --> ");
InterSymbolsTables::symbol_to_url_name(OUT, eq);
InterSymbolsTables::symbol_to_url_name(OUT, Wiring::wired_to(mark));
}
}
@ -195,6 +192,7 @@ void Inter::Symbols::strike_definition(inter_symbol *S) {
void Inter::Symbols::remove_from_table(inter_symbol *S) {
int index = (int) S->symbol_ID - (int) SYMBOL_BASE_VAL;
Wiring::wire_to(S, NULL);
S->owning_table->symbol_array[index] = NULL;
}

View file

@ -32,27 +32,25 @@ void Inter::Transmigration::move(inter_package *migrant, inter_package *destinat
for (int i=0; i<T->size; i++) {
inter_symbol *symb = T->symbol_array[i];
if ((symb) && (Inter::Symbols::get_scope(symb) == SOCKET_ISYMS)) {
inter_symbol *target = symb->equated_to;
while (target->equated_to) target = target->equated_to;
inter_symbol *target = Wiring::cable_end(symb);
inter_package *target_package = target->owning_table->owning_package;
while ((target_package) && (target_package != migrant)) {
target_package = Inter::Packages::parent(target_package);
}
if (target_package == migrant) {
LOGIF(INTER_CONNECTORS, "Origin offers socket inside migrant: $3 == $3\n", symb, target);
inter_symbol *equivalent = Inter::Connectors::find_socket(destination_tree, symb->symbol_name);
inter_symbol *equivalent = Wiring::find_socket(destination_tree, symb->symbol_name);
if (equivalent) {
inter_symbol *e_target = equivalent->equated_to;
while (e_target->equated_to) e_target = e_target->equated_to;
inter_symbol *e_target = Wiring::cable_end(equivalent);
if (!Inter::Symbols::is_defined(e_target)) {
LOGIF(INTER_CONNECTORS, "Able to match with $3 == $3\n", equivalent, equivalent->equated_to);
equivalent->equated_to = target;
e_target->equated_to = target;
LOGIF(INTER_CONNECTORS, "Able to match with $3 ~~> $3\n", equivalent, Wiring::cable_end(equivalent));
Wiring::wire_to(equivalent, target);
Wiring::wire_to(e_target, target);
} else {
LOGIF(INTER_CONNECTORS, "Clash of sockets\n");
}
} else {
Inter::Connectors::socket(destination_tree, symb->symbol_name, symb);
Wiring::socket(destination_tree, symb->symbol_name, symb);
}
}
}
@ -152,20 +150,21 @@ void Inter::Transmigration::correct_migrant(inter_tree *I, inter_tree_node *P, v
if (T == NULL) internal_error("package with no symbols");
for (int i=0; i<T->size; i++) {
inter_symbol *symb = T->symbol_array[i];
if ((symb) && (symb->equated_to)) {
inter_symbol *target = symb->equated_to;
while (target->equated_to) target = target->equated_to;
if (Wiring::is_wired(symb)) {
inter_symbol *target = Wiring::cable_end(symb);
if (Inter::Symbols::read_annotation(target, VENEER_IANN) > 0) {
symb->equated_to = Veneer::find(ipct->destination->package_head->tree, target->symbol_name, Produce::kind_to_symbol(NULL));
Wiring::wire_to(symb,
Veneer::find(ipct->destination->package_head->tree, target->symbol_name, Produce::kind_to_symbol(NULL)));
} else if (Inter::Symbols::get_scope(target) == PLUG_ISYMS) {
inter_symbol *equivalent = Inter::Transmigration::cached_equivalent(target);
if (equivalent == NULL) {
equivalent = Inter::Connectors::find_plug(ipct->destination->package_head->tree, target->equated_name);
text_stream *N = Wiring::wired_to_name(target);
equivalent = Wiring::find_plug(ipct->destination->package_head->tree, N);
if (equivalent == NULL)
equivalent = Inter::Connectors::plug(ipct->destination->package_head->tree, target->equated_name);
equivalent = Wiring::plug(ipct->destination->package_head->tree, N);
Inter::Transmigration::cache(target, equivalent);
}
symb->equated_to = equivalent;
Wiring::wire_to(symb, equivalent);
} else {
inter_package *target_package = target->owning_table->owning_package;
while ((target_package) && (target_package != ipct->migrant)) {
@ -238,11 +237,11 @@ void Inter::Transmigration::correct_migrant(inter_tree *I, inter_tree_node *P, v
if ((equivalent == NULL) && (Inter::Kind::is(target)))
equivalent = Inter::Packages::search_resources(ipct->destination->package_head->tree, target->symbol_name);
if (equivalent == NULL)
equivalent = Inter::Connectors::plug(ipct->destination_tree, URL);
equivalent = Wiring::plug(ipct->destination_tree, URL);
DISCARD_TEXT(URL)
Inter::Transmigration::cache(target, equivalent);
}
symb->equated_to = equivalent;
Wiring::wire_to(symb, equivalent);
@<Correct any references from the origin to the migrant@> =
ipct_state ipct;
@ -261,9 +260,8 @@ void Inter::Transmigration::correct_origin(inter_tree *I, inter_tree_node *P, vo
if (T == NULL) internal_error("package with no symbols");
for (int i=0; i<T->size; i++) {
inter_symbol *symb = T->symbol_array[i];
if ((symb) && (symb->equated_to)) {
inter_symbol *target = symb->equated_to;
while (target->equated_to) target = target->equated_to;
if (Wiring::is_wired(symb)) {
inter_symbol *target = Wiring::cable_end(symb);
inter_package *target_package = target->owning_table->owning_package;
while ((target_package) && (target_package != ipct->migrant)) {
target_package = Inter::Packages::parent(target_package);
@ -280,8 +278,8 @@ void Inter::Transmigration::correct_origin(inter_tree *I, inter_tree_node *P, vo
if (equivalent == NULL) {
TEMPORARY_TEXT(URL)
InterSymbolsTables::symbol_to_url_name(URL, target);
equivalent = Inter::Connectors::plug(ipct->origin_tree, URL);
equivalent = Wiring::plug(ipct->origin_tree, URL);
DISCARD_TEXT(URL)
Inter::Transmigration::cache(target, equivalent);
}
symb->equated_to = equivalent;
Wiring::wire_to(symb, equivalent);

View file

@ -271,14 +271,16 @@ that's the end of the list and therefore the block. (There is no resource 0.)
Inter::Symbols::annotate(S, IA);
}
if (Inter::Symbols::get_scope(S) == PLUG_ISYMS) {
S->equated_name = Str::new();
TEMPORARY_TEXT(N)
while (TRUE) {
unsigned int c;
if (BinaryFiles::read_int32(fh, &c) == FALSE)
Inter::Binary::read_error(&eloc, ftell(fh), I"bytecode incomplete");
if (c == 0) break;
PUT_TO(S->equated_name, (wchar_t) c);
PUT_TO(N, (wchar_t) c);
}
Wiring::wire_to_name(S, N);
DISCARD_TEXT(N)
}
LOGIF(INTER_BINARY, "Read symbol $3\n", S);
@ -307,7 +309,8 @@ that's the end of the list and therefore the block. (There is no resource 0.)
BinaryFiles::write_int32(fh, (unsigned int) Str::get(P));
Inter::Annotations::set_to_bytecode(fh, &(symb->ann_set));
if (Inter::Symbols::get_scope(symb) == PLUG_ISYMS) {
LOOP_THROUGH_TEXT(pos, symb->equated_name)
text_stream *N = Wiring::wired_to_name(symb);
LOOP_THROUGH_TEXT(pos, N)
BinaryFiles::write_int32(fh, (unsigned int) Str::get(pos));
BinaryFiles::write_int32(fh, 0);
}
@ -398,7 +401,7 @@ enough that the slot exists for the eventual list to be stored in.
if (from_S == NULL) internal_error("no from_S");
inter_symbol *to_S = InterSymbolsTables::symbol_from_id(to_T, to_ID);
if (to_S == NULL) internal_error("no to_S");
InterSymbolsTables::equate(from_S, to_S);
Wiring::wire_to(from_S, to_S);
}
}
@ -412,11 +415,13 @@ enough that the slot exists for the eventual list to be stored in.
BinaryFiles::write_int32(fh, (unsigned int) n);
for (int i=0; i<from_T->size; i++) {
inter_symbol *symb = from_T->symbol_array[i];
if ((symb) && (symb->equated_to)) {
if (Wiring::is_wired(symb)) {
inter_symbol *W = Wiring::wired_to(symb);
BinaryFiles::write_int32(fh, symb->symbol_ID);
BinaryFiles::write_int32(fh, (unsigned int) symb->equated_to->owning_table->n_index);
if (trace_bin) WRITE_TO(STDOUT, "Write eqn %d -> %d\n", n, symb->equated_to->owning_table->n_index);
BinaryFiles::write_int32(fh, symb->equated_to->symbol_ID);
BinaryFiles::write_int32(fh, (unsigned int) W->owning_table->n_index);
if (trace_bin)
WRITE_TO(STDOUT, "Write eqn %d -> %d\n", n, W->owning_table->n_index);
BinaryFiles::write_int32(fh, W->symbol_ID);
}
}
BinaryFiles::write_int32(fh, 0);

View file

@ -8,9 +8,10 @@ inter_error_message *Inter::Verify::defn(inter_package *owner, inter_tree_node *
if (T == NULL) T = Inode::globals(P);
inter_symbol *S = InterSymbolsTables::unequated_symbol_from_id(T, P->W.data[index]);
if (S == NULL) return Inode::error(P, I"no symbol for ID (case 1)", NULL);
if (S->equated_to) {
LOG("This is $6 but $3 equates to $3 in $6\n",
Inter::Packages::container(P), S, S->equated_to, Inter::Packages::container(S->equated_to->definition));
if (Wiring::is_wired(S)) {
inter_symbol *E = Wiring::cable_end(S);
LOG("This is $6 but $3 is wired to $3 in $6\n",
Inter::Packages::container(P), S, E, Inter::Packages::container(E->definition));
return Inode::error(P, I"symbol defined outside its native scope", S->symbol_name);
}
inter_tree_node *D = Inter::Symbols::definition(S);

View file

@ -82,11 +82,15 @@ void Inter::Symbol::read(inter_construct *IC, inter_bookmark *IBM, inter_line_pa
}
if (equate_name) {
if (Inter::Symbols::get_scope(name_name) == PLUG_ISYMS)
InterSymbolsTables::make_plug(name_name, equate_name);
Wiring::convert_to_plug(name_name, equate_name);
else {
inter_symbol *eq = InterSymbolsTables::url_name_to_symbol(Inter::Bookmarks::tree(IBM), Inter::Bookmarks::scope(IBM), equate_name);
if (eq == NULL) InterSymbolsTables::equate_textual(name_name, equate_name);
InterSymbolsTables::make_socket(name_name, eq);
if (eq == NULL) {
Wiring::wire_to_name(name_name, equate_name);
Inter::Symbols::set_scope(name_name, EXTERNAL_ISYMS);
} else {
Wiring::convert_to_socket(name_name, eq);
}
}
} else {
*E = Inter::Errors::plain(I"link symbol not equated", eloc); return;
@ -98,8 +102,12 @@ void Inter::Symbol::read(inter_construct *IC, inter_bookmark *IBM, inter_line_pa
if (trans_name) Inter::Symbols::set_translate(name_name, trans_name);
if (equate_name) {
inter_symbol *eq = InterSymbolsTables::url_name_to_symbol(Inter::Bookmarks::tree(IBM), Inter::Bookmarks::scope(IBM), equate_name);
if (eq == NULL) InterSymbolsTables::equate_textual(name_name, equate_name);
else InterSymbolsTables::equate(name_name, eq);
if (eq == NULL) {
Wiring::wire_to_name(name_name, equate_name);
Inter::Symbols::set_scope(name_name, EXTERNAL_ISYMS);
} else {
Wiring::wire_to(name_name, eq);
}
}
}

View file

@ -156,7 +156,7 @@ For now, at least, these live in the package |main/veneer|.
inter_symbol *vi_unchecked =
InterSymbolsTables::create_with_unique_name(
Inter::Bookmarks::scope(in_veneer), I"K_unchecked");
InterSymbolsTables::equate(vi_unchecked, unchecked_kind_symbol);
Wiring::wire_to(vi_unchecked, unchecked_kind_symbol);
inter_symbol *con_name = InterSymbolsTables::create_with_unique_name(
Inter::Bookmarks::scope(in_veneer), I"WORDSIZE");

View file

@ -341,7 +341,7 @@ pipeline_stage *ParsingPipelines::parse_stage(text_stream *from) {
CompileSplatsStage::create_pipeline_stage();
DetectIndirectCallsStage::create_pipeline_stage();
EliminateRedundantMatterStage::create_pipeline_stage();
ConnectPlugsStage::create_pipeline_stage();
ShortenWiringStage::create_pipeline_stage();
EliminateRedundantLabelsStage::create_pipeline_stage();
EliminateRedundantOperationsStage::create_pipeline_stage();
MakeSynopticModuleStage::create_pipeline_stage();

View file

@ -353,6 +353,6 @@ inter_symbol *RunningPipelines::ensure_symbol(pipeline_step *step, int id,
inter_tree *I = step->ephemera.repository;
inter_symbol *S = RunningPipelines::get_symbol(step, id);
if (S) return S;
step->ephemera.cached_symbols[id] = Inter::Connectors::plug(I, identifier);
step->ephemera.cached_symbols[id] = Wiring::plug(I, identifier);
return step->ephemera.cached_symbols[id];
}

View file

@ -191,7 +191,7 @@ But in fact it's easier to handle it here.
@<Perhaps compile something from this splat@> =
if (directive == DEFAULT_I6DIR) {
if (Inter::Connectors::find_socket(I, identifier) == NULL) {
if (Wiring::find_socket(I, identifier) == NULL) {
directive = CONSTANT_I6DIR;
@<Definitely compile something from this splat@>;
}
@ -278,10 +278,10 @@ not already there.
@<Declare the Inter symbol for what we will shortly make@> =
made_s = CompileSplatsStage::make_socketed_symbol(&content_at, identifier);
if (made_s->equated_to) {
inter_symbol *external_name = made_s->equated_to;
external_name->equated_to = made_s;
made_s->equated_to = NULL;
if (Wiring::is_wired(made_s)) {
inter_symbol *external_name = Wiring::wired_to(made_s);
Wiring::wire_to(external_name, made_s);
Wiring::wire_to(made_s, NULL);
}
Inter::Symbols::annotate_i(made_s, ASSIMILATED_IANN, 1);
if (directive == FAKEACTION_I6DIR) Inter::Symbols::annotate_i(made_s, FAKE_ACTION_IANN, 1);
@ -480,7 +480,7 @@ with three things in it:
(c) the function to carry out the action, |ScriptOnSub|.
@<Ensure that a socket exists for this action name@> =
if (Inter::Connectors::find_socket(I, value) == NULL) {
if (Wiring::find_socket(I, value) == NULL) {
inter_bookmark IBM_d = CompileSplatsStage::make_submodule(I, step, I"actions", P);
inter_bookmark *IBM = &IBM_d;
@ -540,8 +540,8 @@ equating it to a function definition elsewhere.
Str::delete_first_character(fn_name);
inter_symbol *fn_s =
InterSymbolsTables::create_with_unique_name(Inter::Bookmarks::scope(IBM), fn_name);
inter_symbol *existing_fn_s = Inter::Connectors::find_socket(I, fn_name);
if (existing_fn_s) InterSymbolsTables::equate(fn_s, existing_fn_s);
inter_symbol *existing_fn_s = Wiring::find_socket(I, fn_name);
if (existing_fn_s) Wiring::wire_to(fn_s, existing_fn_s);
DISCARD_TEXT(fn_name)
@<Assimilate a value@> =
@ -748,8 +748,8 @@ inter_symbol *CompileSplatsStage::make_socketed_symbol(inter_bookmark *IBM,
text_stream *identifier) {
inter_symbol *new_symbol = InterSymbolsTables::create_with_unique_name(
Inter::Bookmarks::scope(IBM), identifier);
if (Inter::Connectors::find_socket(Inter::Bookmarks::tree(IBM), identifier) == NULL)
Inter::Connectors::socket(Inter::Bookmarks::tree(IBM), identifier, new_symbol);
if (Wiring::find_socket(Inter::Bookmarks::tree(IBM), identifier) == NULL)
Wiring::socket(Inter::Bookmarks::tree(IBM), identifier, new_symbol);
return new_symbol;
}
@ -967,8 +967,7 @@ void CompileSplatsStage::value(pipeline_step *step, inter_bookmark *IBM, text_st
}
match_results mr = Regexp::create_mr();
if (Regexp::match(&mr, S, L"scope=(%i+)")) {
inter_symbol *symb = Inter::Connectors::find_socket(I, mr.exp[0]);
while ((symb) && (symb->equated_to)) symb = symb->equated_to;
inter_symbol *symb = Wiring::cable_end(Wiring::find_socket(I, mr.exp[0]));
if (symb) {
if (Inter::Symbols::read_annotation(symb, SCOPE_FILTER_IANN) != 1)
Inter::Symbols::annotate_i(symb, SCOPE_FILTER_IANN, 1);
@ -976,8 +975,7 @@ void CompileSplatsStage::value(pipeline_step *step, inter_bookmark *IBM, text_st
}
}
if (Regexp::match(&mr, S, L"noun=(%i+)")) {
inter_symbol *symb = Inter::Connectors::find_socket(I, mr.exp[0]);
while ((symb) && (symb->equated_to)) symb = symb->equated_to;
inter_symbol *symb = Wiring::cable_end(Wiring::find_socket(I, mr.exp[0]));
if (symb) {
if (Inter::Symbols::read_annotation(symb, NOUN_FILTER_IANN) != 1)
Inter::Symbols::annotate_i(symb, NOUN_FILTER_IANN, 1);
@ -986,7 +984,7 @@ void CompileSplatsStage::value(pipeline_step *step, inter_bookmark *IBM, text_st
}
@<Attempt to parse this as an identifier name for something already defined by this kit@> =
inter_symbol *symb = Inter::Connectors::find_socket(I, S);
inter_symbol *symb = Wiring::find_socket(I, S);
if (symb) {
Inter::Symbols::to_data(I, pack, symb, val1, val2); return;
}
@ -1148,9 +1146,9 @@ or in another compilation unit, so we create a plug called |MAX_ELEPHANTS|
and let the linker stage worry about what it means later on.
@<This leaf is a symbol name@> =
inter_symbol *result_s = Inter::Connectors::find_socket(I, t->material);
inter_symbol *result_s = Wiring::find_socket(I, t->material);
if (result_s) return result_s;
return Inter::Connectors::plug(I, t->material);
return Wiring::plug(I, t->material);
@ The above algorithm needs a lot of names for partial results of expressions,
all of which have to become Inter symbols. It really doesn't matter what these

View file

@ -1,124 +0,0 @@
[ConnectPlugsStage::] Connect Plugs Stage.
To reconcile symbol references made across compilation unit boundaries.
@ See //bytecode: Connectors// for more, but consider this example:
= (text as Inform 7)
To call the kit: (- ExampleKitFunction(); -).
To begin:
call the kit.
=
The //inform7// compiler makes a main source tree out of this. It doesn't have
a definition of |ExampleKitFunction|; that's defined in, say, |HypotheticalKit|,
which is being linked in after compilation. Indeed, the compiler has no way
even to know where in the package hierarchy of the Inter tree for |HypotheticalKit|
this function will be. What to do?
What it does is to create a symbol |S| representing the function which equates like so:
= (text)
main
source_text
S (regular symbol) -> main
connectors
ExampleKitFunction (plug symbol)
=
Once the Inter code for the kit has been loaded, we also find symbols:
= (text)
main
connectors
ExampleKitFunction (socket symbol) -> main
HypotheticalKit
...
ExampleKitFunction (regular symbol)
=
So now we must connect the plug to the socket. |S| will then connect through to
the actual definition, and all will be well.
=
void ConnectPlugsStage::create_pipeline_stage(void) {
ParsingPipelines::new_stage(I"connect-plugs",
ConnectPlugsStage::run, NO_STAGE_ARG, FALSE);
}
@ In practice, linking errors can occur when the source text refers to a function
which doesn't exist in any kit: if the user has mistyped |ExmapleKitFunction|, say,
then the plug would never find a socket with a matching name. We want to catch
and report these errors efficiently, so we keep the bad names in both a dictionary
(for quick lookup) and a list (for reporting).
=
typedef struct plug_inspection_state {
struct dictionary *bad_plugs;
struct linked_list *bad_plug_names; /* of |text_stream| */
} plug_inspection_state;
int ConnectPlugsStage::run(pipeline_step *step) {
inter_tree *I = step->ephemera.repository;
inter_package *connectors = Site::connectors_package(I);
if (connectors) @<Try to connect plugs and sockets@>;
@<Check that there are now no symbols which connect to loose plugs@>;
return TRUE;
}
@<Try to connect plugs and sockets@> =
inter_symbols_table *ST = Inter::Packages::scope(connectors);
for (int i=0; i<ST->size; i++) {
inter_symbol *S = ST->symbol_array[i];
if (Inter::Connectors::is_loose_plug(S)) {
inter_symbol *socket =
Inter::Connectors::find_socket(I, Inter::Connectors::plug_name(S));
if (socket)
Inter::Connectors::wire_plug(S, socket);
}
}
@<Check that there are now no symbols which connect to loose plugs@> =
plug_inspection_state state;
state.bad_plugs = Dictionaries::new(16, FALSE);
state.bad_plug_names = NEW_LINKED_LIST(text_stream);
InterTree::traverse(I, ConnectPlugsStage::visitor, &state, NULL, PACKAGE_IST);
if (LinkedLists::len(state.bad_plug_names) > 0) {
TEMPORARY_TEXT(NS)
text_stream *N;
LOOP_OVER_LINKED_LIST(N, text_stream, state.bad_plug_names) {
if (Str::len(NS) > 0) WRITE_TO(NS, ", ");
WRITE_TO(NS, "%S", N);
}
PipelineErrors::error_with(step,
"unable to find definitions for the following name(s): %S", NS);
DISCARD_TEXT(NS)
return FALSE;
}
@ Note that it is not necessarily an error to have a loose plug, that is, a plug
which does not connect to any socket. It is only an error if a symbol is trying
to connect to this plug. So we make a traverse of the tree to look for such symbols.
Note that we also take the opportunity to simplify chains of equations down to just
the minimum. For example, if we have |S1 -> S2 -> plug -> socket -> T1 -> T2 -> T3|,
we simplify just to |S1 -> T3|.
=
void ConnectPlugsStage::visitor(inter_tree *I, inter_tree_node *P, void *v_state) {
plug_inspection_state *state = (plug_inspection_state *) v_state;
inter_package *Q = Inter::Package::defined_by_frame(P);
inter_symbols_table *ST = Inter::Packages::scope(Q);
for (int i=0; i<ST->size; i++) {
inter_symbol *S = ST->symbol_array[i];
inter_symbol *E = S;
while ((E) && (E->equated_to)) E = E->equated_to;
if ((S) && (S != E)) {
S->equated_to = E;
if (Inter::Connectors::is_loose_plug(E))
@<This is an error, because a loose plug has been used@>;
}
}
}
@<This is an error, because a loose plug has been used@> =
text_stream *N = S->equated_to->equated_name;
if (Dictionaries::find(state->bad_plugs, N) == NULL) {
Dictionaries::create(state->bad_plugs, N);
ADD_TO_LINKED_LIST(N, text_stream, state->bad_plug_names);
}

View file

@ -51,6 +51,8 @@ int LoadBinaryKitsStage::run(pipeline_step *step) {
@<Load the Inter for the kit into the sidecar@>;
@<Migrate the bulk of the code from the sidecar to the main tree@>;
}
inter_tree *I = step->ephemera.repository;
Wiring::connect_plugs_to_sockets(I);
return TRUE;
}

View file

@ -72,7 +72,7 @@ void MakeIdentifiersUniqueStage::visitor(inter_tree *I, inter_tree_node *P, void
inter_symbols_table *ST = Inter::Packages::scope(Q);
for (int i=0; i<ST->size; i++) {
inter_symbol *S = ST->symbol_array[i];
if ((S) && (S->equated_to == NULL) &&
if ((S) && (Wiring::is_wired(S) == FALSE) &&
(Inter::Symbols::get_flag(S, MAKE_NAME_UNIQUE))) {
@<Give this symbol a unique translation@>;
Inter::Symbols::clear_flag(S, MAKE_NAME_UNIQUE);

View file

@ -0,0 +1,97 @@
[ShortenWiringStage::] Shorten Wiring Stage.
To catch missing resources with suitable errors, to remove plugs and sockets
as no longer necessary, and to shorten wiring as much as possible.
@ =
void ShortenWiringStage::create_pipeline_stage(void) {
ParsingPipelines::new_stage(I"shorten-wiring",
ShortenWiringStage::run, NO_STAGE_ARG, FALSE);
}
@ In practice, linking errors can occur when the source text refers to a function
which doesn't exist in any kit: if the user has mistyped |ExmapleKitFunction|, say,
then the plug would never find a socket with a matching name. We want to catch
and report these errors efficiently, so we keep the bad names in both a dictionary
(for quick lookup) and a list (for reporting).
=
typedef struct plug_inspection_state {
struct dictionary *bad_plugs;
struct linked_list *bad_plug_names; /* of |text_stream| */
} plug_inspection_state;
int ShortenWiringStage::run(pipeline_step *step) {
inter_tree *I = step->ephemera.repository;
plug_inspection_state state;
state.bad_plugs = Dictionaries::new(16, FALSE);
state.bad_plug_names = NEW_LINKED_LIST(text_stream);
InterTree::traverse(I, ShortenWiringStage::visitor, &state, NULL, PACKAGE_IST);
if (LinkedLists::len(state.bad_plug_names) > 0) {
TEMPORARY_TEXT(NS)
text_stream *N;
LOOP_OVER_LINKED_LIST(N, text_stream, state.bad_plug_names) {
if (Str::len(NS) > 0) WRITE_TO(NS, ", ");
WRITE_TO(NS, "%S", N);
}
PipelineErrors::error_with(step,
"unable to find definitions for the following name(s): %S", NS);
DISCARD_TEXT(NS)
return FALSE;
}
inter_package *connectors = Site::connectors_package(I);
if (connectors) {
inter_symbols_table *ST = Inter::Packages::scope(connectors);
for (int i=0; i<ST->size; i++) {
inter_symbol *S = ST->symbol_array[i];
if ((Wiring::is_plug(S)) && (Wiring::has_no_incoming_connections(S)))
Inter::Symbols::remove_from_table(S);
}
for (int i=0; i<ST->size; i++) {
inter_symbol *S = ST->symbol_array[i];
if ((Wiring::is_socket(S)) && (Wiring::has_no_incoming_connections(S)))
Inter::Symbols::remove_from_table(S);
}
int errors = 0;
for (int i=0; i<ST->size; i++) {
inter_symbol *S = ST->symbol_array[i];
if (S) {
LOG("Connector not deleted: %3\n", S);
errors++;
}
}
if (errors > 0) internal_error("plugs and sockets mismanaged");
}
return TRUE;
}
@ Note that it is not necessarily an error to have a loose plug, that is, a plug
which does not connect to any socket. It is only an error if a symbol is trying
to connect to this plug. So we make a traverse of the tree to look for such symbols.
Note that we also take the opportunity to simplify chains of equations down to just
the minimum. For example, if we have |S1 -> S2 -> plug -> socket -> T1 -> T2 -> T3|,
we simplify just to |S1 -> T3|.
=
void ShortenWiringStage::visitor(inter_tree *I, inter_tree_node *P, void *v_state) {
plug_inspection_state *state = (plug_inspection_state *) v_state;
inter_package *Q = Inter::Package::defined_by_frame(P);
inter_symbols_table *ST = Inter::Packages::scope(Q);
for (int i=0; i<ST->size; i++) {
inter_symbol *S = ST->symbol_array[i];
inter_symbol *E = Wiring::cable_end(S);
if (S != E) {
Wiring::shorten_wiring(S);
if (Wiring::is_loose_plug(E))
@<This is an error, because a loose plug has been used@>;
}
}
}
@<This is an error, because a loose plug has been used@> =
text_stream *N = Wiring::plug_name(E);
if (Dictionaries::find(state->bad_plugs, N) == NULL) {
Dictionaries::create(state->bad_plugs, N);
ADD_TO_LINKED_LIST(N, text_stream, state->bad_plug_names);
}

View file

@ -75,7 +75,7 @@ in |texts|.
@<Change the value in P from a literal text to an alias for the latest text@> =
inter_symbol *ref_s = Synoptic::new_symbol(pack, I"ref_to_text");
InterSymbolsTables::equate(ref_s, latest_s);
Wiring::wire_to(ref_s, latest_s);
inter_ti val1 = 0, val2 = 0;
Inter::Symbols::to_data(I, Inter::Packages::container(P), ref_s, &val1, &val2);
P->W.data[FORMAT_CONST_IFLD] = CONSTANT_DIRECT;

View file

@ -31,5 +31,7 @@ int MakeSynopticModuleStage::run(pipeline_step *step) {
SynopticUseOptions::compile(I, step, inv);
SynopticVerbs::compile(I, step, inv);
SynopticTests::compile(I, step, inv);
Wiring::connect_plugs_to_sockets(I);
return TRUE;
}

View file

@ -36,13 +36,13 @@ void SynopticHierarchy::establish(inter_tree *I) {
HierarchyLocations::ctr(I, id, n, Translation::same(), req);
inter_name *iname = HierarchyLocations::find(I, id);
inter_symbol *S = InterNames::to_symbol(iname);
Inter::Connectors::socket(I, InterNames::to_text(iname), S);
Wiring::socket(I, InterNames::to_text(iname), S);
}
@d SYN_FUNCT(id, n, t) {
HierarchyLocations::fun(I, id, n, Translation::to(t), req);
inter_name *iname = HierarchyLocations::find(I, id);
inter_symbol *S = InterNames::to_symbol(iname);
Inter::Connectors::socket(I, Produce::get_translation(iname), S);
Wiring::socket(I, Produce::get_translation(iname), S);
}
@d KIT_PROVIDED(id, n)
HierarchyLocations::ctr(I, id, n, Translation::same(), req);

View file

@ -136,6 +136,15 @@ void Synoptic::visitor(inter_tree *I, inter_tree_node *P, void *state) {
if (P->W.data[ID_IFLD] == PACKAGE_IST) {
inter_package *pack = Inter::Package::defined_by_frame(P);
inter_symbol *ptype = Inter::Packages::type(pack);
if (ptype == PackageTypes::get(I, I"_kind")) {
LOG("Inside $6:\n", pack);
inter_symbols_table *ST = Inter::Packages::scope(pack);
for (int i=0; i<ST->size; i++) {
inter_symbol *S = ST->symbol_array[i];
if ((S) && (S->wiring.no_connections > 0))
LOG("I observe $3 (%d)\n", S, S->wiring.no_connections);
}
}
tree_inventory_item *item;
LOOP_OVER_LINKED_LIST(item, tree_inventory_item, inv->items)
if (ptype == item->required_ptype) {
@ -274,7 +283,7 @@ void Synoptic::symbol_entry(inter_symbol *S) {
if (Inode::extend(synoptic_array_node, 2) == FALSE) internal_error("cannot extend");
inter_package *pack = Inter::Packages::container(synoptic_array_node);
inter_symbol *local_S = InterSymbolsTables::create_with_unique_name(Inter::Packages::scope(pack), S->symbol_name);
InterSymbolsTables::equate(local_S, S);
Wiring::wire_to(local_S, S);
inter_ti val1 = 0, val2 = 0;
Inter::Symbols::to_data(Inter::Packages::tree(pack), pack, local_S, &val1, &val2);
synoptic_array_node->W.data[synoptic_array_node->W.extent-2] = ALIAS_IVAL;

View file

@ -91,10 +91,9 @@ void EliminateRedundantMatterStage::preserve(inter_package *pack, pipeline_step
inter_symbols_table *tab = Inter::Packages::scope(pack);
for (int i=0; i<tab->size; i++) {
inter_symbol *symb = tab->symbol_array[i];
if ((symb) && (symb->equated_to)) {
inter_symbol *to = symb;
while ((to) && (to->equated_to)) to = to->equated_to;
inter_package *needed = to->owning_table->owning_package;
if (Wiring::is_wired(symb)) {
inter_symbol *E = Wiring::cable_end(symb);
inter_package *needed = E->owning_table->owning_package;
EliminateRedundantMatterStage::preserve(needed, step, pack, I"it's an external symbol");
}
}

View file

@ -24,7 +24,7 @@ Chapter 3: Assimilation Stages
Chapter 4: Linking Stages
Load Binary Kits Stage
Connect Plugs Stage
Shorten Wiring Stage
Detect Indirect Calls Stage
Make Identifiers Unique Stage
Reconcile Verbs Stage

View file

@ -17783,7 +17783,7 @@ Moreover, the Standard Rules use a number of syntaxes which are not documented i
The phrases described in this documentation, such as "end the story", are all defined in the Standard Rules, and are for the most part defined not in terms of other I7 phrases but instead reduced to equivalents in I6. For instance:
To end the story (- deadflag=3; story_complete=false; -).
To end the story: (- deadflag=3; story_complete=false; -).
The notation "(-" and "-)" indicates that what comes in between is I6 code. The minus sign is supposed to be a mnemonic for the decrease from 7 to 6: later we shall use "(+" and "+)" to go back up the other way, from 6 to 7.