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

Implemented transmigration of packages

This commit is contained in:
Graham Nelson 2019-08-02 18:51:21 +01:00
parent 83ecb1500c
commit dd8089b5be
31 changed files with 777 additions and 106 deletions

View file

@ -118,8 +118,7 @@ the pipeline:
<span class="plain">}</span>
<span class="identifier">Regexp::dispose_of</span><span class="plain">(&amp;</span><span class="identifier">mr</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">pack</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"not a package"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">trace_bin</span><span class="plain">) </span><span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">STDOUT</span><span class="plain">, </span><span class="string">"Move %S\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">Inter::Packages::name</span><span class="plain">(</span><span class="identifier">pack</span><span class="plain">));</span>
<span class="identifier">Inter::Transmigration::move</span><span class="plain">(</span><span class="identifier">pack</span><span class="plain">, </span><span class="identifier">Inter::Tree::main_package</span><span class="plain">(</span><span class="identifier">step</span><span class="plain">-</span><span class="element">&gt;repository</span><span class="plain">), </span><span class="identifier">TRUE</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="plain">}</span>

View file

@ -55,13 +55,13 @@
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">submodule_ptype_symbol</span><span class="plain">) {</span>
<span class="identifier">inter_package</span><span class="plain"> *</span><span class="identifier">t_p</span><span class="plain"> = </span><span class="identifier">Inter::Packages::by_name</span><span class="plain">(</span><span class="identifier">template_package</span><span class="plain">, </span><span class="identifier">name</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">t_p</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
<span class="identifier">inter_bookmark</span><span class="plain"> </span><span class="identifier">IBM</span><span class="plain"> = </span><span class="identifier">Inter::Bookmarks::after_this_frame</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">);</span>
<span class="identifier">inter_bookmark</span><span class="plain"> </span><span class="identifier">IBM</span><span class="plain"> = </span><span class="identifier">Inter::Bookmarks::after_this_node</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">);</span>
<span class="identifier">t_p</span><span class="plain"> = </span><span class="functiontext">CodeGen::Assimilate::new_package_named</span><span class="plain">(&amp;</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">submodule_ptype_symbol</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">t_p</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"failed to define"</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">Inter::Bookmarks::at_end_of_this_package</span><span class="plain">(</span><span class="identifier">t_p</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">Inter::Bookmarks::after_this_frame</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">Inter::Bookmarks::after_this_node</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::Assimilate::visitor1</span><span class="plain">(</span><span class="identifier">inter_tree</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">inter_tree_node</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain">, </span><span class="reserved">void</span><span class="plain"> *</span><span class="identifier">state</span><span class="plain">) {</span>
@ -191,7 +191,7 @@
<pre class="displaydefn">
<span class="identifier">inter_bookmark</span><span class="plain"> </span><span class="identifier">IBM_d</span><span class="plain"> = </span><span class="identifier">Inter::Bookmarks::after_this_frame</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">);</span>
<span class="identifier">inter_bookmark</span><span class="plain"> </span><span class="identifier">IBM_d</span><span class="plain"> = </span><span class="identifier">Inter::Bookmarks::after_this_node</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">);</span>
<span class="identifier">inter_bookmark</span><span class="plain"> *</span><span class="identifier">IBM</span><span class="plain"> = &amp;</span><span class="identifier">IBM_d</span><span class="plain">;</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">submodule_name</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
@ -547,7 +547,7 @@
<span class="plain">*</span><span class="identifier">IBM</span><span class="plain"> = </span><span class="identifier">outer_save</span><span class="plain">;</span>
<span class="identifier">inter_bookmark</span><span class="plain"> </span><span class="identifier">T_IBM</span><span class="plain"> = </span><span class="identifier">Inter::Bookmarks::after_this_frame</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">);</span>
<span class="identifier">inter_bookmark</span><span class="plain"> </span><span class="identifier">T_IBM</span><span class="plain"> = </span><span class="identifier">Inter::Bookmarks::after_this_node</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">);</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">alias_name</span><span class="plain"> = </span><span class="identifier">Inter::SymbolsTables::create_with_unique_name</span><span class="plain">(</span><span class="identifier">Inter::Bookmarks::scope</span><span class="plain">(&amp;</span><span class="identifier">T_IBM</span><span class="plain">), </span><span class="identifier">identifier</span><span class="plain">);</span>
<span class="identifier">Inter::SymbolsTables::equate</span><span class="plain">(</span><span class="identifier">alias_name</span><span class="plain">, </span><span class="identifier">rsymb</span><span class="plain">);</span>
<span class="identifier">Inter::Symbols::set_flag</span><span class="plain">(</span><span class="identifier">alias_name</span><span class="plain">, </span><span class="identifier">ALIAS_ONLY_BIT</span><span class="plain">);</span>

View file

@ -188,7 +188,7 @@
<p class="endnote">The function Inter::Annotations::to_bytecode appears nowhere else.</p>
<hr class="tocbar">
<ul class="toc"><li><a href="2-sym.html">Back to 'Symbols'</a></li><li><i>(This section ends Chapter 2: Interoperability.)</i></li></ul><hr class="tocbar">
<ul class="toc"><li><a href="2-sym.html">Back to 'Symbols'</a></li><li><a href="2-trn.html">Continue with 'Transmigration'</a></li></ul><hr class="tocbar">
<!--End of weave-->
</body>
</html>

View file

@ -44,7 +44,7 @@
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">IBM</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">inter_bookmark</span><span class="plain"> </span><span class="functiontext">Inter::Bookmarks::after_this_frame</span><span class="plain">(</span><span class="reserved">inter_tree</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">, </span><span class="reserved">inter_tree_node</span><span class="plain"> *</span><span class="identifier">D</span><span class="plain">) {</span>
<span class="reserved">inter_bookmark</span><span class="plain"> </span><span class="functiontext">Inter::Bookmarks::after_this_node</span><span class="plain">(</span><span class="reserved">inter_tree</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">, </span><span class="reserved">inter_tree_node</span><span class="plain"> *</span><span class="identifier">D</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">D</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"invalid frame supplied"</span><span class="plain">);</span>
<span class="reserved">inter_bookmark</span><span class="plain"> </span><span class="identifier">IBM</span><span class="plain">;</span>
<span class="identifier">IBM</span><span class="element">.R</span><span class="plain"> = </span><span class="identifier">D</span><span class="plain">;</span>
@ -193,15 +193,15 @@
<p class="endnote">The function Inter::Bookmarks::at_start_of_this_repository is used in 3/iibf (<a href="3-iibf.html#SP1">&#167;1</a>), 3/iitf (<a href="3-iitf.html#SP1">&#167;1</a>).</p>
<p class="endnote">The function Inter::Bookmarks::at_end_of_this_package appears nowhere else.</p>
<p class="endnote">The function Inter::Bookmarks::at_end_of_this_package is used in 2/trn (<a href="2-trn.html#SP1_1">&#167;1.1</a>).</p>
<p class="endnote">The function Inter::Bookmarks::after_this_frame appears nowhere else.</p>
<p class="endnote">The function Inter::Bookmarks::after_this_node is used in 2/trn (<a href="2-trn.html#SP1_1">&#167;1.1</a>).</p>
<p class="endnote">The function Inter::Bookmarks::set_current_package is used in 3/dfn (<a href="3-dfn.html#SP4">&#167;4</a>), 4/tpc3 (<a href="4-tpc3.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Bookmarks::tree is used in 2/in (<a href="2-in.html#SP4">&#167;4</a>), 2/st (<a href="2-st.html#SP8">&#167;8</a>, <a href="2-st.html#SP9">&#167;9</a>), 3/dfn (<a href="3-dfn.html#SP4">&#167;4</a>), 4/tsc (<a href="4-tsc.html#SP1">&#167;1</a>), 4/tpc3 (<a href="4-tpc3.html#SP2">&#167;2</a>), 4/tkc (<a href="4-tkc.html#SP2">&#167;2</a>), 4/tdc (<a href="4-tdc.html#SP2">&#167;2</a>), 4/tvc2 (<a href="4-tvc2.html#SP2">&#167;2</a>), 4/tcc2 (<a href="4-tcc2.html#SP2">&#167;2</a>), 4/trc (<a href="4-trc.html#SP2">&#167;2</a>), 4/tic (<a href="4-tic.html#SP2">&#167;2</a>), 4/tpc4 (<a href="4-tpc4.html#SP2">&#167;2</a>), 4/tpc5 (<a href="4-tpc5.html#SP2">&#167;2</a>), 4/tpc6 (<a href="4-tpc6.html#SP2">&#167;2</a>), 5/tlc2 (<a href="5-tlc2.html#SP2">&#167;2</a>), 5/tic (<a href="5-tic.html#SP2">&#167;2</a>), 5/trc (<a href="5-trc.html#SP2">&#167;2</a>), 5/tvc (<a href="5-tvc.html#SP2">&#167;2</a>), 5/tcc2 (<a href="5-tcc2.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Bookmarks::warehouse is used in 3/dfn (<a href="3-dfn.html#SP4">&#167;4</a>), 4/tmc (<a href="4-tmc.html#SP2">&#167;2</a>), 4/tpc (<a href="4-tpc.html#SP2">&#167;2</a>), 4/tlc (<a href="4-tlc.html#SP2">&#167;2</a>), 4/tac (<a href="4-tac.html#SP2">&#167;2</a>), 4/tpc3 (<a href="4-tpc3.html#SP2">&#167;2</a>), 4/tkc (<a href="4-tkc.html#SP2">&#167;2</a>), 4/tcc2 (<a href="4-tcc2.html#SP2">&#167;2</a>), 4/tic (<a href="4-tic.html#SP2">&#167;2</a>), 4/tpc4 (<a href="4-tpc4.html#SP2">&#167;2</a>), 4/tpc5 (<a href="4-tpc5.html#SP2">&#167;2</a>), 4/tpc6 (<a href="4-tpc6.html#SP2">&#167;2</a>), 5/tsc (<a href="5-tsc.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Bookmarks::warehouse is used in 2/trn (<a href="2-trn.html#SP1_2">&#167;1.2</a>), 3/dfn (<a href="3-dfn.html#SP4">&#167;4</a>), 4/tmc (<a href="4-tmc.html#SP2">&#167;2</a>), 4/tpc (<a href="4-tpc.html#SP2">&#167;2</a>), 4/tlc (<a href="4-tlc.html#SP2">&#167;2</a>), 4/tac (<a href="4-tac.html#SP2">&#167;2</a>), 4/tpc3 (<a href="4-tpc3.html#SP2">&#167;2</a>), 4/tkc (<a href="4-tkc.html#SP2">&#167;2</a>), 4/tcc2 (<a href="4-tcc2.html#SP2">&#167;2</a>), 4/tic (<a href="4-tic.html#SP2">&#167;2</a>), 4/tpc4 (<a href="4-tpc4.html#SP2">&#167;2</a>), 4/tpc5 (<a href="4-tpc5.html#SP2">&#167;2</a>), 4/tpc6 (<a href="4-tpc6.html#SP2">&#167;2</a>), 5/tsc (<a href="5-tsc.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Bookmarks::get_placement appears nowhere else.</p>
@ -213,15 +213,15 @@
<p class="endnote">The function Inter::Bookmarks::snapshot appears nowhere else.</p>
<p class="endnote">The function Inter::Bookmarks::baseline is used in 3/dfn (<a href="3-dfn.html#SP4">&#167;4</a>).</p>
<p class="endnote">The function Inter::Bookmarks::baseline is used in 2/trn (<a href="2-trn.html#SP3_1_1">&#167;3.1.1</a>), 3/dfn (<a href="3-dfn.html#SP4">&#167;4</a>).</p>
<p class="endnote">The function Inter::Bookmarks::log is used in 1/im (<a href="1-im.html#SP3_6">&#167;3.6</a>).</p>
<p class="endnote">The function Inter::Bookmarks::scope is used in 4/tmc (<a href="4-tmc.html#SP2">&#167;2</a>), 4/tsc (<a href="4-tsc.html#SP1">&#167;1</a>), 4/tpc (<a href="4-tpc.html#SP2">&#167;2</a>), 4/tac (<a href="4-tac.html#SP2">&#167;2</a>), 4/tpc2 (<a href="4-tpc2.html#SP2">&#167;2</a>), 4/tkc (<a href="4-tkc.html#SP2">&#167;2</a>), 4/tdc (<a href="4-tdc.html#SP2">&#167;2</a>), 4/tvc2 (<a href="4-tvc2.html#SP2">&#167;2</a>), 4/tcc2 (<a href="4-tcc2.html#SP2">&#167;2</a>), 4/trc (<a href="4-trc.html#SP2">&#167;2</a>), 4/tic (<a href="4-tic.html#SP2">&#167;2</a>), 4/tpc4 (<a href="4-tpc4.html#SP2">&#167;2</a>), 4/tpc5 (<a href="4-tpc5.html#SP2">&#167;2</a>), 4/tpc6 (<a href="4-tpc6.html#SP2">&#167;2</a>), 4/tpc7 (<a href="4-tpc7.html#SP2">&#167;2</a>), 5/tlc2 (<a href="5-tlc2.html#SP2">&#167;2</a>), 5/tic (<a href="5-tic.html#SP2">&#167;2</a>), 5/trc (<a href="5-trc.html#SP2">&#167;2</a>), 5/tvc (<a href="5-tvc.html#SP2">&#167;2</a>), 5/tcc2 (<a href="5-tcc2.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Bookmarks::package is used in 2/in (<a href="2-in.html#SP4">&#167;4</a>), 2/st (<a href="2-st.html#SP8">&#167;8</a>, <a href="2-st.html#SP9">&#167;9</a>), 3/dfn (<a href="3-dfn.html#SP4">&#167;4</a>), 4/tnc (<a href="4-tnc.html#SP1">&#167;1</a>), 4/tcc (<a href="4-tcc.html#SP1">&#167;1</a>), 4/tmc (<a href="4-tmc.html#SP2">&#167;2</a>), 4/tsc (<a href="4-tsc.html#SP1">&#167;1</a>), 4/tvc (<a href="4-tvc.html#SP2">&#167;2</a>), 4/tpc (<a href="4-tpc.html#SP2">&#167;2</a>), 4/tlc (<a href="4-tlc.html#SP2">&#167;2</a>), 4/tac (<a href="4-tac.html#SP2">&#167;2</a>), 4/tpc2 (<a href="4-tpc2.html#SP2">&#167;2</a>), 4/tpc3 (<a href="4-tpc3.html#SP2">&#167;2</a>), 4/tkc (<a href="4-tkc.html#SP2">&#167;2</a>), 4/tdc (<a href="4-tdc.html#SP2">&#167;2</a>), 4/tvc2 (<a href="4-tvc2.html#SP2">&#167;2</a>), 4/tcc2 (<a href="4-tcc2.html#SP2">&#167;2</a>), 4/trc (<a href="4-trc.html#SP2">&#167;2</a>), 4/tic (<a href="4-tic.html#SP2">&#167;2</a>), 4/tpc4 (<a href="4-tpc4.html#SP2">&#167;2</a>), 4/tpc5 (<a href="4-tpc5.html#SP2">&#167;2</a>), 4/tpc6 (<a href="4-tpc6.html#SP2">&#167;2</a>), 4/tpc7 (<a href="4-tpc7.html#SP2">&#167;2</a>), 5/tlc (<a href="5-tlc.html#SP2">&#167;2</a>), 5/tlc2 (<a href="5-tlc2.html#SP2">&#167;2</a>), 5/tic (<a href="5-tic.html#SP2">&#167;2</a>), 5/trc (<a href="5-trc.html#SP2">&#167;2</a>), 5/tvc (<a href="5-tvc.html#SP2">&#167;2</a>), 5/tlc3 (<a href="5-tlc3.html#SP2">&#167;2</a>), 5/tcc (<a href="5-tcc.html#SP2">&#167;2</a>), 5/tec (<a href="5-tec.html#SP2">&#167;2</a>), 5/trc2 (<a href="5-trc2.html#SP2">&#167;2</a>), 5/tcc2 (<a href="5-tcc2.html#SP2">&#167;2</a>), 5/tsc (<a href="5-tsc.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Bookmarks::package is used in 2/in (<a href="2-in.html#SP4">&#167;4</a>), 2/st (<a href="2-st.html#SP8">&#167;8</a>, <a href="2-st.html#SP9">&#167;9</a>), 2/trn (<a href="2-trn.html#SP1_2">&#167;1.2</a>, <a href="2-trn.html#SP2_1_1">&#167;2.1.1</a>, <a href="2-trn.html#SP3_1_1">&#167;3.1.1</a>), 3/dfn (<a href="3-dfn.html#SP4">&#167;4</a>), 4/tnc (<a href="4-tnc.html#SP1">&#167;1</a>), 4/tcc (<a href="4-tcc.html#SP1">&#167;1</a>), 4/tmc (<a href="4-tmc.html#SP2">&#167;2</a>), 4/tsc (<a href="4-tsc.html#SP1">&#167;1</a>), 4/tvc (<a href="4-tvc.html#SP2">&#167;2</a>), 4/tpc (<a href="4-tpc.html#SP2">&#167;2</a>), 4/tlc (<a href="4-tlc.html#SP2">&#167;2</a>), 4/tac (<a href="4-tac.html#SP2">&#167;2</a>), 4/tpc2 (<a href="4-tpc2.html#SP2">&#167;2</a>), 4/tpc3 (<a href="4-tpc3.html#SP2">&#167;2</a>), 4/tkc (<a href="4-tkc.html#SP2">&#167;2</a>), 4/tdc (<a href="4-tdc.html#SP2">&#167;2</a>), 4/tvc2 (<a href="4-tvc2.html#SP2">&#167;2</a>), 4/tcc2 (<a href="4-tcc2.html#SP2">&#167;2</a>), 4/trc (<a href="4-trc.html#SP2">&#167;2</a>), 4/tic (<a href="4-tic.html#SP2">&#167;2</a>), 4/tpc4 (<a href="4-tpc4.html#SP2">&#167;2</a>), 4/tpc5 (<a href="4-tpc5.html#SP2">&#167;2</a>), 4/tpc6 (<a href="4-tpc6.html#SP2">&#167;2</a>), 4/tpc7 (<a href="4-tpc7.html#SP2">&#167;2</a>), 5/tlc (<a href="5-tlc.html#SP2">&#167;2</a>), 5/tlc2 (<a href="5-tlc2.html#SP2">&#167;2</a>), 5/tic (<a href="5-tic.html#SP2">&#167;2</a>), 5/trc (<a href="5-trc.html#SP2">&#167;2</a>), 5/tvc (<a href="5-tvc.html#SP2">&#167;2</a>), 5/tlc3 (<a href="5-tlc3.html#SP2">&#167;2</a>), 5/tcc (<a href="5-tcc.html#SP2">&#167;2</a>), 5/tec (<a href="5-tec.html#SP2">&#167;2</a>), 5/trc2 (<a href="5-trc2.html#SP2">&#167;2</a>), 5/tcc2 (<a href="5-tcc2.html#SP2">&#167;2</a>), 5/tsc (<a href="5-tsc.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Bookmarks::insert is used in 3/iibf (<a href="3-iibf.html#SP1_6">&#167;1.6</a>), 4/tnc (<a href="4-tnc.html#SP1">&#167;1</a>), 4/tcc (<a href="4-tcc.html#SP1">&#167;1</a>), 4/tmc (<a href="4-tmc.html#SP2">&#167;2</a>), 4/tvc (<a href="4-tvc.html#SP2">&#167;2</a>), 4/tpc (<a href="4-tpc.html#SP2">&#167;2</a>), 4/tlc (<a href="4-tlc.html#SP2">&#167;2</a>), 4/tac (<a href="4-tac.html#SP2">&#167;2</a>), 4/tpc2 (<a href="4-tpc2.html#SP2">&#167;2</a>), 4/tpc3 (<a href="4-tpc3.html#SP2">&#167;2</a>), 4/tkc (<a href="4-tkc.html#SP2">&#167;2</a>), 4/tdc (<a href="4-tdc.html#SP2">&#167;2</a>), 4/tvc2 (<a href="4-tvc2.html#SP2">&#167;2</a>), 4/tcc2 (<a href="4-tcc2.html#SP2">&#167;2</a>), 4/trc (<a href="4-trc.html#SP2">&#167;2</a>), 4/tic (<a href="4-tic.html#SP2">&#167;2</a>), 4/tpc4 (<a href="4-tpc4.html#SP2">&#167;2</a>), 4/tpc5 (<a href="4-tpc5.html#SP2">&#167;2</a>), 4/tpc6 (<a href="4-tpc6.html#SP2">&#167;2</a>), 4/tpc7 (<a href="4-tpc7.html#SP2">&#167;2</a>), 5/tlc (<a href="5-tlc.html#SP2">&#167;2</a>), 5/tlc2 (<a href="5-tlc2.html#SP2">&#167;2</a>), 5/tic (<a href="5-tic.html#SP2">&#167;2</a>), 5/trc (<a href="5-trc.html#SP2">&#167;2</a>), 5/tvc (<a href="5-tvc.html#SP2">&#167;2</a>), 5/tlc3 (<a href="5-tlc3.html#SP2">&#167;2</a>), 5/tcc (<a href="5-tcc.html#SP2">&#167;2</a>), 5/tec (<a href="5-tec.html#SP2">&#167;2</a>), 5/trc2 (<a href="5-trc2.html#SP2">&#167;2</a>), 5/tcc2 (<a href="5-tcc2.html#SP2">&#167;2</a>), 5/tsc (<a href="5-tsc.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Bookmarks::insert is used in 2/trn (<a href="2-trn.html#SP1_3">&#167;1.3</a>, <a href="2-trn.html#SP2_1_1">&#167;2.1.1</a>), 3/iibf (<a href="3-iibf.html#SP1_6">&#167;1.6</a>), 4/tnc (<a href="4-tnc.html#SP1">&#167;1</a>), 4/tcc (<a href="4-tcc.html#SP1">&#167;1</a>), 4/tmc (<a href="4-tmc.html#SP2">&#167;2</a>), 4/tvc (<a href="4-tvc.html#SP2">&#167;2</a>), 4/tpc (<a href="4-tpc.html#SP2">&#167;2</a>), 4/tlc (<a href="4-tlc.html#SP2">&#167;2</a>), 4/tac (<a href="4-tac.html#SP2">&#167;2</a>), 4/tpc2 (<a href="4-tpc2.html#SP2">&#167;2</a>), 4/tpc3 (<a href="4-tpc3.html#SP2">&#167;2</a>), 4/tkc (<a href="4-tkc.html#SP2">&#167;2</a>), 4/tdc (<a href="4-tdc.html#SP2">&#167;2</a>), 4/tvc2 (<a href="4-tvc2.html#SP2">&#167;2</a>), 4/tcc2 (<a href="4-tcc2.html#SP2">&#167;2</a>), 4/trc (<a href="4-trc.html#SP2">&#167;2</a>), 4/tic (<a href="4-tic.html#SP2">&#167;2</a>), 4/tpc4 (<a href="4-tpc4.html#SP2">&#167;2</a>), 4/tpc5 (<a href="4-tpc5.html#SP2">&#167;2</a>), 4/tpc6 (<a href="4-tpc6.html#SP2">&#167;2</a>), 4/tpc7 (<a href="4-tpc7.html#SP2">&#167;2</a>), 5/tlc (<a href="5-tlc.html#SP2">&#167;2</a>), 5/tlc2 (<a href="5-tlc2.html#SP2">&#167;2</a>), 5/tic (<a href="5-tic.html#SP2">&#167;2</a>), 5/trc (<a href="5-trc.html#SP2">&#167;2</a>), 5/tvc (<a href="5-tvc.html#SP2">&#167;2</a>), 5/tlc3 (<a href="5-tlc3.html#SP2">&#167;2</a>), 5/tcc (<a href="5-tcc.html#SP2">&#167;2</a>), 5/tec (<a href="5-tec.html#SP2">&#167;2</a>), 5/trc2 (<a href="5-trc2.html#SP2">&#167;2</a>), 5/tcc2 (<a href="5-tcc2.html#SP2">&#167;2</a>), 5/tsc (<a href="5-tsc.html#SP2">&#167;2</a>).</p>
<p class="endnote">The structure inter_bookmark is private to this section.</p>

View file

@ -51,7 +51,7 @@
<p class="endnote">The function Inter::Node::new is used in 2/tw (<a href="2-tw.html#SP3">&#167;3</a>).</p>
<p class="endnote">The structure inter_tree_node is accessed in 2/it, 2/bkm, 2/st, 2/pck, 2/sym, 3/dfn, 3/iibf, 3/iitf, 3/vi, 3/idt, 4/tmc, 4/tvc, 4/tpc, 4/tlc, 4/tac, 4/tpc2, 4/tpc3, 4/tkc, 4/tdc, 4/tvc2, 4/tcc2, 4/trc, 4/tic, 4/tpc4, 4/tpc5, 4/tpc6, 4/tpc7, 5/tlc, 5/tlc2, 5/tic, 5/trc, 5/tvc, 5/tlc3, 5/tcc, 5/tec, 5/trc2, 5/tcc2, 5/tsc and here.</p>
<p class="endnote">The structure inter_tree_node is accessed in 2/it, 2/bkm, 2/st, 2/pck, 2/sym, 2/trn, 3/dfn, 3/iibf, 3/iitf, 3/vi, 3/idt, 4/tmc, 4/tvc, 4/tpc, 4/tlc, 4/tac, 4/tpc2, 4/tpc3, 4/tkc, 4/tdc, 4/tvc2, 4/tcc2, 4/trc, 4/tic, 4/tpc4, 4/tpc5, 4/tpc6, 4/tpc7, 5/tlc, 5/tlc2, 5/tic, 5/trc, 5/tvc, 5/tlc3, 5/tcc, 5/tec, 5/trc2, 5/tcc2, 5/tsc and here.</p>
<p class="inwebparagraph"><a id="SP2"></a><b>&#167;2. Chunks. </b></p>
@ -268,7 +268,7 @@
<p class="endnote">The function Inter::Node::fill_0 is used in 4/tnc (<a href="4-tnc.html#SP1">&#167;1</a>), 4/tcc (<a href="4-tcc.html#SP1">&#167;1</a>).</p>
<p class="endnote">The function Inter::Node::fill_1 is used in 4/tvc (<a href="4-tvc.html#SP2">&#167;2</a>), 4/tpc2 (<a href="4-tpc2.html#SP2">&#167;2</a>), 4/tpc7 (<a href="4-tpc7.html#SP2">&#167;2</a>), 5/tcc (<a href="5-tcc.html#SP2">&#167;2</a>), 5/tec (<a href="5-tec.html#SP2">&#167;2</a>), 5/trc2 (<a href="5-trc2.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Node::fill_1 is used in 2/trn (<a href="2-trn.html#SP2_1_1">&#167;2.1.1</a>), 4/tvc (<a href="4-tvc.html#SP2">&#167;2</a>), 4/tpc2 (<a href="4-tpc2.html#SP2">&#167;2</a>), 4/tpc7 (<a href="4-tpc7.html#SP2">&#167;2</a>), 5/tcc (<a href="5-tcc.html#SP2">&#167;2</a>), 5/tec (<a href="5-tec.html#SP2">&#167;2</a>), 5/trc2 (<a href="5-trc2.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Node::fill_2 is used in 4/tpc (<a href="4-tpc.html#SP2">&#167;2</a>), 4/tac (<a href="4-tac.html#SP2">&#167;2</a>), 5/tlc (<a href="5-tlc.html#SP2">&#167;2</a>), 5/tlc3 (<a href="5-tlc3.html#SP2">&#167;2</a>).</p>
@ -345,7 +345,7 @@
<p class="inwebparagraph"></p>
<p class="endnote">The function Inter::Node::extend is used in 4/tkc (<a href="4-tkc.html#SP2">&#167;2</a>), 4/tcc2 (<a href="4-tcc2.html#SP2">&#167;2</a>), 4/tpc7 (<a href="4-tpc7.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Node::extend is used in 2/trn (<a href="2-trn.html#SP2_1_1">&#167;2.1.1</a>), 4/tkc (<a href="4-tkc.html#SP2">&#167;2</a>), 4/tcc2 (<a href="4-tcc2.html#SP2">&#167;2</a>), 4/tpc7 (<a href="4-tpc7.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Node::vcount is used in 4/tac (<a href="4-tac.html#SP2">&#167;2</a>), 4/tic (<a href="4-tic.html#SP2">&#167;2</a>), 4/tpc5 (<a href="4-tpc5.html#SP2">&#167;2</a>), 4/tpc6 (<a href="4-tpc6.html#SP2">&#167;2</a>).</p>

View file

@ -26,7 +26,7 @@
<p class="inwebparagraph"></p>
<p class="endnote">The structure inter_tree is accessed in 2/bkm, 2/st, 2/pck, 3/iibf and here.</p>
<p class="endnote">The structure inter_tree is accessed in 2/bkm, 2/st, 2/pck, 2/trn, 3/iibf and here.</p>
<p class="inwebparagraph"><a id="SP2"></a><b>&#167;2. </b></p>
@ -165,7 +165,7 @@
<p class="endnote">The function Inter::Tree::warehouse is used in 2/bkm (<a href="2-bkm.html#SP1">&#167;1</a>), 2/in (<a href="2-in.html#SP4">&#167;4</a>), 2/pck (<a href="2-pck.html#SP3">&#167;3</a>), 2/sym (<a href="2-sym.html#SP4">&#167;4</a>), 3/dfn (<a href="3-dfn.html#SP3">&#167;3</a>), 3/iibf (<a href="3-iibf.html#SP1">&#167;1</a>, <a href="3-iibf.html#SP1_1">&#167;1.1</a>), 3/idt (<a href="3-idt.html#SP3">&#167;3</a>).</p>
<p class="endnote">The function Inter::Tree::global_scope is used in 2/bkm (<a href="2-bkm.html#SP1">&#167;1</a>), 2/in (<a href="2-in.html#SP3">&#167;3</a>), 2/st (<a href="2-st.html#SP8">&#167;8</a>, <a href="2-st.html#SP9">&#167;9</a>, <a href="2-st.html#SP11">&#167;11</a>), 3/iibf (<a href="3-iibf.html#SP1_4">&#167;1.4</a>), 4/tpc3 (<a href="4-tpc3.html#SP2">&#167;2</a>), 5/tic (<a href="5-tic.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Tree::global_scope is used in 2/bkm (<a href="2-bkm.html#SP1">&#167;1</a>), 2/in (<a href="2-in.html#SP3">&#167;3</a>), 2/st (<a href="2-st.html#SP8">&#167;8</a>, <a href="2-st.html#SP9">&#167;9</a>, <a href="2-st.html#SP11">&#167;11</a>), 2/trn (<a href="2-trn.html#SP1_5">&#167;1.5</a>), 3/iibf (<a href="3-iibf.html#SP1_4">&#167;1.4</a>), 4/tpc3 (<a href="4-tpc3.html#SP2">&#167;2</a>), 5/tic (<a href="5-tic.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Tree::previous is used in <a href="#SP3_1">&#167;3.1</a>, <a href="#SP3_5">&#167;3.5</a>.</p>
@ -433,7 +433,7 @@
<p class="endnote">The function Inter::Tree::traverse_root_only is used in 3/iibf (<a href="3-iibf.html#SP1_1_5">&#167;1.1.5</a>), 3/iitf (<a href="3-iitf.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Tree::traverse is used in 2/st (<a href="2-st.html#SP10">&#167;10</a>), 3/iibf (<a href="3-iibf.html#SP1_1_5">&#167;1.1.5</a>), 3/iitf (<a href="3-iitf.html#SP1">&#167;1</a>, <a href="3-iitf.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Tree::traverse is used in 2/st (<a href="2-st.html#SP10">&#167;10</a>), 2/trn (<a href="2-trn.html#SP1_5">&#167;1.5</a>, <a href="2-trn.html#SP1_6">&#167;1.6</a>), 3/iibf (<a href="3-iibf.html#SP1_1_5">&#167;1.1.5</a>), 3/iitf (<a href="3-iitf.html#SP1">&#167;1</a>, <a href="3-iitf.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Tree::traverse_r appears nowhere else.</p>

View file

@ -30,7 +30,7 @@
<p class="inwebparagraph"></p>
<p class="endnote">The structure inter_package is accessed in 2/it, 3/iibf, 4/tpc3, 4/tcc2 and here.</p>
<p class="endnote">The structure inter_package is accessed in 2/it, 2/trn, 3/iibf, 4/tpc3, 4/tcc2 and here.</p>
<p class="inwebparagraph"><a id="SP2"></a><b>&#167;2. </b></p>
@ -132,18 +132,30 @@
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Inter::Packages::set_name</span><span class="plain">(</span><span class="reserved">inter_package</span><span class="plain"> *</span><span class="identifier">Q</span><span class="plain">, </span><span class="reserved">inter_package</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">N</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Q</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"no parent supplied"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">P</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"null package"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">N</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"null package name"</span><span class="plain">);</span>
<span class="identifier">P</span><span class="plain">-</span><span class="element">&gt;package_name_t</span><span class="plain"> = </span><span class="identifier">Str::duplicate</span><span class="plain">(</span><span class="identifier">N</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">N</span><span class="plain">) &amp;&amp; (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">-</span><span class="element">&gt;package_name_t</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"main"</span><span class="plain">)))</span>
<span class="functiontext">Inter::Tree::set_main_package</span><span class="plain">(</span><span class="functiontext">Inter::Packages::tree</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">), </span><span class="identifier">P</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">N</span><span class="plain">) &gt; 0) {</span>
<span class="identifier">dict_entry</span><span class="plain"> *</span><span class="identifier">de</span><span class="plain"> = </span><span class="identifier">Dictionaries::find</span><span class="plain">(</span><span class="identifier">Q</span><span class="plain">-</span><span class="element">&gt;name_lookup</span><span class="plain">, </span><span class="identifier">N</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">de</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"duplicated package name"</span><span class="plain">);</span>
<span class="identifier">Dictionaries::create</span><span class="plain">(</span><span class="identifier">Q</span><span class="plain">-</span><span class="element">&gt;name_lookup</span><span class="plain">, </span><span class="identifier">N</span><span class="plain">);</span>
<span class="identifier">Dictionaries::write_value</span><span class="plain">(</span><span class="identifier">Q</span><span class="plain">-</span><span class="element">&gt;name_lookup</span><span class="plain">, </span><span class="identifier">N</span><span class="plain">, (</span><span class="reserved">void</span><span class="plain"> *) </span><span class="identifier">P</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">N</span><span class="plain">) &gt; 0) </span><span class="functiontext">Inter::Packages::add_subpackage_name</span><span class="plain">(</span><span class="identifier">Q</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Inter::Packages::add_subpackage_name</span><span class="plain">(</span><span class="reserved">inter_package</span><span class="plain"> *</span><span class="identifier">Q</span><span class="plain">, </span><span class="reserved">inter_package</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Q</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"no parent supplied"</span><span class="plain">);</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">N</span><span class="plain"> = </span><span class="identifier">P</span><span class="plain">-</span><span class="element">&gt;package_name_t</span><span class="plain">;</span>
<span class="identifier">dict_entry</span><span class="plain"> *</span><span class="identifier">de</span><span class="plain"> = </span><span class="identifier">Dictionaries::find</span><span class="plain">(</span><span class="identifier">Q</span><span class="plain">-</span><span class="element">&gt;name_lookup</span><span class="plain">, </span><span class="identifier">N</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">de</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"duplicated package name"</span><span class="plain">);</span>
<span class="identifier">Dictionaries::create</span><span class="plain">(</span><span class="identifier">Q</span><span class="plain">-</span><span class="element">&gt;name_lookup</span><span class="plain">, </span><span class="identifier">N</span><span class="plain">);</span>
<span class="identifier">Dictionaries::write_value</span><span class="plain">(</span><span class="identifier">Q</span><span class="plain">-</span><span class="element">&gt;name_lookup</span><span class="plain">, </span><span class="identifier">N</span><span class="plain">, (</span><span class="reserved">void</span><span class="plain"> *) </span><span class="identifier">P</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Inter::Packages::remove_subpackage_name</span><span class="plain">(</span><span class="reserved">inter_package</span><span class="plain"> *</span><span class="identifier">Q</span><span class="plain">, </span><span class="reserved">inter_package</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Q</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"no parent supplied"</span><span class="plain">);</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">N</span><span class="plain"> = </span><span class="identifier">P</span><span class="plain">-</span><span class="element">&gt;package_name_t</span><span class="plain">;</span>
<span class="identifier">dict_entry</span><span class="plain"> *</span><span class="identifier">de</span><span class="plain"> = </span><span class="identifier">Dictionaries::find</span><span class="plain">(</span><span class="identifier">Q</span><span class="plain">-</span><span class="element">&gt;name_lookup</span><span class="plain">, </span><span class="identifier">N</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">de</span><span class="plain">) {</span>
<span class="identifier">Dictionaries::write_value</span><span class="plain">(</span><span class="identifier">Q</span><span class="plain">-</span><span class="element">&gt;name_lookup</span><span class="plain">, </span><span class="identifier">N</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">}</span>
@ -306,21 +318,21 @@
<p class="endnote">The function Inter::Packages::tree is used in 2/bkm (<a href="2-bkm.html#SP1">&#167;1</a>), 2/st (<a href="2-st.html#SP10">&#167;10</a>), 3/iibf (<a href="3-iibf.html#SP1_1_3">&#167;1.1.3</a>, <a href="3-iibf.html#SP1_1_4">&#167;1.1.4</a>).</p>
<p class="endnote">The function Inter::Packages::name is used in 2/st (<a href="2-st.html#SP11">&#167;11</a>), 3/dfn (<a href="3-dfn.html#SP4">&#167;4</a>), 4/tpc3 (<a href="4-tpc3.html#SP2">&#167;2</a>), 4/tcc2 (<a href="4-tcc2.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Packages::name is used in 2/st (<a href="2-st.html#SP11">&#167;11</a>), 2/trn (<a href="2-trn.html#SP1_2">&#167;1.2</a>), 3/dfn (<a href="3-dfn.html#SP4">&#167;4</a>), 4/tpc3 (<a href="4-tpc3.html#SP2">&#167;2</a>), 4/tcc2 (<a href="4-tcc2.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Packages::is_codelike is used in 3/dfn (<a href="3-dfn.html#SP4">&#167;4</a>), 3/iibf (<a href="3-iibf.html#SP1_1_3_3">&#167;1.1.3.3</a>).</p>
<p class="endnote">The function Inter::Packages::make_codelike is used in 3/iibf (<a href="3-iibf.html#SP1_4_3">&#167;1.4.3</a>), 4/tpc3 (<a href="4-tpc3.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Packages::is_linklike is used in 2/st (<a href="2-st.html#SP10">&#167;10</a>), 4/tsc (<a href="4-tsc.html#SP1">&#167;1</a>).</p>
<p class="endnote">The function Inter::Packages::is_linklike is used in 2/st (<a href="2-st.html#SP10">&#167;10</a>), 2/trn (<a href="2-trn.html#SP2">&#167;2</a>, <a href="2-trn.html#SP3">&#167;3</a>), 4/tsc (<a href="4-tsc.html#SP1">&#167;1</a>).</p>
<p class="endnote">The function Inter::Packages::make_linklike is used in 4/tpc3 (<a href="4-tpc3.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Packages::make_linklike is used in 2/trn (<a href="2-trn.html#SP2_2_1">&#167;2.2.1</a>, <a href="2-trn.html#SP3_1_1">&#167;3.1.1</a>), 4/tpc3 (<a href="4-tpc3.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Packages::is_rootlike is used in 3/dfn (<a href="3-dfn.html#SP4">&#167;4</a>), 3/iibf (<a href="3-iibf.html#SP1_1_3_3">&#167;1.1.3.3</a>).</p>
<p class="endnote">The function Inter::Packages::make_rootlike is used in 2/it (<a href="2-it.html#SP2">&#167;2</a>), 3/iibf (<a href="3-iibf.html#SP1_4_3">&#167;1.4.3</a>).</p>
<p class="endnote">The function Inter::Packages::parent is used in 2/st (<a href="2-st.html#SP11">&#167;11</a>), 3/dfn (<a href="3-dfn.html#SP4">&#167;4</a>), 3/iibf (<a href="3-iibf.html#SP1_1_3_3">&#167;1.1.3.3</a>).</p>
<p class="endnote">The function Inter::Packages::parent is used in 2/st (<a href="2-st.html#SP11">&#167;11</a>), 2/trn (<a href="2-trn.html#SP1">&#167;1</a>, <a href="2-trn.html#SP1_3">&#167;1.3</a>, <a href="2-trn.html#SP2">&#167;2</a>, <a href="2-trn.html#SP3">&#167;3</a>), 3/dfn (<a href="3-dfn.html#SP4">&#167;4</a>), 3/iibf (<a href="3-iibf.html#SP1_1_3_3">&#167;1.1.3.3</a>).</p>
<p class="endnote">The function Inter::Packages::unmark_all appears nowhere else.</p>
@ -328,6 +340,10 @@
<p class="endnote">The function Inter::Packages::set_name is used in 3/iibf (<a href="3-iibf.html#SP1_4_3">&#167;1.4.3</a>), 4/tpc3 (<a href="4-tpc3.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Packages::add_subpackage_name is used in 2/trn (<a href="2-trn.html#SP1_3">&#167;1.3</a>).</p>
<p class="endnote">The function Inter::Packages::remove_subpackage_name is used in 2/trn (<a href="2-trn.html#SP1_3">&#167;1.3</a>).</p>
<p class="endnote">The function Inter::Packages::log is used in 1/im (<a href="1-im.html#SP3_6">&#167;3.6</a>).</p>
<p class="endnote">The function Inter::Packages::basics is used in 2/st (<a href="2-st.html#SP4">&#167;4</a>).</p>
@ -346,13 +362,13 @@
<p class="endnote">The function Inter::Packages::container is used in 3/dfn (<a href="3-dfn.html#SP4">&#167;4</a>), 3/vi (<a href="3-vi.html#SP1">&#167;1</a>), 5/tlc (<a href="5-tlc.html#SP2">&#167;2</a>), 5/tlc2 (<a href="5-tlc2.html#SP2">&#167;2</a>), 5/trc (<a href="5-trc.html#SP2">&#167;2</a>), 5/tlc3 (<a href="5-tlc3.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Packages::scope is used in 2/it (<a href="2-it.html#SP2">&#167;2</a>), 2/bkm (<a href="2-bkm.html#SP1">&#167;1</a>), 2/st (<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>), 3/vi (<a href="3-vi.html#SP1">&#167;1</a>), 4/tsc (<a href="4-tsc.html#SP1">&#167;1</a>), 4/tac (<a href="4-tac.html#SP2">&#167;2</a>), 4/tpc3 (<a href="4-tpc3.html#SP2">&#167;2</a>), 4/tkc (<a href="4-tkc.html#SP2">&#167;2</a>), 4/tcc2 (<a href="4-tcc2.html#SP2">&#167;2</a>), 4/tic (<a href="4-tic.html#SP2">&#167;2</a>), 4/tpc5 (<a href="4-tpc5.html#SP2">&#167;2</a>), 4/tpc6 (<a href="4-tpc6.html#SP2">&#167;2</a>), 5/tlc (<a href="5-tlc.html#SP2">&#167;2</a>), 5/tlc2 (<a href="5-tlc2.html#SP2">&#167;2</a>), 5/trc (<a href="5-trc.html#SP2">&#167;2</a>), 5/tvc (<a href="5-tvc.html#SP2">&#167;2</a>), 5/tlc3 (<a href="5-tlc3.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Packages::scope is used in 2/it (<a href="2-it.html#SP2">&#167;2</a>), 2/bkm (<a href="2-bkm.html#SP1">&#167;1</a>), 2/st (<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>), 2/trn (<a href="2-trn.html#SP2">&#167;2</a>, <a href="2-trn.html#SP2_2_1">&#167;2.2.1</a>, <a href="2-trn.html#SP3">&#167;3</a>, <a href="2-trn.html#SP3_1_1">&#167;3.1.1</a>), 3/vi (<a href="3-vi.html#SP1">&#167;1</a>), 4/tsc (<a href="4-tsc.html#SP1">&#167;1</a>), 4/tac (<a href="4-tac.html#SP2">&#167;2</a>), 4/tpc3 (<a href="4-tpc3.html#SP2">&#167;2</a>), 4/tkc (<a href="4-tkc.html#SP2">&#167;2</a>), 4/tcc2 (<a href="4-tcc2.html#SP2">&#167;2</a>), 4/tic (<a href="4-tic.html#SP2">&#167;2</a>), 4/tpc5 (<a href="4-tpc5.html#SP2">&#167;2</a>), 4/tpc6 (<a href="4-tpc6.html#SP2">&#167;2</a>), 5/tlc (<a href="5-tlc.html#SP2">&#167;2</a>), 5/tlc2 (<a href="5-tlc2.html#SP2">&#167;2</a>), 5/trc (<a href="5-trc.html#SP2">&#167;2</a>), 5/tvc (<a href="5-tvc.html#SP2">&#167;2</a>), 5/tlc3 (<a href="5-tlc3.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Packages::scope_of is used in 2/st (<a href="2-st.html#SP7">&#167;7</a>), 4/tmc (<a href="4-tmc.html#SP2">&#167;2</a>), 4/tkc (<a href="4-tkc.html#SP2">&#167;2</a>), 4/tdc (<a href="4-tdc.html#SP2">&#167;2</a>), 4/tvc2 (<a href="4-tvc2.html#SP2">&#167;2</a>), 4/tcc2 (<a href="4-tcc2.html#SP2">&#167;2</a>), 4/trc (<a href="4-trc.html#SP2">&#167;2</a>), 4/tic (<a href="4-tic.html#SP2">&#167;2</a>), 4/tpc5 (<a href="4-tpc5.html#SP2">&#167;2</a>), 5/tvc (<a href="5-tvc.html#SP2">&#167;2</a>), 5/tcc2 (<a href="5-tcc2.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Packages::type appears nowhere else.</p>
<p class="endnote">The function Inter::Packages::baseline is used in 2/bkm (<a href="2-bkm.html#SP1">&#167;1</a>).</p>
<p class="endnote">The function Inter::Packages::baseline is used in 2/bkm (<a href="2-bkm.html#SP1">&#167;1</a>), 2/trn (<a href="2-trn.html#SP1_2">&#167;1.2</a>, <a href="2-trn.html#SP2_2_1">&#167;2.2.1</a>).</p>
<p class="endnote">The function Inter::Packages::read_metadata appears nowhere else.</p>
@ -364,7 +380,7 @@
<p class="endnote">The function Inter::Packages::clear_flag appears nowhere else.</p>
<p class="endnote">The function Inter::Packages::by_name is used in 2/st (<a href="2-st.html#SP11">&#167;11</a>), 4/tpc3 (<a href="4-tpc3.html#SP2">&#167;2</a>), 4/tcc2 (<a href="4-tcc2.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Packages::by_name is used in 2/st (<a href="2-st.html#SP11">&#167;11</a>), 2/trn (<a href="2-trn.html#SP2_2_1">&#167;2.2.1</a>, <a href="2-trn.html#SP3_1_1">&#167;3.1.1</a>), 4/tpc3 (<a href="4-tpc3.html#SP2">&#167;2</a>), 4/tcc2 (<a href="4-tcc2.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Packages::by_url appears nowhere else.</p>

View file

@ -30,7 +30,7 @@
<p class="inwebparagraph"></p>
<p class="endnote">The structure inter_symbols_table is accessed in 2/in, 2/tw, 2/pck, 2/sym, 3/iibf and here.</p>
<p class="endnote">The structure inter_symbols_table is accessed in 2/in, 2/tw, 2/pck, 2/sym, 2/trn, 3/iibf and here.</p>
<p class="inwebparagraph"><a id="SP2"></a><b>&#167;2. </b></p>
@ -223,11 +223,11 @@
<p class="inwebparagraph"></p>
<p class="endnote">The function Inter::SymbolsTables::symbol_from_name is used in <a href="#SP5">&#167;5</a>, <a href="#SP11">&#167;11</a>, 2/pck (<a href="2-pck.html#SP3">&#167;3</a>), 3/iitf (<a href="3-iitf.html#SP1">&#167;1</a>), 3/idt (<a href="3-idt.html#SP3">&#167;3</a>), 4/tpc (<a href="4-tpc.html#SP2">&#167;2</a>), 4/tac (<a href="4-tac.html#SP2">&#167;2</a>), 5/tlc (<a href="5-tlc.html#SP2">&#167;2</a>), 5/tic (<a href="5-tic.html#SP2">&#167;2</a>), 5/tlc3 (<a href="5-tlc3.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::SymbolsTables::symbol_from_name is used in <a href="#SP5">&#167;5</a>, <a href="#SP11">&#167;11</a>, 2/pck (<a href="2-pck.html#SP3">&#167;3</a>), 2/trn (<a href="2-trn.html#SP2_1">&#167;2.1</a>), 3/iitf (<a href="3-iitf.html#SP1">&#167;1</a>), 3/idt (<a href="3-idt.html#SP3">&#167;3</a>), 4/tpc (<a href="4-tpc.html#SP2">&#167;2</a>), 4/tac (<a href="4-tac.html#SP2">&#167;2</a>), 5/tlc (<a href="5-tlc.html#SP2">&#167;2</a>), 5/tic (<a href="5-tic.html#SP2">&#167;2</a>), 5/tlc3 (<a href="5-tlc3.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::SymbolsTables::symbol_from_name_not_equating appears nowhere else.</p>
<p class="endnote">The function Inter::SymbolsTables::symbol_from_name_creating is used in <a href="#SP5">&#167;5</a>, 3/iitf (<a href="3-iitf.html#SP1">&#167;1</a>).</p>
<p class="endnote">The function Inter::SymbolsTables::symbol_from_name_creating is used in <a href="#SP5">&#167;5</a>, 2/trn (<a href="2-trn.html#SP2_1_1">&#167;2.1.1</a>), 3/iitf (<a href="3-iitf.html#SP1">&#167;1</a>).</p>
<p class="endnote">The function Inter::SymbolsTables::symbol_from_name_creating_at_ID is used in 3/iibf (<a href="3-iibf.html#SP1_4_2">&#167;1.4.2</a>).</p>
@ -269,7 +269,7 @@
<p class="endnote">The function Inter::SymbolsTables::render_identifier_unique is used in <a href="#SP9">&#167;9</a>.</p>
<p class="endnote">The function Inter::SymbolsTables::create_with_unique_name appears nowhere else.</p>
<p class="endnote">The function Inter::SymbolsTables::create_with_unique_name is used in 2/trn (<a href="2-trn.html#SP2_2_1">&#167;2.2.1</a>, <a href="2-trn.html#SP3_1_1">&#167;3.1.1</a>).</p>
<p class="inwebparagraph"><a id="SP6"></a><b>&#167;6. From symbol to ID. </b>Symbols are represented in Inter bytecode by their ID numbers, but these only
make sense in the context of a symbols table: i.e., the same ID can have
@ -298,7 +298,7 @@ to access this: one following equations, the other not.
<p class="endnote">The function Inter::SymbolsTables::unequated_symbol_from_id is used in 3/vi (<a href="3-vi.html#SP1">&#167;1</a>).</p>
<p class="endnote">The function Inter::SymbolsTables::symbol_from_id is used in <a href="#SP7">&#167;7</a>, 2/sym (<a href="2-sym.html#SP4">&#167;4</a>), 3/iibf (<a href="3-iibf.html#SP1_5">&#167;1.5</a>), 3/vi (<a href="3-vi.html#SP1">&#167;1</a>), 3/idt (<a href="3-idt.html#SP2">&#167;2</a>, <a href="3-idt.html#SP3">&#167;3</a>), 4/tac (<a href="4-tac.html#SP2">&#167;2</a>), 4/tkc (<a href="4-tkc.html#SP2">&#167;2</a>), 4/tcc2 (<a href="4-tcc2.html#SP2">&#167;2</a>), 4/tic (<a href="4-tic.html#SP2">&#167;2</a>), 4/tpc5 (<a href="4-tpc5.html#SP2">&#167;2</a>), 4/tpc6 (<a href="4-tpc6.html#SP2">&#167;2</a>), 4/tpc7 (<a href="4-tpc7.html#SP2">&#167;2</a>), 5/trc (<a href="5-trc.html#SP2">&#167;2</a>), 5/tvc (<a href="5-tvc.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::SymbolsTables::symbol_from_id is used in <a href="#SP7">&#167;7</a>, 2/sym (<a href="2-sym.html#SP4">&#167;4</a>), 2/trn (<a href="2-trn.html#SP2">&#167;2</a>), 3/iibf (<a href="3-iibf.html#SP1_5">&#167;1.5</a>), 3/vi (<a href="3-vi.html#SP1">&#167;1</a>), 3/idt (<a href="3-idt.html#SP2">&#167;2</a>, <a href="3-idt.html#SP3">&#167;3</a>), 4/tac (<a href="4-tac.html#SP2">&#167;2</a>), 4/tkc (<a href="4-tkc.html#SP2">&#167;2</a>), 4/tcc2 (<a href="4-tcc2.html#SP2">&#167;2</a>), 4/tic (<a href="4-tic.html#SP2">&#167;2</a>), 4/tpc5 (<a href="4-tpc5.html#SP2">&#167;2</a>), 4/tpc6 (<a href="4-tpc6.html#SP2">&#167;2</a>), 4/tpc7 (<a href="4-tpc7.html#SP2">&#167;2</a>), 5/trc (<a href="5-trc.html#SP2">&#167;2</a>), 5/tvc (<a href="5-tvc.html#SP2">&#167;2</a>).</p>
<p class="inwebparagraph"><a id="SP7"></a><b>&#167;7. </b>It's convenient to have some abbreviations for common ways to access the above.
</p>
@ -433,7 +433,7 @@ a global symbol in any non-global context.
<p class="inwebparagraph"></p>
<p class="endnote">The function Inter::SymbolsTables::id_from_symbol_inner appears nowhere else.</p>
<p class="endnote">The function Inter::SymbolsTables::id_from_symbol_inner is used in 2/trn (<a href="2-trn.html#SP2_1">&#167;2.1</a>, <a href="2-trn.html#SP2_1_1">&#167;2.1.1</a>).</p>
<p class="endnote">The function Inter::SymbolsTables::id_from_symbol is used in 2/sym (<a href="2-sym.html#SP3">&#167;3</a>), 4/tpc3 (<a href="4-tpc3.html#SP2">&#167;2</a>), 5/tic (<a href="5-tic.html#SP2">&#167;2</a>).</p>
@ -503,7 +503,7 @@ a global symbol in any non-global context.
<p class="endnote">The function Inter::SymbolsTables::equate_textual is used in 4/tsc (<a href="4-tsc.html#SP1">&#167;1</a>).</p>
<p class="endnote">The function Inter::SymbolsTables::link is used in 4/tsc (<a href="4-tsc.html#SP1">&#167;1</a>).</p>
<p class="endnote">The function Inter::SymbolsTables::link is used in 2/trn (<a href="2-trn.html#SP2_2_1">&#167;2.2.1</a>, <a href="2-trn.html#SP3_1_1">&#167;3.1.1</a>), 4/tsc (<a href="4-tsc.html#SP1">&#167;1</a>).</p>
<p class="endnote">The function Inter::SymbolsTables::resolve_forward_references is used in 3/iitf (<a href="3-iitf.html#SP1">&#167;1</a>).</p>
@ -560,9 +560,9 @@ a global symbol in any non-global context.
<p class="inwebparagraph"></p>
<p class="endnote">The function Inter::SymbolsTables::url_name_to_symbol is used in <a href="#SP10">&#167;10</a>, 4/tsc (<a href="4-tsc.html#SP1">&#167;1</a>).</p>
<p class="endnote">The function Inter::SymbolsTables::url_name_to_symbol is used in <a href="#SP10">&#167;10</a>, 2/trn (<a href="2-trn.html#SP2_2">&#167;2.2</a>, <a href="2-trn.html#SP2_2_1">&#167;2.2.1</a>, <a href="2-trn.html#SP3_1_1">&#167;3.1.1</a>), 4/tsc (<a href="4-tsc.html#SP1">&#167;1</a>).</p>
<p class="endnote">The function Inter::SymbolsTables::symbol_to_url_name is used in 2/sym (<a href="2-sym.html#SP2">&#167;2</a>, <a href="2-sym.html#SP4">&#167;4</a>).</p>
<p class="endnote">The function Inter::SymbolsTables::symbol_to_url_name is used in 2/sym (<a href="2-sym.html#SP2">&#167;2</a>, <a href="2-sym.html#SP4">&#167;4</a>), 2/trn (<a href="2-trn.html#SP2_2">&#167;2.2</a>, <a href="2-trn.html#SP3_1_1">&#167;3.1.1</a>).</p>
<hr class="tocbar">
<ul class="toc"><li><a href="2-inl.html">Back to 'Inter Node Lists'</a></li><li><a href="2-pck.html">Continue with 'Packages'</a></li></ul><hr class="tocbar">

View file

@ -27,12 +27,14 @@
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">symbol_status</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inter_annotation_set</span><span class="plain"> </span><span class="identifier">ann_set</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">translate_text</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">link_time</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inter_symbol</span><span class="plain"> *</span><span class="identifier">linked_to</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">inter_symbol</span><span class="plain">;</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The structure inter_symbol is accessed in 2/st, 3/iibf, 3/iitf, 3/vi, 3/idt, 4/tmc, 4/tpc, 4/tac, 4/tpc2, 4/tpc3, 4/tkc, 4/tdc, 4/tvc2, 4/tcc2, 4/trc, 4/tic, 4/tpc4, 4/tpc5, 4/tpc6, 4/tpc7, 5/tlc, 5/tlc2, 5/tic, 5/trc, 5/tvc, 5/tlc3, 5/tcc2 and here.</p>
<p class="endnote">The structure inter_symbol is accessed in 2/st, 2/trn, 3/iibf, 3/iitf, 3/vi, 3/idt, 4/tmc, 4/tpc, 4/tac, 4/tpc2, 4/tpc3, 4/tkc, 4/tdc, 4/tvc2, 4/tcc2, 4/trc, 4/tic, 4/tpc4, 4/tpc5, 4/tpc6, 4/tpc7, 5/tlc, 5/tlc2, 5/tic, 5/trc, 5/tvc, 5/tlc3, 5/tcc2 and here.</p>
<p class="inwebparagraph"><a id="SP2"></a><b>&#167;2. </b></p>
@ -53,6 +55,8 @@
<span class="identifier">symb</span><span class="plain">-</span><span class="element">&gt;equated_to</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">symb</span><span class="plain">-</span><span class="element">&gt;equated_name</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">symb</span><span class="plain">-</span><span class="element">&gt;translate_text</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">symb</span><span class="plain">-</span><span class="element">&gt;link_time</span><span class="plain"> = 0;</span>
<span class="identifier">symb</span><span class="plain">-</span><span class="element">&gt;linked_to</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">LOGIF</span><span class="plain">(</span><span class="identifier">INTER_SYMBOLS</span><span class="plain">, </span><span class="string">"Created symbol $3 in $4\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">symb</span><span class="plain">, </span><span class="identifier">T</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">symb</span><span class="plain">;</span>

View file

@ -0,0 +1,386 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>2/ann</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Content-Language" content="en-gb">
<link href="inweb.css" rel="stylesheet" rev="stylesheet" type="text/css">
</head>
<body>
<!--Weave of '2/trn' generated by 7-->
<ul class="crumbs"><li><a href="../webs.html">&#9733;</a></li><li><a href="index.html">inter</a></li><li><a href="index.html#2">Chapter 2: Interoperability</a></li><li><b>Transmigration</b></li></ul><p class="purpose">To move packages between repositories.</p>
<p class="inwebparagraph"><a id="SP1"></a><b>&#167;1. </b></p>
<pre class="display">
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">ipct_cache_count</span><span class="plain"> = 0;</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Inter::Transmigration::cache</span><span class="plain">(</span><span class="reserved">inter_symbol</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">inter_symbol</span><span class="plain"> *</span><span class="identifier">V</span><span class="plain">) {</span>
<span class="identifier">S</span><span class="plain">-</span><span class="element">&gt;linked_to</span><span class="plain"> = </span><span class="identifier">V</span><span class="plain">;</span>
<span class="identifier">S</span><span class="plain">-</span><span class="element">&gt;link_time</span><span class="plain"> = </span><span class="identifier">ipct_cache_count</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">inter_symbol</span><span class="plain"> *</span><span class="functiontext">Inter::Transmigration::cached_equivalent</span><span class="plain">(</span><span class="reserved">inter_symbol</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">S</span><span class="plain">-</span><span class="element">&gt;link_time</span><span class="plain"> == </span><span class="identifier">ipct_cache_count</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">S</span><span class="plain">-</span><span class="element">&gt;linked_to</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Inter::Transmigration::move</span><span class="plain">(</span><span class="reserved">inter_package</span><span class="plain"> *</span><span class="identifier">migrant</span><span class="plain">, </span><span class="reserved">inter_package</span><span class="plain"> *</span><span class="identifier">destination</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">tidy_origin</span><span class="plain">) {</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"Move $5 to $5\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">migrant</span><span class="plain">, </span><span class="identifier">destination</span><span class="plain">);</span>
<span class="reserved">inter_package</span><span class="plain"> *</span><span class="identifier">origin</span><span class="plain"> = </span><span class="functiontext">Inter::Packages::parent</span><span class="plain">(</span><span class="identifier">migrant</span><span class="plain">);</span>
<span class="reserved">inter_bookmark</span><span class="plain"> </span><span class="identifier">deletion_point</span><span class="plain">, </span><span class="identifier">insertion_point</span><span class="plain">, </span><span class="identifier">linkage_point</span><span class="plain">, </span><span class="identifier">primitives_point</span><span class="plain">;</span>
&lt;<span class="cwebmacro">Create these bookmarks</span> <span class="cwebmacronumber">1.1</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Mark the insertion and deletion points with comments</span> <span class="cwebmacronumber">1.2</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Physically move the subtree to its new home</span> <span class="cwebmacronumber">1.3</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Correct any references from the migrant to the origin</span> <span class="cwebmacronumber">1.5</span>&gt;<span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">tidy_origin</span><span class="plain">) </span>&lt;<span class="cwebmacro">Correct any references from the origin to the migrant</span> <span class="cwebmacronumber">1.6</span>&gt;<span class="plain">;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function Inter::Transmigration::cache is used in <a href="#SP2_1">&#167;2.1</a>, <a href="#SP2_2">&#167;2.2</a>, <a href="#SP3_1">&#167;3.1</a>.</p>
<p class="endnote">The function Inter::Transmigration::cached_equivalent is used in <a href="#SP2_1">&#167;2.1</a>, <a href="#SP2_2">&#167;2.2</a>, <a href="#SP3_1">&#167;3.1</a>.</p>
<p class="endnote">The function Inter::Transmigration::move appears nowhere else.</p>
<p class="inwebparagraph"><a id="SP1_1"></a><b>&#167;1.1. </b><code class="display">
&lt;<span class="cwebmacrodefn">Create these bookmarks</span> <span class="cwebmacronumber">1.1</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="identifier">deletion_point</span><span class="plain"> =</span>
<span class="functiontext">Inter::Bookmarks::after_this_node</span><span class="plain">(</span><span class="identifier">migrant</span><span class="plain">-</span><span class="element">&gt;package_head</span><span class="plain">-</span><span class="element">&gt;tree</span><span class="plain">, </span><span class="identifier">migrant</span><span class="plain">-</span><span class="element">&gt;package_head</span><span class="plain">);</span>
<span class="identifier">insertion_point</span><span class="plain"> =</span>
<span class="functiontext">Inter::Bookmarks::at_end_of_this_package</span><span class="plain">(</span><span class="identifier">destination</span><span class="plain">);</span>
<span class="identifier">linkage_point</span><span class="plain"> = </span><span class="functiontext">Inter::Bookmarks::at_end_of_this_package</span><span class="plain">(</span><span class="identifier">migrant</span><span class="plain">);</span>
<span class="reserved">inter_tree_node</span><span class="plain"> *</span><span class="identifier">prims</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">LOOP_THROUGH_INTER_CHILDREN</span><span class="plain">(</span><span class="identifier">F</span><span class="plain">, </span><span class="identifier">destination</span><span class="plain">-</span><span class="element">&gt;package_head</span><span class="plain">-</span><span class="element">&gt;tree</span><span class="plain">-</span><span class="element">&gt;root_node</span><span class="plain">)</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">F</span><span class="plain">-</span><span class="element">&gt;W.data</span><span class="plain">[</span><span class="constant">ID_IFLD</span><span class="plain">] == </span><span class="constant">PRIMITIVE_IST</span><span class="plain">)</span>
<span class="identifier">prims</span><span class="plain"> = </span><span class="identifier">F</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">prims</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"dest has no prims"</span><span class="plain">);</span>
<span class="identifier">primitives_point</span><span class="plain"> = </span><span class="functiontext">Inter::Bookmarks::after_this_node</span><span class="plain">(</span><span class="identifier">destination</span><span class="plain">-</span><span class="element">&gt;package_head</span><span class="plain">-</span><span class="element">&gt;tree</span><span class="plain">, </span><span class="identifier">prims</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP1">&#167;1</a>.</p>
<p class="inwebparagraph"><a id="SP1_2"></a><b>&#167;1.2. </b><code class="display">
&lt;<span class="cwebmacrodefn">Mark the insertion and deletion points with comments</span> <span class="cwebmacronumber">1.2</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">C1</span><span class="plain"> = </span><span class="functiontext">Inter::Warehouse::create_text</span><span class="plain">(</span><span class="functiontext">Inter::Bookmarks::warehouse</span><span class="plain">(&amp;</span><span class="identifier">deletion_point</span><span class="plain">), </span><span class="functiontext">Inter::Bookmarks::package</span><span class="plain">(&amp;</span><span class="identifier">deletion_point</span><span class="plain">));</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="functiontext">Inter::Warehouse::get_text</span><span class="plain">(</span><span class="functiontext">Inter::Bookmarks::warehouse</span><span class="plain">(&amp;</span><span class="identifier">deletion_point</span><span class="plain">), </span><span class="identifier">C1</span><span class="plain">),</span>
<span class="string">"Exported %S here"</span><span class="plain">, </span><span class="functiontext">Inter::Packages::name</span><span class="plain">(</span><span class="identifier">migrant</span><span class="plain">));</span>
<span class="functiontext">Inter::Comment::new</span><span class="plain">(&amp;</span><span class="identifier">deletion_point</span><span class="plain">, (</span><span class="constant">inter_t</span><span class="plain">) </span><span class="functiontext">Inter::Packages::baseline</span><span class="plain">(</span><span class="identifier">migrant</span><span class="plain">), </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">C1</span><span class="plain">);</span>
<span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">C2</span><span class="plain"> = </span><span class="functiontext">Inter::Warehouse::create_text</span><span class="plain">(</span><span class="functiontext">Inter::Bookmarks::warehouse</span><span class="plain">(&amp;</span><span class="identifier">insertion_point</span><span class="plain">), </span><span class="functiontext">Inter::Bookmarks::package</span><span class="plain">(&amp;</span><span class="identifier">insertion_point</span><span class="plain">));</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="functiontext">Inter::Warehouse::get_text</span><span class="plain">(</span><span class="functiontext">Inter::Bookmarks::warehouse</span><span class="plain">(&amp;</span><span class="identifier">insertion_point</span><span class="plain">), </span><span class="identifier">C2</span><span class="plain">),</span>
<span class="string">"Imported %S here"</span><span class="plain">, </span><span class="functiontext">Inter::Packages::name</span><span class="plain">(</span><span class="identifier">migrant</span><span class="plain">));</span>
<span class="functiontext">Inter::Comment::new</span><span class="plain">(&amp;</span><span class="identifier">insertion_point</span><span class="plain">, (</span><span class="constant">inter_t</span><span class="plain">) </span><span class="functiontext">Inter::Packages::baseline</span><span class="plain">(</span><span class="identifier">destination</span><span class="plain">) + 1, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">C2</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP1">&#167;1</a>.</p>
<p class="inwebparagraph"><a id="SP1_3"></a><b>&#167;1.3. </b><code class="display">
&lt;<span class="cwebmacrodefn">Physically move the subtree to its new home</span> <span class="cwebmacronumber">1.3</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="functiontext">Inter::Packages::remove_subpackage_name</span><span class="plain">(</span><span class="functiontext">Inter::Packages::parent</span><span class="plain">(</span><span class="identifier">migrant</span><span class="plain">), </span><span class="identifier">migrant</span><span class="plain">);</span>
<span class="functiontext">Inter::Packages::add_subpackage_name</span><span class="plain">(</span><span class="identifier">destination</span><span class="plain">, </span><span class="identifier">migrant</span><span class="plain">);</span>
<span class="functiontext">Inter::Bookmarks::insert</span><span class="plain">(&amp;</span><span class="identifier">insertion_point</span><span class="plain">, </span><span class="identifier">migrant</span><span class="plain">-</span><span class="element">&gt;package_head</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP1">&#167;1</a>.</p>
<p class="inwebparagraph"><a id="SP1_4"></a><b>&#167;1.4. </b></p>
<pre class="display">
<span class="reserved">typedef</span><span class="plain"> </span><span class="reserved">struct</span><span class="plain"> </span><span class="reserved">ipct_state</span><span class="plain"> {</span>
<span class="reserved">inter_package</span><span class="plain"> *</span><span class="identifier">migrant</span><span class="plain">;</span>
<span class="reserved">inter_package</span><span class="plain"> *</span><span class="identifier">destination</span><span class="plain">;</span>
<span class="reserved">inter_package</span><span class="plain"> *</span><span class="identifier">links</span><span class="plain">;</span>
<span class="reserved">inter_bookmark</span><span class="plain"> *</span><span class="identifier">linkage_point</span><span class="plain">;</span>
<span class="reserved">inter_bookmark</span><span class="plain"> *</span><span class="identifier">primitives_point</span><span class="plain">;</span>
<span class="reserved">inter_symbols_table</span><span class="plain"> *</span><span class="identifier">origin_globals</span><span class="plain">;</span>
<span class="reserved">inter_symbols_table</span><span class="plain"> *</span><span class="identifier">destination_globals</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">ipct_state</span><span class="plain">;</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The structure ipct_state is private to this section.</p>
<p class="inwebparagraph"><a id="SP1_5"></a><b>&#167;1.5. </b><code class="display">
&lt;<span class="cwebmacrodefn">Correct any references from the migrant to the origin</span> <span class="cwebmacronumber">1.5</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="identifier">ipct_cache_count</span><span class="plain">++;</span>
<span class="reserved">ipct_state</span><span class="plain"> </span><span class="identifier">ipct</span><span class="plain">;</span>
<span class="identifier">ipct</span><span class="element">.migrant</span><span class="plain"> = </span><span class="identifier">migrant</span><span class="plain">;</span>
<span class="identifier">ipct</span><span class="element">.destination</span><span class="plain"> = </span><span class="identifier">destination</span><span class="plain">;</span>
<span class="identifier">ipct</span><span class="element">.links</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">ipct</span><span class="element">.origin_globals</span><span class="plain"> = </span><span class="functiontext">Inter::Tree::global_scope</span><span class="plain">(</span><span class="identifier">migrant</span><span class="plain">-</span><span class="element">&gt;package_head</span><span class="plain">-</span><span class="element">&gt;tree</span><span class="plain">);</span>
<span class="identifier">ipct</span><span class="element">.destination_globals</span><span class="plain"> = </span><span class="functiontext">Inter::Tree::global_scope</span><span class="plain">(</span><span class="identifier">destination</span><span class="plain">-</span><span class="element">&gt;package_head</span><span class="plain">-</span><span class="element">&gt;tree</span><span class="plain">);</span>
<span class="identifier">ipct</span><span class="element">.linkage_point</span><span class="plain"> = &amp;</span><span class="identifier">linkage_point</span><span class="plain">;</span>
<span class="identifier">ipct</span><span class="element">.primitives_point</span><span class="plain"> = &amp;</span><span class="identifier">primitives_point</span><span class="plain">;</span>
<span class="functiontext">Inter::Tree::traverse</span><span class="plain">(</span><span class="identifier">destination</span><span class="plain">-</span><span class="element">&gt;package_head</span><span class="plain">-</span><span class="element">&gt;tree</span><span class="plain">,</span>
<span class="functiontext">Inter::Transmigration::correct_migrant</span><span class="plain">, &amp;</span><span class="identifier">ipct</span><span class="plain">, </span><span class="identifier">migrant</span><span class="plain">, 0);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP1">&#167;1</a>.</p>
<p class="inwebparagraph"><a id="SP2"></a><b>&#167;2. </b></p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Inter::Transmigration::correct_migrant</span><span class="plain">(</span><span class="reserved">inter_tree</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">, </span><span class="reserved">inter_tree_node</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain">, </span><span class="reserved">void</span><span class="plain"> *</span><span class="identifier">state</span><span class="plain">) {</span>
<span class="reserved">ipct_state</span><span class="plain"> *</span><span class="identifier">ipct</span><span class="plain"> = (</span><span class="reserved">ipct_state</span><span class="plain"> *) </span><span class="identifier">state</span><span class="plain">;</span>
<span class="identifier">P</span><span class="plain">-</span><span class="element">&gt;tree</span><span class="plain"> = </span><span class="identifier">I</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">P</span><span class="plain">-</span><span class="element">&gt;W.data</span><span class="plain">[</span><span class="constant">ID_IFLD</span><span class="plain">] == </span><span class="constant">INV_IST</span><span class="plain">) &amp;&amp; (</span><span class="identifier">P</span><span class="plain">-</span><span class="element">&gt;W.data</span><span class="plain">[</span><span class="constant">METHOD_INV_IFLD</span><span class="plain">] == </span><span class="constant">INVOKED_PRIMITIVE</span><span class="plain">)) {</span>
<span class="reserved">inter_symbol</span><span class="plain"> *</span><span class="identifier">primitive</span><span class="plain"> =</span>
<span class="functiontext">Inter::SymbolsTables::symbol_from_id</span><span class="plain">(</span><span class="identifier">ipct</span><span class="plain">-</span><span class="element">&gt;origin_globals</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">-</span><span class="element">&gt;W.data</span><span class="plain">[</span><span class="constant">INVOKEE_INV_IFLD</span><span class="plain">]);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">primitive</span><span class="plain">) </span>&lt;<span class="cwebmacro">Correct the reference to this primitive</span> <span class="cwebmacronumber">2.1</span>&gt;<span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">P</span><span class="plain">-</span><span class="element">&gt;W.data</span><span class="plain">[</span><span class="constant">ID_IFLD</span><span class="plain">] == </span><span class="constant">PACKAGE_IST</span><span class="plain">) {</span>
<span class="reserved">inter_package</span><span class="plain"> *</span><span class="identifier">pack</span><span class="plain"> = </span><span class="functiontext">Inter::Package::defined_by_frame</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">pack</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"no package defined here"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Inter::Packages::is_linklike</span><span class="plain">(</span><span class="identifier">pack</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain">;</span>
<span class="reserved">inter_symbols_table</span><span class="plain"> *</span><span class="identifier">T</span><span class="plain"> = </span><span class="functiontext">Inter::Packages::scope</span><span class="plain">(</span><span class="identifier">pack</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">T</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"package with no symbols"</span><span class="plain">);</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">=0; </span><span class="identifier">i</span><span class="plain">&lt;</span><span class="identifier">T</span><span class="plain">-</span><span class="element">&gt;size</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">++) {</span>
<span class="reserved">inter_symbol</span><span class="plain"> *</span><span class="identifier">symb</span><span class="plain"> = </span><span class="identifier">T</span><span class="plain">-</span><span class="element">&gt;symbol_array</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">];</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">symb</span><span class="plain">) &amp;&amp; (</span><span class="identifier">symb</span><span class="plain">-</span><span class="element">&gt;equated_to</span><span class="plain">)) {</span>
<span class="reserved">inter_symbol</span><span class="plain"> *</span><span class="identifier">target</span><span class="plain"> = </span><span class="identifier">symb</span><span class="plain">-</span><span class="element">&gt;equated_to</span><span class="plain">;</span>
<span class="reserved">while</span><span class="plain"> (</span><span class="identifier">target</span><span class="plain">-</span><span class="element">&gt;equated_to</span><span class="plain">) </span><span class="identifier">target</span><span class="plain"> = </span><span class="identifier">target</span><span class="plain">-</span><span class="element">&gt;equated_to</span><span class="plain">;</span>
<span class="reserved">inter_package</span><span class="plain"> *</span><span class="identifier">target_package</span><span class="plain"> = </span><span class="identifier">target</span><span class="plain">-</span><span class="element">&gt;owning_table</span><span class="plain">-</span><span class="element">&gt;owning_package</span><span class="plain">;</span>
<span class="reserved">while</span><span class="plain"> ((</span><span class="identifier">target_package</span><span class="plain">) &amp;&amp; (</span><span class="identifier">target_package</span><span class="plain"> != </span><span class="identifier">ipct</span><span class="plain">-</span><span class="element">&gt;migrant</span><span class="plain">)) {</span>
<span class="identifier">target_package</span><span class="plain"> = </span><span class="functiontext">Inter::Packages::parent</span><span class="plain">(</span><span class="identifier">target_package</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">target_package</span><span class="plain"> != </span><span class="identifier">ipct</span><span class="plain">-</span><span class="element">&gt;migrant</span><span class="plain">)</span>
&lt;<span class="cwebmacro">Correct the reference to this symbol</span> <span class="cwebmacronumber">2.2</span>&gt;<span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function Inter::Transmigration::correct_migrant is used in <a href="#SP1_5">&#167;1.5</a>.</p>
<p class="inwebparagraph"><a id="SP2_1"></a><b>&#167;2.1. </b><code class="display">
&lt;<span class="cwebmacrodefn">Correct the reference to this primitive</span> <span class="cwebmacronumber">2.1</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="reserved">inter_symbol</span><span class="plain"> *</span><span class="identifier">equivalent_primitive</span><span class="plain"> = </span><span class="functiontext">Inter::Transmigration::cached_equivalent</span><span class="plain">(</span><span class="identifier">primitive</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">equivalent_primitive</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
<span class="identifier">equivalent_primitive</span><span class="plain"> = </span><span class="functiontext">Inter::SymbolsTables::symbol_from_name</span><span class="plain">(</span><span class="identifier">ipct</span><span class="plain">-</span><span class="element">&gt;destination_globals</span><span class="plain">, </span><span class="identifier">primitive</span><span class="plain">-</span><span class="element">&gt;symbol_name</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">equivalent_primitive</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span>&lt;<span class="cwebmacro">Duplicate this primitive</span> <span class="cwebmacronumber">2.1.1</span>&gt;<span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">equivalent_primitive</span><span class="plain">) </span><span class="functiontext">Inter::Transmigration::cache</span><span class="plain">(</span><span class="identifier">primitive</span><span class="plain">, </span><span class="identifier">equivalent_primitive</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">equivalent_primitive</span><span class="plain">)</span>
<span class="identifier">P</span><span class="plain">-</span><span class="element">&gt;W.data</span><span class="plain">[</span><span class="constant">INVOKEE_INV_IFLD</span><span class="plain">] = </span><span class="functiontext">Inter::SymbolsTables::id_from_symbol_inner</span><span class="plain">(</span><span class="identifier">ipct</span><span class="plain">-</span><span class="element">&gt;destination_globals</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">equivalent_primitive</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP2">&#167;2</a>.</p>
<p class="inwebparagraph"><a id="SP2_1_1"></a><b>&#167;2.1.1. </b><code class="display">
&lt;<span class="cwebmacrodefn">Duplicate this primitive</span> <span class="cwebmacronumber">2.1.1</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="identifier">equivalent_primitive</span><span class="plain"> = </span><span class="functiontext">Inter::SymbolsTables::symbol_from_name_creating</span><span class="plain">(</span><span class="identifier">ipct</span><span class="plain">-</span><span class="element">&gt;destination_globals</span><span class="plain">, </span><span class="identifier">primitive</span><span class="plain">-</span><span class="element">&gt;symbol_name</span><span class="plain">);</span>
<span class="reserved">inter_tree_node</span><span class="plain"> *</span><span class="identifier">D</span><span class="plain"> = </span><span class="functiontext">Inter::Node::fill_1</span><span class="plain">(</span><span class="identifier">ipct</span><span class="plain">-</span><span class="element">&gt;primitives_point</span><span class="plain">, </span><span class="constant">PRIMITIVE_IST</span><span class="plain">, </span><span class="functiontext">Inter::SymbolsTables::id_from_symbol_inner</span><span class="plain">(</span><span class="identifier">ipct</span><span class="plain">-</span><span class="element">&gt;destination_globals</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">equivalent_primitive</span><span class="plain">), </span><span class="identifier">NULL</span><span class="plain">, 0);</span>
<span class="reserved">inter_tree_node</span><span class="plain"> *</span><span class="identifier">old_D</span><span class="plain"> = </span><span class="identifier">primitive</span><span class="plain">-</span><span class="element">&gt;definition</span><span class="plain">;</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">=</span><span class="constant">CAT_PRIM_IFLD</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">&lt;</span><span class="identifier">old_D</span><span class="plain">-</span><span class="element">&gt;W.extent</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">++) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Inter::Node::extend</span><span class="plain">(</span><span class="identifier">D</span><span class="plain">, (</span><span class="constant">inter_t</span><span class="plain">) 1) == </span><span class="identifier">FALSE</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"can't extend"</span><span class="plain">);</span>
<span class="identifier">D</span><span class="plain">-</span><span class="element">&gt;W.data</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">] = </span><span class="identifier">old_D</span><span class="plain">-</span><span class="element">&gt;W.data</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">];</span>
<span class="plain">}</span>
<span class="reserved">inter_error_message</span><span class="plain"> *</span><span class="identifier">E</span><span class="plain"> = </span><span class="functiontext">Inter::Defn::verify_construct</span><span class="plain">(</span><span class="functiontext">Inter::Bookmarks::package</span><span class="plain">(</span><span class="identifier">ipct</span><span class="plain">-</span><span class="element">&gt;primitives_point</span><span class="plain">), </span><span class="identifier">D</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">E</span><span class="plain">) {</span>
<span class="functiontext">Inter::Errors::issue</span><span class="plain">(</span><span class="identifier">E</span><span class="plain">);</span>
<span class="identifier">equivalent_primitive</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="functiontext">Inter::Bookmarks::insert</span><span class="plain">(</span><span class="identifier">ipct</span><span class="plain">-</span><span class="element">&gt;primitives_point</span><span class="plain">, </span><span class="identifier">D</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP2_1">&#167;2.1</a>.</p>
<p class="inwebparagraph"><a id="SP2_2"></a><b>&#167;2.2. </b><code class="display">
&lt;<span class="cwebmacrodefn">Correct the reference to this symbol</span> <span class="cwebmacronumber">2.2</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="reserved">inter_symbol</span><span class="plain"> *</span><span class="identifier">equivalent</span><span class="plain"> = </span><span class="functiontext">Inter::Transmigration::cached_equivalent</span><span class="plain">(</span><span class="identifier">target</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">equivalent</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">URL</span><span class="plain">);</span>
<span class="functiontext">Inter::SymbolsTables::symbol_to_url_name</span><span class="plain">(</span><span class="identifier">URL</span><span class="plain">, </span><span class="identifier">target</span><span class="plain">);</span>
<span class="identifier">equivalent</span><span class="plain"> = </span><span class="functiontext">Inter::SymbolsTables::url_name_to_symbol</span><span class="plain">(</span><span class="identifier">ipct</span><span class="plain">-</span><span class="element">&gt;destination</span><span class="plain">-</span><span class="element">&gt;package_head</span><span class="plain">-</span><span class="element">&gt;tree</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">URL</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">equivalent</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">)</span>
&lt;<span class="cwebmacro">Create a link symbol to represent the unavailability of this symbol</span> <span class="cwebmacronumber">2.2.1</span>&gt;<span class="plain">;</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">URL</span><span class="plain">);</span>
<span class="functiontext">Inter::Transmigration::cache</span><span class="plain">(</span><span class="identifier">target</span><span class="plain">, </span><span class="identifier">equivalent</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="identifier">symb</span><span class="plain">-</span><span class="element">&gt;equated_to</span><span class="plain"> = </span><span class="identifier">equivalent</span><span class="plain">;</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP2">&#167;2</a>.</p>
<p class="inwebparagraph"><a id="SP2_2_1"></a><b>&#167;2.2.1. </b><code class="display">
&lt;<span class="cwebmacrodefn">Create a link symbol to represent the unavailability of this symbol</span> <span class="cwebmacronumber">2.2.1</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ipct</span><span class="plain">-</span><span class="element">&gt;links</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">)</span>
<span class="identifier">ipct</span><span class="plain">-</span><span class="element">&gt;links</span><span class="plain"> = </span><span class="functiontext">Inter::Packages::by_name</span><span class="plain">(</span><span class="identifier">ipct</span><span class="plain">-</span><span class="element">&gt;migrant</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"links"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ipct</span><span class="plain">-</span><span class="element">&gt;links</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
<span class="reserved">inter_symbol</span><span class="plain"> *</span><span class="identifier">linkage</span><span class="plain"> = </span><span class="functiontext">Inter::SymbolsTables::url_name_to_symbol</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"/_linkage"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">linkage</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"no linkage ptype"</span><span class="plain">);</span>
<span class="functiontext">Inter::Package::new_package</span><span class="plain">(</span><span class="identifier">ipct</span><span class="plain">-</span><span class="element">&gt;linkage_point</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"links"</span><span class="plain">, </span><span class="identifier">linkage</span><span class="plain">, (</span><span class="constant">inter_t</span><span class="plain">) </span><span class="functiontext">Inter::Packages::baseline</span><span class="plain">(</span><span class="identifier">ipct</span><span class="plain">-</span><span class="element">&gt;migrant</span><span class="plain">) + 1, </span><span class="identifier">NULL</span><span class="plain">, &amp;(</span><span class="identifier">ipct</span><span class="plain">-</span><span class="element">&gt;links</span><span class="plain">));</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ipct</span><span class="plain">-</span><span class="element">&gt;links</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"couldn't create links"</span><span class="plain">);</span>
<span class="functiontext">Inter::Packages::make_linklike</span><span class="plain">(</span><span class="identifier">ipct</span><span class="plain">-</span><span class="element">&gt;links</span><span class="plain">);</span>
<span class="identifier">equivalent</span><span class="plain"> = </span><span class="functiontext">Inter::SymbolsTables::create_with_unique_name</span><span class="plain">(</span><span class="functiontext">Inter::Packages::scope</span><span class="plain">(</span><span class="identifier">ipct</span><span class="plain">-</span><span class="element">&gt;links</span><span class="plain">), </span><span class="identifier">target</span><span class="plain">-</span><span class="element">&gt;symbol_name</span><span class="plain">);</span>
<span class="functiontext">Inter::SymbolsTables::link</span><span class="plain">(</span><span class="identifier">equivalent</span><span class="plain">, </span><span class="identifier">URL</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP2_2">&#167;2.2</a>.</p>
<p class="inwebparagraph"><a id="SP1_6"></a><b>&#167;1.6. </b><code class="display">
&lt;<span class="cwebmacrodefn">Correct any references from the origin to the migrant</span> <span class="cwebmacronumber">1.6</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="identifier">ipct_cache_count</span><span class="plain">++;</span>
<span class="reserved">ipct_state</span><span class="plain"> </span><span class="identifier">ipct</span><span class="plain">;</span>
<span class="identifier">ipct</span><span class="element">.migrant</span><span class="plain"> = </span><span class="identifier">migrant</span><span class="plain">;</span>
<span class="identifier">ipct</span><span class="element">.destination</span><span class="plain"> = </span><span class="identifier">destination</span><span class="plain">;</span>
<span class="identifier">ipct</span><span class="element">.links</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">ipct</span><span class="element">.origin_globals</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">ipct</span><span class="element">.destination_globals</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">ipct</span><span class="element">.linkage_point</span><span class="plain"> = &amp;</span><span class="identifier">deletion_point</span><span class="plain">;</span>
<span class="identifier">ipct</span><span class="element">.primitives_point</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="functiontext">Inter::Tree::traverse</span><span class="plain">(</span><span class="identifier">origin</span><span class="plain">-</span><span class="element">&gt;package_head</span><span class="plain">-</span><span class="element">&gt;tree</span><span class="plain">,</span>
<span class="functiontext">Inter::Transmigration::correct_origin</span><span class="plain">, &amp;</span><span class="identifier">ipct</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, 0);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP1">&#167;1</a>.</p>
<p class="inwebparagraph"><a id="SP3"></a><b>&#167;3. </b></p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Inter::Transmigration::correct_origin</span><span class="plain">(</span><span class="reserved">inter_tree</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">, </span><span class="reserved">inter_tree_node</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain">, </span><span class="reserved">void</span><span class="plain"> *</span><span class="identifier">state</span><span class="plain">) {</span>
<span class="reserved">ipct_state</span><span class="plain"> *</span><span class="identifier">ipct</span><span class="plain"> = (</span><span class="reserved">ipct_state</span><span class="plain"> *) </span><span class="identifier">state</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">P</span><span class="plain">-</span><span class="element">&gt;W.data</span><span class="plain">[</span><span class="constant">ID_IFLD</span><span class="plain">] == </span><span class="constant">PACKAGE_IST</span><span class="plain">) {</span>
<span class="reserved">inter_package</span><span class="plain"> *</span><span class="identifier">pack</span><span class="plain"> = </span><span class="functiontext">Inter::Package::defined_by_frame</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">pack</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"no package defined here"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Inter::Packages::is_linklike</span><span class="plain">(</span><span class="identifier">pack</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain">;</span>
<span class="reserved">inter_symbols_table</span><span class="plain"> *</span><span class="identifier">T</span><span class="plain"> = </span><span class="functiontext">Inter::Packages::scope</span><span class="plain">(</span><span class="identifier">pack</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">T</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"package with no symbols"</span><span class="plain">);</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">=0; </span><span class="identifier">i</span><span class="plain">&lt;</span><span class="identifier">T</span><span class="plain">-</span><span class="element">&gt;size</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">++) {</span>
<span class="reserved">inter_symbol</span><span class="plain"> *</span><span class="identifier">symb</span><span class="plain"> = </span><span class="identifier">T</span><span class="plain">-</span><span class="element">&gt;symbol_array</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">];</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">symb</span><span class="plain">) &amp;&amp; (</span><span class="identifier">symb</span><span class="plain">-</span><span class="element">&gt;equated_to</span><span class="plain">)) {</span>
<span class="reserved">inter_symbol</span><span class="plain"> *</span><span class="identifier">target</span><span class="plain"> = </span><span class="identifier">symb</span><span class="plain">-</span><span class="element">&gt;equated_to</span><span class="plain">;</span>
<span class="reserved">while</span><span class="plain"> (</span><span class="identifier">target</span><span class="plain">-</span><span class="element">&gt;equated_to</span><span class="plain">) </span><span class="identifier">target</span><span class="plain"> = </span><span class="identifier">target</span><span class="plain">-</span><span class="element">&gt;equated_to</span><span class="plain">;</span>
<span class="reserved">inter_package</span><span class="plain"> *</span><span class="identifier">target_package</span><span class="plain"> = </span><span class="identifier">target</span><span class="plain">-</span><span class="element">&gt;owning_table</span><span class="plain">-</span><span class="element">&gt;owning_package</span><span class="plain">;</span>
<span class="reserved">while</span><span class="plain"> ((</span><span class="identifier">target_package</span><span class="plain">) &amp;&amp; (</span><span class="identifier">target_package</span><span class="plain"> != </span><span class="identifier">ipct</span><span class="plain">-</span><span class="element">&gt;migrant</span><span class="plain">)) {</span>
<span class="identifier">target_package</span><span class="plain"> = </span><span class="functiontext">Inter::Packages::parent</span><span class="plain">(</span><span class="identifier">target_package</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">target_package</span><span class="plain"> == </span><span class="identifier">ipct</span><span class="plain">-</span><span class="element">&gt;migrant</span><span class="plain">)</span>
&lt;<span class="cwebmacro">Correct the origin reference to this migrant symbol</span> <span class="cwebmacronumber">3.1</span>&gt;<span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function Inter::Transmigration::correct_origin is used in <a href="#SP1_6">&#167;1.6</a>.</p>
<p class="inwebparagraph"><a id="SP3_1"></a><b>&#167;3.1. </b><code class="display">
&lt;<span class="cwebmacrodefn">Correct the origin reference to this migrant symbol</span> <span class="cwebmacronumber">3.1</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="reserved">inter_symbol</span><span class="plain"> *</span><span class="identifier">equivalent</span><span class="plain"> = </span><span class="functiontext">Inter::Transmigration::cached_equivalent</span><span class="plain">(</span><span class="identifier">target</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">equivalent</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
&lt;<span class="cwebmacro">Create a link symbol in the origin</span> <span class="cwebmacronumber">3.1.1</span>&gt;<span class="plain">;</span>
<span class="functiontext">Inter::Transmigration::cache</span><span class="plain">(</span><span class="identifier">target</span><span class="plain">, </span><span class="identifier">equivalent</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="identifier">symb</span><span class="plain">-</span><span class="element">&gt;equated_to</span><span class="plain"> = </span><span class="identifier">equivalent</span><span class="plain">;</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP3">&#167;3</a>.</p>
<p class="inwebparagraph"><a id="SP3_1_1"></a><b>&#167;3.1.1. </b><code class="display">
&lt;<span class="cwebmacrodefn">Create a link symbol in the origin</span> <span class="cwebmacronumber">3.1.1</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ipct</span><span class="plain">-</span><span class="element">&gt;links</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">)</span>
<span class="identifier">ipct</span><span class="plain">-</span><span class="element">&gt;links</span><span class="plain"> = </span><span class="functiontext">Inter::Packages::by_name</span><span class="plain">(</span><span class="functiontext">Inter::Bookmarks::package</span><span class="plain">(</span><span class="identifier">ipct</span><span class="plain">-</span><span class="element">&gt;linkage_point</span><span class="plain">), </span><span class="identifier">I</span><span class="string">"links"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ipct</span><span class="plain">-</span><span class="element">&gt;links</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
<span class="reserved">inter_symbol</span><span class="plain"> *</span><span class="identifier">linkage</span><span class="plain"> = </span><span class="functiontext">Inter::SymbolsTables::url_name_to_symbol</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"/_linkage"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">linkage</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"no linkage ptype"</span><span class="plain">);</span>
<span class="functiontext">Inter::Package::new_package</span><span class="plain">(</span><span class="identifier">ipct</span><span class="plain">-</span><span class="element">&gt;linkage_point</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"links"</span><span class="plain">, </span><span class="identifier">linkage</span><span class="plain">, (</span><span class="constant">inter_t</span><span class="plain">) </span><span class="functiontext">Inter::Bookmarks::baseline</span><span class="plain">(</span><span class="identifier">ipct</span><span class="plain">-</span><span class="element">&gt;linkage_point</span><span class="plain">)+1, </span><span class="identifier">NULL</span><span class="plain">, &amp;(</span><span class="identifier">ipct</span><span class="plain">-</span><span class="element">&gt;links</span><span class="plain">));</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ipct</span><span class="plain">-</span><span class="element">&gt;links</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"couldn't create links"</span><span class="plain">);</span>
<span class="functiontext">Inter::Packages::make_linklike</span><span class="plain">(</span><span class="identifier">ipct</span><span class="plain">-</span><span class="element">&gt;links</span><span class="plain">);</span>
<span class="identifier">equivalent</span><span class="plain"> = </span><span class="functiontext">Inter::SymbolsTables::create_with_unique_name</span><span class="plain">(</span><span class="functiontext">Inter::Packages::scope</span><span class="plain">(</span><span class="identifier">ipct</span><span class="plain">-</span><span class="element">&gt;links</span><span class="plain">), </span><span class="identifier">target</span><span class="plain">-</span><span class="element">&gt;symbol_name</span><span class="plain">);</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">URL</span><span class="plain">);</span>
<span class="functiontext">Inter::SymbolsTables::symbol_to_url_name</span><span class="plain">(</span><span class="identifier">URL</span><span class="plain">, </span><span class="identifier">target</span><span class="plain">);</span>
<span class="functiontext">Inter::SymbolsTables::link</span><span class="plain">(</span><span class="identifier">equivalent</span><span class="plain">, </span><span class="identifier">URL</span><span class="plain">);</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">URL</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP3_1">&#167;3.1</a>.</p>
<hr class="tocbar">
<ul class="toc"><li><a href="2-ann.html">Back to 'Annotations'</a></li><li><i>(This section ends Chapter 2: Interoperability.)</i></li></ul><hr class="tocbar">
<!--End of weave-->
</body>
</html>

View file

@ -27,7 +27,7 @@
<p class="inwebparagraph"></p>
<p class="endnote">The structure inter_warehouse is accessed in 2/in, 2/st, 3/iibf and here.</p>
<p class="endnote">The structure inter_warehouse is accessed in 2/in, 2/st, 2/trn, 3/iibf and here.</p>
<p class="inwebparagraph"><a id="SP2"></a><b>&#167;2. </b></p>
@ -65,9 +65,9 @@
<p class="inwebparagraph"></p>
<p class="endnote">The structure inter_resource_holder is accessed in 2/st, 2/pck, 3/iibf and here.</p>
<p class="endnote">The structure inter_resource_holder is accessed in 2/st, 2/pck, 2/trn, 3/iibf and here.</p>
<p class="endnote">The structure inter_warehouse_room is accessed in 2/in, 2/st, 3/iibf and here.</p>
<p class="endnote">The structure inter_warehouse_room is accessed in 2/in, 2/st, 2/trn, 3/iibf and here.</p>
<p class="inwebparagraph"><a id="SP3"></a><b>&#167;3. </b></p>
@ -327,9 +327,9 @@
<p class="endnote">The function Inter::Warehouse::attribute_resource is used in 2/it (<a href="2-it.html#SP2">&#167;2</a>), 4/tpc3 (<a href="4-tpc3.html#SP2">&#167;2</a>), 4/tkc (<a href="4-tkc.html#SP2">&#167;2</a>), 4/tic (<a href="4-tic.html#SP2">&#167;2</a>), 4/tpc4 (<a href="4-tpc4.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Warehouse::get_text is used in 2/in (<a href="2-in.html#SP3">&#167;3</a>), 2/pck (<a href="2-pck.html#SP3">&#167;3</a>), 2/sym (<a href="2-sym.html#SP4">&#167;4</a>), 3/dfn (<a href="3-dfn.html#SP3">&#167;3</a>, <a href="3-dfn.html#SP4">&#167;4</a>), 3/idt (<a href="3-idt.html#SP3">&#167;3</a>), 4/tmc (<a href="4-tmc.html#SP2">&#167;2</a>), 4/tpc (<a href="4-tpc.html#SP2">&#167;2</a>), 4/tlc (<a href="4-tlc.html#SP2">&#167;2</a>), 4/tac (<a href="4-tac.html#SP2">&#167;2</a>), 4/tcc2 (<a href="4-tcc2.html#SP2">&#167;2</a>), 5/tsc (<a href="5-tsc.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Warehouse::get_text is used in 2/in (<a href="2-in.html#SP3">&#167;3</a>), 2/pck (<a href="2-pck.html#SP3">&#167;3</a>), 2/sym (<a href="2-sym.html#SP4">&#167;4</a>), 2/trn (<a href="2-trn.html#SP1_2">&#167;1.2</a>), 3/dfn (<a href="3-dfn.html#SP3">&#167;3</a>, <a href="3-dfn.html#SP4">&#167;4</a>), 3/idt (<a href="3-idt.html#SP3">&#167;3</a>), 4/tmc (<a href="4-tmc.html#SP2">&#167;2</a>), 4/tpc (<a href="4-tpc.html#SP2">&#167;2</a>), 4/tlc (<a href="4-tlc.html#SP2">&#167;2</a>), 4/tac (<a href="4-tac.html#SP2">&#167;2</a>), 4/tcc2 (<a href="4-tcc2.html#SP2">&#167;2</a>), 5/tsc (<a href="5-tsc.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Warehouse::create_text is used in 2/sym (<a href="2-sym.html#SP4">&#167;4</a>), 3/dfn (<a href="3-dfn.html#SP3">&#167;3</a>, <a href="3-dfn.html#SP4">&#167;4</a>), 3/idt (<a href="3-idt.html#SP3">&#167;3</a>), 4/tmc (<a href="4-tmc.html#SP2">&#167;2</a>), 4/tpc (<a href="4-tpc.html#SP2">&#167;2</a>), 4/tlc (<a href="4-tlc.html#SP2">&#167;2</a>), 4/tac (<a href="4-tac.html#SP2">&#167;2</a>), 4/tcc2 (<a href="4-tcc2.html#SP2">&#167;2</a>), 5/tsc (<a href="5-tsc.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Warehouse::create_text is used in 2/sym (<a href="2-sym.html#SP4">&#167;4</a>), 2/trn (<a href="2-trn.html#SP1_2">&#167;1.2</a>), 3/dfn (<a href="3-dfn.html#SP3">&#167;3</a>, <a href="3-dfn.html#SP4">&#167;4</a>), 3/idt (<a href="3-idt.html#SP3">&#167;3</a>), 4/tmc (<a href="4-tmc.html#SP2">&#167;2</a>), 4/tpc (<a href="4-tpc.html#SP2">&#167;2</a>), 4/tlc (<a href="4-tlc.html#SP2">&#167;2</a>), 4/tac (<a href="4-tac.html#SP2">&#167;2</a>), 4/tcc2 (<a href="4-tcc2.html#SP2">&#167;2</a>), 5/tsc (<a href="5-tsc.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Warehouse::get_package is used in 2/it (<a href="2-it.html#SP2">&#167;2</a>), 2/in (<a href="2-in.html#SP3">&#167;3</a>), 3/iibf (<a href="3-iibf.html#SP1_4_3">&#167;1.4.3</a>, <a href="3-iibf.html#SP1_6">&#167;1.6</a>), 4/tpc3 (<a href="4-tpc3.html#SP2">&#167;2</a>).</p>
@ -345,7 +345,7 @@
<p class="endnote">The function Inter::Warehouse::set_ref appears nowhere else.</p>
<p class="endnote">The structure warehouse_floor_space is accessed in 2/it, 2/bkm, 2/in, 2/st, 2/pck, 2/sym, 3/dfn, 3/iibf, 3/iitf, 3/vi, 3/idt, 4/tmc, 4/tvc, 4/tpc, 4/tlc, 4/tac, 4/tpc2, 4/tpc3, 4/tkc, 4/tdc, 4/tvc2, 4/tcc2, 4/trc, 4/tic, 4/tpc4, 4/tpc5, 4/tpc6, 4/tpc7, 5/tlc, 5/tlc2, 5/tic, 5/trc, 5/tvc, 5/tlc3, 5/tcc, 5/tec, 5/trc2, 5/tcc2, 5/tsc and here.</p>
<p class="endnote">The structure warehouse_floor_space is accessed in 2/it, 2/bkm, 2/in, 2/st, 2/pck, 2/sym, 2/trn, 3/dfn, 3/iibf, 3/iitf, 3/vi, 3/idt, 4/tmc, 4/tvc, 4/tpc, 4/tlc, 4/tac, 4/tpc2, 4/tpc3, 4/tkc, 4/tdc, 4/tvc2, 4/tcc2, 4/trc, 4/tic, 4/tpc4, 4/tpc5, 4/tpc6, 4/tpc7, 5/tlc, 5/tlc2, 5/tic, 5/trc, 5/tvc, 5/tlc3, 5/tcc, 5/tec, 5/trc2, 5/tcc2, 5/tsc and here.</p>
<p class="endnote">The structure inter_error_stash is private to this section.</p>

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>2/ann</title>
<title>2/trn</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Content-Language" content="en-gb">
<link href="inweb.css" rel="stylesheet" rev="stylesheet" type="text/css">

View file

@ -376,7 +376,7 @@
<p class="inwebparagraph"></p>
<p class="endnote">The function Inter::Defn::verify_construct is used in 3/iibf (<a href="3-iibf.html#SP1_6">&#167;1.6</a>), 4/tnc (<a href="4-tnc.html#SP1">&#167;1</a>), 4/tcc (<a href="4-tcc.html#SP1">&#167;1</a>), 4/tmc (<a href="4-tmc.html#SP2">&#167;2</a>), 4/tvc (<a href="4-tvc.html#SP2">&#167;2</a>), 4/tpc (<a href="4-tpc.html#SP2">&#167;2</a>), 4/tlc (<a href="4-tlc.html#SP2">&#167;2</a>), 4/tac (<a href="4-tac.html#SP2">&#167;2</a>), 4/tpc2 (<a href="4-tpc2.html#SP2">&#167;2</a>), 4/tpc3 (<a href="4-tpc3.html#SP2">&#167;2</a>), 4/tkc (<a href="4-tkc.html#SP2">&#167;2</a>), 4/tdc (<a href="4-tdc.html#SP2">&#167;2</a>), 4/tvc2 (<a href="4-tvc2.html#SP2">&#167;2</a>), 4/tcc2 (<a href="4-tcc2.html#SP2">&#167;2</a>), 4/trc (<a href="4-trc.html#SP2">&#167;2</a>), 4/tic (<a href="4-tic.html#SP2">&#167;2</a>), 4/tpc4 (<a href="4-tpc4.html#SP2">&#167;2</a>), 4/tpc5 (<a href="4-tpc5.html#SP2">&#167;2</a>), 4/tpc6 (<a href="4-tpc6.html#SP2">&#167;2</a>), 4/tpc7 (<a href="4-tpc7.html#SP2">&#167;2</a>), 5/tlc (<a href="5-tlc.html#SP2">&#167;2</a>), 5/tlc2 (<a href="5-tlc2.html#SP2">&#167;2</a>), 5/tic (<a href="5-tic.html#SP2">&#167;2</a>), 5/trc (<a href="5-trc.html#SP2">&#167;2</a>), 5/tvc (<a href="5-tvc.html#SP2">&#167;2</a>), 5/tlc3 (<a href="5-tlc3.html#SP2">&#167;2</a>), 5/tcc (<a href="5-tcc.html#SP2">&#167;2</a>), 5/tec (<a href="5-tec.html#SP2">&#167;2</a>), 5/trc2 (<a href="5-trc2.html#SP2">&#167;2</a>), 5/tcc2 (<a href="5-tcc2.html#SP2">&#167;2</a>), 5/tsc (<a href="5-tsc.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Defn::verify_construct is used in 2/trn (<a href="2-trn.html#SP2_1_1">&#167;2.1.1</a>), 3/iibf (<a href="3-iibf.html#SP1_6">&#167;1.6</a>), 4/tnc (<a href="4-tnc.html#SP1">&#167;1</a>), 4/tcc (<a href="4-tcc.html#SP1">&#167;1</a>), 4/tmc (<a href="4-tmc.html#SP2">&#167;2</a>), 4/tvc (<a href="4-tvc.html#SP2">&#167;2</a>), 4/tpc (<a href="4-tpc.html#SP2">&#167;2</a>), 4/tlc (<a href="4-tlc.html#SP2">&#167;2</a>), 4/tac (<a href="4-tac.html#SP2">&#167;2</a>), 4/tpc2 (<a href="4-tpc2.html#SP2">&#167;2</a>), 4/tpc3 (<a href="4-tpc3.html#SP2">&#167;2</a>), 4/tkc (<a href="4-tkc.html#SP2">&#167;2</a>), 4/tdc (<a href="4-tdc.html#SP2">&#167;2</a>), 4/tvc2 (<a href="4-tvc2.html#SP2">&#167;2</a>), 4/tcc2 (<a href="4-tcc2.html#SP2">&#167;2</a>), 4/trc (<a href="4-trc.html#SP2">&#167;2</a>), 4/tic (<a href="4-tic.html#SP2">&#167;2</a>), 4/tpc4 (<a href="4-tpc4.html#SP2">&#167;2</a>), 4/tpc5 (<a href="4-tpc5.html#SP2">&#167;2</a>), 4/tpc6 (<a href="4-tpc6.html#SP2">&#167;2</a>), 4/tpc7 (<a href="4-tpc7.html#SP2">&#167;2</a>), 5/tlc (<a href="5-tlc.html#SP2">&#167;2</a>), 5/tlc2 (<a href="5-tlc2.html#SP2">&#167;2</a>), 5/tic (<a href="5-tic.html#SP2">&#167;2</a>), 5/trc (<a href="5-trc.html#SP2">&#167;2</a>), 5/tvc (<a href="5-tvc.html#SP2">&#167;2</a>), 5/tlc3 (<a href="5-tlc3.html#SP2">&#167;2</a>), 5/tcc (<a href="5-tcc.html#SP2">&#167;2</a>), 5/tec (<a href="5-tec.html#SP2">&#167;2</a>), 5/trc2 (<a href="5-trc2.html#SP2">&#167;2</a>), 5/tcc2 (<a href="5-tcc2.html#SP2">&#167;2</a>), 5/tsc (<a href="5-tsc.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Defn::transpose_construct is used in 3/iibf (<a href="3-iibf.html#SP1_6">&#167;1.6</a>).</p>

View file

@ -107,7 +107,7 @@
<p class="endnote">The function Inter::Errors::plain is used in 3/dfn (<a href="3-dfn.html#SP3">&#167;3</a>, <a href="3-dfn.html#SP4">&#167;4</a>), 3/iibf (<a href="3-iibf.html#SP3">&#167;3</a>), 4/tcc (<a href="4-tcc.html#SP1">&#167;1</a>), 4/tsc (<a href="4-tsc.html#SP1">&#167;1</a>), 4/tvc (<a href="4-tvc.html#SP2">&#167;2</a>), 4/tpc (<a href="4-tpc.html#SP2">&#167;2</a>), 4/tlc (<a href="4-tlc.html#SP2">&#167;2</a>), 4/tac (<a href="4-tac.html#SP2">&#167;2</a>), 4/tpc2 (<a href="4-tpc2.html#SP2">&#167;2</a>), 4/tkc (<a href="4-tkc.html#SP2">&#167;2</a>), 4/tcc2 (<a href="4-tcc2.html#SP2">&#167;2</a>), 4/trc (<a href="4-trc.html#SP2">&#167;2</a>), 4/tic (<a href="4-tic.html#SP2">&#167;2</a>), 4/tpc5 (<a href="4-tpc5.html#SP2">&#167;2</a>), 4/tpc6 (<a href="4-tpc6.html#SP2">&#167;2</a>), 4/tpc7 (<a href="4-tpc7.html#SP2">&#167;2</a>), 5/tlc (<a href="5-tlc.html#SP2">&#167;2</a>), 5/tlc2 (<a href="5-tlc2.html#SP2">&#167;2</a>), 5/tic (<a href="5-tic.html#SP2">&#167;2</a>), 5/trc (<a href="5-trc.html#SP2">&#167;2</a>), 5/tvc (<a href="5-tvc.html#SP2">&#167;2</a>), 5/tlc3 (<a href="5-tlc3.html#SP2">&#167;2</a>), 5/tcc (<a href="5-tcc.html#SP2">&#167;2</a>), 5/tec (<a href="5-tec.html#SP2">&#167;2</a>), 5/trc2 (<a href="5-trc2.html#SP2">&#167;2</a>), 5/tcc2 (<a href="5-tcc2.html#SP2">&#167;2</a>), 5/tsc (<a href="5-tsc.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Errors::issue is used in 2/st (<a href="2-st.html#SP10">&#167;10</a>), 3/iibf (<a href="3-iibf.html#SP1_6">&#167;1.6</a>, <a href="3-iibf.html#SP3">&#167;3</a>), 3/iitf (<a href="3-iitf.html#SP1">&#167;1</a>, <a href="3-iitf.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Errors::issue is used in 2/st (<a href="2-st.html#SP10">&#167;10</a>), 2/trn (<a href="2-trn.html#SP2_1_1">&#167;2.1.1</a>), 3/iibf (<a href="3-iibf.html#SP1_6">&#167;1.6</a>, <a href="3-iibf.html#SP3">&#167;3</a>), 3/iitf (<a href="3-iitf.html#SP1">&#167;1</a>, <a href="3-iitf.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Errors::issue_to appears nowhere else.</p>

View file

@ -54,7 +54,7 @@
<p class="endnote">The function Inter::Comment::read appears nowhere else.</p>
<p class="endnote">The function Inter::Comment::new appears nowhere else.</p>
<p class="endnote">The function Inter::Comment::new is used in 2/trn (<a href="2-trn.html#SP1_2">&#167;1.2</a>).</p>
<hr class="tocbar">
<ul class="toc"><li><a href="4-tnc.html">Back to 'The Nop Construct'</a></li><li><a href="4-tmc.html">Continue with 'The Metadata Construct'</a></li></ul><hr class="tocbar">

View file

@ -200,7 +200,7 @@
<p class="endnote">The function Inter::Package::new_package_named appears nowhere else.</p>
<p class="endnote">The function Inter::Package::new_package appears nowhere else.</p>
<p class="endnote">The function Inter::Package::new_package is used in 2/trn (<a href="2-trn.html#SP2_2_1">&#167;2.2.1</a>, <a href="2-trn.html#SP3_1_1">&#167;3.1.1</a>).</p>
<p class="endnote">The function Inter::Package::transpose is used in <a href="#SP1">&#167;1</a>.</p>
@ -214,7 +214,7 @@
<p class="endnote">The function Inter::Package::which appears nowhere else.</p>
<p class="endnote">The function Inter::Package::defined_by_frame is used in 2/bkm (<a href="2-bkm.html#SP1">&#167;1</a>), 2/st (<a href="2-st.html#SP10">&#167;10</a>), 2/pck (<a href="2-pck.html#SP3">&#167;3</a>).</p>
<p class="endnote">The function Inter::Package::defined_by_frame is used in 2/bkm (<a href="2-bkm.html#SP1">&#167;1</a>), 2/st (<a href="2-st.html#SP10">&#167;10</a>), 2/pck (<a href="2-pck.html#SP3">&#167;3</a>), 2/trn (<a href="2-trn.html#SP2">&#167;2</a>, <a href="2-trn.html#SP3">&#167;3</a>).</p>
<p class="endnote">The function Inter::Package::type is used in 2/pck (<a href="2-pck.html#SP3">&#167;3</a>).</p>

View file

@ -61,6 +61,10 @@
<p><a href="2-ann.html"><spon class="sectiontitle">Annotations</span></a> -
<span class="purpose">To mark symbols up with metadata.</span></p>
</li>
<li>
<p><a href="2-trn.html"><spon class="sectiontitle">Transmigration</span></a> -
<span class="purpose">To move packages between repositories.</span></p>
</li>
</ul>
</li>
<li>

View file

@ -1,8 +0,0 @@
read 0 <- *inA
read 1 <- *inB
generate 0 binary -> *binA
generate 1 binary -> *binB
read 2 <- *binA
read 3 <- *binB
generate 2 text -> *outA
generate 3 text -> *outB

View file

@ -1,27 +0,0 @@
packagetype _plain
packagetype _code
primitive !if val code -> void
primitive !goto lab -> void
package main _plain
symbol public misc K_number
symbol public misc K_func
kind K_number int32
kind K_func function K_number -> K_number
package my_fn _plain
symbol public misc R_101
symbol external misc K_func == /main/K_func
package R_101_B _code
symbol private misc x
symbol private label .begin
symbol external misc K_number == /main/K_number
local x K_number __call_parameter
code
.begin
inv !if
val K_number 1
code
inv !goto
lab .begin
constant R_101 K_func = R_101_B

View file

@ -1,5 +1,6 @@
packagetype _plain
packagetype _code
packagetype _linkage
primitive !if val code -> void
primitive !goto lab -> void
@ -7,21 +8,30 @@ primitive !goto lab -> void
package main _plain
symbol public misc K_number
symbol public misc K_func
symbol public misc awkward
symbol public misc troublesome
symbol external misc secret == /main/my_fn/secret
kind K_number int32
kind K_func function K_number -> K_number
package my_fn _plain
symbol public misc R_101
symbol public misc secret
symbol external misc K_func == /main/K_func
symbol external misc K_number == /main/K_number
package R_101_B _code
symbol private misc x
symbol private label .begin
symbol external misc K_number == /main/K_number
symbol external misc troublesome == /main/troublesome
local x K_number __call_parameter
code
.begin
inv !if
val K_number 1
val K_number troublesome
code
inv !goto
lab .begin
constant R_101 K_func = R_101_B
constant secret K_number = 7
constant awkward K_number = secret
constant troublesome K_number = 12

View file

@ -2,6 +2,7 @@
packagetype _plain
packagetype _code
packagetype _linkage
version 7

View file

@ -0,0 +1,20 @@
packagetype _plain
packagetype _code
packagetype _linkage
primitive !if val code -> void
primitive !goto lab -> void
package main _plain
symbol public misc K_number
symbol public misc K_func
symbol public misc awkward
symbol public misc troublesome
symbol external misc secret == /main/links/secret
kind K_number int32
kind K_func function K_number -> K_number
# Exported my_fn here
package links _linkage
symbol link misc secret == /main/my_fn/secret
constant awkward K_number = secret
constant troublesome K_number = 12

View file

@ -2,6 +2,7 @@
packagetype _plain
packagetype _code
packagetype _linkage
version 7
@ -11,6 +12,8 @@ primitive !plus val val -> val
pragma target_I6 "$MAX_STATIC_DATA=180000"
primitive !if val code -> void
primitive !goto lab -> void
package main _plain
symbol public misc K_number
symbol public misc K_truth_state
@ -162,3 +165,26 @@ package main _plain
constant R_102 K_colour____colour = R_102_B
constant amount K_number = sum{ 2, C_taxes }
response R_101_A R_101 0 = C_taxes
# Imported my_fn here
package my_fn _plain
symbol public misc R_101
symbol public misc secret
symbol external misc K_func == /main/K_func
symbol external misc K_number == /main/K_number
package R_101_B _code
symbol private misc x
symbol private label .begin
symbol external misc K_number == /main/K_number
symbol external misc troublesome == /main/my_fn/links/troublesome
local x K_number __call_parameter
code
.begin
inv !if
val K_number troublesome
code
inv !goto
lab .begin
constant R_101 K_func = R_101_B
constant secret K_number = 7
package links _linkage
symbol link misc troublesome == /main/troublesome

View file

@ -88,7 +88,7 @@
mkdir: $PATH/_Console
mkdir: $PATH/_Binaries
step: inter/Tangled/inter -variable '*inA=$OA' -variable '*inB=$OB' -variable '*binA=$BA' -variable '*binB=$BB' -variable '*outA=$AA' -variable '*outB=$AB' -pipeline-file $P
step: inter/Tangled/inter -variable '*inA=$OA' -variable '*inB=$OB' -variable '*binA=$BA' -variable '*binB=$BB' -variable '*outA=$AA' -variable '*outB=$AB' -pipeline-file $P >$T 2>&1
or: 'failed to produce output' $T
show: $A

View file

@ -89,8 +89,7 @@ int CodeGen::Stage::run_move_stage(pipeline_step *step) {
}
Regexp::dispose_of(&mr);
if (pack == NULL) internal_error("not a package");
if (trace_bin) WRITE_TO(STDOUT, "Move %S\n", Inter::Packages::name(pack));
Inter::Transmigration::move(pack, Inter::Tree::main_package(step->repository), TRUE);
return TRUE;
}

View file

@ -35,13 +35,13 @@ inter_bookmark CodeGen::Assimilate::template_submodule(inter_tree *I, text_strea
if (submodule_ptype_symbol) {
inter_package *t_p = Inter::Packages::by_name(template_package, name);
if (t_p == NULL) {
inter_bookmark IBM = Inter::Bookmarks::after_this_frame(I, P);
inter_bookmark IBM = Inter::Bookmarks::after_this_node(I, P);
t_p = CodeGen::Assimilate::new_package_named(&IBM, name, submodule_ptype_symbol);
}
if (t_p == NULL) internal_error("failed to define");
return Inter::Bookmarks::at_end_of_this_package(t_p);
}
return Inter::Bookmarks::after_this_frame(I, P);
return Inter::Bookmarks::after_this_node(I, P);
}
void CodeGen::Assimilate::visitor1(inter_tree *I, inter_tree_node *P, void *state) {
@ -133,7 +133,7 @@ void CodeGen::Assimilate::visitor3(inter_tree *I, inter_tree_node *P, void *stat
if (plm == OBJECT_PLM) value = NULL;
@<Act on parsed constant definition@> =
inter_bookmark IBM_d = Inter::Bookmarks::after_this_frame(I, P);
inter_bookmark IBM_d = Inter::Bookmarks::after_this_node(I, P);
inter_bookmark *IBM = &IBM_d;
text_stream *submodule_name = NULL;
@ -439,7 +439,7 @@ void CodeGen::Assimilate::visitor3(inter_tree *I, inter_tree_node *P, void *stat
*IBM = outer_save;
inter_bookmark T_IBM = Inter::Bookmarks::after_this_frame(I, P);
inter_bookmark T_IBM = Inter::Bookmarks::after_this_node(I, P);
inter_symbol *alias_name = Inter::SymbolsTables::create_with_unique_name(Inter::Bookmarks::scope(&T_IBM), identifier);
Inter::SymbolsTables::equate(alias_name, rsymb);
Inter::Symbols::set_flag(alias_name, ALIAS_ONLY_BIT);

View file

@ -32,7 +32,7 @@ inter_bookmark Inter::Bookmarks::at_end_of_this_package(inter_package *pack) {
return IBM;
}
inter_bookmark Inter::Bookmarks::after_this_frame(inter_tree *I, inter_tree_node *D) {
inter_bookmark Inter::Bookmarks::after_this_node(inter_tree *I, inter_tree_node *D) {
if (D == NULL) internal_error("invalid frame supplied");
inter_bookmark IBM;
IBM.R = D;

View file

@ -110,18 +110,30 @@ void Inter::Packages::set_scope(inter_package *P, inter_symbols_table *T) {
}
void Inter::Packages::set_name(inter_package *Q, inter_package *P, text_stream *N) {
if (Q == NULL) internal_error("no parent supplied");
if (P == NULL) internal_error("null package");
if (N == NULL) internal_error("null package name");
P->package_name_t = Str::duplicate(N);
if ((N) && (Str::eq(P->package_name_t, I"main")))
Inter::Tree::set_main_package(Inter::Packages::tree(P), P);
if (Str::len(N) > 0) {
dict_entry *de = Dictionaries::find(Q->name_lookup, N);
if (de) internal_error("duplicated package name");
Dictionaries::create(Q->name_lookup, N);
Dictionaries::write_value(Q->name_lookup, N, (void *) P);
if (Str::len(N) > 0) Inter::Packages::add_subpackage_name(Q, P);
}
void Inter::Packages::add_subpackage_name(inter_package *Q, inter_package *P) {
if (Q == NULL) internal_error("no parent supplied");
text_stream *N = P->package_name_t;
dict_entry *de = Dictionaries::find(Q->name_lookup, N);
if (de) internal_error("duplicated package name");
Dictionaries::create(Q->name_lookup, N);
Dictionaries::write_value(Q->name_lookup, N, (void *) P);
}
void Inter::Packages::remove_subpackage_name(inter_package *Q, inter_package *P) {
if (Q == NULL) internal_error("no parent supplied");
text_stream *N = P->package_name_t;
dict_entry *de = Dictionaries::find(Q->name_lookup, N);
if (de) {
Dictionaries::write_value(Q->name_lookup, N, NULL);
}
}

View file

@ -15,6 +15,8 @@ typedef struct inter_symbol {
int symbol_status;
struct inter_annotation_set ann_set;
struct text_stream *translate_text;
int link_time;
struct inter_symbol *linked_to;
} inter_symbol;
@ =
@ -33,6 +35,8 @@ inter_symbol *Inter::Symbols::new(text_stream *name, inter_symbols_table *T, int
symb->equated_to = NULL;
symb->equated_name = NULL;
symb->translate_text = NULL;
symb->link_time = 0;
symb->linked_to = NULL;
LOGIF(INTER_SYMBOLS, "Created symbol $3 in $4\n", symb, T);
return symb;

View file

@ -0,0 +1,224 @@
[Inter::Transmigration::] Transmigration.
To move packages between repositories.
@ =
int ipct_cache_count = 0;
void Inter::Transmigration::cache(inter_symbol *S, inter_symbol *V) {
S->linked_to = V;
S->link_time = ipct_cache_count;
}
inter_symbol *Inter::Transmigration::cached_equivalent(inter_symbol *S) {
if (S->link_time == ipct_cache_count) return S->linked_to;
return NULL;
}
void Inter::Transmigration::move(inter_package *migrant, inter_package *destination, int tidy_origin) {
LOG("Move $5 to $5\n", migrant, destination);
inter_package *origin = Inter::Packages::parent(migrant);
inter_bookmark deletion_point, insertion_point, linkage_point, primitives_point;
@<Create these bookmarks@>;
@<Mark the insertion and deletion points with comments@>;
@<Physically move the subtree to its new home@>;
@<Correct any references from the migrant to the origin@>;
if (tidy_origin) @<Correct any references from the origin to the migrant@>;
}
@<Create these bookmarks@> =
deletion_point =
Inter::Bookmarks::after_this_node(migrant->package_head->tree, migrant->package_head);
insertion_point =
Inter::Bookmarks::at_end_of_this_package(destination);
linkage_point = Inter::Bookmarks::at_end_of_this_package(migrant);
inter_tree_node *prims = NULL;
LOOP_THROUGH_INTER_CHILDREN(F, destination->package_head->tree->root_node)
if (F->W.data[ID_IFLD] == PRIMITIVE_IST)
prims = F;
if (prims == NULL) internal_error("dest has no prims");
primitives_point = Inter::Bookmarks::after_this_node(destination->package_head->tree, prims);
@<Mark the insertion and deletion points with comments@> =
inter_t C1 = Inter::Warehouse::create_text(Inter::Bookmarks::warehouse(&deletion_point), Inter::Bookmarks::package(&deletion_point));
WRITE_TO(Inter::Warehouse::get_text(Inter::Bookmarks::warehouse(&deletion_point), C1),
"Exported %S here", Inter::Packages::name(migrant));
Inter::Comment::new(&deletion_point, (inter_t) Inter::Packages::baseline(migrant), NULL, C1);
inter_t C2 = Inter::Warehouse::create_text(Inter::Bookmarks::warehouse(&insertion_point), Inter::Bookmarks::package(&insertion_point));
WRITE_TO(Inter::Warehouse::get_text(Inter::Bookmarks::warehouse(&insertion_point), C2),
"Imported %S here", Inter::Packages::name(migrant));
Inter::Comment::new(&insertion_point, (inter_t) Inter::Packages::baseline(destination) + 1, NULL, C2);
@<Physically move the subtree to its new home@> =
Inter::Packages::remove_subpackage_name(Inter::Packages::parent(migrant), migrant);
Inter::Packages::add_subpackage_name(destination, migrant);
Inter::Bookmarks::insert(&insertion_point, migrant->package_head);
@ =
typedef struct ipct_state {
inter_package *migrant;
inter_package *destination;
inter_package *links;
inter_bookmark *linkage_point;
inter_bookmark *primitives_point;
inter_symbols_table *origin_globals;
inter_symbols_table *destination_globals;
} ipct_state;
@<Correct any references from the migrant to the origin@> =
ipct_cache_count++;
ipct_state ipct;
ipct.migrant = migrant;
ipct.destination = destination;
ipct.links = NULL;
ipct.origin_globals = Inter::Tree::global_scope(migrant->package_head->tree);
ipct.destination_globals = Inter::Tree::global_scope(destination->package_head->tree);
ipct.linkage_point = &linkage_point;
ipct.primitives_point = &primitives_point;
Inter::Tree::traverse(destination->package_head->tree,
Inter::Transmigration::correct_migrant, &ipct, migrant, 0);
@ =
void Inter::Transmigration::correct_migrant(inter_tree *I, inter_tree_node *P, void *state) {
ipct_state *ipct = (ipct_state *) state;
P->tree = I;
if ((P->W.data[ID_IFLD] == INV_IST) && (P->W.data[METHOD_INV_IFLD] == INVOKED_PRIMITIVE)) {
inter_symbol *primitive =
Inter::SymbolsTables::symbol_from_id(ipct->origin_globals, P->W.data[INVOKEE_INV_IFLD]);
if (primitive) @<Correct the reference to this primitive@>;
}
if (P->W.data[ID_IFLD] == PACKAGE_IST) {
inter_package *pack = Inter::Package::defined_by_frame(P);
if (pack == NULL) internal_error("no package defined here");
if (Inter::Packages::is_linklike(pack)) return;
inter_symbols_table *T = Inter::Packages::scope(pack);
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;
inter_package *target_package = target->owning_table->owning_package;
while ((target_package) && (target_package != ipct->migrant)) {
target_package = Inter::Packages::parent(target_package);
}
if (target_package != ipct->migrant)
@<Correct the reference to this symbol@>;
}
}
}
}
@<Correct the reference to this primitive@> =
inter_symbol *equivalent_primitive = Inter::Transmigration::cached_equivalent(primitive);
if (equivalent_primitive == NULL) {
equivalent_primitive = Inter::SymbolsTables::symbol_from_name(ipct->destination_globals, primitive->symbol_name);
if (equivalent_primitive == NULL) @<Duplicate this primitive@>;
if (equivalent_primitive) Inter::Transmigration::cache(primitive, equivalent_primitive);
}
if (equivalent_primitive)
P->W.data[INVOKEE_INV_IFLD] = Inter::SymbolsTables::id_from_symbol_inner(ipct->destination_globals, NULL, equivalent_primitive);
@<Duplicate this primitive@> =
equivalent_primitive = Inter::SymbolsTables::symbol_from_name_creating(ipct->destination_globals, primitive->symbol_name);
inter_tree_node *D = Inter::Node::fill_1(ipct->primitives_point, PRIMITIVE_IST, Inter::SymbolsTables::id_from_symbol_inner(ipct->destination_globals, NULL, equivalent_primitive), NULL, 0);
inter_tree_node *old_D = primitive->definition;
for (int i=CAT_PRIM_IFLD; i<old_D->W.extent; i++) {
if (Inter::Node::extend(D, (inter_t) 1) == FALSE) internal_error("can't extend");
D->W.data[i] = old_D->W.data[i];
}
inter_error_message *E = Inter::Defn::verify_construct(Inter::Bookmarks::package(ipct->primitives_point), D);
if (E) {
Inter::Errors::issue(E);
equivalent_primitive = NULL;
} else {
Inter::Bookmarks::insert(ipct->primitives_point, D);
}
@<Correct the reference to this symbol@> =
inter_symbol *equivalent = Inter::Transmigration::cached_equivalent(target);
if (equivalent == NULL) {
TEMPORARY_TEXT(URL);
Inter::SymbolsTables::symbol_to_url_name(URL, target);
equivalent = Inter::SymbolsTables::url_name_to_symbol(ipct->destination->package_head->tree, NULL, URL);
if (equivalent == NULL)
@<Create a link symbol to represent the unavailability of this symbol@>;
DISCARD_TEXT(URL);
Inter::Transmigration::cache(target, equivalent);
}
symb->equated_to = equivalent;
@<Create a link symbol to represent the unavailability of this symbol@> =
if (ipct->links == NULL)
ipct->links = Inter::Packages::by_name(ipct->migrant, I"links");
if (ipct->links == NULL) {
inter_symbol *linkage = Inter::SymbolsTables::url_name_to_symbol(I, NULL, I"/_linkage");
if (linkage == NULL) internal_error("no linkage ptype");
Inter::Package::new_package(ipct->linkage_point, I"links", linkage, (inter_t) Inter::Packages::baseline(ipct->migrant) + 1, NULL, &(ipct->links));
}
if (ipct->links == NULL) internal_error("couldn't create links");
Inter::Packages::make_linklike(ipct->links);
equivalent = Inter::SymbolsTables::create_with_unique_name(Inter::Packages::scope(ipct->links), target->symbol_name);
Inter::SymbolsTables::link(equivalent, URL);
@<Correct any references from the origin to the migrant@> =
ipct_cache_count++;
ipct_state ipct;
ipct.migrant = migrant;
ipct.destination = destination;
ipct.links = NULL;
ipct.origin_globals = NULL;
ipct.destination_globals = NULL;
ipct.linkage_point = &deletion_point;
ipct.primitives_point = NULL;
Inter::Tree::traverse(origin->package_head->tree,
Inter::Transmigration::correct_origin, &ipct, NULL, 0);
@ =
void Inter::Transmigration::correct_origin(inter_tree *I, inter_tree_node *P, void *state) {
ipct_state *ipct = (ipct_state *) state;
if (P->W.data[ID_IFLD] == PACKAGE_IST) {
inter_package *pack = Inter::Package::defined_by_frame(P);
if (pack == NULL) internal_error("no package defined here");
if (Inter::Packages::is_linklike(pack)) return;
inter_symbols_table *T = Inter::Packages::scope(pack);
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;
inter_package *target_package = target->owning_table->owning_package;
while ((target_package) && (target_package != ipct->migrant)) {
target_package = Inter::Packages::parent(target_package);
}
if (target_package == ipct->migrant)
@<Correct the origin reference to this migrant symbol@>;
}
}
}
}
@<Correct the origin reference to this migrant symbol@> =
inter_symbol *equivalent = Inter::Transmigration::cached_equivalent(target);
if (equivalent == NULL) {
@<Create a link symbol in the origin@>;
Inter::Transmigration::cache(target, equivalent);
}
symb->equated_to = equivalent;
@<Create a link symbol in the origin@> =
if (ipct->links == NULL)
ipct->links = Inter::Packages::by_name(Inter::Bookmarks::package(ipct->linkage_point), I"links");
if (ipct->links == NULL) {
inter_symbol *linkage = Inter::SymbolsTables::url_name_to_symbol(I, NULL, I"/_linkage");
if (linkage == NULL) internal_error("no linkage ptype");
Inter::Package::new_package(ipct->linkage_point, I"links", linkage, (inter_t) Inter::Bookmarks::baseline(ipct->linkage_point)+1, NULL, &(ipct->links));
}
if (ipct->links == NULL) internal_error("couldn't create links");
Inter::Packages::make_linklike(ipct->links);
equivalent = Inter::SymbolsTables::create_with_unique_name(Inter::Packages::scope(ipct->links), target->symbol_name);
TEMPORARY_TEXT(URL);
Inter::SymbolsTables::symbol_to_url_name(URL, target);
Inter::SymbolsTables::link(equivalent, URL);
DISCARD_TEXT(URL);

View file

@ -18,6 +18,7 @@ Chapter 2: Interoperability
Packages
Symbols
Annotations
Transmigration
Chapter 3: Language Definition
Canonical Annotations