1
0
Fork 0
mirror of https://github.com/ganelson/inform.git synced 2024-07-02 23:14:57 +03:00

Simplified bookmarks and tree insertion

This commit is contained in:
Graham Nelson 2019-07-11 09:15:57 +01:00
parent 9ecd388cf2
commit ccb8555a21
50 changed files with 676 additions and 609 deletions

View file

@ -294,8 +294,6 @@ logging:
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">verb_directive_multiexcept_symbol</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::Pipeline::prepare_to_run</span><span class="plain">(</span><span class="identifier">inter_repository</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">) {</span>
<span class="identifier">Inter::Packages::restring</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">);</span>
<span class="identifier">unchecked_kind_symbol</span><span class="plain"> = </span><span class="identifier">Inter::Packages::search_resources_exhaustively</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"K_unchecked"</span><span class="plain">);</span>
<span class="identifier">unchecked_function_symbol</span><span class="plain"> = </span><span class="identifier">Inter::Packages::search_resources_exhaustively</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"K_unchecked_function"</span><span class="plain">);</span>
<span class="identifier">typeless_int_symbol</span><span class="plain"> = </span><span class="identifier">Inter::Packages::search_resources_exhaustively</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"K_typeless_int"</span><span class="plain">);</span>

View file

@ -68,7 +68,7 @@
<span class="identifier">inter_reading_state</span><span class="plain"> </span><span class="identifier">assimilated_actions_b</span><span class="plain">;</span>
<span class="identifier">inter_reading_state</span><span class="plain"> *</span><span class="identifier">assimilated_actions</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_repository</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">inter_frame</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="identifier">inter_frame_list_entry</span><span class="plain"> *</span><span class="identifier">P_entry</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_repository</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">inter_frame</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="identifier">inter_reading_state</span><span class="plain"> *</span><span class="identifier">IRS</span><span class="plain"> = (</span><span class="identifier">inter_reading_state</span><span class="plain"> *) </span><span class="identifier">state</span><span class="plain">;</span>
<span class="identifier">inter_package</span><span class="plain"> *</span><span class="identifier">outer</span><span class="plain"> = </span><span class="identifier">Inter::Packages::container</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">);</span>
<span class="identifier">inter_symbols_table</span><span class="plain"> *</span><span class="identifier">into_scope</span><span class="plain"> = </span><span class="identifier">Inter::Packages::scope</span><span class="plain">(</span><span class="identifier">outer</span><span class="plain">);</span>
@ -92,7 +92,7 @@
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::Assimilate::visitor2</span><span class="plain">(</span><span class="identifier">inter_repository</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">inter_frame</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="identifier">inter_frame_list_entry</span><span class="plain"> *</span><span class="identifier">P_entry</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::Assimilate::visitor2</span><span class="plain">(</span><span class="identifier">inter_repository</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">inter_frame</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="identifier">inter_reading_state</span><span class="plain"> *</span><span class="identifier">IRS</span><span class="plain"> = (</span><span class="identifier">inter_reading_state</span><span class="plain"> *) </span><span class="identifier">state</span><span class="plain">;</span>
<span class="identifier">inter_package</span><span class="plain"> *</span><span class="identifier">outer</span><span class="plain"> = </span><span class="identifier">Inter::Packages::container</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">outer</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) || (</span><span class="identifier">outer</span><span class="plain">-&gt;</span><span class="identifier">codelike_package</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">)) &amp;&amp; (</span><span class="identifier">P</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">ID_IFLD</span><span class="plain">] == </span><span class="identifier">SPLAT_IST</span><span class="plain">)) {</span>
@ -116,7 +116,7 @@
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::Assimilate::visitor3</span><span class="plain">(</span><span class="identifier">inter_repository</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">inter_frame</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="identifier">inter_frame_list_entry</span><span class="plain"> *</span><span class="identifier">P_entry</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::Assimilate::visitor3</span><span class="plain">(</span><span class="identifier">inter_repository</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">inter_frame</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="identifier">inter_reading_state</span><span class="plain"> *</span><span class="identifier">IRS</span><span class="plain"> = (</span><span class="identifier">inter_reading_state</span><span class="plain"> *) </span><span class="identifier">state</span><span class="plain">;</span>
<span class="identifier">inter_package</span><span class="plain"> *</span><span class="identifier">outer</span><span class="plain"> = </span><span class="identifier">Inter::Packages::container</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">outer</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) || (</span><span class="identifier">outer</span><span class="plain">-&gt;</span><span class="identifier">codelike_package</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">)) &amp;&amp; (</span><span class="identifier">P</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">ID_IFLD</span><span class="plain">] == </span><span class="identifier">SPLAT_IST</span><span class="plain">)) {</span>
@ -136,10 +136,10 @@
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::Assimilate::assimilate</span><span class="plain">(</span><span class="identifier">inter_reading_state</span><span class="plain"> *</span><span class="identifier">IRS</span><span class="plain">) {</span>
<span class="identifier">inter_repository</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain"> = </span><span class="identifier">IRS</span><span class="plain">-&gt;</span><span class="identifier">read_into</span><span class="plain">;</span>
<span class="identifier">assimilated_actions</span><span class="plain"> = </span><span class="identifier">IRS</span><span class="plain">;</span>
<span class="identifier">Inter::Packages::traverse_repository_e</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="functiontext">CodeGen::Assimilate::visitor1</span><span class="plain">, </span><span class="identifier">IRS</span><span class="plain">);</span>
<span class="identifier">Inter::Packages::traverse_repository_e</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="functiontext">CodeGen::Assimilate::visitor2</span><span class="plain">, </span><span class="identifier">IRS</span><span class="plain">);</span>
<span class="identifier">Inter::Packages::traverse_repository</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="functiontext">CodeGen::Assimilate::visitor1</span><span class="plain">, </span><span class="identifier">IRS</span><span class="plain">);</span>
<span class="identifier">Inter::Packages::traverse_repository</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="functiontext">CodeGen::Assimilate::visitor2</span><span class="plain">, </span><span class="identifier">IRS</span><span class="plain">);</span>
<span class="functiontext">CodeGen::Assimilate::routine_bodies</span><span class="plain">();</span>
<span class="identifier">Inter::Packages::traverse_repository_e</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="functiontext">CodeGen::Assimilate::visitor3</span><span class="plain">, </span><span class="identifier">IRS</span><span class="plain">);</span>
<span class="identifier">Inter::Packages::traverse_repository</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="functiontext">CodeGen::Assimilate::visitor3</span><span class="plain">, </span><span class="identifier">IRS</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
@ -199,7 +199,9 @@
<span class="plain">}</span>
<span class="identifier">inter_reading_state</span><span class="plain"> </span><span class="identifier">ib</span><span class="plain"> = </span><span class="identifier">Inter::Bookmarks::snapshot</span><span class="plain">(</span><span class="identifier">IRS</span><span class="plain">);</span>
<span class="identifier">ib</span><span class="plain">.</span><span class="identifier">pos</span><span class="plain"> = </span><span class="identifier">P_entry</span><span class="plain">;</span>
<span class="identifier">ib</span><span class="plain">.</span><span class="identifier">R</span><span class="plain"> = </span><span class="identifier">P</span><span class="plain">;</span>
<span class="identifier">ib</span><span class="plain">.</span><span class="identifier">placement_wrt_R</span><span class="plain"> = </span><span class="identifier">AFTER_ICPLACEMENT</span><span class="plain">;</span>
<span class="identifier">inter_package</span><span class="plain"> *</span><span class="identifier">housing_package</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">inter_symbols_table</span><span class="plain"> *</span><span class="identifier">save_into_scope</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
@ -468,7 +470,8 @@
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">bname</span><span class="plain">);</span>
<span class="identifier">inter_reading_state</span><span class="plain"> </span><span class="identifier">ib</span><span class="plain"> = </span><span class="identifier">Inter::Bookmarks::snapshot</span><span class="plain">(</span><span class="identifier">IRS</span><span class="plain">);</span>
<span class="identifier">ib</span><span class="plain">.</span><span class="identifier">pos</span><span class="plain"> = </span><span class="identifier">P_entry</span><span class="plain">;</span>
<span class="identifier">ib</span><span class="plain">.</span><span class="identifier">R</span><span class="plain"> = </span><span class="identifier">P</span><span class="plain">;</span>
<span class="identifier">ib</span><span class="plain">.</span><span class="identifier">placement_wrt_R</span><span class="plain"> = </span><span class="identifier">AFTER_ICPLACEMENT</span><span class="plain">;</span>
<span class="identifier">inter_package</span><span class="plain"> *</span><span class="identifier">IP</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="functiontext">CodeGen::Link::guard</span><span class="plain">(</span><span class="identifier">Inter::Package::new_package</span><span class="plain">(&amp;</span><span class="identifier">ib</span><span class="plain">, </span><span class="identifier">block_name</span><span class="plain">,</span>
@ -500,19 +503,16 @@
<span class="identifier">Inter::Symbols::label</span><span class="plain">(</span><span class="identifier">end_name</span><span class="plain">);</span>
<span class="functiontext">CodeGen::Link::guard</span><span class="plain">(</span><span class="identifier">Inter::Label::new</span><span class="plain">(&amp;</span><span class="identifier">ib</span><span class="plain">, </span><span class="identifier">block_name</span><span class="plain">, </span><span class="identifier">begin_name</span><span class="plain">, </span><span class="identifier">baseline</span><span class="plain">+1, </span><span class="identifier">NULL</span><span class="plain">));</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">veto</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">body</span><span class="plain">) &gt; 0) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">L</span><span class="plain"> = </span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">body</span><span class="plain">) - 1;</span>
<span class="reserved">while</span><span class="plain"> ((</span><span class="identifier">L</span><span class="plain">&gt;0) &amp;&amp; (</span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">body</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">) != </span><span class="character">']'</span><span class="plain">)) </span><span class="identifier">L</span><span class="plain">--;</span>
<span class="reserved">while</span><span class="plain"> ((</span><span class="identifier">L</span><span class="plain">&gt;0) &amp;&amp; (</span><span class="identifier">Characters::is_whitespace</span><span class="plain">(</span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">body</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">-1)))) </span><span class="identifier">L</span><span class="plain">--;</span>
<span class="identifier">Str::truncate</span><span class="plain">(</span><span class="identifier">body</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">);</span>
<span class="identifier">veto</span><span class="plain"> = </span><span class="functiontext">CodeGen::Assimilate::routine_body</span><span class="plain">(&amp;</span><span class="identifier">ib</span><span class="plain">, </span><span class="identifier">block_name</span><span class="plain">, </span><span class="identifier">baseline</span><span class="plain">+2, </span><span class="identifier">body</span><span class="plain">, </span><span class="identifier">block_bookmark</span><span class="plain">);</span>
<span class="functiontext">CodeGen::Assimilate::routine_body</span><span class="plain">(&amp;</span><span class="identifier">ib</span><span class="plain">, </span><span class="identifier">block_name</span><span class="plain">, </span><span class="identifier">baseline</span><span class="plain">+2, </span><span class="identifier">body</span><span class="plain">, </span><span class="identifier">block_bookmark</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="functiontext">CodeGen::Link::guard</span><span class="plain">(</span><span class="identifier">Inter::Label::new</span><span class="plain">(&amp;</span><span class="identifier">ib</span><span class="plain">, </span><span class="identifier">block_name</span><span class="plain">, </span><span class="identifier">end_name</span><span class="plain">, </span><span class="identifier">baseline</span><span class="plain">+1, </span><span class="identifier">NULL</span><span class="plain">));</span>
<span class="reserved">if</span><span class="plain"> (!</span><span class="identifier">veto</span><span class="plain">) </span><span class="functiontext">CodeGen::Link::guard</span><span class="plain">(</span><span class="identifier">Inter::Defn::pass2</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">, &amp;</span><span class="identifier">block_bookmark</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">, (</span><span class="reserved">int</span><span class="plain">) </span><span class="identifier">baseline</span><span class="plain">));</span>
<span class="identifier">Inter::Defn::unset_current_package</span><span class="plain">(&amp;</span><span class="identifier">ib</span><span class="plain">, </span><span class="identifier">IP</span><span class="plain">, 0);</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">rsymb</span><span class="plain"> = </span><span class="functiontext">CodeGen::Assimilate::maybe_extern</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">identifier</span><span class="plain">, </span><span class="identifier">into_scope</span><span class="plain">);</span>
@ -923,8 +923,6 @@
<span class="identifier">EmitInterSchemas::emit</span><span class="plain">(&amp;</span><span class="identifier">VH</span><span class="plain">, </span><span class="identifier">sch</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">, </span><span class="identifier">scope1</span><span class="plain">, </span><span class="identifier">scope2</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="identifier">Emit::pop_code_position</span><span class="plain">();</span>
<span class="identifier">current_inter_routine</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="functiontext">CodeGen::Link::guard</span><span class="plain">(</span><span class="identifier">Inter::Defn::pass2</span><span class="plain">(</span><span class="identifier">req</span><span class="plain">-</span><span class="element">&gt;block_bookmark</span><span class="plain">.</span><span class="identifier">read_into</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">, &amp;(</span><span class="identifier">req</span><span class="plain">-</span><span class="element">&gt;block_bookmark</span><span class="plain">), </span><span class="identifier">TRUE</span><span class="plain">, </span><span class="identifier">req</span><span class="plain">-</span><span class="element">&gt;pass2_offset</span><span class="plain">));</span>
<span class="plain">#</span><span class="identifier">endif</span>
<span class="plain">}</span>
<span class="plain">}</span>

View file

@ -148,7 +148,6 @@ it would be written out in a listing.
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::Labels::traverse_code_tree</span><span class="plain">(</span><span class="identifier">inter_frame</span><span class="plain"> </span><span class="identifier">P</span><span class="plain">) {</span>
<span class="identifier">inter_frame</span><span class="plain"> </span><span class="identifier">F</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">P</span><span class="plain">) {</span>
&lt;<span class="cwebmacro">Examine a line of code in the function</span> <span class="cwebmacronumber">2.1</span>&gt;<span class="plain">;</span>
<span class="functiontext">CodeGen::Labels::traverse_code_tree</span><span class="plain">(</span><span class="identifier">F</span><span class="plain">);</span>

View file

@ -26,7 +26,6 @@
<span class="identifier">IRS</span><span class="plain">.</span><span class="identifier">current_package</span><span class="plain"> = </span><span class="identifier">Inter::Packages::main</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">IRS</span><span class="plain">.</span><span class="identifier">cp_indent</span><span class="plain"> = 1;</span>
<span class="functiontext">CodeGen::Link::link</span><span class="plain">(&amp;</span><span class="identifier">IRS</span><span class="plain">, </span><span class="identifier">step</span><span class="plain">-</span><span class="element">&gt;step_argument</span><span class="plain">, </span><span class="identifier">step</span><span class="plain">-</span><span class="element">&gt;the_N</span><span class="plain">, </span><span class="identifier">step</span><span class="plain">-</span><span class="element">&gt;the_PP</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="identifier">Inter::Packages::restring</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="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="plain">}</span>

View file

@ -247,7 +247,6 @@ we also have to direct it to a given text.
<pre class="displaydefn">
<span class="comment">Inter::Packages::restring(gen-&gt;from);</span>
<span class="identifier">Inter::Symbols::clear_transient_flags</span><span class="plain">();</span>
<span class="functiontext">CodeGen::FC::prepare</span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">);</span>
<span class="functiontext">CodeGen::CL::prepare</span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">);</span>

View file

@ -148,13 +148,11 @@
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">lab_name</span><span class="plain">-&gt;</span><span class="identifier">symbol_name</span><span class="plain">, </span><span class="identifier">I</span><span class="string">".begin"</span><span class="plain">)) { </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">";\</span><span class="plain">n</span><span class="string">"</span><span class="plain">); </span><span class="identifier">INDENT</span><span class="plain">; }</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">lab_name</span><span class="plain">-&gt;</span><span class="identifier">symbol_name</span><span class="plain">, </span><span class="identifier">I</span><span class="string">".end"</span><span class="plain">)) { </span><span class="identifier">OUTDENT</span><span class="plain">; </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"];\</span><span class="plain">n</span><span class="string">"</span><span class="plain">); }</span>
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%S;\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">lab_name</span><span class="plain">-&gt;</span><span class="identifier">symbol_name</span><span class="plain">);</span>
<span class="identifier">inter_frame</span><span class="plain"> </span><span class="identifier">F</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">P</span><span class="plain">)</span>
<span class="functiontext">CodeGen::FC::frame</span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">, </span><span class="identifier">F</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::FC::block</span><span class="plain">(</span><span class="reserved">code_generation</span><span class="plain"> *</span><span class="identifier">gen</span><span class="plain">, </span><span class="identifier">inter_frame</span><span class="plain"> </span><span class="identifier">P</span><span class="plain">) {</span>
<span class="identifier">inter_frame</span><span class="plain"> </span><span class="identifier">F</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">P</span><span class="plain">)</span>
<span class="functiontext">CodeGen::FC::frame</span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">, </span><span class="identifier">F</span><span class="plain">);</span>
<span class="plain">}</span>
@ -162,7 +160,6 @@
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::FC::code</span><span class="plain">(</span><span class="reserved">code_generation</span><span class="plain"> *</span><span class="identifier">gen</span><span class="plain">, </span><span class="identifier">inter_frame</span><span class="plain"> </span><span class="identifier">P</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">old_level</span><span class="plain"> = </span><span class="identifier">void_level</span><span class="plain">;</span>
<span class="identifier">void_level</span><span class="plain"> = </span><span class="identifier">Inter::Defn::get_level</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">) + 1;</span>
<span class="identifier">inter_frame</span><span class="plain"> </span><span class="identifier">F</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">P</span><span class="plain">)</span>
<span class="functiontext">CodeGen::FC::frame</span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">, </span><span class="identifier">F</span><span class="plain">);</span>
<span class="identifier">void_level</span><span class="plain"> = </span><span class="identifier">old_level</span><span class="plain">;</span>
@ -170,7 +167,6 @@
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::FC::evaluation</span><span class="plain">(</span><span class="reserved">code_generation</span><span class="plain"> *</span><span class="identifier">gen</span><span class="plain">, </span><span class="identifier">inter_frame</span><span class="plain"> </span><span class="identifier">P</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">old_level</span><span class="plain"> = </span><span class="identifier">void_level</span><span class="plain">;</span>
<span class="identifier">inter_frame</span><span class="plain"> </span><span class="identifier">F</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">P</span><span class="plain">)</span>
<span class="functiontext">CodeGen::FC::frame</span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">, </span><span class="identifier">F</span><span class="plain">);</span>
<span class="identifier">void_level</span><span class="plain"> = </span><span class="identifier">old_level</span><span class="plain">;</span>
@ -178,14 +174,12 @@
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::FC::reference</span><span class="plain">(</span><span class="reserved">code_generation</span><span class="plain"> *</span><span class="identifier">gen</span><span class="plain">, </span><span class="identifier">inter_frame</span><span class="plain"> </span><span class="identifier">P</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">old_level</span><span class="plain"> = </span><span class="identifier">void_level</span><span class="plain">;</span>
<span class="identifier">inter_frame</span><span class="plain"> </span><span class="identifier">C</span><span class="plain">;</span>
<span class="identifier">LOOP_THROUGH_INTER_CHILDREN</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">)</span>
<span class="functiontext">CodeGen::FC::frame</span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">);</span>
<span class="identifier">void_level</span><span class="plain"> = </span><span class="identifier">old_level</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::FC::cast</span><span class="plain">(</span><span class="reserved">code_generation</span><span class="plain"> *</span><span class="identifier">gen</span><span class="plain">, </span><span class="identifier">inter_frame</span><span class="plain"> </span><span class="identifier">P</span><span class="plain">) {</span>
<span class="identifier">inter_frame</span><span class="plain"> </span><span class="identifier">C</span><span class="plain">;</span>
<span class="identifier">LOOP_THROUGH_INTER_CHILDREN</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">) {</span>
<span class="functiontext">CodeGen::FC::frame</span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">);</span>
<span class="plain">}</span>
@ -322,7 +316,6 @@
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">routine</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"bad routine"</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%S("</span><span class="plain">, </span><span class="functiontext">CodeGen::CL::name</span><span class="plain">(</span><span class="identifier">routine</span><span class="plain">));</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">argc</span><span class="plain"> = 0;</span>
<span class="identifier">inter_frame</span><span class="plain"> </span><span class="identifier">F</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">P</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">argc</span><span class="plain">++ &gt; 0) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">", "</span><span class="plain">);</span>
<span class="functiontext">CodeGen::FC::frame</span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">, </span><span class="identifier">F</span><span class="plain">);</span>
@ -335,7 +328,6 @@
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain"> = </span><span class="identifier">Inter::get_text</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">.</span><span class="identifier">repo_segment</span><span class="plain">-&gt;</span><span class="identifier">owning_repo</span><span class="plain">, </span><span class="identifier">ID</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%S"</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">);</span>
<span class="identifier">negate_label_mode</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="identifier">inter_frame</span><span class="plain"> </span><span class="identifier">F</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">P</span><span class="plain">) {</span>
<span class="identifier">query_labels_mode</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">F</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">ID_IFLD</span><span class="plain">] == </span><span class="identifier">VAL_IST</span><span class="plain">) {</span>

View file

@ -759,15 +759,17 @@ insert them into the Inter stream close to the top.
<span class="identifier">inter_reading_state</span><span class="plain"> </span><span class="identifier">code_bookmark</span><span class="plain">;</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::early_comment</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">text</span><span class="plain">) {</span>
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">ID</span><span class="plain"> = </span><span class="identifier">Inter::create_text</span><span class="plain">(</span><span class="functiontext">Emit::repository</span><span class="plain">());</span>
<span class="identifier">Str::copy</span><span class="plain">(</span><span class="identifier">Inter::get_text</span><span class="plain">(</span><span class="functiontext">Emit::repository</span><span class="plain">(), </span><span class="identifier">ID</span><span class="plain">), </span><span class="identifier">text</span><span class="plain">);</span>
<span class="functiontext">Emit::guard</span><span class="plain">(</span><span class="identifier">Inter::Comment::new</span><span class="plain">(</span><span class="functiontext">Packaging::at</span><span class="plain">(), </span><span class="functiontext">Emit::baseline</span><span class="plain">(</span><span class="functiontext">Packaging::at</span><span class="plain">()) + 1, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">ID</span><span class="plain">));</span>
<span class="plain">*/</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::code_comment</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">text</span><span class="plain">) {</span>
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">ID</span><span class="plain"> = </span><span class="identifier">Inter::create_text</span><span class="plain">(</span><span class="functiontext">Emit::repository</span><span class="plain">());</span>
<span class="identifier">Str::copy</span><span class="plain">(</span><span class="identifier">Inter::get_text</span><span class="plain">(</span><span class="functiontext">Emit::repository</span><span class="plain">(), </span><span class="identifier">ID</span><span class="plain">), </span><span class="identifier">text</span><span class="plain">);</span>
<span class="functiontext">Emit::guard</span><span class="plain">(</span><span class="identifier">Inter::Comment::new</span><span class="plain">(</span><span class="functiontext">Emit::at</span><span class="plain">(), (</span><span class="identifier">inter_t</span><span class="plain">) </span><span class="functiontext">Emit::level</span><span class="plain">(), </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">ID</span><span class="plain">));</span>
<span class="plain">*/</span>
<span class="plain">}</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="functiontext">Emit::package</span><span class="plain">(</span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain">, </span><span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">ptype</span><span class="plain">, </span><span class="identifier">inter_package</span><span class="plain"> **</span><span class="identifier">P</span><span class="plain">) {</span>
@ -805,9 +807,10 @@ insert them into the Inter stream close to the top.
<span class="identifier">current_inter_routine</span><span class="plain"> = </span><span class="identifier">rsymb</span><span class="plain">;</span>
<span class="identifier">current_inter_reading_state</span><span class="plain"> = </span><span class="functiontext">Emit::bookmark</span><span class="plain">();</span>
<span class="identifier">locals_bookmark</span><span class="plain"> = </span><span class="identifier">current_inter_reading_state</span><span class="plain">;</span>
<span class="functiontext">Emit::place_label</span><span class="plain">(</span><span class="functiontext">Emit::reserve_label</span><span class="plain">(</span><span class="identifier">I</span><span class="string">".begin"</span><span class="plain">), </span><span class="identifier">FALSE</span><span class="plain">);</span>
<span class="identifier">begin_bookmark</span><span class="plain"> = </span><span class="functiontext">Emit::bookmark</span><span class="plain">();</span>
<span class="identifier">locals_bookmark</span><span class="plain"> = </span><span class="identifier">begin_bookmark</span><span class="plain">;</span>
<span class="identifier">locals_bookmark</span><span class="plain">.</span><span class="identifier">placement_wrt_R</span><span class="plain"> = </span><span class="identifier">BEFORE_ICPLACEMENT</span><span class="plain">;</span>
<span class="comment">Emit::early_comment(I"body:");</span>
<span class="identifier">code_bookmark</span><span class="plain"> = </span><span class="functiontext">Emit::bookmark</span><span class="plain">();</span>
<span class="functiontext">Emit::place_label</span><span class="plain">(</span><span class="functiontext">Emit::reserve_label</span><span class="plain">(</span><span class="identifier">I</span><span class="string">".end"</span><span class="plain">), </span><span class="identifier">FALSE</span><span class="plain">);</span>
@ -1333,7 +1336,6 @@ insert them into the Inter stream close to the top.
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::end_block</span><span class="plain">(</span><span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">rsymb</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">current_inter_routine</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 in an inter routine"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">current_inter_routine</span><span class="plain"> != </span><span class="identifier">rsymb</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"wrong inter routine ended"</span><span class="plain">);</span>
<span class="functiontext">Emit::guard</span><span class="plain">(</span><span class="identifier">Inter::Defn::pass2</span><span class="plain">(</span><span class="functiontext">Emit::repository</span><span class="plain">(), </span><span class="identifier">FALSE</span><span class="plain">, &amp;</span><span class="identifier">current_inter_reading_state</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">, (</span><span class="reserved">int</span><span class="plain">) </span><span class="functiontext">Emit::baseline</span><span class="plain">(&amp;</span><span class="identifier">current_inter_reading_state</span><span class="plain">)));</span>
<span class="identifier">current_inter_routine</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="functiontext">Emit::pop_code_position</span><span class="plain">();</span>
<span class="identifier">inter_reading_state</span><span class="plain"> *</span><span class="identifier">IRS</span><span class="plain"> = </span><span class="functiontext">Packaging::at</span><span class="plain">();</span>

View file

@ -223,7 +223,7 @@ very early on, the enclosure is always an enclosing package.)
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Packaging::initialise_state</span><span class="plain">(</span><span class="identifier">inter_repository</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">) {</span>
<span class="identifier">current_state</span><span class="element">.saved_IRS</span><span class="plain"> = </span><span class="functiontext">Packaging::push_IRS</span><span class="plain">(</span><span class="identifier">Inter::Bookmarks::new_IRS_global</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">));</span>
<span class="identifier">current_state</span><span class="element">.saved_IRS</span><span class="plain"> = </span><span class="functiontext">Packaging::push_IRS</span><span class="plain">(</span><span class="identifier">Inter::Bookmarks::new_IRS</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">));</span>
<span class="identifier">current_state</span><span class="element">.saved_enclosure</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="plain">}</span>

View file

@ -20,15 +20,14 @@
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inter_package</span><span class="plain"> *</span><span class="identifier">current_package</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">cp_indent</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">latest_indent</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inter_frame_list</span><span class="plain"> *</span><span class="identifier">in_frame_list</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inter_frame_list_entry</span><span class="plain"> *</span><span class="identifier">pos</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">pinned_to_end</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inter_frame</span><span class="plain"> </span><span class="identifier">R</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">placement_wrt_R</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">inter_reading_state</span><span class="plain">;</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The structure inter_reading_state is accessed in 2/iim, 2/st, 2/frm, 3/dfn, 4/tmc, 4/tsc, 4/tpc, 4/tlc, 4/tac, 4/tpc3, 4/tkc, 4/tdc, 4/tvc2, 4/tcc2, 4/trc, 4/tic, 4/tpc4, 4/tpc5, 4/tpc6, 5/tlc2, 5/tic, 5/trc, 5/tvc, 5/tcc2, 5/tsc and here.</p>
<p class="endnote">The structure inter_reading_state is accessed in 2/st, 2/frm, 3/dfn, 4/tmc, 4/tsc, 4/tpc, 4/tlc, 4/tac, 4/tpc3, 4/tkc, 4/tdc, 4/tvc2, 4/tcc2, 4/trc, 4/tic, 4/tpc4, 4/tpc5, 4/tpc6, 5/tlc2, 5/tic, 5/trc, 5/tvc, 5/tcc2, 5/tsc and here.</p>
<p class="inwebparagraph"><a id="SP2"></a><b>&#167;2. </b></p>
@ -40,56 +39,32 @@
<span class="identifier">IRS</span><span class="element">.current_package</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">IRS</span><span class="element">.cp_indent</span><span class="plain"> = 0;</span>
<span class="identifier">IRS</span><span class="element">.latest_indent</span><span class="plain"> = 0;</span>
<span class="identifier">IRS</span><span class="element">.in_frame_list</span><span class="plain"> = &amp;(</span><span class="identifier">I</span><span class="plain">-</span><span class="element">&gt;residue</span><span class="plain">);</span>
<span class="identifier">IRS</span><span class="element">.pos</span><span class="plain"> = </span><span class="identifier">IRS</span><span class="element">.in_frame_list</span><span class="plain">-</span><span class="element">&gt;last_in_ifl</span><span class="plain">;</span>
<span class="identifier">IRS</span><span class="element">.pinned_to_end</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">IRS</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">inter_reading_state</span><span class="plain"> </span><span class="functiontext">Inter::Bookmarks::new_IRS_global</span><span class="plain">(</span><span class="reserved">inter_repository</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">) {</span>
<span class="reserved">inter_reading_state</span><span class="plain"> </span><span class="identifier">IRS</span><span class="plain">;</span>
<span class="identifier">IRS</span><span class="element">.read_into</span><span class="plain"> = </span><span class="identifier">I</span><span class="plain">;</span>
<span class="identifier">IRS</span><span class="element">.current_package</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">IRS</span><span class="element">.cp_indent</span><span class="plain"> = 0;</span>
<span class="identifier">IRS</span><span class="element">.latest_indent</span><span class="plain"> = 0;</span>
<span class="identifier">IRS</span><span class="element">.in_frame_list</span><span class="plain"> = &amp;(</span><span class="identifier">I</span><span class="plain">-</span><span class="element">&gt;global_material</span><span class="plain">);</span>
<span class="identifier">IRS</span><span class="element">.pos</span><span class="plain"> = </span><span class="identifier">IRS</span><span class="element">.in_frame_list</span><span class="plain">-</span><span class="element">&gt;last_in_ifl</span><span class="plain">;</span>
<span class="identifier">IRS</span><span class="element">.pinned_to_end</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="identifier">IRS</span><span class="element">.R</span><span class="plain"> = </span><span class="functiontext">Inter::Frame::around</span><span class="plain">(</span><span class="identifier">NULL</span><span class="plain">, -1);</span>
<span class="identifier">IRS</span><span class="element">.placement_wrt_R</span><span class="plain"> = </span><span class="constant">AFTER_ICPLACEMENT</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">IRS</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">inter_reading_state</span><span class="plain"> </span><span class="functiontext">Inter::Bookmarks::snapshot</span><span class="plain">(</span><span class="reserved">inter_reading_state</span><span class="plain"> *</span><span class="identifier">IRS</span><span class="plain">) {</span>
<span class="reserved">inter_reading_state</span><span class="plain"> </span><span class="identifier">IRS2</span><span class="plain"> = *</span><span class="identifier">IRS</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">IRS2</span><span class="element">.pos</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">"unanchored bookmark"</span><span class="plain">);</span>
<span class="identifier">IRS2</span><span class="element">.pinned_to_end</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">IRS2</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">inter_reading_state</span><span class="plain"> </span><span class="functiontext">Inter::Bookmarks::from_package</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="reserved">inter_reading_state</span><span class="plain"> </span><span class="identifier">IRS</span><span class="plain"> = </span><span class="functiontext">Inter::Bookmarks::new_IRS</span><span class="plain">(</span><span class="identifier">pack</span><span class="plain">-</span><span class="element">&gt;stored_in</span><span class="plain">);</span>
<span class="identifier">IRS</span><span class="element">.pinned_to_end</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="identifier">IRS</span><span class="element">.current_package</span><span class="plain"> = </span><span class="identifier">pack</span><span class="plain">;</span>
<span class="identifier">IRS</span><span class="element">.cp_indent</span><span class="plain"> = </span><span class="functiontext">Inter::Packages::baseline</span><span class="plain">(</span><span class="identifier">pack</span><span class="plain">);</span>
<span class="comment">This is too slow for more than occasional use</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">inter_frame_list_entry</span><span class="plain"> *</span><span class="identifier">pos</span><span class="plain"> = </span><span class="identifier">IRS</span><span class="element">.in_frame_list</span><span class="plain">-</span><span class="element">&gt;first_in_ifl</span><span class="plain">; </span><span class="identifier">pos</span><span class="plain">; </span><span class="identifier">pos</span><span class="plain"> = </span><span class="identifier">pos</span><span class="plain">-</span><span class="element">&gt;next_in_ifl</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="functiontext">Inter::Packages::container</span><span class="plain">(</span><span class="identifier">pos</span><span class="plain">-</span><span class="element">&gt;listed_frame</span><span class="plain">)) {</span>
<span class="identifier">IRS</span><span class="element">.pos</span><span class="plain"> = </span><span class="identifier">pos</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">IRS</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">inter_frame</span><span class="plain"> </span><span class="identifier">D</span><span class="plain"> = </span><span class="functiontext">Inter::Symbols::defining_frame</span><span class="plain">(</span><span class="identifier">pack</span><span class="plain">-</span><span class="element">&gt;package_name</span><span class="plain">);</span>
<span class="identifier">IRS</span><span class="element">.R</span><span class="plain"> = </span><span class="identifier">D</span><span class="plain">;</span>
<span class="identifier">IRS</span><span class="element">.placement_wrt_R</span><span class="plain"> = </span><span class="constant">AS_LAST_CHILD_OF_ICPLACEMENT</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">IRS</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">inter_reading_state</span><span class="plain"> </span><span class="functiontext">Inter::Bookmarks::from_frame</span><span class="plain">(</span><span class="reserved">inter_frame</span><span class="plain"> </span><span class="identifier">D</span><span class="plain">) {</span>
<span class="reserved">inter_reading_state</span><span class="plain"> </span><span class="identifier">IRS</span><span class="plain"> = </span><span class="functiontext">Inter::Bookmarks::new_IRS</span><span class="plain">(</span><span class="identifier">D</span><span class="element">.repo_segment</span><span class="plain">-</span><span class="element">&gt;owning_repo</span><span class="plain">);</span>
<span class="identifier">IRS</span><span class="element">.pinned_to_end</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="identifier">IRS</span><span class="element">.current_package</span><span class="plain"> = </span><span class="functiontext">Inter::Packages::container</span><span class="plain">(</span><span class="identifier">D</span><span class="plain">);</span>
<span class="identifier">IRS</span><span class="element">.cp_indent</span><span class="plain"> = </span><span class="functiontext">Inter::Packages::baseline</span><span class="plain">(</span><span class="identifier">IRS</span><span class="element">.current_package</span><span class="plain">);</span>
<span class="comment">This is too slow for more than occasional use</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">inter_frame_list_entry</span><span class="plain"> *</span><span class="identifier">pos</span><span class="plain"> = </span><span class="identifier">IRS</span><span class="element">.in_frame_list</span><span class="plain">-</span><span class="element">&gt;first_in_ifl</span><span class="plain">; </span><span class="identifier">pos</span><span class="plain">; </span><span class="identifier">pos</span><span class="plain"> = </span><span class="identifier">pos</span><span class="plain">-</span><span class="element">&gt;next_in_ifl</span><span class="plain">)</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">pos</span><span class="plain">-</span><span class="element">&gt;listed_frame.data</span><span class="plain"> == </span><span class="identifier">D</span><span class="element">.data</span><span class="plain">) {</span>
<span class="identifier">IRS</span><span class="element">.pos</span><span class="plain"> = </span><span class="identifier">pos</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">IRS</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">IRS</span><span class="element">.R</span><span class="plain"> = </span><span class="identifier">D</span><span class="plain">;</span>
<span class="identifier">IRS</span><span class="element">.placement_wrt_R</span><span class="plain"> = </span><span class="constant">AFTER_ICPLACEMENT</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">IRS</span><span class="plain">;</span>
<span class="plain">}</span>
@ -102,10 +77,7 @@
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">"--:"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">IRS</span><span class="plain">-</span><span class="element">&gt;current_package</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">"--"</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">"$6"</span><span class="plain">, </span><span class="identifier">IRS</span><span class="plain">-</span><span class="element">&gt;current_package</span><span class="plain">);</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"(%d)"</span><span class="plain">, </span><span class="identifier">IRS</span><span class="plain">-</span><span class="element">&gt;cp_indent</span><span class="plain">);</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">ix</span><span class="plain"> = 0;</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">inter_frame_list_entry</span><span class="plain"> *</span><span class="identifier">e</span><span class="plain"> = </span><span class="identifier">IRS</span><span class="plain">-</span><span class="element">&gt;in_frame_list</span><span class="plain">-</span><span class="element">&gt;first_in_ifl</span><span class="plain">; ((</span><span class="identifier">e</span><span class="plain">) &amp;&amp; (</span><span class="identifier">e</span><span class="plain"> != </span><span class="identifier">IRS</span><span class="plain">-</span><span class="element">&gt;pos</span><span class="plain">)); </span><span class="identifier">e</span><span class="plain"> = </span><span class="identifier">e</span><span class="plain">-</span><span class="element">&gt;next_in_ifl</span><span class="plain">) </span><span class="identifier">ix</span><span class="plain">++;</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">":list %08x, entry %08x = %d&gt;"</span><span class="plain">, </span><span class="identifier">IRS</span><span class="plain">-</span><span class="element">&gt;in_frame_list</span><span class="plain">, </span><span class="identifier">IRS</span><span class="plain">-</span><span class="element">&gt;pos</span><span class="plain">, </span><span class="identifier">ix</span><span class="plain">);</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"(%d)&gt;"</span><span class="plain">, </span><span class="identifier">IRS</span><span class="plain">-</span><span class="element">&gt;cp_indent</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">}</span>
@ -122,9 +94,7 @@
<p class="inwebparagraph"></p>
<p class="endnote">The function Inter::Bookmarks::new_IRS is used in 2/iitf (<a href="2-iitf.html#SP1">&#167;1</a>).</p>
<p class="endnote">The function Inter::Bookmarks::new_IRS_global appears nowhere else.</p>
<p class="endnote">The function Inter::Bookmarks::new_IRS is used in 2/iibf (<a href="2-iibf.html#SP1">&#167;1</a>), 2/iitf (<a href="2-iitf.html#SP1">&#167;1</a>).</p>
<p class="endnote">The function Inter::Bookmarks::snapshot is used in 4/tmc2 (<a href="4-tmc2.html#SP1">&#167;1</a>).</p>

View file

@ -70,7 +70,7 @@
<p class="inwebparagraph"></p>
<p class="endnote">The function Inter::Frame::around is used in 2/ie (<a href="2-ie.html#SP1">&#167;1</a>), 2/iim (<a href="2-iim.html#SP3">&#167;3</a>, <a href="2-iim.html#SP4">&#167;4</a>), 2/sym (<a href="2-sym.html#SP2">&#167;2</a>, <a href="2-sym.html#SP4">&#167;4</a>), 3/dfn (<a href="3-dfn.html#SP4">&#167;4</a>).</p>
<p class="endnote">The function Inter::Frame::around is used in <a href="#SP4">&#167;4</a>, 2/ie (<a href="2-ie.html#SP1">&#167;1</a>), 2/iim (<a href="2-iim.html#SP3">&#167;3</a>, <a href="2-iim.html#SP4">&#167;4</a>), 2/sym (<a href="2-sym.html#SP2">&#167;2</a>, <a href="2-sym.html#SP4">&#167;4</a>), 2/bkm (<a href="2-bkm.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Frame::valid is used in <a href="#SP5">&#167;5</a>, 2/iim (<a href="2-iim.html#SP4">&#167;4</a>), 2/sym (<a href="2-sym.html#SP4">&#167;4</a>), 2/iitf (<a href="2-iitf.html#SP1">&#167;1</a>), 2/vi (<a href="2-vi.html#SP1">&#167;1</a>), 2/idt (<a href="2-idt.html#SP2">&#167;2</a>, <a href="2-idt.html#SP3">&#167;3</a>), 3/dfn (<a href="3-dfn.html#SP5">&#167;5</a>), 4/tpc3 (<a href="4-tpc3.html#SP2">&#167;2</a>), 4/tkc (<a href="4-tkc.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/tic (<a href="4-tic.html#SP2">&#167;2</a>), 4/tpc4 (<a href="4-tpc4.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>).</p>
@ -219,7 +219,7 @@
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">next_size</span><span class="plain"> = </span><span class="functiontext">Inter::enlarge_size</span><span class="plain">(</span><span class="identifier">F</span><span class="plain">-</span><span class="element">&gt;repo_segment</span><span class="plain">-</span><span class="element">&gt;capacity</span><span class="plain">, </span><span class="identifier">F</span><span class="plain">-</span><span class="element">&gt;extent</span><span class="plain"> + </span><span class="constant">PREFRAME_SIZE</span><span class="plain"> + (</span><span class="reserved">int</span><span class="plain">) </span><span class="identifier">by</span><span class="plain">);</span>
<span class="identifier">F</span><span class="plain">-</span><span class="element">&gt;repo_segment</span><span class="plain">-</span><span class="element">&gt;next_repo_segment</span><span class="plain"> = </span><span class="functiontext">Inter::create_segment</span><span class="plain">(</span><span class="identifier">next_size</span><span class="plain">, </span><span class="identifier">F</span><span class="plain">-</span><span class="element">&gt;repo_segment</span><span class="plain">-</span><span class="element">&gt;owning_repo</span><span class="plain">);</span>
<span class="identifier">F</span><span class="plain">-</span><span class="element">&gt;repo_segment</span><span class="plain">-</span><span class="element">&gt;next_repo_segment</span><span class="plain"> = </span><span class="functiontext">Inter::create_segment</span><span class="plain">(</span><span class="identifier">next_size</span><span class="plain">, </span><span class="identifier">F</span><span class="plain">-</span><span class="element">&gt;repo_segment</span><span class="plain">-</span><span class="element">&gt;owning_repo</span><span class="plain">, </span><span class="identifier">F</span><span class="plain">-</span><span class="element">&gt;repo_segment</span><span class="plain">);</span>
<span class="reserved">inter_frame</span><span class="plain"> </span><span class="identifier">XF</span><span class="plain"> = </span><span class="functiontext">Inter::find_room_in_segment</span><span class="plain">(</span><span class="identifier">F</span><span class="plain">-</span><span class="element">&gt;repo_segment</span><span class="plain">-</span><span class="element">&gt;next_repo_segment</span><span class="plain">, </span><span class="identifier">F</span><span class="plain">-</span><span class="element">&gt;extent</span><span class="plain"> + (</span><span class="reserved">int</span><span class="plain">) </span><span class="identifier">by</span><span class="plain">);</span>
@ -243,12 +243,32 @@
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="constant">inter_t</span><span class="plain"> </span><span class="functiontext">Inter::Frame::to_index</span><span class="plain">(</span><span class="reserved">inter_frame</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">F</span><span class="plain">-</span><span class="element">&gt;repo_segment</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) || (</span><span class="identifier">F</span><span class="plain">-</span><span class="element">&gt;index</span><span class="plain"> &lt; 0)) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"no index for null frame"</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> (</span><span class="identifier">F</span><span class="plain">-</span><span class="element">&gt;repo_segment</span><span class="plain">-</span><span class="element">&gt;index_offset</span><span class="plain">) + (</span><span class="constant">inter_t</span><span class="plain">) (</span><span class="identifier">F</span><span class="plain">-</span><span class="element">&gt;index</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">inter_frame</span><span class="plain"> </span><span class="functiontext">Inter::Frame::from_index</span><span class="plain">(</span><span class="reserved">inter_repository</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">, </span><span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">index</span><span class="plain">) {</span>
<span class="reserved">inter_repository_segment</span><span class="plain"> *</span><span class="identifier">seg</span><span class="plain"> = </span><span class="identifier">I</span><span class="plain">-</span><span class="element">&gt;first_repo_segment</span><span class="plain">;</span>
<span class="reserved">while</span><span class="plain"> (</span><span class="identifier">seg</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">seg</span><span class="plain">-</span><span class="element">&gt;index_offset</span><span class="plain"> + (</span><span class="constant">inter_t</span><span class="plain">) </span><span class="identifier">seg</span><span class="plain">-</span><span class="element">&gt;capacity</span><span class="plain"> &gt; </span><span class="identifier">index</span><span class="plain">)</span>
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">Inter::Frame::around</span><span class="plain">(</span><span class="identifier">seg</span><span class="plain">, (</span><span class="reserved">int</span><span class="plain">) (</span><span class="identifier">index</span><span class="plain"> - </span><span class="identifier">seg</span><span class="plain">-</span><span class="element">&gt;index_offset</span><span class="plain">));</span>
<span class="identifier">seg</span><span class="plain"> = </span><span class="identifier">seg</span><span class="plain">-</span><span class="element">&gt;next_repo_segment</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"index not found in repository"</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">Inter::Frame::around</span><span class="plain">(</span><span class="identifier">NULL</span><span class="plain">, -1);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function Inter::Frame::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::Frame::to_index is used in <a href="#SP6">&#167;6</a>, <a href="#SP6_2">&#167;6.2</a>, <a href="#SP6_3">&#167;6.3</a>, <a href="#SP6_4">&#167;6.4</a>.</p>
<p class="endnote">The function Inter::Frame::from_index is used in <a href="#SP5">&#167;5</a>, <a href="#SP6_1">&#167;6.1</a>, <a href="#SP6_2">&#167;6.2</a>, <a href="#SP6_3">&#167;6.3</a>, <a href="#SP6_4">&#167;6.4</a>.</p>
<p class="inwebparagraph"><a id="SP5"></a><b>&#167;5. </b></p>
@ -259,37 +279,30 @@
<span class="reserved">inter_repository</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain"> = </span><span class="identifier">F</span><span class="element">.repo_segment</span><span class="plain">-</span><span class="element">&gt;owning_repo</span><span class="plain">;</span>
<span class="identifier">LOGIF</span><span class="plain">(</span><span class="identifier">INTER_FRAMES</span><span class="plain">, </span><span class="string">"I%d: Insert frame %F\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">-&gt;</span><span class="identifier">allocation_id</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">trace_inter_insertion</span><span class="plain">) </span><span class="functiontext">Inter::Defn::write_construct_text</span><span class="plain">(</span><span class="identifier">DL</span><span class="plain">, </span><span class="identifier">F</span><span class="plain">);</span>
<span class="reserved">inter_package</span><span class="plain"> *</span><span class="identifier">con</span><span class="plain"> = </span><span class="functiontext">Inter::Packages::container</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">con</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">at</span><span class="plain">) &amp;&amp; (</span><span class="identifier">at</span><span class="plain">-</span><span class="element">&gt;in_frame_list</span><span class="plain"> != &amp;(</span><span class="identifier">I</span><span class="plain">-</span><span class="element">&gt;global_material</span><span class="plain">))) {</span>
<span class="identifier">at</span><span class="plain">-</span><span class="element">&gt;in_frame_list</span><span class="plain"> = &amp;(</span><span class="identifier">I</span><span class="plain">-</span><span class="element">&gt;global_material</span><span class="plain">);</span>
<span class="identifier">at</span><span class="plain">-</span><span class="element">&gt;pos</span><span class="plain"> = </span><span class="identifier">at</span><span class="plain">-</span><span class="element">&gt;in_frame_list</span><span class="plain">-</span><span class="element">&gt;last_in_ifl</span><span class="plain">;</span>
<span class="identifier">at</span><span class="plain">-</span><span class="element">&gt;pinned_to_end</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="functiontext">Inter::add_to_frame_list</span><span class="plain">(&amp;(</span><span class="identifier">I</span><span class="plain">-</span><span class="element">&gt;global_material</span><span class="plain">), </span><span class="identifier">F</span><span class="plain">, </span><span class="identifier">at</span><span class="plain">);</span>
<span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">F_level</span><span class="plain"> = </span><span class="identifier">F</span><span class="element">.data</span><span class="plain">[</span><span class="constant">LEVEL_IFLD</span><span class="plain">];</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">F_level</span><span class="plain"> == 0) {</span>
<span class="functiontext">Inter::add_to_frame_list</span><span class="plain">(&amp;(</span><span class="identifier">I</span><span class="plain">-</span><span class="element">&gt;global_material</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">at</span><span class="plain">-</span><span class="element">&gt;placement_wrt_R</span><span class="plain"> == </span><span class="constant">AFTER_ICPLACEMENT</span><span class="plain">)</span>
<span class="identifier">at</span><span class="plain">-</span><span class="element">&gt;R</span><span class="plain"> = </span><span class="identifier">F</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">at</span><span class="plain">) &amp;&amp; (</span><span class="identifier">at</span><span class="plain">-</span><span class="element">&gt;in_frame_list</span><span class="plain"> != &amp;(</span><span class="identifier">I</span><span class="plain">-</span><span class="element">&gt;residue</span><span class="plain">))) {</span>
<span class="identifier">at</span><span class="plain">-</span><span class="element">&gt;in_frame_list</span><span class="plain"> = &amp;(</span><span class="identifier">I</span><span class="plain">-</span><span class="element">&gt;residue</span><span class="plain">);</span>
<span class="identifier">at</span><span class="plain">-</span><span class="element">&gt;pos</span><span class="plain"> = </span><span class="identifier">at</span><span class="plain">-</span><span class="element">&gt;in_frame_list</span><span class="plain">-</span><span class="element">&gt;last_in_ifl</span><span class="plain">;</span>
<span class="identifier">at</span><span class="plain">-</span><span class="element">&gt;pinned_to_end</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">at</span><span class="plain">-</span><span class="element">&gt;placement_wrt_R</span><span class="plain"> == </span><span class="constant">NOWHERE_ICPLACEMENT</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"bad wrt"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Inter::Frame::valid</span><span class="plain">(&amp;(</span><span class="identifier">at</span><span class="plain">-</span><span class="element">&gt;R</span><span class="plain">)) == </span><span class="identifier">FALSE</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"bad R"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">at</span><span class="plain">-</span><span class="element">&gt;placement_wrt_R</span><span class="plain"> == </span><span class="constant">AFTER_ICPLACEMENT</span><span class="plain">) {</span>
<span class="reserved">while</span><span class="plain"> (</span><span class="identifier">F_level</span><span class="plain"> &lt; </span><span class="identifier">at</span><span class="plain">-</span><span class="element">&gt;R.data</span><span class="plain">[</span><span class="constant">LEVEL_IFLD</span><span class="plain">]) {</span>
<span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">PR_index</span><span class="plain"> = </span><span class="functiontext">Inter::Frame::get_parent_index</span><span class="plain">(</span><span class="identifier">at</span><span class="plain">-</span><span class="element">&gt;R</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">PR_index</span><span class="plain"> == 0) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"bubbled up out of tree"</span><span class="plain">);</span>
<span class="identifier">at</span><span class="plain">-</span><span class="element">&gt;R</span><span class="plain"> = </span><span class="functiontext">Inter::Frame::from_index</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">PR_index</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">F_level</span><span class="plain"> &gt; </span><span class="identifier">at</span><span class="plain">-</span><span class="element">&gt;R.data</span><span class="plain">[</span><span class="constant">LEVEL_IFLD</span><span class="plain">] + 1) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"bubbled down off of tree"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">F_level</span><span class="plain"> == </span><span class="identifier">at</span><span class="plain">-</span><span class="element">&gt;R.data</span><span class="plain">[</span><span class="constant">LEVEL_IFLD</span><span class="plain">] + 1) {</span>
<span class="functiontext">Inter::Frame::place</span><span class="plain">(</span><span class="identifier">F</span><span class="plain">, </span><span class="constant">AS_LAST_CHILD_OF_ICPLACEMENT</span><span class="plain">, </span><span class="identifier">at</span><span class="plain">-</span><span class="element">&gt;R</span><span class="plain">);</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="functiontext">Inter::Frame::place</span><span class="plain">(</span><span class="identifier">F</span><span class="plain">, </span><span class="constant">AFTER_ICPLACEMENT</span><span class="plain">, </span><span class="identifier">at</span><span class="plain">-</span><span class="element">&gt;R</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="identifier">at</span><span class="plain">-</span><span class="element">&gt;R</span><span class="plain"> = </span><span class="identifier">F</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">parental_level</span><span class="plain"> = </span><span class="functiontext">Inter::Defn::get_level</span><span class="plain">(</span><span class="identifier">F</span><span class="plain">) - 1;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">parental_level</span><span class="plain"> &lt; 0) || (</span><span class="identifier">parental_level</span><span class="plain"> &lt; </span><span class="functiontext">Inter::Defn::get_level</span><span class="plain">(</span><span class="identifier">D</span><span class="plain">)))</span>
<span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"levels out"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">parental_level</span><span class="plain"> == </span><span class="functiontext">Inter::Defn::get_level</span><span class="plain">(</span><span class="identifier">D</span><span class="plain">)) {</span>
<span class="functiontext">Inter::Defn::accept_child</span><span class="plain">(</span><span class="identifier">D</span><span class="plain">, </span><span class="identifier">F</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">at</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) || (</span><span class="identifier">at</span><span class="plain">-</span><span class="element">&gt;pos</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">"defective bookmark"</span><span class="plain">);</span>
<span class="reserved">inter_frame_list_entry</span><span class="plain"> *</span><span class="identifier">prev</span><span class="plain"> = </span><span class="identifier">at</span><span class="plain">-</span><span class="element">&gt;pos</span><span class="plain">-</span><span class="element">&gt;prev_in_ifl</span><span class="plain">;</span>
<span class="reserved">while</span><span class="plain"> (((</span><span class="identifier">prev</span><span class="plain">) &amp;&amp; (</span><span class="functiontext">Inter::Defn::get_level</span><span class="plain">(</span><span class="identifier">prev</span><span class="plain">-</span><span class="element">&gt;listed_frame</span><span class="plain">) != </span><span class="identifier">parental_level</span><span class="plain">)))</span>
<span class="identifier">prev</span><span class="plain"> = </span><span class="identifier">prev</span><span class="plain">-</span><span class="element">&gt;prev_in_ifl</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">prev</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 can be found"</span><span class="plain">);</span>
<span class="functiontext">Inter::Defn::accept_child</span><span class="plain">(</span><span class="identifier">prev</span><span class="plain">-</span><span class="element">&gt;listed_frame</span><span class="plain">, </span><span class="identifier">F</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">*/</span>
<span class="comment">Inter::Defn::accept_child(D, F, FALSE);</span>
<span class="functiontext">Inter::add_to_frame_list</span><span class="plain">(&amp;(</span><span class="identifier">I</span><span class="plain">-</span><span class="element">&gt;residue</span><span class="plain">), </span><span class="identifier">F</span><span class="plain">, </span><span class="identifier">at</span><span class="plain">);</span>
<span class="functiontext">Inter::Frame::place</span><span class="plain">(</span><span class="identifier">F</span><span class="plain">, </span><span class="identifier">at</span><span class="plain">-</span><span class="element">&gt;placement_wrt_R</span><span class="plain">, </span><span class="identifier">at</span><span class="plain">-</span><span class="element">&gt;R</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">}</span>
@ -361,6 +374,77 @@
<span class="identifier">F</span><span class="element">.repo_segment</span><span class="plain">-</span><span class="element">&gt;bytecode</span><span class="plain">[</span><span class="identifier">F</span><span class="element">.index</span><span class="plain"> + </span><span class="constant">PREFRAME_LIST</span><span class="plain">] = </span><span class="identifier">V</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="constant">inter_t</span><span class="plain"> </span><span class="functiontext">Inter::Frame::get_first_child_index</span><span class="plain">(</span><span class="reserved">inter_frame</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">F</span><span class="element">.repo_segment</span><span class="plain">) {</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">F</span><span class="element">.repo_segment</span><span class="plain">-</span><span class="element">&gt;bytecode</span><span class="plain">[</span><span class="identifier">F</span><span class="element">.index</span><span class="plain"> + </span><span class="constant">PREFRAME_FIRST_CHILD</span><span class="plain">];</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> 0;</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Inter::Frame::set_first_child_index</span><span class="plain">(</span><span class="reserved">inter_frame</span><span class="plain"> </span><span class="identifier">F</span><span class="plain">, </span><span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">V</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">F</span><span class="element">.repo_segment</span><span class="plain">) {</span>
<span class="identifier">F</span><span class="element">.repo_segment</span><span class="plain">-</span><span class="element">&gt;bytecode</span><span class="plain">[</span><span class="identifier">F</span><span class="element">.index</span><span class="plain"> + </span><span class="constant">PREFRAME_FIRST_CHILD</span><span class="plain">] = </span><span class="identifier">V</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="constant">inter_t</span><span class="plain"> </span><span class="functiontext">Inter::Frame::get_last_child_index</span><span class="plain">(</span><span class="reserved">inter_frame</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">F</span><span class="element">.repo_segment</span><span class="plain">) {</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">F</span><span class="element">.repo_segment</span><span class="plain">-</span><span class="element">&gt;bytecode</span><span class="plain">[</span><span class="identifier">F</span><span class="element">.index</span><span class="plain"> + </span><span class="constant">PREFRAME_LAST_CHILD</span><span class="plain">];</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> 0;</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Inter::Frame::set_last_child_index</span><span class="plain">(</span><span class="reserved">inter_frame</span><span class="plain"> </span><span class="identifier">F</span><span class="plain">, </span><span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">V</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">F</span><span class="element">.repo_segment</span><span class="plain">) {</span>
<span class="identifier">F</span><span class="element">.repo_segment</span><span class="plain">-</span><span class="element">&gt;bytecode</span><span class="plain">[</span><span class="identifier">F</span><span class="element">.index</span><span class="plain"> + </span><span class="constant">PREFRAME_LAST_CHILD</span><span class="plain">] = </span><span class="identifier">V</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="constant">inter_t</span><span class="plain"> </span><span class="functiontext">Inter::Frame::get_parent_index</span><span class="plain">(</span><span class="reserved">inter_frame</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">F</span><span class="element">.repo_segment</span><span class="plain">) {</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">F</span><span class="element">.repo_segment</span><span class="plain">-</span><span class="element">&gt;bytecode</span><span class="plain">[</span><span class="identifier">F</span><span class="element">.index</span><span class="plain"> + </span><span class="constant">PREFRAME_PARENT</span><span class="plain">];</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> 0;</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Inter::Frame::set_parent_index</span><span class="plain">(</span><span class="reserved">inter_frame</span><span class="plain"> </span><span class="identifier">F</span><span class="plain">, </span><span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">V</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">F</span><span class="element">.repo_segment</span><span class="plain">) {</span>
<span class="identifier">F</span><span class="element">.repo_segment</span><span class="plain">-</span><span class="element">&gt;bytecode</span><span class="plain">[</span><span class="identifier">F</span><span class="element">.index</span><span class="plain"> + </span><span class="constant">PREFRAME_PARENT</span><span class="plain">] = </span><span class="identifier">V</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="constant">inter_t</span><span class="plain"> </span><span class="functiontext">Inter::Frame::get_next_index</span><span class="plain">(</span><span class="reserved">inter_frame</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">F</span><span class="element">.repo_segment</span><span class="plain">) {</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">F</span><span class="element">.repo_segment</span><span class="plain">-</span><span class="element">&gt;bytecode</span><span class="plain">[</span><span class="identifier">F</span><span class="element">.index</span><span class="plain"> + </span><span class="constant">PREFRAME_NEXT</span><span class="plain">];</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> 0;</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Inter::Frame::set_next_index</span><span class="plain">(</span><span class="reserved">inter_frame</span><span class="plain"> </span><span class="identifier">F</span><span class="plain">, </span><span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">V</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">F</span><span class="element">.repo_segment</span><span class="plain">) {</span>
<span class="identifier">F</span><span class="element">.repo_segment</span><span class="plain">-</span><span class="element">&gt;bytecode</span><span class="plain">[</span><span class="identifier">F</span><span class="element">.index</span><span class="plain"> + </span><span class="constant">PREFRAME_NEXT</span><span class="plain">] = </span><span class="identifier">V</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="constant">inter_t</span><span class="plain"> </span><span class="functiontext">Inter::Frame::get_previous_index</span><span class="plain">(</span><span class="reserved">inter_frame</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">F</span><span class="element">.repo_segment</span><span class="plain">) {</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">F</span><span class="element">.repo_segment</span><span class="plain">-</span><span class="element">&gt;bytecode</span><span class="plain">[</span><span class="identifier">F</span><span class="element">.index</span><span class="plain"> + </span><span class="constant">PREFRAME_PREVIOUS</span><span class="plain">];</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> 0;</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Inter::Frame::set_previous_index</span><span class="plain">(</span><span class="reserved">inter_frame</span><span class="plain"> </span><span class="identifier">F</span><span class="plain">, </span><span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">V</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">F</span><span class="element">.repo_segment</span><span class="plain">) {</span>
<span class="identifier">F</span><span class="element">.repo_segment</span><span class="plain">-</span><span class="element">&gt;bytecode</span><span class="plain">[</span><span class="identifier">F</span><span class="element">.index</span><span class="plain"> + </span><span class="constant">PREFRAME_PREVIOUS</span><span class="plain">] = </span><span class="identifier">V</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="definitionkeyword">define</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">P</span><span class="plain">)</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">F</span><span class="plain">##</span><span class="identifier">_index</span><span class="plain"> = </span><span class="functiontext">Inter::Frame::get_first_child_index</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">);</span>
<span class="identifier">F</span><span class="plain">##</span><span class="identifier">_index</span><span class="plain"> != 0;</span>
<span class="identifier">F</span><span class="plain">##</span><span class="identifier">_index</span><span class="plain"> = </span><span class="functiontext">Inter::Frame::get_next_index</span><span class="plain">(</span><span class="functiontext">Inter::Frame::from_index</span><span class="plain">(</span><span class="identifier">P</span><span class="element">.repo_segment</span><span class="plain">-</span><span class="element">&gt;owning_repo</span><span class="plain">, </span><span class="identifier">F</span><span class="plain">##</span><span class="identifier">_index</span><span class="plain">)))</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">inter_frame</span><span class="plain"> </span><span class="identifier">F</span><span class="plain"> = </span><span class="functiontext">Inter::Frame::from_index</span><span class="plain">(</span><span class="identifier">P</span><span class="element">.repo_segment</span><span class="plain">-</span><span class="element">&gt;owning_repo</span><span class="plain">, </span><span class="identifier">F</span><span class="plain">##</span><span class="identifier">_index</span><span class="plain">); </span><span class="identifier">F</span><span class="element">.repo_segment</span><span class="plain">; </span><span class="identifier">F</span><span class="element">.repo_segment</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">)</span>
</pre>
<p class="inwebparagraph"></p>
@ -371,7 +455,7 @@
<p class="endnote">The function Inter::Frame::retrieve_origin appears nowhere else.</p>
<p class="endnote">The function Inter::Frame::error is used in 2/vi (<a href="2-vi.html#SP1">&#167;1</a>), 2/idt (<a href="2-idt.html#SP2">&#167;2</a>), 3/dfn (<a href="3-dfn.html#SP4">&#167;4</a>, <a href="3-dfn.html#SP5">&#167;5</a>), 4/tmc (<a href="4-tmc.html#SP2">&#167;2</a>), 4/tmc2 (<a href="4-tmc2.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::Frame::error is used in 2/vi (<a href="2-vi.html#SP1">&#167;1</a>), 2/idt (<a href="2-idt.html#SP2">&#167;2</a>), 3/dfn (<a href="3-dfn.html#SP5">&#167;5</a>), 4/tmc (<a href="4-tmc.html#SP2">&#167;2</a>), 4/tmc2 (<a href="4-tmc2.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::Frame::get_comment is used in 2/iibf (<a href="2-iibf.html#SP2">&#167;2</a>), 3/dfn (<a href="3-dfn.html#SP5">&#167;5</a>).</p>
@ -387,6 +471,176 @@
<p class="endnote">The function Inter::Frame::set_list is used in 3/dfn (<a href="3-dfn.html#SP5">&#167;5</a>).</p>
<p class="endnote">The function Inter::Frame::get_first_child_index is used in <a href="#SP6_1">&#167;6.1</a>, <a href="#SP6_4">&#167;6.4</a>.</p>
<p class="endnote">The function Inter::Frame::set_first_child_index is used in <a href="#SP6_1">&#167;6.1</a>, <a href="#SP6_2">&#167;6.2</a>, <a href="#SP6_4">&#167;6.4</a>.</p>
<p class="endnote">The function Inter::Frame::get_last_child_index is used in <a href="#SP6_1">&#167;6.1</a>, <a href="#SP6_2">&#167;6.2</a>, <a href="#SP6_3">&#167;6.3</a>.</p>
<p class="endnote">The function Inter::Frame::set_last_child_index is used in <a href="#SP6_1">&#167;6.1</a>, <a href="#SP6_2">&#167;6.2</a>, <a href="#SP6_3">&#167;6.3</a>.</p>
<p class="endnote">The function Inter::Frame::get_parent_index is used in <a href="#SP6_1">&#167;6.1</a>, <a href="#SP6_3">&#167;6.3</a>, <a href="#SP6_4">&#167;6.4</a>.</p>
<p class="endnote">The function Inter::Frame::set_parent_index is used in <a href="#SP6_1">&#167;6.1</a>, <a href="#SP6_2">&#167;6.2</a>, <a href="#SP6_3">&#167;6.3</a>, <a href="#SP6_4">&#167;6.4</a>.</p>
<p class="endnote">The function Inter::Frame::get_next_index is used in <a href="#SP6_1">&#167;6.1</a>, <a href="#SP6_3">&#167;6.3</a>.</p>
<p class="endnote">The function Inter::Frame::set_next_index is used in <a href="#SP6_1">&#167;6.1</a>, <a href="#SP6_2">&#167;6.2</a>, <a href="#SP6_3">&#167;6.3</a>, <a href="#SP6_4">&#167;6.4</a>.</p>
<p class="endnote">The function Inter::Frame::get_previous_index is used in <a href="#SP6_1">&#167;6.1</a>, <a href="#SP6_4">&#167;6.4</a>.</p>
<p class="endnote">The function Inter::Frame::set_previous_index is used in <a href="#SP6_1">&#167;6.1</a>, <a href="#SP6_2">&#167;6.2</a>, <a href="#SP6_3">&#167;6.3</a>, <a href="#SP6_4">&#167;6.4</a>.</p>
<p class="inwebparagraph"><a id="SP6"></a><b>&#167;6. </b></p>
<pre class="definitions">
<span class="definitionkeyword">enum</span> <span class="constant">BEFORE_ICPLACEMENT</span><span class="definitionkeyword"> from </span><span class="constant">0</span>
<span class="definitionkeyword">enum</span> <span class="constant">AFTER_ICPLACEMENT</span>
<span class="definitionkeyword">enum</span> <span class="constant">AS_LAST_CHILD_OF_ICPLACEMENT</span>
<span class="definitionkeyword">enum</span> <span class="constant">NOWHERE_ICPLACEMENT</span>
</pre>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Inter::Frame::place</span><span class="plain">(</span><span class="reserved">inter_frame</span><span class="plain"> </span><span class="identifier">C</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">how</span><span class="plain">, </span><span class="reserved">inter_frame</span><span class="plain"> </span><span class="identifier">R</span><span class="plain">) {</span>
<span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">C_index</span><span class="plain"> = </span><span class="functiontext">Inter::Frame::to_index</span><span class="plain">(&amp;</span><span class="identifier">C</span><span class="plain">);</span>
<span class="reserved">inter_repository</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain"> = </span><span class="identifier">C</span><span class="element">.repo_segment</span><span class="plain">-</span><span class="element">&gt;owning_repo</span><span class="plain">;</span>
&lt;<span class="cwebmacro">Extricate C from its current tree position</span> <span class="cwebmacronumber">6.1</span>&gt;<span class="plain">;</span>
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">how</span><span class="plain">) {</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">NOWHERE_ICPLACEMENT</span><span class="plain">:</span>
<span class="reserved">return</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">AS_LAST_CHILD_OF_ICPLACEMENT</span><span class="plain">:</span>
&lt;<span class="cwebmacro">Make C the last child of R</span> <span class="cwebmacronumber">6.2</span>&gt;<span class="plain">;</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">AFTER_ICPLACEMENT</span><span class="plain">:</span>
&lt;<span class="cwebmacro">Insert C after R</span> <span class="cwebmacronumber">6.3</span>&gt;<span class="plain">;</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">BEFORE_ICPLACEMENT</span><span class="plain">:</span>
&lt;<span class="cwebmacro">Insert C before R</span> <span class="cwebmacronumber">6.4</span>&gt;<span class="plain">;</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">default</span><span class="plain">:</span>
<span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"unimplemented"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function Inter::Frame::place is used in <a href="#SP5">&#167;5</a>.</p>
<p class="inwebparagraph"><a id="SP6_1"></a><b>&#167;6.1. </b><code class="display">
&lt;<span class="cwebmacrodefn">Extricate C from its current tree position</span> <span class="cwebmacronumber">6.1</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">OP_index</span><span class="plain"> = </span><span class="functiontext">Inter::Frame::get_parent_index</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">OP_index</span><span class="plain"> != 0) {</span>
<span class="reserved">inter_frame</span><span class="plain"> </span><span class="identifier">OP</span><span class="plain"> = </span><span class="functiontext">Inter::Frame::from_index</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">OP_index</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Inter::Frame::get_first_child_index</span><span class="plain">(</span><span class="identifier">OP</span><span class="plain">) == </span><span class="identifier">C_index</span><span class="plain">)</span>
<span class="functiontext">Inter::Frame::set_first_child_index</span><span class="plain">(</span><span class="identifier">OP</span><span class="plain">, </span><span class="functiontext">Inter::Frame::get_next_index</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">));</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Inter::Frame::get_last_child_index</span><span class="plain">(</span><span class="identifier">OP</span><span class="plain">) == </span><span class="identifier">C_index</span><span class="plain">)</span>
<span class="functiontext">Inter::Frame::set_last_child_index</span><span class="plain">(</span><span class="identifier">OP</span><span class="plain">, </span><span class="functiontext">Inter::Frame::get_previous_index</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">));</span>
<span class="plain">}</span>
<span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">OB_index</span><span class="plain"> = </span><span class="functiontext">Inter::Frame::get_previous_index</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">);</span>
<span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">OD_index</span><span class="plain"> = </span><span class="functiontext">Inter::Frame::get_next_index</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">OB_index</span><span class="plain"> != 0) {</span>
<span class="reserved">inter_frame</span><span class="plain"> </span><span class="identifier">OB</span><span class="plain"> = </span><span class="functiontext">Inter::Frame::from_index</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">OB_index</span><span class="plain">);</span>
<span class="functiontext">Inter::Frame::set_next_index</span><span class="plain">(</span><span class="identifier">OB</span><span class="plain">, </span><span class="identifier">OD_index</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">OD_index</span><span class="plain"> != 0) {</span>
<span class="reserved">inter_frame</span><span class="plain"> </span><span class="identifier">OD</span><span class="plain"> = </span><span class="functiontext">Inter::Frame::from_index</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">OD_index</span><span class="plain">);</span>
<span class="functiontext">Inter::Frame::set_previous_index</span><span class="plain">(</span><span class="identifier">OD</span><span class="plain">, </span><span class="identifier">OB_index</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="functiontext">Inter::Frame::set_parent_index</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">, 0);</span>
<span class="functiontext">Inter::Frame::set_previous_index</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">, 0);</span>
<span class="functiontext">Inter::Frame::set_next_index</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">, 0);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP6">&#167;6</a>.</p>
<p class="inwebparagraph"><a id="SP6_2"></a><b>&#167;6.2. </b><code class="display">
&lt;<span class="cwebmacrodefn">Make C the last child of R</span> <span class="cwebmacronumber">6.2</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">R_index</span><span class="plain"> = </span><span class="functiontext">Inter::Frame::to_index</span><span class="plain">(&amp;</span><span class="identifier">R</span><span class="plain">);</span>
<span class="functiontext">Inter::Frame::set_parent_index</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">, </span><span class="identifier">R_index</span><span class="plain">);</span>
<span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">B_index</span><span class="plain"> = </span><span class="functiontext">Inter::Frame::get_last_child_index</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">B_index</span><span class="plain"> == 0) {</span>
<span class="functiontext">Inter::Frame::set_first_child_index</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">, </span><span class="identifier">C_index</span><span class="plain">);</span>
<span class="functiontext">Inter::Frame::set_previous_index</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">, 0);</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="reserved">inter_frame</span><span class="plain"> </span><span class="identifier">B</span><span class="plain"> = </span><span class="functiontext">Inter::Frame::from_index</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">B_index</span><span class="plain">);</span>
<span class="functiontext">Inter::Frame::set_next_index</span><span class="plain">(</span><span class="identifier">B</span><span class="plain">, </span><span class="identifier">C_index</span><span class="plain">);</span>
<span class="functiontext">Inter::Frame::set_previous_index</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">, </span><span class="identifier">B_index</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="functiontext">Inter::Frame::set_last_child_index</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">, </span><span class="identifier">C_index</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP6">&#167;6</a>.</p>
<p class="inwebparagraph"><a id="SP6_3"></a><b>&#167;6.3. </b><code class="display">
&lt;<span class="cwebmacrodefn">Insert C after R</span> <span class="cwebmacronumber">6.3</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">P_index</span><span class="plain"> = </span><span class="functiontext">Inter::Frame::get_parent_index</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">);</span>
<span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">R_index</span><span class="plain"> = </span><span class="functiontext">Inter::Frame::to_index</span><span class="plain">(&amp;</span><span class="identifier">R</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">P_index</span><span class="plain"> == 0) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"can't move C after R when R is nowhere"</span><span class="plain">);</span>
<span class="functiontext">Inter::Frame::set_parent_index</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">, </span><span class="identifier">P_index</span><span class="plain">);</span>
<span class="reserved">inter_frame</span><span class="plain"> </span><span class="identifier">P</span><span class="plain"> = </span><span class="functiontext">Inter::Frame::from_index</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">P_index</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Inter::Frame::get_last_child_index</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">) == </span><span class="identifier">R_index</span><span class="plain">)</span>
<span class="functiontext">Inter::Frame::set_last_child_index</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">C_index</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> {</span>
<span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">D_index</span><span class="plain"> = </span><span class="functiontext">Inter::Frame::get_next_index</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">D_index</span><span class="plain"> == 0) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"inter tree broken"</span><span class="plain">);</span>
<span class="reserved">inter_frame</span><span class="plain"> </span><span class="identifier">D</span><span class="plain"> = </span><span class="functiontext">Inter::Frame::from_index</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">D_index</span><span class="plain">);</span>
<span class="functiontext">Inter::Frame::set_next_index</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">, </span><span class="identifier">D_index</span><span class="plain">);</span>
<span class="functiontext">Inter::Frame::set_previous_index</span><span class="plain">(</span><span class="identifier">D</span><span class="plain">, </span><span class="identifier">C_index</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="functiontext">Inter::Frame::set_next_index</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">, </span><span class="identifier">C_index</span><span class="plain">);</span>
<span class="functiontext">Inter::Frame::set_previous_index</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">, </span><span class="identifier">R_index</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP6">&#167;6</a>.</p>
<p class="inwebparagraph"><a id="SP6_4"></a><b>&#167;6.4. </b><code class="display">
&lt;<span class="cwebmacrodefn">Insert C before R</span> <span class="cwebmacronumber">6.4</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">P_index</span><span class="plain"> = </span><span class="functiontext">Inter::Frame::get_parent_index</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">);</span>
<span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">R_index</span><span class="plain"> = </span><span class="functiontext">Inter::Frame::to_index</span><span class="plain">(&amp;</span><span class="identifier">R</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">P_index</span><span class="plain"> == 0) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"can't move C before R when R is nowhere"</span><span class="plain">);</span>
<span class="functiontext">Inter::Frame::set_parent_index</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">, </span><span class="identifier">P_index</span><span class="plain">);</span>
<span class="reserved">inter_frame</span><span class="plain"> </span><span class="identifier">P</span><span class="plain"> = </span><span class="functiontext">Inter::Frame::from_index</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">P_index</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Inter::Frame::get_first_child_index</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">) == </span><span class="identifier">R_index</span><span class="plain">)</span>
<span class="functiontext">Inter::Frame::set_first_child_index</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">C_index</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> {</span>
<span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">B_index</span><span class="plain"> = </span><span class="functiontext">Inter::Frame::get_previous_index</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">B_index</span><span class="plain"> == 0) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"inter tree broken"</span><span class="plain">);</span>
<span class="reserved">inter_frame</span><span class="plain"> </span><span class="identifier">B</span><span class="plain"> = </span><span class="functiontext">Inter::Frame::from_index</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">B_index</span><span class="plain">);</span>
<span class="functiontext">Inter::Frame::set_previous_index</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">, </span><span class="identifier">B_index</span><span class="plain">);</span>
<span class="functiontext">Inter::Frame::set_next_index</span><span class="plain">(</span><span class="identifier">B</span><span class="plain">, </span><span class="identifier">C_index</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="functiontext">Inter::Frame::set_next_index</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">, </span><span class="identifier">R_index</span><span class="plain">);</span>
<span class="functiontext">Inter::Frame::set_previous_index</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">, </span><span class="identifier">C_index</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP6">&#167;6</a>.</p>
<hr class="tocbar">
<ul class="toc"><li><a href="2-sym.html">Back to 'Symbols'</a></li><li><a href="2-bkm.html">Continue with 'Bookmarks'</a></li></ul><hr class="tocbar">
<!--End of weave-->

View file

@ -110,11 +110,11 @@
<p class="endnote">The function Inter::Errors::plain is used in 2/iibf (<a href="2-iibf.html#SP3">&#167;3</a>), 3/dfn (<a href="3-dfn.html#SP4">&#167;4</a>, <a href="3-dfn.html#SP5">&#167;5</a>), 4/tcc (<a href="4-tcc.html#SP1">&#167;1</a>), 4/tmc2 (<a href="4-tmc2.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#SP11">&#167;11</a>), 2/iibf (<a href="2-iibf.html#SP1_7">&#167;1.7</a>, <a href="2-iibf.html#SP3">&#167;3</a>), 2/iitf (<a href="2-iitf.html#SP1">&#167;1</a>, <a href="2-iitf.html#SP2">&#167;2</a>), 3/dfn (<a href="3-dfn.html#SP5">&#167;5</a>).</p>
<p class="endnote">The function Inter::Errors::issue is used in 2/st (<a href="2-st.html#SP11">&#167;11</a>), 2/iibf (<a href="2-iibf.html#SP1_7">&#167;1.7</a>, <a href="2-iibf.html#SP3">&#167;3</a>), 2/iitf (<a href="2-iitf.html#SP1">&#167;1</a>, <a href="2-iitf.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Errors::issue_to appears nowhere else.</p>
<p class="endnote">The function Inter::Errors::gather_first is used in 3/dfn (<a href="3-dfn.html#SP4">&#167;4</a>).</p>
<p class="endnote">The function Inter::Errors::gather_first appears nowhere else.</p>
<p class="endnote">The structure inter_error_location is accessed in 2/iim, 2/iibf and here.</p>

View file

@ -26,6 +26,7 @@ complete in itself.
<span class="reserved">FILE</span><span class="plain"> *</span><span class="identifier">fh</span><span class="plain"> = </span><span class="identifier">BinaryFiles::open_for_reading</span><span class="plain">(</span><span class="identifier">F</span><span class="plain">);</span>
<span class="reserved">inter_error_location</span><span class="plain"> </span><span class="identifier">eloc</span><span class="plain"> = </span><span class="functiontext">Inter::Errors::interb_location</span><span class="plain">(</span><span class="identifier">F</span><span class="plain">, 0);</span>
<span class="reserved">inter_reading_state</span><span class="plain"> </span><span class="identifier">at</span><span class="plain"> = </span><span class="functiontext">Inter::Bookmarks::new_IRS</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">);</span>
<span class="reserved">unsigned</span><span class="plain"> </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">X</span><span class="plain"> = 0;</span>
@ -543,10 +544,9 @@ enough that the slot exists for the eventual list to be stored in.
<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="identifier">P</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">exit</span><span class="plain">(1); }</span>
<span class="functiontext">Inter::Frame::insert</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="functiontext">Inter::Frame::insert</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, &amp;</span><span class="identifier">at</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="functiontext">Inter::check_segments</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">);</span>
<span class="functiontext">Inter::Defn::pass2</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">, 0);</span>
</pre>
<p class="inwebparagraph"></p>

View file

@ -32,11 +32,12 @@
<span class="definitionkeyword">define</span> <span class="constant">PREFRAME_COMMENT</span><span class="plain"> 3</span>
<span class="definitionkeyword">define</span> <span class="constant">PREFRAME_PACKAGE</span><span class="plain"> 4</span>
<span class="definitionkeyword">define</span> <span class="constant">PREFRAME_PARENT</span><span class="plain"> 5</span>
<span class="definitionkeyword">define</span> <span class="constant">PREFRAME_CHILD</span><span class="plain"> 6</span>
<span class="definitionkeyword">define</span> <span class="constant">PREFRAME_PREVIOUS</span><span class="plain"> 7</span>
<span class="definitionkeyword">define</span> <span class="constant">PREFRAME_NEXT</span><span class="plain"> 8</span>
<span class="definitionkeyword">define</span> <span class="constant">PREFRAME_LIST</span><span class="plain"> 9</span>
<span class="definitionkeyword">define</span> <span class="constant">PREFRAME_SIZE</span><span class="plain"> 10</span>
<span class="definitionkeyword">define</span> <span class="constant">PREFRAME_FIRST_CHILD</span><span class="plain"> 6</span>
<span class="definitionkeyword">define</span> <span class="constant">PREFRAME_LAST_CHILD</span><span class="plain"> 7</span>
<span class="definitionkeyword">define</span> <span class="constant">PREFRAME_PREVIOUS</span><span class="plain"> 8</span>
<span class="definitionkeyword">define</span> <span class="constant">PREFRAME_NEXT</span><span class="plain"> 9</span>
<span class="definitionkeyword">define</span> <span class="constant">PREFRAME_LIST</span><span class="plain"> 10</span>
<span class="definitionkeyword">define</span> <span class="constant">PREFRAME_SIZE</span><span class="plain"> 11</span>
</pre>
<pre class="display">
@ -48,7 +49,6 @@
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inter_resource_holder</span><span class="plain"> *</span><span class="identifier">stored_resources</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">origin_file</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inter_frame_list</span><span class="plain"> </span><span class="identifier">global_material</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inter_frame_list</span><span class="plain"> </span><span class="identifier">residue</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inter_repository</span><span class="plain"> *</span><span class="identifier">main_repo</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inter_package</span><span class="plain"> *</span><span class="identifier">main_package</span><span class="plain">;</span>
<span class="identifier">MEMORY_MANAGEMENT</span>
@ -78,6 +78,7 @@
<span class="reserved">typedef</span><span class="plain"> </span><span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inter_repository_segment</span><span class="plain"> {</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inter_repository</span><span class="plain"> *</span><span class="identifier">owning_repo</span><span class="plain">;</span>
<span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">index_offset</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">size</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">capacity</span><span class="plain">;</span>
<span class="constant">inter_t</span><span class="plain"> *</span><span class="identifier">bytecode</span><span class="plain">;</span>
@ -88,13 +89,13 @@
<p class="inwebparagraph"></p>
<p class="endnote">The structure inter_repository is accessed in 2/st, 2/pck, 2/frm, 2/bkm, 2/iibf, 3/dfn and here.</p>
<p class="endnote">The structure inter_repository is accessed in 2/st, 2/pck, 2/frm, 2/iibf and here.</p>
<p class="endnote">The structure inter_resource_holder is accessed in 2/iibf and here.</p>
<p class="endnote">The structure inter_frame_list is accessed in 2/pck, 2/frm, 2/bkm, 3/dfn and here.</p>
<p class="endnote">The structure inter_frame_list is private to this section.</p>
<p class="endnote">The structure inter_frame_list_entry is accessed in 2/frm, 2/bkm and here.</p>
<p class="endnote">The structure inter_frame_list_entry is private to this section.</p>
<p class="endnote">The structure inter_repository_segment is accessed in 2/st, 2/pck, 2/sym, 2/frm, 2/bkm, 2/iibf, 2/vi, 3/dfn, 4/tmc, 4/tpc, 4/tlc, 4/tac, 4/tpc3, 4/tkc, 4/tdc, 4/tvc2, 4/tcc2, 4/trc, 4/tic, 4/tpc4, 4/tpc5, 4/tpc6, 5/tlc2, 5/tic, 5/trc, 5/tvc, 5/tsc and here.</p>
@ -105,7 +106,7 @@
<span class="reserved">inter_repository</span><span class="plain"> *</span><span class="functiontext">Inter::create</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">ref</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">capacity</span><span class="plain">) {</span>
<span class="reserved">inter_repository</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">inter_repository</span><span class="plain">);</span>
<span class="identifier">I</span><span class="plain">-</span><span class="element">&gt;ref</span><span class="plain"> = </span><span class="identifier">ref</span><span class="plain">;</span>
<span class="identifier">I</span><span class="plain">-</span><span class="element">&gt;first_repo_segment</span><span class="plain"> = </span><span class="functiontext">Inter::create_segment</span><span class="plain">(</span><span class="identifier">capacity</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">);</span>
<span class="identifier">I</span><span class="plain">-</span><span class="element">&gt;first_repo_segment</span><span class="plain"> = </span><span class="functiontext">Inter::create_segment</span><span class="plain">(</span><span class="identifier">capacity</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="plain">-</span><span class="element">&gt;size</span><span class="plain"> = 1;</span>
<span class="identifier">I</span><span class="plain">-</span><span class="element">&gt;capacity</span><span class="plain"> = 0;</span>
<span class="identifier">I</span><span class="plain">-</span><span class="element">&gt;stored_resources</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
@ -114,16 +115,14 @@
<span class="identifier">I</span><span class="plain">-</span><span class="element">&gt;global_material.spare_storage</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">I</span><span class="plain">-</span><span class="element">&gt;global_material.storage_used</span><span class="plain"> = 0;</span>
<span class="identifier">I</span><span class="plain">-</span><span class="element">&gt;global_material.storage_capacity</span><span class="plain"> = 0;</span>
<span class="identifier">I</span><span class="plain">-</span><span class="element">&gt;residue.spare_storage</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">I</span><span class="plain">-</span><span class="element">&gt;residue.storage_used</span><span class="plain"> = 0;</span>
<span class="identifier">I</span><span class="plain">-</span><span class="element">&gt;residue.storage_capacity</span><span class="plain"> = 0;</span>
<span class="identifier">I</span><span class="plain">-</span><span class="element">&gt;main_repo</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">I</span><span class="plain">-</span><span class="element">&gt;main_package</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">inter_repository_segment</span><span class="plain"> *</span><span class="functiontext">Inter::create_segment</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">capacity</span><span class="plain">, </span><span class="reserved">inter_repository</span><span class="plain"> *</span><span class="identifier">owner</span><span class="plain">) {</span>
<span class="reserved">inter_repository_segment</span><span class="plain"> *</span><span class="functiontext">Inter::create_segment</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">capacity</span><span class="plain">, </span><span class="reserved">inter_repository</span><span class="plain"> *</span><span class="identifier">owner</span><span class="plain">, </span><span class="reserved">inter_repository_segment</span><span class="plain"> *</span><span class="identifier">prec</span><span class="plain">) {</span>
<span class="reserved">inter_repository_segment</span><span class="plain"> *</span><span class="identifier">IS</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">inter_repository_segment</span><span class="plain">);</span>
<span class="identifier">IS</span><span class="plain">-</span><span class="element">&gt;index_offset</span><span class="plain"> = (</span><span class="identifier">prec</span><span class="plain">)?(</span><span class="identifier">prec</span><span class="plain">-</span><span class="element">&gt;index_offset</span><span class="plain"> + (</span><span class="constant">inter_t</span><span class="plain">) </span><span class="identifier">prec</span><span class="plain">-</span><span class="element">&gt;capacity</span><span class="plain">):0;</span>
<span class="identifier">IS</span><span class="plain">-</span><span class="element">&gt;owning_repo</span><span class="plain"> = </span><span class="identifier">owner</span><span class="plain">;</span>
<span class="identifier">IS</span><span class="plain">-</span><span class="element">&gt;size</span><span class="plain"> = 0;</span>
<span class="identifier">IS</span><span class="plain">-</span><span class="element">&gt;capacity</span><span class="plain"> = </span><span class="identifier">capacity</span><span class="plain">;</span>
@ -176,7 +175,7 @@
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">IS</span><span class="plain">-</span><span class="element">&gt;size</span><span class="plain"> + </span><span class="identifier">n</span><span class="plain"> + </span><span class="constant">PREFRAME_SIZE</span><span class="plain"> &gt; </span><span class="identifier">IS</span><span class="plain">-</span><span class="element">&gt;capacity</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">next_size</span><span class="plain"> = </span><span class="functiontext">Inter::enlarge_size</span><span class="plain">(</span><span class="identifier">IS</span><span class="plain">-</span><span class="element">&gt;capacity</span><span class="plain">, </span><span class="identifier">n</span><span class="plain"> + </span><span class="constant">PREFRAME_SIZE</span><span class="plain">);</span>
<span class="identifier">IS</span><span class="plain">-</span><span class="element">&gt;capacity</span><span class="plain"> = </span><span class="identifier">IS</span><span class="plain">-</span><span class="element">&gt;size</span><span class="plain">;</span>
<span class="identifier">IS</span><span class="plain">-</span><span class="element">&gt;next_repo_segment</span><span class="plain"> = </span><span class="functiontext">Inter::create_segment</span><span class="plain">(</span><span class="identifier">next_size</span><span class="plain">, </span><span class="identifier">IS</span><span class="plain">-</span><span class="element">&gt;owning_repo</span><span class="plain">);</span>
<span class="identifier">IS</span><span class="plain">-</span><span class="element">&gt;next_repo_segment</span><span class="plain"> = </span><span class="functiontext">Inter::create_segment</span><span class="plain">(</span><span class="identifier">next_size</span><span class="plain">, </span><span class="identifier">IS</span><span class="plain">-</span><span class="element">&gt;owning_repo</span><span class="plain">, </span><span class="identifier">IS</span><span class="plain">);</span>
<span class="identifier">IS</span><span class="plain"> = </span><span class="identifier">IS</span><span class="plain">-</span><span class="element">&gt;next_repo_segment</span><span class="plain">;</span>
<span class="functiontext">Inter::check_segments</span><span class="plain">(</span><span class="identifier">IS</span><span class="plain">-</span><span class="element">&gt;owning_repo</span><span class="plain">);</span>
<span class="plain">}</span>
@ -188,7 +187,8 @@
<span class="identifier">IS</span><span class="plain">-</span><span class="element">&gt;bytecode</span><span class="plain">[</span><span class="identifier">at</span><span class="plain"> + </span><span class="constant">PREFRAME_COMMENT</span><span class="plain">] = 0;</span>
<span class="identifier">IS</span><span class="plain">-</span><span class="element">&gt;bytecode</span><span class="plain">[</span><span class="identifier">at</span><span class="plain"> + </span><span class="constant">PREFRAME_PACKAGE</span><span class="plain">] = 0;</span>
<span class="identifier">IS</span><span class="plain">-</span><span class="element">&gt;bytecode</span><span class="plain">[</span><span class="identifier">at</span><span class="plain"> + </span><span class="constant">PREFRAME_PARENT</span><span class="plain">] = 0;</span>
<span class="identifier">IS</span><span class="plain">-</span><span class="element">&gt;bytecode</span><span class="plain">[</span><span class="identifier">at</span><span class="plain"> + </span><span class="constant">PREFRAME_CHILD</span><span class="plain">] = 0;</span>
<span class="identifier">IS</span><span class="plain">-</span><span class="element">&gt;bytecode</span><span class="plain">[</span><span class="identifier">at</span><span class="plain"> + </span><span class="constant">PREFRAME_FIRST_CHILD</span><span class="plain">] = 0;</span>
<span class="identifier">IS</span><span class="plain">-</span><span class="element">&gt;bytecode</span><span class="plain">[</span><span class="identifier">at</span><span class="plain"> + </span><span class="constant">PREFRAME_LAST_CHILD</span><span class="plain">] = 0;</span>
<span class="identifier">IS</span><span class="plain">-</span><span class="element">&gt;bytecode</span><span class="plain">[</span><span class="identifier">at</span><span class="plain"> + </span><span class="constant">PREFRAME_PREVIOUS</span><span class="plain">] = 0;</span>
<span class="identifier">IS</span><span class="plain">-</span><span class="element">&gt;bytecode</span><span class="plain">[</span><span class="identifier">at</span><span class="plain"> + </span><span class="constant">PREFRAME_NEXT</span><span class="plain">] = 0;</span>
<span class="identifier">IS</span><span class="plain">-</span><span class="element">&gt;bytecode</span><span class="plain">[</span><span class="identifier">at</span><span class="plain"> + </span><span class="constant">PREFRAME_LIST</span><span class="plain">] = 0;</span>
@ -347,8 +347,6 @@
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">inter_frame_list_entry</span><span class="plain"> *</span><span class="identifier">F</span><span class="plain">##</span><span class="identifier">_entry</span><span class="plain"> = </span><span class="identifier">entry</span><span class="plain">; </span><span class="identifier">F</span><span class="plain">##</span><span class="identifier">_entry</span><span class="plain">; </span><span class="identifier">F</span><span class="plain">##</span><span class="identifier">_entry</span><span class="plain"> = </span><span class="identifier">F</span><span class="plain">##</span><span class="identifier">_entry</span><span class="plain">-</span><span class="element">&gt;next_in_ifl</span><span class="plain">)</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="functiontext">Inter::Frame::valid</span><span class="plain">(((</span><span class="identifier">F</span><span class="plain"> = </span><span class="identifier">F</span><span class="plain">##</span><span class="identifier">_entry</span><span class="plain">-</span><span class="element">&gt;listed_frame</span><span class="plain">), &amp;</span><span class="identifier">F</span><span class="plain">))) &amp;&amp;</span>
<span class="plain">(</span><span class="functiontext">Inter::Frame::included</span><span class="plain">(((</span><span class="identifier">F</span><span class="plain"> = </span><span class="identifier">F</span><span class="plain">##</span><span class="identifier">_entry</span><span class="plain">-</span><span class="element">&gt;listed_frame</span><span class="plain">), &amp;</span><span class="identifier">F</span><span class="plain">))))</span>
<span class="definitionkeyword">define</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">P</span><span class="plain">)</span>
<span class="identifier">LOOP_THROUGH_INTER_FRAME_LIST</span><span class="plain">(</span><span class="identifier">F</span><span class="plain">, </span><span class="functiontext">Inter::Defn::list_of_children</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">))</span>
</pre>
<pre class="display">
@ -360,49 +358,52 @@
<span class="plain">}</span>
<span class="reserved">inter_frame</span><span class="plain"> </span><span class="functiontext">Inter::first_child</span><span class="plain">(</span><span class="reserved">inter_frame</span><span class="plain"> </span><span class="identifier">P</span><span class="plain">) {</span>
<span class="reserved">inter_frame_list</span><span class="plain"> *</span><span class="identifier">FL</span><span class="plain"> = </span><span class="functiontext">Inter::Defn::list_of_children</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">FL</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) || (</span><span class="identifier">FL</span><span class="plain">-</span><span class="element">&gt;first_in_ifl</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="functiontext">Inter::Frame::around</span><span class="plain">(</span><span class="identifier">NULL</span><span class="plain">, -1);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">FL</span><span class="plain">-</span><span class="element">&gt;first_in_ifl</span><span class="plain">-</span><span class="element">&gt;listed_frame</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">P</span><span class="plain">)</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">F</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">Inter::Frame::around</span><span class="plain">(</span><span class="identifier">NULL</span><span class="plain">, -1);</span>
<span class="plain">}</span>
<span class="reserved">inter_frame</span><span class="plain"> </span><span class="functiontext">Inter::second_child</span><span class="plain">(</span><span class="reserved">inter_frame</span><span class="plain"> </span><span class="identifier">P</span><span class="plain">) {</span>
<span class="reserved">inter_frame_list</span><span class="plain"> *</span><span class="identifier">FL</span><span class="plain"> = </span><span class="functiontext">Inter::Defn::list_of_children</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">FL</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) || (</span><span class="identifier">FL</span><span class="plain">-</span><span class="element">&gt;first_in_ifl</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) || (</span><span class="identifier">FL</span><span class="plain">-</span><span class="element">&gt;first_in_ifl</span><span class="plain">-</span><span class="element">&gt;next_in_ifl</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="functiontext">Inter::Frame::around</span><span class="plain">(</span><span class="identifier">NULL</span><span class="plain">, -1);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">FL</span><span class="plain">-</span><span class="element">&gt;first_in_ifl</span><span class="plain">-</span><span class="element">&gt;next_in_ifl</span><span class="plain">-</span><span class="element">&gt;listed_frame</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">c</span><span class="plain"> = 0;</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">P</span><span class="plain">)</span>
<span class="reserved">if</span><span class="plain"> (++</span><span class="identifier">c</span><span class="plain"> == 2)</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">F</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">Inter::Frame::around</span><span class="plain">(</span><span class="identifier">NULL</span><span class="plain">, -1);</span>
<span class="plain">}</span>
<span class="reserved">inter_frame</span><span class="plain"> </span><span class="functiontext">Inter::third_child</span><span class="plain">(</span><span class="reserved">inter_frame</span><span class="plain"> </span><span class="identifier">P</span><span class="plain">) {</span>
<span class="reserved">inter_frame_list</span><span class="plain"> *</span><span class="identifier">FL</span><span class="plain"> = </span><span class="functiontext">Inter::Defn::list_of_children</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">FL</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) || (</span><span class="identifier">FL</span><span class="plain">-</span><span class="element">&gt;first_in_ifl</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) || (</span><span class="identifier">FL</span><span class="plain">-</span><span class="element">&gt;first_in_ifl</span><span class="plain">-</span><span class="element">&gt;next_in_ifl</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) || (</span><span class="identifier">FL</span><span class="plain">-</span><span class="element">&gt;first_in_ifl</span><span class="plain">-</span><span class="element">&gt;next_in_ifl</span><span class="plain">-</span><span class="element">&gt;next_in_ifl</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="functiontext">Inter::Frame::around</span><span class="plain">(</span><span class="identifier">NULL</span><span class="plain">, -1);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">FL</span><span class="plain">-</span><span class="element">&gt;first_in_ifl</span><span class="plain">-</span><span class="element">&gt;next_in_ifl</span><span class="plain">-</span><span class="element">&gt;next_in_ifl</span><span class="plain">-</span><span class="element">&gt;listed_frame</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">c</span><span class="plain"> = 0;</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">P</span><span class="plain">)</span>
<span class="reserved">if</span><span class="plain"> (++</span><span class="identifier">c</span><span class="plain"> == 3)</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">F</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">Inter::Frame::around</span><span class="plain">(</span><span class="identifier">NULL</span><span class="plain">, -1);</span>
<span class="plain">}</span>
<span class="reserved">inter_frame</span><span class="plain"> </span><span class="functiontext">Inter::fourth_child</span><span class="plain">(</span><span class="reserved">inter_frame</span><span class="plain"> </span><span class="identifier">P</span><span class="plain">) {</span>
<span class="reserved">inter_frame_list</span><span class="plain"> *</span><span class="identifier">FL</span><span class="plain"> = </span><span class="functiontext">Inter::Defn::list_of_children</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">FL</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) || (</span><span class="identifier">FL</span><span class="plain">-</span><span class="element">&gt;first_in_ifl</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) || (</span><span class="identifier">FL</span><span class="plain">-</span><span class="element">&gt;first_in_ifl</span><span class="plain">-</span><span class="element">&gt;next_in_ifl</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) || (</span><span class="identifier">FL</span><span class="plain">-</span><span class="element">&gt;first_in_ifl</span><span class="plain">-</span><span class="element">&gt;next_in_ifl</span><span class="plain">-</span><span class="element">&gt;next_in_ifl</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) || (</span><span class="identifier">FL</span><span class="plain">-</span><span class="element">&gt;first_in_ifl</span><span class="plain">-</span><span class="element">&gt;next_in_ifl</span><span class="plain">-</span><span class="element">&gt;next_in_ifl</span><span class="plain">-</span><span class="element">&gt;next_in_ifl</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="functiontext">Inter::Frame::around</span><span class="plain">(</span><span class="identifier">NULL</span><span class="plain">, -1);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">FL</span><span class="plain">-</span><span class="element">&gt;first_in_ifl</span><span class="plain">-</span><span class="element">&gt;next_in_ifl</span><span class="plain">-</span><span class="element">&gt;next_in_ifl</span><span class="plain">-</span><span class="element">&gt;next_in_ifl</span><span class="plain">-</span><span class="element">&gt;listed_frame</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">c</span><span class="plain"> = 0;</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">P</span><span class="plain">)</span>
<span class="reserved">if</span><span class="plain"> (++</span><span class="identifier">c</span><span class="plain"> == 4)</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">F</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">Inter::Frame::around</span><span class="plain">(</span><span class="identifier">NULL</span><span class="plain">, -1);</span>
<span class="plain">}</span>
<span class="reserved">inter_frame</span><span class="plain"> </span><span class="functiontext">Inter::fifth_child</span><span class="plain">(</span><span class="reserved">inter_frame</span><span class="plain"> </span><span class="identifier">P</span><span class="plain">) {</span>
<span class="reserved">inter_frame_list</span><span class="plain"> *</span><span class="identifier">FL</span><span class="plain"> = </span><span class="functiontext">Inter::Defn::list_of_children</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">FL</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) || (</span><span class="identifier">FL</span><span class="plain">-</span><span class="element">&gt;first_in_ifl</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) || (</span><span class="identifier">FL</span><span class="plain">-</span><span class="element">&gt;first_in_ifl</span><span class="plain">-</span><span class="element">&gt;next_in_ifl</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) || (</span><span class="identifier">FL</span><span class="plain">-</span><span class="element">&gt;first_in_ifl</span><span class="plain">-</span><span class="element">&gt;next_in_ifl</span><span class="plain">-</span><span class="element">&gt;next_in_ifl</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) || (</span><span class="identifier">FL</span><span class="plain">-</span><span class="element">&gt;first_in_ifl</span><span class="plain">-</span><span class="element">&gt;next_in_ifl</span><span class="plain">-</span><span class="element">&gt;next_in_ifl</span><span class="plain">-</span><span class="element">&gt;next_in_ifl</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) || (</span><span class="identifier">FL</span><span class="plain">-</span><span class="element">&gt;first_in_ifl</span><span class="plain">-</span><span class="element">&gt;next_in_ifl</span><span class="plain">-</span><span class="element">&gt;next_in_ifl</span><span class="plain">-</span><span class="element">&gt;next_in_ifl</span><span class="plain">-</span><span class="element">&gt;next_in_ifl</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="functiontext">Inter::Frame::around</span><span class="plain">(</span><span class="identifier">NULL</span><span class="plain">, -1);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">FL</span><span class="plain">-</span><span class="element">&gt;first_in_ifl</span><span class="plain">-</span><span class="element">&gt;next_in_ifl</span><span class="plain">-</span><span class="element">&gt;next_in_ifl</span><span class="plain">-</span><span class="element">&gt;next_in_ifl</span><span class="plain">-</span><span class="element">&gt;next_in_ifl</span><span class="plain">-</span><span class="element">&gt;listed_frame</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">c</span><span class="plain"> = 0;</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">P</span><span class="plain">)</span>
<span class="reserved">if</span><span class="plain"> (++</span><span class="identifier">c</span><span class="plain"> == 5)</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">F</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">Inter::Frame::around</span><span class="plain">(</span><span class="identifier">NULL</span><span class="plain">, -1);</span>
<span class="plain">}</span>
<span class="reserved">inter_frame</span><span class="plain"> </span><span class="functiontext">Inter::sixth_child</span><span class="plain">(</span><span class="reserved">inter_frame</span><span class="plain"> </span><span class="identifier">P</span><span class="plain">) {</span>
<span class="reserved">inter_frame_list</span><span class="plain"> *</span><span class="identifier">FL</span><span class="plain"> = </span><span class="functiontext">Inter::Defn::list_of_children</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">FL</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) ||</span>
<span class="plain">(</span><span class="identifier">FL</span><span class="plain">-</span><span class="element">&gt;first_in_ifl</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) ||</span>
<span class="plain">(</span><span class="identifier">FL</span><span class="plain">-</span><span class="element">&gt;first_in_ifl</span><span class="plain">-</span><span class="element">&gt;next_in_ifl</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) ||</span>
<span class="plain">(</span><span class="identifier">FL</span><span class="plain">-</span><span class="element">&gt;first_in_ifl</span><span class="plain">-</span><span class="element">&gt;next_in_ifl</span><span class="plain">-</span><span class="element">&gt;next_in_ifl</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) ||</span>
<span class="plain">(</span><span class="identifier">FL</span><span class="plain">-</span><span class="element">&gt;first_in_ifl</span><span class="plain">-</span><span class="element">&gt;next_in_ifl</span><span class="plain">-</span><span class="element">&gt;next_in_ifl</span><span class="plain">-</span><span class="element">&gt;next_in_ifl</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) ||</span>
<span class="plain">(</span><span class="identifier">FL</span><span class="plain">-</span><span class="element">&gt;first_in_ifl</span><span class="plain">-</span><span class="element">&gt;next_in_ifl</span><span class="plain">-</span><span class="element">&gt;next_in_ifl</span><span class="plain">-</span><span class="element">&gt;next_in_ifl</span><span class="plain">-</span><span class="element">&gt;next_in_ifl</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) ||</span>
<span class="plain">(</span><span class="identifier">FL</span><span class="plain">-</span><span class="element">&gt;first_in_ifl</span><span class="plain">-</span><span class="element">&gt;next_in_ifl</span><span class="plain">-</span><span class="element">&gt;next_in_ifl</span><span class="plain">-</span><span class="element">&gt;next_in_ifl</span><span class="plain">-</span><span class="element">&gt;next_in_ifl</span><span class="plain">-</span><span class="element">&gt;next_in_ifl</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="functiontext">Inter::Frame::around</span><span class="plain">(</span><span class="identifier">NULL</span><span class="plain">, -1);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">FL</span><span class="plain">-</span><span class="element">&gt;first_in_ifl</span><span class="plain">-</span><span class="element">&gt;next_in_ifl</span><span class="plain">-</span><span class="element">&gt;next_in_ifl</span><span class="plain">-</span><span class="element">&gt;next_in_ifl</span><span class="plain">-</span><span class="element">&gt;next_in_ifl</span><span class="plain">-</span><span class="element">&gt;next_in_ifl</span><span class="plain">-</span><span class="element">&gt;listed_frame</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">c</span><span class="plain"> = 0;</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">P</span><span class="plain">)</span>
<span class="reserved">if</span><span class="plain"> (++</span><span class="identifier">c</span><span class="plain"> == 6)</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">F</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">Inter::Frame::around</span><span class="plain">(</span><span class="identifier">NULL</span><span class="plain">, -1);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Inter::add_to_frame_list</span><span class="plain">(</span><span class="reserved">inter_frame_list</span><span class="plain"> *</span><span class="identifier">FL</span><span class="plain">, </span><span class="reserved">inter_frame</span><span class="plain"> </span><span class="identifier">F</span><span class="plain">, </span><span class="reserved">inter_reading_state</span><span class="plain"> *</span><span class="identifier">at</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">at</span><span class="plain">) &amp;&amp; (</span><span class="identifier">at</span><span class="plain">-</span><span class="element">&gt;in_frame_list</span><span class="plain"> != </span><span class="identifier">FL</span><span class="plain">)) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"bookmark mismatched to list"</span><span class="plain">);</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Inter::add_to_frame_list</span><span class="plain">(</span><span class="reserved">inter_frame_list</span><span class="plain"> *</span><span class="identifier">FL</span><span class="plain">, </span><span class="reserved">inter_frame</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="functiontext">Inter::Frame::valid</span><span class="plain">(&amp;</span><span class="identifier">F</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"linked imvalid frame"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">FL</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"bad frame list"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">FL</span><span class="plain">-</span><span class="element">&gt;storage_used</span><span class="plain"> &gt;= </span><span class="identifier">FL</span><span class="plain">-</span><span class="element">&gt;storage_capacity</span><span class="plain">) {</span>
@ -418,26 +419,10 @@
<span class="reserved">inter_frame_list_entry</span><span class="plain"> *</span><span class="identifier">entry</span><span class="plain"> = &amp;(</span><span class="identifier">FL</span><span class="plain">-</span><span class="element">&gt;spare_storage</span><span class="plain">[</span><span class="identifier">FL</span><span class="plain">-</span><span class="element">&gt;storage_used</span><span class="plain"> ++]);</span>
<span class="identifier">entry</span><span class="plain">-</span><span class="element">&gt;listed_frame</span><span class="plain"> = </span><span class="identifier">F</span><span class="plain">;</span>
<span class="identifier">entry</span><span class="plain">-</span><span class="element">&gt;next_in_ifl</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">entry</span><span class="plain">-</span><span class="element">&gt;prev_in_ifl</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">at</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) || (</span><span class="identifier">at</span><span class="plain">-</span><span class="element">&gt;pos</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) || (</span><span class="identifier">at</span><span class="plain">-</span><span class="element">&gt;pos</span><span class="plain"> == </span><span class="identifier">FL</span><span class="plain">-</span><span class="element">&gt;last_in_ifl</span><span class="plain">) || (</span><span class="identifier">at</span><span class="plain">-</span><span class="element">&gt;pinned_to_end</span><span class="plain">)) {</span>
<span class="identifier">entry</span><span class="plain">-</span><span class="element">&gt;prev_in_ifl</span><span class="plain"> = </span><span class="identifier">FL</span><span class="plain">-</span><span class="element">&gt;last_in_ifl</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">FL</span><span class="plain">-</span><span class="element">&gt;last_in_ifl</span><span class="plain">) </span><span class="identifier">FL</span><span class="plain">-</span><span class="element">&gt;last_in_ifl</span><span class="plain">-</span><span class="element">&gt;next_in_ifl</span><span class="plain"> = </span><span class="identifier">entry</span><span class="plain">;</span>
<span class="identifier">FL</span><span class="plain">-</span><span class="element">&gt;last_in_ifl</span><span class="plain"> = </span><span class="identifier">entry</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">FL</span><span class="plain">-</span><span class="element">&gt;first_in_ifl</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">FL</span><span class="plain">-</span><span class="element">&gt;first_in_ifl</span><span class="plain"> = </span><span class="identifier">entry</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="comment">the new one can't be the first</span>
<span class="reserved">inter_frame_list_entry</span><span class="plain"> *</span><span class="identifier">after</span><span class="plain"> = </span><span class="identifier">at</span><span class="plain">-</span><span class="element">&gt;pos</span><span class="plain">-</span><span class="element">&gt;next_in_ifl</span><span class="plain">;</span>
<span class="identifier">at</span><span class="plain">-</span><span class="element">&gt;pos</span><span class="plain">-</span><span class="element">&gt;next_in_ifl</span><span class="plain"> = </span><span class="identifier">entry</span><span class="plain">;</span>
<span class="identifier">entry</span><span class="plain">-</span><span class="element">&gt;prev_in_ifl</span><span class="plain"> = </span><span class="identifier">at</span><span class="plain">-</span><span class="element">&gt;pos</span><span class="plain">;</span>
<span class="identifier">entry</span><span class="plain">-</span><span class="element">&gt;next_in_ifl</span><span class="plain"> = </span><span class="identifier">after</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">after</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">)</span>
<span class="identifier">FL</span><span class="plain">-</span><span class="element">&gt;last_in_ifl</span><span class="plain"> = </span><span class="identifier">entry</span><span class="plain">;</span>
<span class="reserved">else</span>
<span class="identifier">after</span><span class="plain">-</span><span class="element">&gt;prev_in_ifl</span><span class="plain"> = </span><span class="identifier">entry</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">at</span><span class="plain">) </span><span class="identifier">at</span><span class="plain">-</span><span class="element">&gt;pos</span><span class="plain"> = </span><span class="identifier">entry</span><span class="plain">;</span>
<span class="identifier">entry</span><span class="plain">-</span><span class="element">&gt;prev_in_ifl</span><span class="plain"> = </span><span class="identifier">FL</span><span class="plain">-</span><span class="element">&gt;last_in_ifl</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">FL</span><span class="plain">-</span><span class="element">&gt;last_in_ifl</span><span class="plain">) </span><span class="identifier">FL</span><span class="plain">-</span><span class="element">&gt;last_in_ifl</span><span class="plain">-</span><span class="element">&gt;next_in_ifl</span><span class="plain"> = </span><span class="identifier">entry</span><span class="plain">;</span>
<span class="identifier">FL</span><span class="plain">-</span><span class="element">&gt;last_in_ifl</span><span class="plain"> = </span><span class="identifier">entry</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">FL</span><span class="plain">-</span><span class="element">&gt;first_in_ifl</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">FL</span><span class="plain">-</span><span class="element">&gt;first_in_ifl</span><span class="plain"> = </span><span class="identifier">entry</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="constant">inter_t</span><span class="plain"> </span><span class="functiontext">Inter::store_origin</span><span class="plain">(</span><span class="reserved">inter_repository</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">, </span><span class="reserved">inter_error_location</span><span class="plain"> *</span><span class="identifier">eloc</span><span class="plain">) {</span>
@ -494,7 +479,7 @@
<p class="endnote">The function Inter::sixth_child appears nowhere else.</p>
<p class="endnote">The function Inter::add_to_frame_list is used in 2/frm (<a href="2-frm.html#SP5">&#167;5</a>), 3/dfn (<a href="3-dfn.html#SP5">&#167;5</a>), 4/tpc5 (<a href="4-tpc5.html#SP2">&#167;2</a>), 4/tpc6 (<a href="4-tpc6.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::add_to_frame_list is used in 2/frm (<a href="2-frm.html#SP5">&#167;5</a>), 4/tpc5 (<a href="4-tpc5.html#SP2">&#167;2</a>), 4/tpc6 (<a href="4-tpc6.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::store_origin is used in <a href="#SP3">&#167;3</a>.</p>

View file

@ -26,7 +26,6 @@
<span class="reserved">inter_error_location</span><span class="plain"> </span><span class="identifier">eloc</span><span class="plain"> = </span><span class="functiontext">Inter::Errors::file_location</span><span class="plain">(</span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="identifier">TextFiles::read</span><span class="plain">(</span><span class="identifier">F</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">, </span><span class="string">"can't open inter file"</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">, </span><span class="functiontext">Inter::Textual::read_line</span><span class="plain">, 0, &amp;</span><span class="identifier">IRS</span><span class="plain">);</span>
<span class="functiontext">Inter::SymbolsTables::resolve_forward_references</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, &amp;</span><span class="identifier">eloc</span><span class="plain">);</span>
<span class="functiontext">Inter::Defn::pass2</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">, 0);</span>
<span class="functiontext">Inter::Packages::traverse_repository</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="functiontext">Inter::Textual::lint_visitor</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="plain">}</span>

View file

@ -156,29 +156,6 @@
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">Inter::Packages::from_PID</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">-</span><span class="element">&gt;repo_segment</span><span class="plain">-</span><span class="element">&gt;owning_repo</span><span class="plain">, </span><span class="functiontext">Inter::Frame::get_package_p</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::restring</span><span class="plain">(</span><span class="reserved">inter_repository</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">) {</span>
<span class="functiontext">Inter::Packages::destring</span><span class="plain">(</span><span class="functiontext">Inter::Packages::main</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">));</span>
<span class="reserved">inter_frame</span><span class="plain"> </span><span class="identifier">P</span><span class="plain">;</span>
<span class="identifier">LOOP_THROUGH_INTER_FRAME_LIST</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, (&amp;(</span><span class="identifier">I</span><span class="plain">-</span><span class="element">&gt;residue</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::Packages::container</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">) &amp;&amp; (</span><span class="identifier">pack</span><span class="plain">-</span><span class="element">&gt;codelike_package</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">)) {</span>
<span class="reserved">inter_frame</span><span class="plain"> </span><span class="identifier">D</span><span class="plain"> = </span><span class="functiontext">Inter::Symbols::defining_frame</span><span class="plain">(</span><span class="identifier">pack</span><span class="plain">-</span><span class="element">&gt;package_name</span><span class="plain">);</span>
<span class="functiontext">Inter::Defn::accept_child</span><span class="plain">(</span><span class="identifier">D</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Inter::Packages::destring</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="reserved">if</span><span class="plain"> (</span><span class="identifier">pack</span><span class="plain">-</span><span class="element">&gt;codelike_package</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">) {</span>
<span class="reserved">inter_frame</span><span class="plain"> </span><span class="identifier">D</span><span class="plain"> = </span><span class="functiontext">Inter::Symbols::defining_frame</span><span class="plain">(</span><span class="identifier">pack</span><span class="plain">-</span><span class="element">&gt;package_name</span><span class="plain">);</span>
<span class="reserved">inter_frame_list</span><span class="plain"> *</span><span class="identifier">ifl</span><span class="plain"> = </span><span class="functiontext">Inter::Defn::list_of_children</span><span class="plain">(</span><span class="identifier">D</span><span class="plain">);</span>
<span class="identifier">ifl</span><span class="plain">-</span><span class="element">&gt;first_in_ifl</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">ifl</span><span class="plain">-</span><span class="element">&gt;last_in_ifl</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">for</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">pack</span><span class="plain">-</span><span class="element">&gt;child_package</span><span class="plain">; </span><span class="identifier">P</span><span class="plain">; </span><span class="identifier">P</span><span class="plain"> = </span><span class="identifier">P</span><span class="plain">-</span><span class="element">&gt;next_package</span><span class="plain">)</span>
<span class="functiontext">Inter::Packages::destring</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::traverse_global</span><span class="plain">(</span><span class="identifier">code_generation</span><span class="plain"> *</span><span class="identifier">gen</span><span class="plain">, </span><span class="reserved">void</span><span class="plain"> (*</span><span class="identifier">visitor</span><span class="plain">)(</span><span class="identifier">code_generation</span><span class="plain"> *, </span><span class="reserved">inter_frame</span><span class="plain">, </span><span class="reserved">void</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">inter_frame</span><span class="plain"> </span><span class="identifier">P</span><span class="plain">;</span>
<span class="identifier">LOOP_THROUGH_INTER_FRAME_LIST</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, (&amp;(</span><span class="identifier">gen</span><span class="plain">-&gt;</span><span class="identifier">from</span><span class="plain">-</span><span class="element">&gt;global_material</span><span class="plain">))) {</span>
@ -220,7 +197,6 @@
<span class="functiontext">Inter::Packages::traverse_inner</span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">, </span><span class="identifier">D</span><span class="plain">, </span><span class="identifier">visitor</span><span class="plain">, </span><span class="identifier">state</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Inter::Packages::traverse_inner</span><span class="plain">(</span><span class="identifier">code_generation</span><span class="plain"> *</span><span class="identifier">gen</span><span class="plain">, </span><span class="reserved">inter_frame</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">visitor</span><span class="plain">)(</span><span class="identifier">code_generation</span><span class="plain"> *, </span><span class="reserved">inter_frame</span><span class="plain">, </span><span class="reserved">void</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">inter_frame</span><span class="plain"> </span><span class="identifier">C</span><span class="plain">;</span>
<span class="identifier">LOOP_THROUGH_INTER_CHILDREN</span><span class="plain">(</span><span class="identifier">C</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">C</span><span class="element">.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="plain">(*</span><span class="identifier">visitor</span><span class="plain">)(</span><span class="identifier">gen</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">, </span><span class="identifier">state</span><span class="plain">);</span>
@ -236,7 +212,6 @@
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Inter::Packages::traverse_repository_inner</span><span class="plain">(</span><span class="reserved">inter_repository</span><span class="plain"> *</span><span class="identifier">from</span><span class="plain">, </span><span class="reserved">inter_frame</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">visitor</span><span class="plain">)(</span><span class="reserved">inter_repository</span><span class="plain"> *, </span><span class="reserved">inter_frame</span><span class="plain">, </span><span class="reserved">void</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">inter_frame</span><span class="plain"> </span><span class="identifier">C</span><span class="plain">;</span>
<span class="identifier">LOOP_THROUGH_INTER_CHILDREN</span><span class="plain">(</span><span class="identifier">C</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">C</span><span class="element">.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="plain">(*</span><span class="identifier">visitor</span><span class="plain">)(</span><span class="identifier">from</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">, </span><span class="identifier">state</span><span class="plain">);</span>
@ -252,29 +227,12 @@
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Inter::Packages::traverse_repository_inc_inner</span><span class="plain">(</span><span class="reserved">inter_repository</span><span class="plain"> *</span><span class="identifier">from</span><span class="plain">, </span><span class="reserved">inter_frame</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">visitor</span><span class="plain">)(</span><span class="reserved">inter_repository</span><span class="plain"> *, </span><span class="reserved">inter_frame</span><span class="plain">, </span><span class="reserved">void</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">inter_frame</span><span class="plain"> </span><span class="identifier">C</span><span class="plain">;</span>
<span class="identifier">LOOP_THROUGH_INTER_CHILDREN</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">) {</span>
<span class="plain">(*</span><span class="identifier">visitor</span><span class="plain">)(</span><span class="identifier">from</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">, </span><span class="identifier">state</span><span class="plain">);</span>
<span class="functiontext">Inter::Packages::traverse_repository_inc_inner</span><span class="plain">(</span><span class="identifier">from</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">, </span><span class="identifier">visitor</span><span class="plain">, </span><span class="identifier">state</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Inter::Packages::traverse_repository_e</span><span class="plain">(</span><span class="reserved">inter_repository</span><span class="plain"> *</span><span class="identifier">from</span><span class="plain">, </span><span class="reserved">void</span><span class="plain"> (*</span><span class="identifier">visitor</span><span class="plain">)(</span><span class="reserved">inter_repository</span><span class="plain"> *, </span><span class="reserved">inter_frame</span><span class="plain">, </span><span class="reserved">void</span><span class="plain"> *, </span><span class="reserved">inter_frame_list_entry</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">inter_package</span><span class="plain"> *</span><span class="identifier">mp</span><span class="plain"> = </span><span class="functiontext">Inter::Packages::main</span><span class="plain">(</span><span class="identifier">from</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">mp</span><span class="plain">) {</span>
<span class="reserved">inter_frame</span><span class="plain"> </span><span class="identifier">D</span><span class="plain"> = </span><span class="functiontext">Inter::Symbols::defining_frame</span><span class="plain">(</span><span class="identifier">mp</span><span class="plain">-</span><span class="element">&gt;package_name</span><span class="plain">);</span>
<span class="functiontext">Inter::Packages::traverse_repository_inner_e</span><span class="plain">(</span><span class="identifier">from</span><span class="plain">, </span><span class="identifier">D</span><span class="plain">, </span><span class="identifier">visitor</span><span class="plain">, </span><span class="identifier">state</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Inter::Packages::traverse_repository_inner_e</span><span class="plain">(</span><span class="reserved">inter_repository</span><span class="plain"> *</span><span class="identifier">from</span><span class="plain">, </span><span class="reserved">inter_frame</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">visitor</span><span class="plain">)(</span><span class="reserved">inter_repository</span><span class="plain"> *, </span><span class="reserved">inter_frame</span><span class="plain">, </span><span class="reserved">void</span><span class="plain"> *, </span><span class="reserved">inter_frame_list_entry</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">inter_frame</span><span class="plain"> </span><span class="identifier">C</span><span class="plain">;</span>
<span class="identifier">LOOP_THROUGH_INTER_CHILDREN</span><span class="plain">(</span><span class="identifier">C</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">C</span><span class="element">.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="plain">(*</span><span class="identifier">visitor</span><span class="plain">)(</span><span class="identifier">from</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">, </span><span class="identifier">state</span><span class="plain">, </span><span class="identifier">C_entry</span><span class="plain">);</span>
<span class="functiontext">Inter::Packages::traverse_repository_inner_e</span><span class="plain">(</span><span class="identifier">from</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">, </span><span class="identifier">visitor</span><span class="plain">, </span><span class="identifier">state</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">inter_symbols_table</span><span class="plain"> *</span><span class="functiontext">Inter::Packages::scope</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="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="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">pack</span><span class="plain">-</span><span class="element">&gt;package_scope</span><span class="plain">;</span>
@ -309,7 +267,7 @@
<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::main is used in 2/st (<a href="2-st.html#SP4">&#167;4</a>), 3/dfn (<a href="3-dfn.html#SP4">&#167;4</a>).</p>
<p class="endnote">The function Inter::Packages::main is used in 2/st (<a href="2-st.html#SP4">&#167;4</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>
@ -327,14 +285,10 @@
<p class="endnote">The function Inter::Packages::from_PID is used in 2/iibf (<a href="2-iibf.html#SP1_7">&#167;1.7</a>), 4/tpc3 (<a href="4-tpc3.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Packages::container is used in 2/frm (<a href="2-frm.html#SP5">&#167;5</a>), 2/bkm (<a href="2-bkm.html#SP2">&#167;2</a>), 2/vi (<a href="2-vi.html#SP1">&#167;1</a>), 3/dfn (<a href="3-dfn.html#SP5">&#167;5</a>), 4/tpc5 (<a href="4-tpc5.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/tlc3 (<a href="5-tlc3.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Packages::container is used in 2/bkm (<a href="2-bkm.html#SP2">&#167;2</a>), 2/vi (<a href="2-vi.html#SP1">&#167;1</a>), 3/dfn (<a href="3-dfn.html#SP5">&#167;5</a>), 4/tpc5 (<a href="4-tpc5.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/tlc3 (<a href="5-tlc3.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Packages::container_p is used in 2/frm (<a href="2-frm.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Packages::restring appears nowhere else.</p>
<p class="endnote">The function Inter::Packages::destring appears nowhere else.</p>
<p class="endnote">The function Inter::Packages::traverse_global appears nowhere else.</p>
<p class="endnote">The function Inter::Packages::traverse_global_inc appears nowhere else.</p>
@ -355,10 +309,6 @@
<p class="endnote">The function Inter::Packages::traverse_repository_inc_inner appears nowhere else.</p>
<p class="endnote">The function Inter::Packages::traverse_repository_e appears nowhere else.</p>
<p class="endnote">The function Inter::Packages::traverse_repository_inner_e appears nowhere else.</p>
<p class="endnote">The function Inter::Packages::scope is used in 2/st (<a href="2-st.html#SP4">&#167;4</a>, <a href="2-st.html#SP5">&#167;5</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>, <a href="2-st.html#SP12">&#167;12</a>), 2/bkm (<a href="2-bkm.html#SP2">&#167;2</a>), 2/iibf (<a href="2-iibf.html#SP1_5_3">&#167;1.5.3</a>).</p>
<p class="endnote">The function Inter::Packages::scope_of is used in 2/st (<a href="2-st.html#SP8">&#167;8</a>), 2/vi (<a href="2-vi.html#SP1">&#167;1</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/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/tcc2 (<a href="5-tcc2.html#SP2">&#167;2</a>).</p>

View file

@ -343,7 +343,7 @@
<p class="endnote">The function Inter::Symbols::define is used in 2/vi (<a href="2-vi.html#SP1">&#167;1</a>).</p>
<p class="endnote">The function Inter::Symbols::defining_frame is used in 2/pck (<a href="2-pck.html#SP3">&#167;3</a>), 2/frm (<a href="2-frm.html#SP5">&#167;5</a>), 2/iitf (<a href="2-iitf.html#SP1">&#167;1</a>), 2/vi (<a href="2-vi.html#SP1">&#167;1</a>), 2/idt (<a href="2-idt.html#SP2">&#167;2</a>, <a href="2-idt.html#SP3">&#167;3</a>), 3/dfn (<a href="3-dfn.html#SP4">&#167;4</a>), 4/tpc3 (<a href="4-tpc3.html#SP2">&#167;2</a>), 4/tkc (<a href="4-tkc.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/tic (<a href="4-tic.html#SP2">&#167;2</a>), 4/tpc4 (<a href="4-tpc4.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>).</p>
<p class="endnote">The function Inter::Symbols::defining_frame is used in 2/pck (<a href="2-pck.html#SP3">&#167;3</a>), 2/bkm (<a href="2-bkm.html#SP2">&#167;2</a>), 2/iitf (<a href="2-iitf.html#SP1">&#167;1</a>), 2/vi (<a href="2-vi.html#SP1">&#167;1</a>), 2/idt (<a href="2-idt.html#SP2">&#167;2</a>, <a href="2-idt.html#SP3">&#167;3</a>), 4/tpc3 (<a href="4-tpc3.html#SP2">&#167;2</a>), 4/tkc (<a href="4-tkc.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/tic (<a href="4-tic.html#SP2">&#167;2</a>), 4/tpc4 (<a href="4-tpc4.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>).</p>
<p class="endnote">The function Inter::Symbols::is_defined appears nowhere else.</p>

View file

@ -261,57 +261,6 @@
<span class="plain">}</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">inter_error_message</span><span class="plain"> *</span><span class="functiontext">Inter::Defn::pass2</span><span class="plain">(</span><span class="reserved">inter_repository</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">issue</span><span class="plain">, </span><span class="reserved">inter_reading_state</span><span class="plain"> *</span><span class="identifier">just_this</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">stop_at_top</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">baseline</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="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">inter_frame</span><span class="plain"> </span><span class="identifier">frame_stack</span><span class="plain">[100];</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">frame_sp</span><span class="plain"> = 0;</span>
<span class="reserved">inter_frame</span><span class="plain"> </span><span class="identifier">PREV</span><span class="plain"> = </span><span class="functiontext">Inter::Frame::around</span><span class="plain">(</span><span class="identifier">NULL</span><span class="plain">, -1);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Inter::Packages::main</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">))</span>
<span class="identifier">PREV</span><span class="plain"> = </span><span class="functiontext">Inter::Symbols::defining_frame</span><span class="plain">(</span><span class="functiontext">Inter::Packages::main</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">)-</span><span class="element">&gt;package_name</span><span class="plain">);</span>
<span class="reserved">inter_frame_list_entry</span><span class="plain"> *</span><span class="identifier">first_entry</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">just_this</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">first_entry</span><span class="plain"> = (&amp;(</span><span class="identifier">I</span><span class="plain">-</span><span class="element">&gt;residue</span><span class="plain">))-</span><span class="element">&gt;first_in_ifl</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">first_entry</span><span class="plain"> = </span><span class="identifier">just_this</span><span class="plain">-</span><span class="element">&gt;pos</span><span class="plain">;</span>
<span class="reserved">inter_frame</span><span class="plain"> </span><span class="identifier">P</span><span class="plain">; </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">F</span><span class="plain"> = 0, </span><span class="identifier">err_at</span><span class="plain"> = -1;</span>
<span class="identifier">LOOP_THROUGH_INTER_FRAME_LIST_FROM</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, (&amp;(</span><span class="identifier">I</span><span class="plain">-</span><span class="element">&gt;residue</span><span class="plain">)), </span><span class="identifier">first_entry</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">E</span><span class="plain">) &amp;&amp; (</span><span class="identifier">err_at</span><span class="plain"> &lt; 0)) </span><span class="identifier">err_at</span><span class="plain"> = </span><span class="identifier">F</span><span class="plain">;</span>
<span class="identifier">F</span><span class="plain">++;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">L</span><span class="plain"> = </span><span class="functiontext">Inter::Defn::get_level</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">) - </span><span class="identifier">baseline</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">stop_at_top</span><span class="plain">) &amp;&amp; (</span><span class="identifier">L</span><span class="plain"> &lt;= 0) &amp;&amp; (</span><span class="identifier">F</span><span class="plain"> &gt; 1)) </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">P</span><span class="element">.data</span><span class="plain">[</span><span class="constant">ID_IFLD</span><span class="plain">] == </span><span class="constant">COMMENT_IST</span><span class="plain">) </span><span class="reserved">continue</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">P</span><span class="element">.data</span><span class="plain">[</span><span class="constant">ID_IFLD</span><span class="plain">] == </span><span class="constant">NOP_IST</span><span class="plain">) </span><span class="reserved">continue</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">frame_sp</span><span class="plain"> &gt;= </span><span class="identifier">L</span><span class="plain">) {</span>
<span class="identifier">frame_sp</span><span class="plain"> = </span><span class="identifier">L</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">frame_sp</span><span class="plain"> == </span><span class="identifier">L</span><span class="plain">-1) {</span>
<span class="identifier">frame_stack</span><span class="plain">[</span><span class="identifier">frame_sp</span><span class="plain">++] = </span><span class="identifier">PREV</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="identifier">E</span><span class="plain"> = </span><span class="functiontext">Inter::Errors::gather_first</span><span class="plain">(</span><span class="identifier">E</span><span class="plain">, </span><span class="functiontext">Inter::Frame::error</span><span class="plain">(&amp;</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"overly indented line"</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">));</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">frame_sp</span><span class="plain"> &gt; 0)</span>
<span class="identifier">E</span><span class="plain"> = </span><span class="functiontext">Inter::Errors::gather_first</span><span class="plain">(</span><span class="identifier">E</span><span class="plain">, </span><span class="functiontext">Inter::Defn::accept_child</span><span class="plain">(</span><span class="identifier">frame_stack</span><span class="plain">[</span><span class="identifier">frame_sp</span><span class="plain">-1], </span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">issue</span><span class="plain">));</span>
<span class="identifier">PREV</span><span class="plain"> = </span><span class="identifier">P</span><span class="plain">;</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="identifier">LOG</span><span class="plain">(</span><span class="string">"Error occurred here:\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">F</span><span class="plain"> = 0;</span>
<span class="identifier">LOOP_THROUGH_INTER_FRAME_LIST_FROM</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, (&amp;(</span><span class="identifier">I</span><span class="plain">-</span><span class="element">&gt;residue</span><span class="plain">)), </span><span class="identifier">first_entry</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">err_at</span><span class="plain"> &gt;= 0) &amp;&amp; (</span><span class="identifier">F</span><span class="plain"> &gt;= </span><span class="identifier">err_at</span><span class="plain">)) { </span><span class="identifier">err_at</span><span class="plain"> = -1; </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">"*%02d* "</span><span class="plain">, </span><span class="functiontext">Inter::Defn::get_level</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">)); }</span>
<span class="reserved">else</span><span class="plain"> { </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">"(%02d) "</span><span class="plain">, </span><span class="functiontext">Inter::Defn::get_level</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">)); }</span>
<span class="functiontext">Inter::Defn::write_construct_text</span><span class="plain">(</span><span class="identifier">DL</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"Or in binary:\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
<span class="identifier">F</span><span class="plain"> = 0;</span>
<span class="identifier">LOOP_THROUGH_INTER_FRAME_LIST_FROM</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, (&amp;(</span><span class="identifier">I</span><span class="plain">-</span><span class="element">&gt;residue</span><span class="plain">)), </span><span class="identifier">first_entry</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">err_at</span><span class="plain"> &gt;= 0) &amp;&amp; (</span><span class="identifier">F</span><span class="plain"> &gt;= </span><span class="identifier">err_at</span><span class="plain">)) { </span><span class="identifier">err_at</span><span class="plain"> = -1; </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">"**** "</span><span class="plain">); }</span>
<span class="reserved">else</span><span class="plain"> { </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">"(%02d) "</span><span class="plain">, </span><span class="functiontext">Inter::Defn::get_level</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">)); }</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"%F\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, &amp;</span><span class="identifier">P</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">E</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
@ -332,8 +281,6 @@
<p class="endnote">The function Inter::Defn::write_annotation is used in 2/sym (<a href="2-sym.html#SP4">&#167;4</a>).</p>
<p class="endnote">The function Inter::Defn::pass2 is used in 2/iibf (<a href="2-iibf.html#SP1_7">&#167;1.7</a>), 2/iitf (<a href="2-iitf.html#SP1">&#167;1</a>).</p>
<p class="inwebparagraph"><a id="SP5"></a><b>&#167;5. </b></p>
@ -521,25 +468,6 @@
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">Inter::find_frame_list</span><span class="plain">(</span><span class="identifier">P</span><span class="element">.repo_segment</span><span class="plain">-</span><span class="element">&gt;owning_repo</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">inter_error_message</span><span class="plain"> *</span><span class="functiontext">Inter::Defn::accept_child</span><span class="plain">(</span><span class="reserved">inter_frame</span><span class="plain"> </span><span class="identifier">P</span><span class="plain">, </span><span class="reserved">inter_frame</span><span class="plain"> </span><span class="identifier">C</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">issue</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::accept_child_inner</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">E</span><span class="plain">) &amp;&amp; (</span><span class="identifier">issue</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="reserved">return</span><span class="plain"> </span><span class="identifier">E</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">inter_error_message</span><span class="plain"> *</span><span class="functiontext">Inter::Defn::accept_child_inner</span><span class="plain">(</span><span class="reserved">inter_frame</span><span class="plain"> </span><span class="identifier">P</span><span class="plain">, </span><span class="reserved">inter_frame</span><span class="plain"> </span><span class="identifier">C</span><span class="plain">) {</span>
<span class="reserved">inter_construct</span><span class="plain"> *</span><span class="identifier">IC</span><span class="plain"> = </span><span class="identifier">NULL</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::get_construct</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, &amp;</span><span class="identifier">IC</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="reserved">return</span><span class="plain"> </span><span class="identifier">E</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">IC</span><span class="plain">-</span><span class="element">&gt;usage_permissions</span><span class="plain"> &amp; </span><span class="constant">CAN_HAVE_CHILDREN</span><span class="plain">) == 0) {</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">STDERR</span><span class="plain">, </span><span class="string">"P: "</span><span class="plain">); </span><span class="functiontext">Inter::Defn::write_construct_text</span><span class="plain">(</span><span class="identifier">STDERR</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">STDERR</span><span class="plain">, </span><span class="string">"C: "</span><span class="plain">); </span><span class="functiontext">Inter::Defn::write_construct_text</span><span class="plain">(</span><span class="identifier">STDERR</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">Inter::Frame::error</span><span class="plain">(&amp;</span><span class="identifier">C</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"this is placed under a construct which can't have anything underneath"</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="functiontext">Inter::add_to_frame_list</span><span class="plain">(</span><span class="functiontext">Inter::Defn::list_of_children</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">), </span><span class="identifier">C</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">inter_error_message</span><span class="plain"> *</span><span class="functiontext">Inter::Defn::verify_children_inner</span><span class="plain">(</span><span class="reserved">inter_frame</span><span class="plain"> </span><span class="identifier">P</span><span class="plain">) {</span>
<span class="reserved">inter_construct</span><span class="plain"> *</span><span class="identifier">IC</span><span class="plain"> = </span><span class="identifier">NULL</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::get_construct</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, &amp;</span><span class="identifier">IC</span><span class="plain">);</span>
@ -555,7 +483,7 @@
<p class="endnote">The function Inter::Defn::get_construct appears nowhere else.</p>
<p class="endnote">The function Inter::Defn::write_construct_text is used in <a href="#SP4">&#167;4</a>, 2/frm (<a href="2-frm.html#SP5">&#167;5</a>), 2/iitf (<a href="2-iitf.html#SP1">&#167;1</a>, <a href="2-iitf.html#SP2">&#167;2</a>), 5/tlc (<a href="5-tlc.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Defn::write_construct_text is used in 2/frm (<a href="2-frm.html#SP5">&#167;5</a>), 2/iitf (<a href="2-iitf.html#SP1">&#167;1</a>, <a href="2-iitf.html#SP2">&#167;2</a>), 5/tlc (<a href="5-tlc.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Defn::read_construct_text is used in 2/iitf (<a href="2-iitf.html#SP1">&#167;1</a>).</p>
@ -569,13 +497,9 @@
<p class="endnote">The function Inter::Defn::vet_level is used in 4/tcc (<a href="4-tcc.html#SP1">&#167;1</a>), 4/tmc (<a href="4-tmc.html#SP2">&#167;2</a>), 4/tmc2 (<a href="4-tmc2.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/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::get_level is used in <a href="#SP4">&#167;4</a>, 2/pck (<a href="2-pck.html#SP3">&#167;3</a>), 2/frm (<a href="2-frm.html#SP5">&#167;5</a>).</p>
<p class="endnote">The function Inter::Defn::get_level is used in 2/pck (<a href="2-pck.html#SP3">&#167;3</a>).</p>
<p class="endnote">The function Inter::Defn::list_of_children is used in 2/iim (<a href="2-iim.html#SP4">&#167;4</a>), 2/pck (<a href="2-pck.html#SP3">&#167;3</a>).</p>
<p class="endnote">The function Inter::Defn::accept_child is used in <a href="#SP4">&#167;4</a>, 2/pck (<a href="2-pck.html#SP3">&#167;3</a>), 2/frm (<a href="2-frm.html#SP5">&#167;5</a>).</p>
<p class="endnote">The function Inter::Defn::accept_child_inner appears nowhere else.</p>
<p class="endnote">The function Inter::Defn::list_of_children appears nowhere else.</p>
<p class="endnote">The function Inter::Defn::verify_children_inner is used in 2/iitf (<a href="2-iitf.html#SP1">&#167;1</a>).</p>

View file

@ -147,7 +147,6 @@
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Inter::Package::verify_children</span><span class="plain">(</span><span class="reserved">inter_construct</span><span class="plain"> *</span><span class="identifier">IC</span><span class="plain">, </span><span class="reserved">inter_frame</span><span class="plain"> </span><span class="identifier">P</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="reserved">inter_symbol</span><span class="plain"> *</span><span class="identifier">ptype_name</span><span class="plain"> = </span><span class="functiontext">Inter::SymbolsTables::global_symbol_from_frame_data</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="constant">PTYPE_PACKAGE_IFLD</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ptype_name</span><span class="plain"> == </span><span class="identifier">code_packagetype</span><span class="plain">) {</span>
<span class="reserved">inter_frame</span><span class="plain"> </span><span class="identifier">C</span><span class="plain">;</span>
<span class="identifier">LOOP_THROUGH_INTER_CHILDREN</span><span class="plain">(</span><span class="identifier">C</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">C</span><span class="element">.data</span><span class="plain">[0] != </span><span class="constant">LABEL_IST</span><span class="plain">) &amp;&amp; (</span><span class="identifier">C</span><span class="element">.data</span><span class="plain">[0] != </span><span class="constant">LOCAL_IST</span><span class="plain">) &amp;&amp; (</span><span class="identifier">C</span><span class="element">.data</span><span class="plain">[0] != </span><span class="constant">SYMBOL_IST</span><span class="plain">)) {</span>
<span class="plain">*</span><span class="identifier">E</span><span class="plain"> = </span><span class="functiontext">Inter::Frame::error</span><span class="plain">(&amp;</span><span class="identifier">C</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"only a local or a symbol can be at the top level"</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>

View file

@ -156,7 +156,7 @@
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">X</span><span class="element">.data</span><span class="plain">[</span><span class="constant">OWNER_PVAL_IFLD</span><span class="plain">] != </span><span class="identifier">P</span><span class="element">.data</span><span class="plain">[</span><span class="constant">OWNER_PVAL_IFLD</span><span class="plain">]) { *</span><span class="identifier">E</span><span class="plain"> = </span><span class="functiontext">Inter::Frame::error</span><span class="plain">(&amp;</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"instance property list malformed"</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">); </span><span class="reserved">return</span><span class="plain">; }</span>
<span class="plain">}</span>
<span class="functiontext">Inter::add_to_frame_list</span><span class="plain">(</span><span class="identifier">FL</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="functiontext">Inter::add_to_frame_list</span><span class="plain">(</span><span class="identifier">FL</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">}</span>

View file

@ -162,12 +162,12 @@
<span class="plain">}</span>
<span class="plain">}</span>
<span class="functiontext">Inter::add_to_frame_list</span><span class="plain">(</span><span class="identifier">FL</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="functiontext">Inter::add_to_frame_list</span><span class="plain">(</span><span class="identifier">FL</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">);</span>
<span class="identifier">FL</span><span class="plain"> = </span><span class="functiontext">Inter::find_frame_list</span><span class="plain">(</span>
<span class="identifier">P</span><span class="element">.repo_segment</span><span class="plain">-</span><span class="element">&gt;owning_repo</span><span class="plain">,</span>
<span class="functiontext">Inter::Property::permissions_list</span><span class="plain">(</span><span class="identifier">prop_name</span><span class="plain">));</span>
<span class="functiontext">Inter::add_to_frame_list</span><span class="plain">(</span><span class="identifier">FL</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="functiontext">Inter::add_to_frame_list</span><span class="plain">(</span><span class="identifier">FL</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">}</span>

View file

@ -75,7 +75,6 @@
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Inter::Code::verify_children</span><span class="plain">(</span><span class="reserved">inter_construct</span><span class="plain"> *</span><span class="identifier">IC</span><span class="plain">, </span><span class="reserved">inter_frame</span><span class="plain"> </span><span class="identifier">P</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="reserved">inter_frame</span><span class="plain"> </span><span class="identifier">C</span><span class="plain">;</span>
<span class="identifier">LOOP_THROUGH_INTER_CHILDREN</span><span class="plain">(</span><span class="identifier">C</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">C</span><span class="element">.data</span><span class="plain">[0] != </span><span class="constant">INV_IST</span><span class="plain">) &amp;&amp; (</span><span class="identifier">C</span><span class="element">.data</span><span class="plain">[0] != </span><span class="constant">SPLAT_IST</span><span class="plain">) &amp;&amp; (</span><span class="identifier">C</span><span class="element">.data</span><span class="plain">[0] != </span><span class="constant">EVALUATION_IST</span><span class="plain">) &amp;&amp; (</span><span class="identifier">C</span><span class="element">.data</span><span class="plain">[0] != </span><span class="constant">LABEL_IST</span><span class="plain">) &amp;&amp; (</span><span class="identifier">C</span><span class="element">.data</span><span class="plain">[0] != </span><span class="constant">VAL_IST</span><span class="plain">) &amp;&amp; (</span><span class="identifier">C</span><span class="element">.data</span><span class="plain">[0] != </span><span class="constant">COMMENT_IST</span><span class="plain">)) {</span>
<span class="plain">*</span><span class="identifier">E</span><span class="plain"> = </span><span class="functiontext">Inter::Frame::error</span><span class="plain">(&amp;</span><span class="identifier">C</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"only an inv, a val, a splat, a concatenate or a label can be below a code"</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>

View file

@ -91,7 +91,6 @@
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Inter::Cast::verify_children</span><span class="plain">(</span><span class="reserved">inter_construct</span><span class="plain"> *</span><span class="identifier">IC</span><span class="plain">, </span><span class="reserved">inter_frame</span><span class="plain"> </span><span class="identifier">P</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="reserved">int</span><span class="plain"> </span><span class="identifier">arity_as_invoked</span><span class="plain"> = 0;</span>
<span class="reserved">inter_frame</span><span class="plain"> </span><span class="identifier">C</span><span class="plain">;</span>
<span class="identifier">LOOP_THROUGH_INTER_CHILDREN</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">) {</span>
<span class="identifier">arity_as_invoked</span><span class="plain">++;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">C</span><span class="element">.data</span><span class="plain">[0] != </span><span class="constant">INV_IST</span><span class="plain">) &amp;&amp; (</span><span class="identifier">C</span><span class="element">.data</span><span class="plain">[0] != </span><span class="constant">VAL_IST</span><span class="plain">) &amp;&amp; (</span><span class="identifier">C</span><span class="element">.data</span><span class="plain">[0] != </span><span class="constant">EVALUATION_IST</span><span class="plain">) &amp;&amp; (</span><span class="identifier">C</span><span class="element">.data</span><span class="plain">[0] != </span><span class="constant">CAST_IST</span><span class="plain">)) {</span>

View file

@ -75,7 +75,6 @@
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Inter::Evaluation::verify_children</span><span class="plain">(</span><span class="reserved">inter_construct</span><span class="plain"> *</span><span class="identifier">IC</span><span class="plain">, </span><span class="reserved">inter_frame</span><span class="plain"> </span><span class="identifier">P</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="reserved">inter_frame</span><span class="plain"> </span><span class="identifier">C</span><span class="plain">;</span>
<span class="identifier">LOOP_THROUGH_INTER_CHILDREN</span><span class="plain">(</span><span class="identifier">C</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">C</span><span class="element">.data</span><span class="plain">[0] != </span><span class="constant">INV_IST</span><span class="plain">) &amp;&amp; (</span><span class="identifier">C</span><span class="element">.data</span><span class="plain">[0] != </span><span class="constant">SPLAT_IST</span><span class="plain">) &amp;&amp; (</span><span class="identifier">C</span><span class="element">.data</span><span class="plain">[0] != </span><span class="constant">VAL_IST</span><span class="plain">) &amp;&amp; (</span><span class="identifier">C</span><span class="element">.data</span><span class="plain">[0] != </span><span class="constant">LABEL_IST</span><span class="plain">) &amp;&amp; (</span><span class="identifier">C</span><span class="element">.data</span><span class="plain">[0] != </span><span class="constant">EVALUATION_IST</span><span class="plain">)) {</span>
<span class="plain">*</span><span class="identifier">E</span><span class="plain"> = </span><span class="functiontext">Inter::Frame::error</span><span class="plain">(&amp;</span><span class="identifier">C</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"only an inv, a splat, a val, or a label can be below an evaluation"</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>

View file

@ -149,7 +149,6 @@
<span class="comment">if (*E) return;</span>
<span class="comment">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">arity_as_invoked</span><span class="plain">=0;</span>
<span class="reserved">inter_frame</span><span class="plain"> </span><span class="identifier">C</span><span class="plain">;</span>
<span class="identifier">LOOP_THROUGH_INTER_CHILDREN</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">) </span><span class="identifier">arity_as_invoked</span><span class="plain">++;</span>
<span class="plain">#</span><span class="identifier">ifdef</span><span class="plain"> </span><span class="identifier">CORE_MODULE</span>
<span class="reserved">inter_repository</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain"> = </span><span class="identifier">P</span><span class="element">.repo_segment</span><span class="plain">-</span><span class="element">&gt;owning_repo</span><span class="plain">;</span>

View file

@ -95,13 +95,12 @@
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Inter::Label::verify_children</span><span class="plain">(</span><span class="reserved">inter_construct</span><span class="plain"> *</span><span class="identifier">IC</span><span class="plain">, </span><span class="reserved">inter_frame</span><span class="plain"> </span><span class="identifier">P</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="reserved">inter_frame</span><span class="plain"> </span><span class="identifier">C</span><span class="plain">;</span>
<span class="identifier">LOOP_THROUGH_INTER_CHILDREN</span><span class="plain">(</span><span class="identifier">C</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">C</span><span class="element">.data</span><span class="plain">[0] != </span><span class="constant">INV_IST</span><span class="plain">) &amp;&amp; (</span><span class="identifier">C</span><span class="element">.data</span><span class="plain">[0] != </span><span class="constant">SPLAT_IST</span><span class="plain">) &amp;&amp; (</span><span class="identifier">C</span><span class="element">.data</span><span class="plain">[0] != </span><span class="constant">EVALUATION_IST</span><span class="plain">) &amp;&amp; (</span><span class="identifier">C</span><span class="element">.data</span><span class="plain">[0] != </span><span class="constant">LABEL_IST</span><span class="plain">) &amp;&amp; (</span><span class="identifier">C</span><span class="element">.data</span><span class="plain">[0] != </span><span class="constant">VAL_IST</span><span class="plain">) &amp;&amp; (</span><span class="identifier">C</span><span class="element">.data</span><span class="plain">[0] != </span><span class="constant">COMMENT_IST</span><span class="plain">)) {</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">C</span><span class="element">.data</span><span class="plain">[0] != </span><span class="constant">INV_IST</span><span class="plain">) &amp;&amp; (</span><span class="identifier">C</span><span class="element">.data</span><span class="plain">[0] != </span><span class="constant">NOP_IST</span><span class="plain">) &amp;&amp; (</span><span class="identifier">C</span><span class="element">.data</span><span class="plain">[0] != </span><span class="constant">SPLAT_IST</span><span class="plain">) &amp;&amp; (</span><span class="identifier">C</span><span class="element">.data</span><span class="plain">[0] != </span><span class="constant">EVALUATION_IST</span><span class="plain">) &amp;&amp; (</span><span class="identifier">C</span><span class="element">.data</span><span class="plain">[0] != </span><span class="constant">LABEL_IST</span><span class="plain">) &amp;&amp; (</span><span class="identifier">C</span><span class="element">.data</span><span class="plain">[0] != </span><span class="constant">VAL_IST</span><span class="plain">) &amp;&amp; (</span><span class="identifier">C</span><span class="element">.data</span><span class="plain">[0] != </span><span class="constant">COMMENT_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::Packages::container</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">);</span>
<span class="reserved">inter_symbol</span><span class="plain"> *</span><span class="identifier">routine</span><span class="plain"> = </span><span class="identifier">pack</span><span class="plain">-</span><span class="element">&gt;package_name</span><span class="plain">;</span>
<span class="reserved">inter_symbol</span><span class="plain"> *</span><span class="identifier">lab_name</span><span class="plain"> = </span><span class="functiontext">Inter::SymbolsTables::local_symbol_from_id</span><span class="plain">(</span><span class="identifier">routine</span><span class="plain">, </span><span class="identifier">P</span><span class="element">.data</span><span class="plain">[</span><span class="constant">DEFN_LABEL_IFLD</span><span class="plain">]);</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"C is: "</span><span class="plain">); </span><span class="functiontext">Inter::Defn::write_construct_text</span><span class="plain">(</span><span class="identifier">DL</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">);</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"C is: (%d) "</span><span class="plain">, </span><span class="identifier">C</span><span class="element">.data</span><span class="plain">[0]); </span><span class="functiontext">Inter::Defn::write_construct_text</span><span class="plain">(</span><span class="identifier">DL</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">);</span>
<span class="plain">*</span><span class="identifier">E</span><span class="plain"> = </span><span class="functiontext">Inter::Frame::error</span><span class="plain">(&amp;</span><span class="identifier">C</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"only an inv, a val, a splat, a concatenate or another label can be below a label"</span><span class="plain">, </span><span class="identifier">lab_name</span><span class="plain">-</span><span class="element">&gt;symbol_name</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain">;</span>
<span class="plain">}</span>

View file

@ -75,7 +75,6 @@
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Inter::Reference::verify_children</span><span class="plain">(</span><span class="reserved">inter_construct</span><span class="plain"> *</span><span class="identifier">IC</span><span class="plain">, </span><span class="reserved">inter_frame</span><span class="plain"> </span><span class="identifier">P</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="reserved">inter_frame</span><span class="plain"> </span><span class="identifier">C</span><span class="plain">;</span>
<span class="identifier">LOOP_THROUGH_INTER_CHILDREN</span><span class="plain">(</span><span class="identifier">C</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">C</span><span class="element">.data</span><span class="plain">[0] != </span><span class="constant">INV_IST</span><span class="plain">) &amp;&amp; (</span><span class="identifier">C</span><span class="element">.data</span><span class="plain">[0] != </span><span class="constant">REF_IST</span><span class="plain">) &amp;&amp; (</span><span class="identifier">C</span><span class="element">.data</span><span class="plain">[0] != </span><span class="constant">SPLAT_IST</span><span class="plain">) &amp;&amp; (</span><span class="identifier">C</span><span class="element">.data</span><span class="plain">[0] != </span><span class="constant">VAL_IST</span><span class="plain">) &amp;&amp; (</span><span class="identifier">C</span><span class="element">.data</span><span class="plain">[0] != </span><span class="constant">LABEL_IST</span><span class="plain">)) {</span>
<span class="plain">*</span><span class="identifier">E</span><span class="plain"> = </span><span class="functiontext">Inter::Frame::error</span><span class="plain">(&amp;</span><span class="identifier">C</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"only an inv, a ref, a splat, a val, or a label can be below a reference"</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>

View file

@ -717,15 +717,17 @@ inter_reading_state begin_bookmark;
inter_reading_state code_bookmark;
void Emit::early_comment(text_stream *text) {
inter_t ID = Inter::create_text(Emit::repository());
/* inter_t ID = Inter::create_text(Emit::repository());
Str::copy(Inter::get_text(Emit::repository(), ID), text);
Emit::guard(Inter::Comment::new(Packaging::at(), Emit::baseline(Packaging::at()) + 1, NULL, ID));
*/
}
void Emit::code_comment(text_stream *text) {
inter_t ID = Inter::create_text(Emit::repository());
/* inter_t ID = Inter::create_text(Emit::repository());
Str::copy(Inter::get_text(Emit::repository(), ID), text);
Emit::guard(Inter::Comment::new(Emit::at(), (inter_t) Emit::level(), NULL, ID));
*/
}
inter_symbol *Emit::package(inter_name *iname, inter_symbol *ptype, inter_package **P) {
@ -763,9 +765,10 @@ inter_symbol *Emit::block(packaging_state *save, inter_name *iname) {
current_inter_routine = rsymb;
current_inter_reading_state = Emit::bookmark();
locals_bookmark = current_inter_reading_state;
Emit::place_label(Emit::reserve_label(I".begin"), FALSE);
begin_bookmark = Emit::bookmark();
locals_bookmark = begin_bookmark;
locals_bookmark.placement_wrt_R = BEFORE_ICPLACEMENT;
// Emit::early_comment(I"body:");
code_bookmark = Emit::bookmark();
Emit::place_label(Emit::reserve_label(I".end"), FALSE);
@ -1115,7 +1118,6 @@ void Emit::cast(kind *F, kind *T) {
void Emit::end_block(inter_symbol *rsymb) {
if (current_inter_routine == NULL) internal_error("not in an inter routine");
if (current_inter_routine != rsymb) internal_error("wrong inter routine ended");
Emit::guard(Inter::Defn::pass2(Emit::repository(), FALSE, &current_inter_reading_state, TRUE, (int) Emit::baseline(&current_inter_reading_state)));
current_inter_routine = NULL;
Emit::pop_code_position();
inter_reading_state *IRS = Packaging::at();

View file

@ -146,7 +146,7 @@ very early on, the enclosure is always an enclosing package.)
=
void Packaging::initialise_state(inter_repository *I) {
current_state.saved_IRS = Packaging::push_IRS(Inter::Bookmarks::new_IRS_global(I));
current_state.saved_IRS = Packaging::push_IRS(Inter::Bookmarks::new_IRS(I));
current_state.saved_enclosure = NULL;
}

View file

@ -244,8 +244,6 @@ inter_symbol *verb_directive_topic_symbol = NULL;
inter_symbol *verb_directive_multiexcept_symbol = NULL;
void CodeGen::Pipeline::prepare_to_run(inter_repository *I) {
Inter::Packages::restring(I);
unchecked_kind_symbol = Inter::Packages::search_resources_exhaustively(I, I"K_unchecked");
unchecked_function_symbol = Inter::Packages::search_resources_exhaustively(I, I"K_unchecked_function");
typeless_int_symbol = Inter::Packages::search_resources_exhaustively(I, I"K_typeless_int");

View file

@ -46,7 +46,7 @@ int assim_verb_count = 0;
inter_reading_state assimilated_actions_b;
inter_reading_state *assimilated_actions;
void CodeGen::Assimilate::visitor1(inter_repository *I, inter_frame P, void *state, inter_frame_list_entry *P_entry) {
void CodeGen::Assimilate::visitor1(inter_repository *I, inter_frame P, void *state) {
inter_reading_state *IRS = (inter_reading_state *) state;
inter_package *outer = Inter::Packages::container(P);
inter_symbols_table *into_scope = Inter::Packages::scope(outer);
@ -70,7 +70,7 @@ void CodeGen::Assimilate::visitor1(inter_repository *I, inter_frame P, void *sta
}
}
void CodeGen::Assimilate::visitor2(inter_repository *I, inter_frame P, void *state, inter_frame_list_entry *P_entry) {
void CodeGen::Assimilate::visitor2(inter_repository *I, inter_frame P, void *state) {
inter_reading_state *IRS = (inter_reading_state *) state;
inter_package *outer = Inter::Packages::container(P);
if (((outer == NULL) || (outer->codelike_package == FALSE)) && (P.data[ID_IFLD] == SPLAT_IST)) {
@ -94,7 +94,7 @@ void CodeGen::Assimilate::visitor2(inter_repository *I, inter_frame P, void *sta
}
}
void CodeGen::Assimilate::visitor3(inter_repository *I, inter_frame P, void *state, inter_frame_list_entry *P_entry) {
void CodeGen::Assimilate::visitor3(inter_repository *I, inter_frame P, void *state) {
inter_reading_state *IRS = (inter_reading_state *) state;
inter_package *outer = Inter::Packages::container(P);
if (((outer == NULL) || (outer->codelike_package == FALSE)) && (P.data[ID_IFLD] == SPLAT_IST)) {
@ -114,10 +114,10 @@ void CodeGen::Assimilate::visitor3(inter_repository *I, inter_frame P, void *sta
void CodeGen::Assimilate::assimilate(inter_reading_state *IRS) {
inter_repository *I = IRS->read_into;
assimilated_actions = IRS;
Inter::Packages::traverse_repository_e(I, CodeGen::Assimilate::visitor1, IRS);
Inter::Packages::traverse_repository_e(I, CodeGen::Assimilate::visitor2, IRS);
Inter::Packages::traverse_repository(I, CodeGen::Assimilate::visitor1, IRS);
Inter::Packages::traverse_repository(I, CodeGen::Assimilate::visitor2, IRS);
CodeGen::Assimilate::routine_bodies();
Inter::Packages::traverse_repository_e(I, CodeGen::Assimilate::visitor3, IRS);
Inter::Packages::traverse_repository(I, CodeGen::Assimilate::visitor3, IRS);
}
@
@ -153,7 +153,9 @@ void CodeGen::Assimilate::assimilate(inter_reading_state *IRS) {
}
inter_reading_state ib = Inter::Bookmarks::snapshot(IRS);
ib.pos = P_entry;
ib.R = P;
ib.placement_wrt_R = AFTER_ICPLACEMENT;
inter_package *housing_package = NULL;
inter_symbols_table *save_into_scope = NULL;
@ -392,7 +394,8 @@ void CodeGen::Assimilate::assimilate(inter_reading_state *IRS) {
DISCARD_TEXT(bname);
inter_reading_state ib = Inter::Bookmarks::snapshot(IRS);
ib.pos = P_entry;
ib.R = P;
ib.placement_wrt_R = AFTER_ICPLACEMENT;
inter_package *IP = NULL;
CodeGen::Link::guard(Inter::Package::new_package(&ib, block_name,
@ -424,19 +427,16 @@ void CodeGen::Assimilate::assimilate(inter_reading_state *IRS) {
Inter::Symbols::label(end_name);
CodeGen::Link::guard(Inter::Label::new(&ib, block_name, begin_name, baseline+1, NULL));
int veto = FALSE;
if (Str::len(body) > 0) {
int L = Str::len(body) - 1;
while ((L>0) && (Str::get_at(body, L) != ']')) L--;
while ((L>0) && (Characters::is_whitespace(Str::get_at(body, L-1)))) L--;
Str::truncate(body, L);
veto = CodeGen::Assimilate::routine_body(&ib, block_name, baseline+2, body, block_bookmark);
CodeGen::Assimilate::routine_body(&ib, block_name, baseline+2, body, block_bookmark);
}
CodeGen::Link::guard(Inter::Label::new(&ib, block_name, end_name, baseline+1, NULL));
if (!veto) CodeGen::Link::guard(Inter::Defn::pass2(I, FALSE, &block_bookmark, TRUE, (int) baseline));
Inter::Defn::unset_current_package(&ib, IP, 0);
inter_symbol *rsymb = CodeGen::Assimilate::maybe_extern(I, identifier, into_scope);
@ -823,8 +823,6 @@ void CodeGen::Assimilate::routine_bodies(void) {
EmitInterSchemas::emit(&VH, sch, NULL, TRUE, FALSE, scope1, scope2, NULL, NULL);
Emit::pop_code_position();
current_inter_routine = NULL;
CodeGen::Link::guard(Inter::Defn::pass2(req->block_bookmark.read_into, FALSE, &(req->block_bookmark), TRUE, req->pass2_offset));
#endif
}
}

View file

@ -79,7 +79,6 @@ it would be written out in a listing.
=
void CodeGen::Labels::traverse_code_tree(inter_frame P) {
inter_frame F;
LOOP_THROUGH_INTER_CHILDREN(F, P) {
@<Examine a line of code in the function@>;
CodeGen::Labels::traverse_code_tree(F);

View file

@ -14,7 +14,6 @@ int CodeGen::Link::run_pipeline_stage(pipeline_step *step) {
IRS.current_package = Inter::Packages::main(step->repository);
IRS.cp_indent = 1;
CodeGen::Link::link(&IRS, step->step_argument, step->the_N, step->the_PP, NULL);
Inter::Packages::restring(step->repository);
return TRUE;
}

View file

@ -162,7 +162,6 @@ void CodeGen::generate(code_generation *gen) {
}
@<Phase one - preparation@> =
// Inter::Packages::restring(gen->from);
Inter::Symbols::clear_transient_flags();
CodeGen::FC::prepare(gen);
CodeGen::CL::prepare(gen);

View file

@ -126,13 +126,11 @@ void CodeGen::FC::label(code_generation *gen, inter_frame P) {
if (Str::eq(lab_name->symbol_name, I".begin")) { WRITE(";\n"); INDENT; }
else if (Str::eq(lab_name->symbol_name, I".end")) { OUTDENT; WRITE("];\n"); }
else WRITE("%S;\n", lab_name->symbol_name);
inter_frame F;
LOOP_THROUGH_INTER_CHILDREN(F, P)
CodeGen::FC::frame(gen, F);
}
void CodeGen::FC::block(code_generation *gen, inter_frame P) {
inter_frame F;
LOOP_THROUGH_INTER_CHILDREN(F, P)
CodeGen::FC::frame(gen, F);
}
@ -140,7 +138,6 @@ void CodeGen::FC::block(code_generation *gen, inter_frame P) {
void CodeGen::FC::code(code_generation *gen, inter_frame P) {
int old_level = void_level;
void_level = Inter::Defn::get_level(P) + 1;
inter_frame F;
LOOP_THROUGH_INTER_CHILDREN(F, P)
CodeGen::FC::frame(gen, F);
void_level = old_level;
@ -148,7 +145,6 @@ void CodeGen::FC::code(code_generation *gen, inter_frame P) {
void CodeGen::FC::evaluation(code_generation *gen, inter_frame P) {
int old_level = void_level;
inter_frame F;
LOOP_THROUGH_INTER_CHILDREN(F, P)
CodeGen::FC::frame(gen, F);
void_level = old_level;
@ -156,14 +152,12 @@ void CodeGen::FC::evaluation(code_generation *gen, inter_frame P) {
void CodeGen::FC::reference(code_generation *gen, inter_frame P) {
int old_level = void_level;
inter_frame C;
LOOP_THROUGH_INTER_CHILDREN(C, P)
CodeGen::FC::frame(gen, C);
void_level = old_level;
}
void CodeGen::FC::cast(code_generation *gen, inter_frame P) {
inter_frame C;
LOOP_THROUGH_INTER_CHILDREN(C, P) {
CodeGen::FC::frame(gen, C);
}
@ -272,7 +266,6 @@ void CodeGen::FC::inv(code_generation *gen, inter_frame P) {
if (routine == NULL) internal_error("bad routine");
WRITE("%S(", CodeGen::CL::name(routine));
int argc = 0;
inter_frame F;
LOOP_THROUGH_INTER_CHILDREN(F, P) {
if (argc++ > 0) WRITE(", ");
CodeGen::FC::frame(gen, F);
@ -285,7 +278,6 @@ void CodeGen::FC::inv(code_generation *gen, inter_frame P) {
text_stream *S = Inter::get_text(P.repo_segment->owning_repo, ID);
WRITE("%S", S);
negate_label_mode = FALSE;
inter_frame F;
LOOP_THROUGH_INTER_CHILDREN(F, P) {
query_labels_mode = TRUE;
if (F.data[ID_IFLD] == VAL_IST) {

View file

@ -8,9 +8,8 @@ typedef struct inter_reading_state {
struct inter_package *current_package;
int cp_indent;
int latest_indent;
struct inter_frame_list *in_frame_list;
struct inter_frame_list_entry *pos;
int pinned_to_end;
struct inter_frame R;
int placement_wrt_R;
} inter_reading_state;
@ =
@ -20,56 +19,32 @@ inter_reading_state Inter::Bookmarks::new_IRS(inter_repository *I) {
IRS.current_package = NULL;
IRS.cp_indent = 0;
IRS.latest_indent = 0;
IRS.in_frame_list = &(I->residue);
IRS.pos = IRS.in_frame_list->last_in_ifl;
IRS.pinned_to_end = TRUE;
return IRS;
}
inter_reading_state Inter::Bookmarks::new_IRS_global(inter_repository *I) {
inter_reading_state IRS;
IRS.read_into = I;
IRS.current_package = NULL;
IRS.cp_indent = 0;
IRS.latest_indent = 0;
IRS.in_frame_list = &(I->global_material);
IRS.pos = IRS.in_frame_list->last_in_ifl;
IRS.pinned_to_end = TRUE;
IRS.R = Inter::Frame::around(NULL, -1);
IRS.placement_wrt_R = AFTER_ICPLACEMENT;
return IRS;
}
inter_reading_state Inter::Bookmarks::snapshot(inter_reading_state *IRS) {
inter_reading_state IRS2 = *IRS;
if (IRS2.pos == NULL) internal_error("unanchored bookmark");
IRS2.pinned_to_end = FALSE;
return IRS2;
}
inter_reading_state Inter::Bookmarks::from_package(inter_package *pack) {
inter_reading_state IRS = Inter::Bookmarks::new_IRS(pack->stored_in);
IRS.pinned_to_end = FALSE;
IRS.current_package = pack;
IRS.cp_indent = Inter::Packages::baseline(pack);
// This is too slow for more than occasional use
for (inter_frame_list_entry *pos = IRS.in_frame_list->first_in_ifl; pos; pos = pos->next_in_ifl)
if (pack == Inter::Packages::container(pos->listed_frame)) {
IRS.pos = pos;
return IRS;
}
inter_frame D = Inter::Symbols::defining_frame(pack->package_name);
IRS.R = D;
IRS.placement_wrt_R = AS_LAST_CHILD_OF_ICPLACEMENT;
return IRS;
}
inter_reading_state Inter::Bookmarks::from_frame(inter_frame D) {
inter_reading_state IRS = Inter::Bookmarks::new_IRS(D.repo_segment->owning_repo);
IRS.pinned_to_end = FALSE;
IRS.current_package = Inter::Packages::container(D);
IRS.cp_indent = Inter::Packages::baseline(IRS.current_package);
// This is too slow for more than occasional use
for (inter_frame_list_entry *pos = IRS.in_frame_list->first_in_ifl; pos; pos = pos->next_in_ifl)
if (pos->listed_frame.data == D.data) {
IRS.pos = pos;
return IRS;
}
IRS.R = D;
IRS.placement_wrt_R = AFTER_ICPLACEMENT;
return IRS;
}
@ -82,10 +57,7 @@ void Inter::Bookmarks::log(OUTPUT_STREAM, void *virs) {
else LOG("--:");
if (IRS->current_package == NULL) LOG("--");
else LOG("$6", IRS->current_package);
LOG("(%d)", IRS->cp_indent);
int ix = 0;
for (inter_frame_list_entry *e = IRS->in_frame_list->first_in_ifl; ((e) && (e != IRS->pos)); e = e->next_in_ifl) ix++;
LOG(":list %08x, entry %08x = %d>", IRS->in_frame_list, IRS->pos, ix);
LOG("(%d)>", IRS->cp_indent);
}
}

View file

@ -161,7 +161,7 @@ int Inter::Frame::extend(inter_frame *F, inter_t by) {
int next_size = Inter::enlarge_size(F->repo_segment->capacity, F->extent + PREFRAME_SIZE + (int) by);
F->repo_segment->next_repo_segment = Inter::create_segment(next_size, F->repo_segment->owning_repo);
F->repo_segment->next_repo_segment = Inter::create_segment(next_size, F->repo_segment->owning_repo, F->repo_segment);
inter_frame XF = Inter::find_room_in_segment(F->repo_segment->next_repo_segment, F->extent + (int) by);
@ -186,6 +186,22 @@ int Inter::Frame::extend(inter_frame *F, inter_t by) {
return TRUE;
}
inter_t Inter::Frame::to_index(inter_frame *F) {
if ((F->repo_segment == NULL) || (F->index < 0)) internal_error("no index for null frame");
return (F->repo_segment->index_offset) + (inter_t) (F->index);
}
inter_frame Inter::Frame::from_index(inter_repository *I, inter_t index) {
inter_repository_segment *seg = I->first_repo_segment;
while (seg) {
if (seg->index_offset + (inter_t) seg->capacity > index)
return Inter::Frame::around(seg, (int) (index - seg->index_offset));
seg = seg->next_repo_segment;
}
internal_error("index not found in repository");
return Inter::Frame::around(NULL, -1);
}
@
=
@ -195,37 +211,30 @@ void Inter::Frame::insert(inter_frame F, inter_reading_state *at) {
inter_repository *I = F.repo_segment->owning_repo;
LOGIF(INTER_FRAMES, "I%d: Insert frame %F\n", I->allocation_id, F);
if (trace_inter_insertion) Inter::Defn::write_construct_text(DL, F);
inter_package *con = Inter::Packages::container(F);
if (con == NULL) {
if ((at) && (at->in_frame_list != &(I->global_material))) {
at->in_frame_list = &(I->global_material);
at->pos = at->in_frame_list->last_in_ifl;
at->pinned_to_end = TRUE;
}
Inter::add_to_frame_list(&(I->global_material), F, at);
inter_t F_level = F.data[LEVEL_IFLD];
if (F_level == 0) {
Inter::add_to_frame_list(&(I->global_material), F);
if (at->placement_wrt_R == AFTER_ICPLACEMENT)
at->R = F;
} else {
if ((at) && (at->in_frame_list != &(I->residue))) {
at->in_frame_list = &(I->residue);
at->pos = at->in_frame_list->last_in_ifl;
at->pinned_to_end = TRUE;
if (at->placement_wrt_R == NOWHERE_ICPLACEMENT) internal_error("bad wrt");
if (Inter::Frame::valid(&(at->R)) == FALSE) internal_error("bad R");
if (at->placement_wrt_R == AFTER_ICPLACEMENT) {
while (F_level < at->R.data[LEVEL_IFLD]) {
inter_t PR_index = Inter::Frame::get_parent_index(at->R);
if (PR_index == 0) internal_error("bubbled up out of tree");
at->R = Inter::Frame::from_index(I, PR_index);
}
if (F_level > at->R.data[LEVEL_IFLD] + 1) internal_error("bubbled down off of tree");
if (F_level == at->R.data[LEVEL_IFLD] + 1) {
Inter::Frame::place(F, AS_LAST_CHILD_OF_ICPLACEMENT, at->R);
} else {
Inter::Frame::place(F, AFTER_ICPLACEMENT, at->R);
}
at->R = F;
return;
}
/* inter_frame D = Inter::Symbols::defining_frame(con->package_name);
int parental_level = Inter::Defn::get_level(F) - 1;
if ((parental_level < 0) || (parental_level < Inter::Defn::get_level(D)))
internal_error("levels out");
if (parental_level == Inter::Defn::get_level(D)) {
Inter::Defn::accept_child(D, F, FALSE);
} else {
if ((at == NULL) || (at->pos == NULL)) internal_error("defective bookmark");
inter_frame_list_entry *prev = at->pos->prev_in_ifl;
while (((prev) && (Inter::Defn::get_level(prev->listed_frame) != parental_level)))
prev = prev->prev_in_ifl;
if (prev == NULL) internal_error("no parent can be found");
Inter::Defn::accept_child(prev->listed_frame, F, FALSE);
}
*/
// Inter::Defn::accept_child(D, F, FALSE);
Inter::add_to_frame_list(&(I->residue), F, at);
Inter::Frame::place(F, at->placement_wrt_R, at->R);
}
}
@ -297,3 +306,176 @@ void Inter::Frame::set_list(inter_frame F, inter_t V) {
F.repo_segment->bytecode[F.index + PREFRAME_LIST] = V;
}
}
inter_t Inter::Frame::get_first_child_index(inter_frame F) {
if (F.repo_segment) {
return F.repo_segment->bytecode[F.index + PREFRAME_FIRST_CHILD];
}
return 0;
}
void Inter::Frame::set_first_child_index(inter_frame F, inter_t V) {
if (F.repo_segment) {
F.repo_segment->bytecode[F.index + PREFRAME_FIRST_CHILD] = V;
}
}
inter_t Inter::Frame::get_last_child_index(inter_frame F) {
if (F.repo_segment) {
return F.repo_segment->bytecode[F.index + PREFRAME_LAST_CHILD];
}
return 0;
}
void Inter::Frame::set_last_child_index(inter_frame F, inter_t V) {
if (F.repo_segment) {
F.repo_segment->bytecode[F.index + PREFRAME_LAST_CHILD] = V;
}
}
inter_t Inter::Frame::get_parent_index(inter_frame F) {
if (F.repo_segment) {
return F.repo_segment->bytecode[F.index + PREFRAME_PARENT];
}
return 0;
}
void Inter::Frame::set_parent_index(inter_frame F, inter_t V) {
if (F.repo_segment) {
F.repo_segment->bytecode[F.index + PREFRAME_PARENT] = V;
}
}
inter_t Inter::Frame::get_next_index(inter_frame F) {
if (F.repo_segment) {
return F.repo_segment->bytecode[F.index + PREFRAME_NEXT];
}
return 0;
}
void Inter::Frame::set_next_index(inter_frame F, inter_t V) {
if (F.repo_segment) {
F.repo_segment->bytecode[F.index + PREFRAME_NEXT] = V;
}
}
inter_t Inter::Frame::get_previous_index(inter_frame F) {
if (F.repo_segment) {
return F.repo_segment->bytecode[F.index + PREFRAME_PREVIOUS];
}
return 0;
}
void Inter::Frame::set_previous_index(inter_frame F, inter_t V) {
if (F.repo_segment) {
F.repo_segment->bytecode[F.index + PREFRAME_PREVIOUS] = V;
}
}
@d LOOP_THROUGH_INTER_CHILDREN(F, P)
for (inter_t F##_index = Inter::Frame::get_first_child_index(P);
F##_index != 0;
F##_index = Inter::Frame::get_next_index(Inter::Frame::from_index(P.repo_segment->owning_repo, F##_index)))
for (inter_frame F = Inter::Frame::from_index(P.repo_segment->owning_repo, F##_index); F.repo_segment; F.repo_segment = NULL)
@
@e BEFORE_ICPLACEMENT from 0
@e AFTER_ICPLACEMENT
@e AS_LAST_CHILD_OF_ICPLACEMENT
@e NOWHERE_ICPLACEMENT
=
void Inter::Frame::place(inter_frame C, int how, inter_frame R) {
inter_t C_index = Inter::Frame::to_index(&C);
inter_repository *I = C.repo_segment->owning_repo;
@<Extricate C from its current tree position@>;
switch (how) {
case NOWHERE_ICPLACEMENT:
return;
case AS_LAST_CHILD_OF_ICPLACEMENT:
@<Make C the last child of R@>;
break;
case AFTER_ICPLACEMENT:
@<Insert C after R@>;
break;
case BEFORE_ICPLACEMENT:
@<Insert C before R@>;
break;
default:
internal_error("unimplemented");
}
}
@<Extricate C from its current tree position@> =
inter_t OP_index = Inter::Frame::get_parent_index(C);
if (OP_index != 0) {
inter_frame OP = Inter::Frame::from_index(I, OP_index);
if (Inter::Frame::get_first_child_index(OP) == C_index)
Inter::Frame::set_first_child_index(OP, Inter::Frame::get_next_index(C));
if (Inter::Frame::get_last_child_index(OP) == C_index)
Inter::Frame::set_last_child_index(OP, Inter::Frame::get_previous_index(C));
}
inter_t OB_index = Inter::Frame::get_previous_index(C);
inter_t OD_index = Inter::Frame::get_next_index(C);
if (OB_index != 0) {
inter_frame OB = Inter::Frame::from_index(I, OB_index);
Inter::Frame::set_next_index(OB, OD_index);
}
if (OD_index != 0) {
inter_frame OD = Inter::Frame::from_index(I, OD_index);
Inter::Frame::set_previous_index(OD, OB_index);
}
Inter::Frame::set_parent_index(C, 0);
Inter::Frame::set_previous_index(C, 0);
Inter::Frame::set_next_index(C, 0);
@<Make C the last child of R@> =
inter_t R_index = Inter::Frame::to_index(&R);
Inter::Frame::set_parent_index(C, R_index);
inter_t B_index = Inter::Frame::get_last_child_index(R);
if (B_index == 0) {
Inter::Frame::set_first_child_index(R, C_index);
Inter::Frame::set_previous_index(C, 0);
} else {
inter_frame B = Inter::Frame::from_index(I, B_index);
Inter::Frame::set_next_index(B, C_index);
Inter::Frame::set_previous_index(C, B_index);
}
Inter::Frame::set_last_child_index(R, C_index);
@<Insert C after R@> =
inter_t P_index = Inter::Frame::get_parent_index(R);
inter_t R_index = Inter::Frame::to_index(&R);
if (P_index == 0) internal_error("can't move C after R when R is nowhere");
Inter::Frame::set_parent_index(C, P_index);
inter_frame P = Inter::Frame::from_index(I, P_index);
if (Inter::Frame::get_last_child_index(P) == R_index)
Inter::Frame::set_last_child_index(P, C_index);
else {
inter_t D_index = Inter::Frame::get_next_index(R);
if (D_index == 0) internal_error("inter tree broken");
inter_frame D = Inter::Frame::from_index(I, D_index);
Inter::Frame::set_next_index(C, D_index);
Inter::Frame::set_previous_index(D, C_index);
}
Inter::Frame::set_next_index(R, C_index);
Inter::Frame::set_previous_index(C, R_index);
@<Insert C before R@> =
inter_t P_index = Inter::Frame::get_parent_index(R);
inter_t R_index = Inter::Frame::to_index(&R);
if (P_index == 0) internal_error("can't move C before R when R is nowhere");
Inter::Frame::set_parent_index(C, P_index);
inter_frame P = Inter::Frame::from_index(I, P_index);
if (Inter::Frame::get_first_child_index(P) == R_index)
Inter::Frame::set_first_child_index(P, C_index);
else {
inter_t B_index = Inter::Frame::get_previous_index(R);
if (B_index == 0) internal_error("inter tree broken");
inter_frame B = Inter::Frame::from_index(I, B_index);
Inter::Frame::set_previous_index(C, B_index);
Inter::Frame::set_next_index(B, C_index);
}
Inter::Frame::set_next_index(C, R_index);
Inter::Frame::set_previous_index(R, C_index);

View file

@ -14,6 +14,7 @@ void Inter::Binary::read(inter_repository *I, filename *F) {
FILE *fh = BinaryFiles::open_for_reading(F);
inter_error_location eloc = Inter::Errors::interb_location(F, 0);
inter_reading_state at = Inter::Bookmarks::new_IRS(I);
unsigned int X = 0;
@ -341,10 +342,9 @@ enough that the slot exists for the eventual list to be stored in.
inter_error_message *E = Inter::Defn::verify_construct(P);
if (E) { Inter::Errors::issue(E); exit(1); }
Inter::Frame::insert(P, NULL);
Inter::Frame::insert(P, &at);
}
Inter::check_segments(I);
Inter::Defn::pass2(I, TRUE, NULL, FALSE, 0);
@<Write the bytecode@> =
Inter::Packages::traverse_repository_global_inc(I, Inter::Binary::visitor, fh);

View file

@ -19,11 +19,12 @@ To store bytecode-like intermediate code in memory.
@d PREFRAME_COMMENT 3
@d PREFRAME_PACKAGE 4
@d PREFRAME_PARENT 5
@d PREFRAME_CHILD 6
@d PREFRAME_PREVIOUS 7
@d PREFRAME_NEXT 8
@d PREFRAME_LIST 9
@d PREFRAME_SIZE 10
@d PREFRAME_FIRST_CHILD 6
@d PREFRAME_LAST_CHILD 7
@d PREFRAME_PREVIOUS 8
@d PREFRAME_NEXT 9
@d PREFRAME_LIST 10
@d PREFRAME_SIZE 11
=
typedef struct inter_repository {
@ -34,7 +35,6 @@ typedef struct inter_repository {
struct inter_resource_holder *stored_resources;
struct filename *origin_file;
struct inter_frame_list global_material;
struct inter_frame_list residue;
struct inter_repository *main_repo;
struct inter_package *main_package;
MEMORY_MANAGEMENT
@ -64,6 +64,7 @@ typedef struct inter_frame_list_entry {
typedef struct inter_repository_segment {
struct inter_repository *owning_repo;
inter_t index_offset;
int size;
int capacity;
inter_t *bytecode;
@ -75,7 +76,7 @@ typedef struct inter_repository_segment {
inter_repository *Inter::create(int ref, int capacity) {
inter_repository *I = CREATE(inter_repository);
I->ref = ref;
I->first_repo_segment = Inter::create_segment(capacity, I);
I->first_repo_segment = Inter::create_segment(capacity, I, NULL);
I->size = 1;
I->capacity = 0;
I->stored_resources = NULL;
@ -84,16 +85,14 @@ inter_repository *Inter::create(int ref, int capacity) {
I->global_material.spare_storage = NULL;
I->global_material.storage_used = 0;
I->global_material.storage_capacity = 0;
I->residue.spare_storage = NULL;
I->residue.storage_used = 0;
I->residue.storage_capacity = 0;
I->main_repo = NULL;
I->main_package = NULL;
return I;
}
inter_repository_segment *Inter::create_segment(int capacity, inter_repository *owner) {
inter_repository_segment *Inter::create_segment(int capacity, inter_repository *owner, inter_repository_segment *prec) {
inter_repository_segment *IS = CREATE(inter_repository_segment);
IS->index_offset = (prec)?(prec->index_offset + (inter_t) prec->capacity):0;
IS->owning_repo = owner;
IS->size = 0;
IS->capacity = capacity;
@ -146,7 +145,7 @@ inter_frame Inter::find_room_in_segment(inter_repository_segment *IS, int n) {
if (IS->size + n + PREFRAME_SIZE > IS->capacity) {
int next_size = Inter::enlarge_size(IS->capacity, n + PREFRAME_SIZE);
IS->capacity = IS->size;
IS->next_repo_segment = Inter::create_segment(next_size, IS->owning_repo);
IS->next_repo_segment = Inter::create_segment(next_size, IS->owning_repo, IS);
IS = IS->next_repo_segment;
Inter::check_segments(IS->owning_repo);
}
@ -158,7 +157,8 @@ inter_frame Inter::find_room_in_segment(inter_repository_segment *IS, int n) {
IS->bytecode[at + PREFRAME_COMMENT] = 0;
IS->bytecode[at + PREFRAME_PACKAGE] = 0;
IS->bytecode[at + PREFRAME_PARENT] = 0;
IS->bytecode[at + PREFRAME_CHILD] = 0;
IS->bytecode[at + PREFRAME_FIRST_CHILD] = 0;
IS->bytecode[at + PREFRAME_LAST_CHILD] = 0;
IS->bytecode[at + PREFRAME_PREVIOUS] = 0;
IS->bytecode[at + PREFRAME_NEXT] = 0;
IS->bytecode[at + PREFRAME_LIST] = 0;
@ -276,9 +276,6 @@ inter_t Inter::create_frame_list(inter_repository *I) {
if ((Inter::Frame::valid(((F = F##_entry->listed_frame), &F))) &&
(Inter::Frame::included(((F = F##_entry->listed_frame), &F))))
@d LOOP_THROUGH_INTER_CHILDREN(F, P)
LOOP_THROUGH_INTER_FRAME_LIST(F, Inter::Defn::list_of_children(P))
=
inter_frame_list *Inter::find_frame_list(inter_repository *I, inter_t N) {
if (I == NULL) return NULL;
@ -288,49 +285,52 @@ inter_frame_list *Inter::find_frame_list(inter_repository *I, inter_t N) {
}
inter_frame Inter::first_child(inter_frame P) {
inter_frame_list *FL = Inter::Defn::list_of_children(P);
if ((FL == NULL) || (FL->first_in_ifl == NULL)) return Inter::Frame::around(NULL, -1);
return FL->first_in_ifl->listed_frame;
LOOP_THROUGH_INTER_CHILDREN(F, P)
return F;
return Inter::Frame::around(NULL, -1);
}
inter_frame Inter::second_child(inter_frame P) {
inter_frame_list *FL = Inter::Defn::list_of_children(P);
if ((FL == NULL) || (FL->first_in_ifl == NULL) || (FL->first_in_ifl->next_in_ifl == NULL)) return Inter::Frame::around(NULL, -1);
return FL->first_in_ifl->next_in_ifl->listed_frame;
int c = 0;
LOOP_THROUGH_INTER_CHILDREN(F, P)
if (++c == 2)
return F;
return Inter::Frame::around(NULL, -1);
}
inter_frame Inter::third_child(inter_frame P) {
inter_frame_list *FL = Inter::Defn::list_of_children(P);
if ((FL == NULL) || (FL->first_in_ifl == NULL) || (FL->first_in_ifl->next_in_ifl == NULL) || (FL->first_in_ifl->next_in_ifl->next_in_ifl == NULL)) return Inter::Frame::around(NULL, -1);
return FL->first_in_ifl->next_in_ifl->next_in_ifl->listed_frame;
int c = 0;
LOOP_THROUGH_INTER_CHILDREN(F, P)
if (++c == 3)
return F;
return Inter::Frame::around(NULL, -1);
}
inter_frame Inter::fourth_child(inter_frame P) {
inter_frame_list *FL = Inter::Defn::list_of_children(P);
if ((FL == NULL) || (FL->first_in_ifl == NULL) || (FL->first_in_ifl->next_in_ifl == NULL) || (FL->first_in_ifl->next_in_ifl->next_in_ifl == NULL) || (FL->first_in_ifl->next_in_ifl->next_in_ifl->next_in_ifl == NULL)) return Inter::Frame::around(NULL, -1);
return FL->first_in_ifl->next_in_ifl->next_in_ifl->next_in_ifl->listed_frame;
int c = 0;
LOOP_THROUGH_INTER_CHILDREN(F, P)
if (++c == 4)
return F;
return Inter::Frame::around(NULL, -1);
}
inter_frame Inter::fifth_child(inter_frame P) {
inter_frame_list *FL = Inter::Defn::list_of_children(P);
if ((FL == NULL) || (FL->first_in_ifl == NULL) || (FL->first_in_ifl->next_in_ifl == NULL) || (FL->first_in_ifl->next_in_ifl->next_in_ifl == NULL) || (FL->first_in_ifl->next_in_ifl->next_in_ifl->next_in_ifl == NULL) || (FL->first_in_ifl->next_in_ifl->next_in_ifl->next_in_ifl->next_in_ifl == NULL)) return Inter::Frame::around(NULL, -1);
return FL->first_in_ifl->next_in_ifl->next_in_ifl->next_in_ifl->next_in_ifl->listed_frame;
int c = 0;
LOOP_THROUGH_INTER_CHILDREN(F, P)
if (++c == 5)
return F;
return Inter::Frame::around(NULL, -1);
}
inter_frame Inter::sixth_child(inter_frame P) {
inter_frame_list *FL = Inter::Defn::list_of_children(P);
if ((FL == NULL) ||
(FL->first_in_ifl == NULL) ||
(FL->first_in_ifl->next_in_ifl == NULL) ||
(FL->first_in_ifl->next_in_ifl->next_in_ifl == NULL) ||
(FL->first_in_ifl->next_in_ifl->next_in_ifl->next_in_ifl == NULL) ||
(FL->first_in_ifl->next_in_ifl->next_in_ifl->next_in_ifl->next_in_ifl == NULL) ||
(FL->first_in_ifl->next_in_ifl->next_in_ifl->next_in_ifl->next_in_ifl->next_in_ifl == NULL)) return Inter::Frame::around(NULL, -1);
return FL->first_in_ifl->next_in_ifl->next_in_ifl->next_in_ifl->next_in_ifl->next_in_ifl->listed_frame;
int c = 0;
LOOP_THROUGH_INTER_CHILDREN(F, P)
if (++c == 6)
return F;
return Inter::Frame::around(NULL, -1);
}
void Inter::add_to_frame_list(inter_frame_list *FL, inter_frame F, inter_reading_state *at) {
if ((at) && (at->in_frame_list != FL)) internal_error("bookmark mismatched to list");
void Inter::add_to_frame_list(inter_frame_list *FL, inter_frame F) {
if (Inter::Frame::valid(&F) == FALSE) internal_error("linked imvalid frame");
if (FL == NULL) internal_error("bad frame list");
if (FL->storage_used >= FL->storage_capacity) {
@ -346,26 +346,10 @@ void Inter::add_to_frame_list(inter_frame_list *FL, inter_frame F, inter_reading
inter_frame_list_entry *entry = &(FL->spare_storage[FL->storage_used ++]);
entry->listed_frame = F;
entry->next_in_ifl = NULL;
entry->prev_in_ifl = NULL;
if ((at == NULL) || (at->pos == NULL) || (at->pos == FL->last_in_ifl) || (at->pinned_to_end)) {
entry->prev_in_ifl = FL->last_in_ifl;
if (FL->last_in_ifl) FL->last_in_ifl->next_in_ifl = entry;
FL->last_in_ifl = entry;
if (FL->first_in_ifl == NULL) FL->first_in_ifl = entry;
} else {
/* the new one can't be the first */
inter_frame_list_entry *after = at->pos->next_in_ifl;
at->pos->next_in_ifl = entry;
entry->prev_in_ifl = at->pos;
entry->next_in_ifl = after;
if (after == NULL)
FL->last_in_ifl = entry;
else
after->prev_in_ifl = entry;
}
if (at) at->pos = entry;
entry->prev_in_ifl = FL->last_in_ifl;
if (FL->last_in_ifl) FL->last_in_ifl->next_in_ifl = entry;
FL->last_in_ifl = entry;
if (FL->first_in_ifl == NULL) FL->first_in_ifl = entry;
}
inter_t Inter::store_origin(inter_repository *I, inter_error_location *eloc) {

View file

@ -14,7 +14,6 @@ void Inter::Textual::read(inter_repository *I, filename *F) {
inter_error_location eloc = Inter::Errors::file_location(NULL, NULL);
TextFiles::read(F, FALSE, "can't open inter file", FALSE, Inter::Textual::read_line, 0, &IRS);
Inter::SymbolsTables::resolve_forward_references(I, &eloc);
Inter::Defn::pass2(I, TRUE, NULL, FALSE, 0);
Inter::Packages::traverse_repository(I, Inter::Textual::lint_visitor, NULL);
}

View file

@ -134,29 +134,6 @@ inter_package *Inter::Packages::container_p(inter_frame *P) {
return Inter::Packages::from_PID(P->repo_segment->owning_repo, Inter::Frame::get_package_p(P));
}
void Inter::Packages::restring(inter_repository *I) {
Inter::Packages::destring(Inter::Packages::main(I));
inter_frame P;
LOOP_THROUGH_INTER_FRAME_LIST(P, (&(I->residue))) {
inter_package *pack = Inter::Packages::container(P);
if ((pack) && (pack->codelike_package == FALSE)) {
inter_frame D = Inter::Symbols::defining_frame(pack->package_name);
Inter::Defn::accept_child(D, P, FALSE);
}
}
}
void Inter::Packages::destring(inter_package *pack) {
if (pack->codelike_package == FALSE) {
inter_frame D = Inter::Symbols::defining_frame(pack->package_name);
inter_frame_list *ifl = Inter::Defn::list_of_children(D);
ifl->first_in_ifl = NULL;
ifl->last_in_ifl = NULL;
}
for (inter_package *P = pack->child_package; P; P = P->next_package)
Inter::Packages::destring(P);
}
void Inter::Packages::traverse_global(code_generation *gen, void (*visitor)(code_generation *, inter_frame, void *), void *state) {
inter_frame P;
LOOP_THROUGH_INTER_FRAME_LIST(P, (&(gen->from->global_material))) {
@ -198,7 +175,6 @@ void Inter::Packages::traverse(code_generation *gen, void (*visitor)(code_genera
Inter::Packages::traverse_inner(gen, D, visitor, state);
}
void Inter::Packages::traverse_inner(code_generation *gen, inter_frame P, void (*visitor)(code_generation *, inter_frame, void *), void *state) {
inter_frame C;
LOOP_THROUGH_INTER_CHILDREN(C, P) {
if (C.data[ID_IFLD] != PACKAGE_IST)
(*visitor)(gen, C, state);
@ -214,7 +190,6 @@ void Inter::Packages::traverse_repository(inter_repository *from, void (*visitor
}
}
void Inter::Packages::traverse_repository_inner(inter_repository *from, inter_frame P, void (*visitor)(inter_repository *, inter_frame, void *), void *state) {
inter_frame C;
LOOP_THROUGH_INTER_CHILDREN(C, P) {
if (C.data[ID_IFLD] != PACKAGE_IST)
(*visitor)(from, C, state);
@ -230,29 +205,12 @@ void Inter::Packages::traverse_repository_inc(inter_repository *from, void (*vis
}
}
void Inter::Packages::traverse_repository_inc_inner(inter_repository *from, inter_frame P, void (*visitor)(inter_repository *, inter_frame, void *), void *state) {
inter_frame C;
LOOP_THROUGH_INTER_CHILDREN(C, P) {
(*visitor)(from, C, state);
Inter::Packages::traverse_repository_inc_inner(from, C, visitor, state);
}
}
void Inter::Packages::traverse_repository_e(inter_repository *from, void (*visitor)(inter_repository *, inter_frame, void *, inter_frame_list_entry *), void *state) {
inter_package *mp = Inter::Packages::main(from);
if (mp) {
inter_frame D = Inter::Symbols::defining_frame(mp->package_name);
Inter::Packages::traverse_repository_inner_e(from, D, visitor, state);
}
}
void Inter::Packages::traverse_repository_inner_e(inter_repository *from, inter_frame P, void (*visitor)(inter_repository *, inter_frame, void *, inter_frame_list_entry *), void *state) {
inter_frame C;
LOOP_THROUGH_INTER_CHILDREN(C, P) {
if (C.data[ID_IFLD] != PACKAGE_IST)
(*visitor)(from, C, state, C_entry);
Inter::Packages::traverse_repository_inner_e(from, C, visitor, state);
}
}
inter_symbols_table *Inter::Packages::scope(inter_package *pack) {
if (pack == NULL) return NULL;
return pack->package_scope;

View file

@ -223,57 +223,6 @@ void Inter::Defn::write_annotation(OUTPUT_STREAM, inter_repository *I, inter_ann
}
}
inter_error_message *Inter::Defn::pass2(inter_repository *I, int issue, inter_reading_state *just_this, int stop_at_top, int baseline) {
inter_error_message *E = NULL;
inter_frame frame_stack[100];
int frame_sp = 0;
inter_frame PREV = Inter::Frame::around(NULL, -1);
if (Inter::Packages::main(I))
PREV = Inter::Symbols::defining_frame(Inter::Packages::main(I)->package_name);
inter_frame_list_entry *first_entry;
if (just_this == NULL) first_entry = (&(I->residue))->first_in_ifl;
else first_entry = just_this->pos;
inter_frame P; int F = 0, err_at = -1;
LOOP_THROUGH_INTER_FRAME_LIST_FROM(P, (&(I->residue)), first_entry) {
if ((E) && (err_at < 0)) err_at = F;
F++;
int L = Inter::Defn::get_level(P) - baseline;
if ((stop_at_top) && (L <= 0) && (F > 1)) break;
if (P.data[ID_IFLD] == COMMENT_IST) continue;
if (P.data[ID_IFLD] == NOP_IST) continue;
if (frame_sp >= L) {
frame_sp = L;
} else if (frame_sp == L-1) {
frame_stack[frame_sp++] = PREV;
} else {
E = Inter::Errors::gather_first(E, Inter::Frame::error(&P, I"overly indented line", NULL));
}
if (frame_sp > 0)
E = Inter::Errors::gather_first(E, Inter::Defn::accept_child(frame_stack[frame_sp-1], P, issue));
PREV = P;
}
if (E) {
LOG("Error occurred here:\n");
int F = 0;
LOOP_THROUGH_INTER_FRAME_LIST_FROM(P, (&(I->residue)), first_entry) {
F++; if ((err_at >= 0) && (F >= err_at)) { err_at = -1; LOG("*%02d* ", Inter::Defn::get_level(P)); }
else { LOG("(%02d) ", Inter::Defn::get_level(P)); }
Inter::Defn::write_construct_text(DL, P);
}
LOG("Or in binary:\n");
F = 0;
LOOP_THROUGH_INTER_FRAME_LIST_FROM(P, (&(I->residue)), first_entry) {
F++; if ((err_at >= 0) && (F >= err_at)) { err_at = -1; LOG("**** "); }
else { LOG("(%02d) ", Inter::Defn::get_level(P)); }
LOG("%F\n", &P);
}
}
return E;
}
@
@d OUTSIDE_OF_PACKAGES 1
@ -458,25 +407,6 @@ inter_frame_list *Inter::Defn::list_of_children(inter_frame P) {
return Inter::find_frame_list(P.repo_segment->owning_repo, L);
}
inter_error_message *Inter::Defn::accept_child(inter_frame P, inter_frame C, int issue) {
inter_error_message *E = Inter::Defn::accept_child_inner(P, C);
if ((E) && (issue)) Inter::Errors::issue(E);
return E;
}
inter_error_message *Inter::Defn::accept_child_inner(inter_frame P, inter_frame C) {
inter_construct *IC = NULL;
inter_error_message *E = Inter::Defn::get_construct(P, &IC);
if (E) return E;
if ((IC->usage_permissions & CAN_HAVE_CHILDREN) == 0) {
WRITE_TO(STDERR, "P: "); Inter::Defn::write_construct_text(STDERR, P);
WRITE_TO(STDERR, "C: "); Inter::Defn::write_construct_text(STDERR, C);
return Inter::Frame::error(&C, I"this is placed under a construct which can't have anything underneath", NULL);
}
Inter::add_to_frame_list(Inter::Defn::list_of_children(P), C, NULL);
return NULL;
}
inter_error_message *Inter::Defn::verify_children_inner(inter_frame P) {
inter_construct *IC = NULL;
inter_error_message *E = Inter::Defn::get_construct(P, &IC);

View file

@ -127,7 +127,6 @@ inter_symbols_table *Inter::Package::local_symbols(inter_symbol *package_name) {
void Inter::Package::verify_children(inter_construct *IC, inter_frame P, inter_error_message **E) {
inter_symbol *ptype_name = Inter::SymbolsTables::global_symbol_from_frame_data(P, PTYPE_PACKAGE_IFLD);
if (ptype_name == code_packagetype) {
inter_frame C;
LOOP_THROUGH_INTER_CHILDREN(C, P) {
if ((C.data[0] != LABEL_IST) && (C.data[0] != LOCAL_IST) && (C.data[0] != SYMBOL_IST)) {
*E = Inter::Frame::error(&C, I"only a local or a symbol can be at the top level", NULL);

View file

@ -143,12 +143,12 @@ void Inter::Permission::verify(inter_construct *IC, inter_frame P, inter_error_m
}
}
Inter::add_to_frame_list(FL, P, NULL);
Inter::add_to_frame_list(FL, P);
FL = Inter::find_frame_list(
P.repo_segment->owning_repo,
Inter::Property::permissions_list(prop_name));
Inter::add_to_frame_list(FL, P, NULL);
Inter::add_to_frame_list(FL, P);
}
}

View file

@ -137,7 +137,7 @@ void Inter::PropertyValue::verify(inter_construct *IC, inter_frame P, inter_erro
if (X.data[OWNER_PVAL_IFLD] != P.data[OWNER_PVAL_IFLD]) { *E = Inter::Frame::error(&P, I"instance property list malformed", NULL); return; }
}
Inter::add_to_frame_list(FL, P, NULL);
Inter::add_to_frame_list(FL, P);
}
}

View file

@ -72,7 +72,6 @@ void Inter::Cast::write(inter_construct *IC, OUTPUT_STREAM, inter_frame P, inter
void Inter::Cast::verify_children(inter_construct *IC, inter_frame P, inter_error_message **E) {
int arity_as_invoked = 0;
inter_frame C;
LOOP_THROUGH_INTER_CHILDREN(C, P) {
arity_as_invoked++;
if ((C.data[0] != INV_IST) && (C.data[0] != VAL_IST) && (C.data[0] != EVALUATION_IST) && (C.data[0] != CAST_IST)) {

View file

@ -56,7 +56,6 @@ void Inter::Code::write(inter_construct *IC, OUTPUT_STREAM, inter_frame P, inter
}
void Inter::Code::verify_children(inter_construct *IC, inter_frame P, inter_error_message **E) {
inter_frame C;
LOOP_THROUGH_INTER_CHILDREN(C, P) {
if ((C.data[0] != INV_IST) && (C.data[0] != SPLAT_IST) && (C.data[0] != EVALUATION_IST) && (C.data[0] != LABEL_IST) && (C.data[0] != VAL_IST) && (C.data[0] != COMMENT_IST)) {
*E = Inter::Frame::error(&C, I"only an inv, a val, a splat, a concatenate or a label can be below a code", NULL);

View file

@ -56,7 +56,6 @@ void Inter::Evaluation::write(inter_construct *IC, OUTPUT_STREAM, inter_frame P,
}
void Inter::Evaluation::verify_children(inter_construct *IC, inter_frame P, inter_error_message **E) {
inter_frame C;
LOOP_THROUGH_INTER_CHILDREN(C, P) {
if ((C.data[0] != INV_IST) && (C.data[0] != SPLAT_IST) && (C.data[0] != VAL_IST) && (C.data[0] != LABEL_IST) && (C.data[0] != EVALUATION_IST)) {
*E = Inter::Frame::error(&C, I"only an inv, a splat, a val, or a label can be below an evaluation", NULL);

View file

@ -131,7 +131,6 @@ void Inter::Inv::verify_children(inter_construct *IC, inter_frame P, inter_error
// if (*E) return;
// }
int arity_as_invoked=0;
inter_frame C;
LOOP_THROUGH_INTER_CHILDREN(C, P) arity_as_invoked++;
#ifdef CORE_MODULE
inter_repository *I = P.repo_segment->owning_repo;

View file

@ -76,13 +76,12 @@ void Inter::Label::write(inter_construct *IC, OUTPUT_STREAM, inter_frame P, inte
}
void Inter::Label::verify_children(inter_construct *IC, inter_frame P, inter_error_message **E) {
inter_frame C;
LOOP_THROUGH_INTER_CHILDREN(C, P) {
if ((C.data[0] != INV_IST) && (C.data[0] != SPLAT_IST) && (C.data[0] != EVALUATION_IST) && (C.data[0] != LABEL_IST) && (C.data[0] != VAL_IST) && (C.data[0] != COMMENT_IST)) {
if ((C.data[0] != INV_IST) && (C.data[0] != NOP_IST) && (C.data[0] != SPLAT_IST) && (C.data[0] != EVALUATION_IST) && (C.data[0] != LABEL_IST) && (C.data[0] != VAL_IST) && (C.data[0] != COMMENT_IST)) {
inter_package *pack = Inter::Packages::container(P);
inter_symbol *routine = pack->package_name;
inter_symbol *lab_name = Inter::SymbolsTables::local_symbol_from_id(routine, P.data[DEFN_LABEL_IFLD]);
LOG("C is: "); Inter::Defn::write_construct_text(DL, C);
LOG("C is: (%d) ", C.data[0]); Inter::Defn::write_construct_text(DL, C);
*E = Inter::Frame::error(&C, I"only an inv, a val, a splat, a concatenate or another label can be below a label", lab_name->symbol_name);
return;
}

View file

@ -56,7 +56,6 @@ void Inter::Reference::write(inter_construct *IC, OUTPUT_STREAM, inter_frame P,
}
void Inter::Reference::verify_children(inter_construct *IC, inter_frame P, inter_error_message **E) {
inter_frame C;
LOOP_THROUGH_INTER_CHILDREN(C, P) {
if ((C.data[0] != INV_IST) && (C.data[0] != REF_IST) && (C.data[0] != SPLAT_IST) && (C.data[0] != VAL_IST) && (C.data[0] != LABEL_IST)) {
*E = Inter::Frame::error(&C, I"only an inv, a ref, a splat, a val, or a label can be below a reference", NULL);