1
0
Fork 0
mirror of https://github.com/ganelson/inform.git synced 2024-06-29 05:24:57 +03:00

Moved all trees to a single shared warehouse

This commit is contained in:
Graham Nelson 2019-07-23 20:07:01 +01:00
parent 99053bbe57
commit 73b2e39208
70 changed files with 2003 additions and 377 deletions

View file

@ -34,6 +34,7 @@ have no meaningful contents when the step is not running.
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">repository_argument</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">text_out_file</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">inter_tree</span><span class="plain"> *</span><span class="identifier">repository</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">codegen_pipeline</span><span class="plain"> *</span><span class="identifier">pipeline</span><span class="plain">;</span>
<span class="identifier">MEMORY_MANAGEMENT</span>
<span class="plain">} </span><span class="reserved">pipeline_step</span><span class="plain">;</span>
@ -67,6 +68,7 @@ have no meaningful contents when the step is not running.
<span class="identifier">step</span><span class="plain">-</span><span class="element">&gt;from_memory</span><span class="plain"> = </span><span class="identifier">FALSE</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">step</span><span class="plain">-</span><span class="element">&gt;repository</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">step</span><span class="plain">-</span><span class="element">&gt;pipeline</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
@ -293,6 +295,7 @@ logging:
<span class="identifier">step</span><span class="plain">-</span><span class="element">&gt;the_N</span><span class="plain"> = </span><span class="identifier">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">PP</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">I</span><span class="plain">;</span>
<span class="identifier">step</span><span class="plain">-</span><span class="element">&gt;pipeline</span><span class="plain"> = </span><span class="identifier">S</span><span class="plain">;</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">STAGE_NAME</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">STAGE_NAME</span><span class="plain">, </span><span class="string">"inter step %d/%d (at %dcs): "</span><span class="plain">, ++</span><span class="identifier">step_count</span><span class="plain">, </span><span class="identifier">step_total</span><span class="plain">,</span>
@ -371,7 +374,7 @@ logging:
<p class="endnote">The function CodeGen::Pipeline::run appears nowhere else.</p>
<p class="endnote">The structure codegen_pipeline is private to this section.</p>
<p class="endnote">The structure codegen_pipeline is accessed in 1/stg and here.</p>
<p class="inwebparagraph"><a id="SP5"></a><b>&#167;5. Following. </b></p>
@ -459,6 +462,9 @@ logging:
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"Frame gives package as $3, but its location is in package $3\</span><span class="plain">n</span><span class="string">"</span><span class="plain">,</span>
<span class="identifier">Inter::Frame::ID_to_package</span><span class="plain">(&amp;</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">c</span><span class="plain">)-&gt;</span><span class="identifier">package_name</span><span class="plain">,</span>
<span class="identifier">Inter::Frame::ID_to_package</span><span class="plain">(&amp;</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">a</span><span class="plain">)-&gt;</span><span class="identifier">package_name</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">"Frame gives package as %d, but its location is in package %d\</span><span class="plain">n</span><span class="string">"</span><span class="plain">,</span>
<span class="identifier">Inter::Frame::ID_to_package</span><span class="plain">(&amp;</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">c</span><span class="plain">)-&gt;</span><span class="identifier">index_n</span><span class="plain">,</span>
<span class="identifier">Inter::Frame::ID_to_package</span><span class="plain">(&amp;</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">a</span><span class="plain">)-&gt;</span><span class="identifier">index_n</span><span class="plain">);</span>
<span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"zap"</span><span class="plain">);</span>
<span class="plain">}</span>

View file

@ -68,6 +68,7 @@ to the routine below.
<span class="functiontext">CodeGen::Stage::new</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"stop"</span><span class="plain">, </span><span class="functiontext">CodeGen::Stage::run_stop_stage</span><span class="plain">, </span><span class="constant">NO_STAGE_ARG</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
<span class="functiontext">CodeGen::Stage::new</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"read"</span><span class="plain">, </span><span class="functiontext">CodeGen::Stage::run_read_stage</span><span class="plain">, </span><span class="constant">FILE_STAGE_ARG</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">);</span>
<span class="functiontext">CodeGen::Stage::new</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"move"</span><span class="plain">, </span><span class="functiontext">CodeGen::Stage::run_move_stage</span><span class="plain">, </span><span class="constant">GENERAL_STAGE_ARG</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">);</span>
<span class="functiontext">CodeGen::Stage::new</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"mask"</span><span class="plain">, </span><span class="functiontext">CodeGen::Stage::run_mask_stage</span><span class="plain">, </span><span class="constant">GENERAL_STAGE_ARG</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">);</span>
<span class="functiontext">CodeGen::Stage::new</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"unmask"</span><span class="plain">, </span><span class="functiontext">CodeGen::Stage::run_unmask_stage</span><span class="plain">, </span><span class="constant">NO_STAGE_ARG</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
@ -106,6 +107,27 @@ the pipeline:
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">CodeGen::Stage::run_move_stage</span><span class="plain">(</span><span class="reserved">pipeline_step</span><span class="plain"> *</span><span class="identifier">step</span><span class="plain">) {</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"Arg is %S.\</span><span class="plain">n</span><span class="string">"</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">match_results</span><span class="plain"> </span><span class="identifier">mr</span><span class="plain"> = </span><span class="identifier">Regexp::create_mr</span><span class="plain">();</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Regexp::match</span><span class="plain">(&amp;</span><span class="identifier">mr</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">L</span><span class="string">"(%d):(%c+)"</span><span class="plain">)) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">from_rep</span><span class="plain"> = </span><span class="identifier">Str::atoi</span><span class="plain">(</span><span class="identifier">mr</span><span class="plain">.</span><span class="identifier">exp</span><span class="plain">[0], 0);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">step</span><span class="plain">-</span><span class="element">&gt;pipeline</span><span class="plain">-</span><span class="element">&gt;repositories</span><span class="plain">[</span><span class="identifier">from_rep</span><span class="plain">] == </span><span class="identifier">NULL</span><span class="plain">)</span>
<span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"no such repository"</span><span class="plain">);</span>
<span class="identifier">S</span><span class="plain"> = </span><span class="identifier">Inter::SymbolsTables::url_name_to_symbol</span><span class="plain">(</span>
<span class="identifier">step</span><span class="plain">-</span><span class="element">&gt;pipeline</span><span class="plain">-</span><span class="element">&gt;repositories</span><span class="plain">[</span><span class="identifier">from_rep</span><span class="plain">], </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">mr</span><span class="plain">.</span><span class="identifier">exp</span><span class="plain">[1]);</span>
<span class="plain">}</span>
<span class="identifier">Regexp::dispose_of</span><span class="plain">(&amp;</span><span class="identifier">mr</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">S</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"no such location"</span><span class="plain">);</span>
<span class="identifier">inter_package</span><span class="plain"> *</span><span class="identifier">pack</span><span class="plain"> = </span><span class="identifier">Inter::Package::which</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">pack</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"not a package"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">trace_bin</span><span class="plain">) </span><span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">STDOUT</span><span class="plain">, </span><span class="string">"Move %S\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">pack</span><span class="plain">-&gt;</span><span class="identifier">package_name</span><span class="plain">-&gt;</span><span class="identifier">symbol_name</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>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">CodeGen::Stage::run_mask_stage</span><span class="plain">(</span><span class="reserved">pipeline_step</span><span class="plain"> *</span><span class="identifier">step</span><span class="plain">) {</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"Arg is %S.\</span><span class="plain">n</span><span class="string">"</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">inter_symbol</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain"> = </span><span class="identifier">Inter::SymbolsTables::url_name_to_symbol</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">NULL</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>
@ -128,6 +150,8 @@ the pipeline:
<p class="endnote">The function CodeGen::Stage::run_read_stage is used in <a href="#SP2">&#167;2</a>.</p>
<p class="endnote">The function CodeGen::Stage::run_move_stage is used in <a href="#SP2">&#167;2</a>.</p>
<p class="endnote">The function CodeGen::Stage::run_mask_stage is used in <a href="#SP2">&#167;2</a>.</p>
<p class="endnote">The function CodeGen::Stage::run_unmask_stage is used in <a href="#SP2">&#167;2</a>.</p>

View file

@ -699,7 +699,7 @@
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">c</span><span class="plain"> = </span><span class="identifier">Str::get</span><span class="plain">(</span><span class="identifier">pos</span><span class="plain">);</span>
<span class="identifier">PUT_TO</span><span class="plain">(</span><span class="identifier">dw</span><span class="plain">, </span><span class="identifier">c</span><span class="plain">);</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="identifier">I</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::Warehouse::create_text</span><span class="plain">(</span><span class="identifier">Inter::warehouse</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">), </span><span class="identifier">pack</span><span class="plain">);</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">glob_storage</span><span class="plain"> = </span><span class="identifier">Inter::get_text</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">ID</span><span class="plain">);</span>
<span class="identifier">Str::copy</span><span class="plain">(</span><span class="identifier">glob_storage</span><span class="plain">, </span><span class="identifier">dw</span><span class="plain">);</span>
<span class="plain">*</span><span class="identifier">val1</span><span class="plain"> = </span><span class="identifier">DWORD_IVAL</span><span class="plain">; *</span><span class="identifier">val2</span><span class="plain"> = </span><span class="identifier">ID</span><span class="plain">;</span>
@ -716,7 +716,7 @@
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">c</span><span class="plain"> = </span><span class="identifier">Str::get</span><span class="plain">(</span><span class="identifier">pos</span><span class="plain">);</span>
<span class="identifier">PUT_TO</span><span class="plain">(</span><span class="identifier">dw</span><span class="plain">, </span><span class="identifier">c</span><span class="plain">);</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="identifier">I</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::Warehouse::create_text</span><span class="plain">(</span><span class="identifier">Inter::warehouse</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">), </span><span class="identifier">pack</span><span class="plain">);</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">glob_storage</span><span class="plain"> = </span><span class="identifier">Inter::get_text</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">ID</span><span class="plain">);</span>
<span class="identifier">Str::copy</span><span class="plain">(</span><span class="identifier">glob_storage</span><span class="plain">, </span><span class="identifier">dw</span><span class="plain">);</span>
<span class="plain">*</span><span class="identifier">val1</span><span class="plain"> = </span><span class="identifier">LITERAL_TEXT_IVAL</span><span class="plain">; *</span><span class="identifier">val2</span><span class="plain"> = </span><span class="identifier">ID</span><span class="plain">;</span>
@ -817,7 +817,7 @@
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">STDERR</span><span class="plain">, </span><span class="string">"Forced to glob: %S\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">sch</span><span class="plain">-</span><span class="element">&gt;converted_from</span><span class="plain">);</span>
<span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"Reduced to glob in assimilation"</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="identifier">I</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::Warehouse::create_text</span><span class="plain">(</span><span class="identifier">Inter::warehouse</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">), </span><span class="identifier">pack</span><span class="plain">);</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">glob_storage</span><span class="plain"> = </span><span class="identifier">Inter::get_text</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">ID</span><span class="plain">);</span>
<span class="identifier">Str::copy</span><span class="plain">(</span><span class="identifier">glob_storage</span><span class="plain">, </span><span class="identifier">sch</span><span class="plain">-</span><span class="element">&gt;converted_from</span><span class="plain">);</span>

View file

@ -156,7 +156,7 @@
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::MergeTemplate::entire_splat</span><span class="plain">(</span><span class="identifier">inter_bookmark</span><span class="plain"> *</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">origin</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">content</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">level</span><span class="plain">, </span><span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">code_block</span><span class="plain">) {</span>
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">SID</span><span class="plain"> = </span><span class="identifier">Inter::create_text</span><span class="plain">(</span><span class="identifier">Inter::Bookmarks::tree</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">));</span>
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">SID</span><span class="plain"> = </span><span class="identifier">Inter::Warehouse::create_text</span><span class="plain">(</span><span class="identifier">Inter::Bookmarks::warehouse</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">), </span><span class="identifier">Inter::Bookmarks::package</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">));</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">glob_storage</span><span class="plain"> = </span><span class="identifier">Inter::get_text</span><span class="plain">(</span><span class="identifier">Inter::Bookmarks::tree</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">), </span><span class="identifier">SID</span><span class="plain">);</span>
<span class="identifier">Str::copy</span><span class="plain">(</span><span class="identifier">glob_storage</span><span class="plain">, </span><span class="identifier">content</span><span class="plain">);</span>
<span class="functiontext">CodeGen::MergeTemplate::guard</span><span class="plain">(</span><span class="identifier">Inter::Splat::new</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">code_block</span><span class="plain">, </span><span class="identifier">SID</span><span class="plain">, 0, </span><span class="identifier">level</span><span class="plain">, 0, </span><span class="identifier">NULL</span><span class="plain">));</span>

View file

@ -111,7 +111,7 @@
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::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::tree</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::Warehouse::create_text</span><span class="plain">(</span><span class="identifier">Inter::warehouse</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">Inter::Bookmarks::package</span><span class="plain">(</span><span class="functiontext">Packaging::at</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::tree</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">()), </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">ID</span><span class="plain">));</span>
<span class="plain">}</span>
@ -190,18 +190,19 @@ insert them into the Inter stream close to the top.
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::pragma</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::tree</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::tree</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="identifier">inter_tree</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain"> = </span><span class="functiontext">Emit::tree</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::Warehouse::create_text</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">-&gt;</span><span class="identifier">root_package</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="identifier">I</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="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">target_name</span><span class="plain"> =</span>
<span class="identifier">Inter::SymbolsTables::symbol_from_name_creating</span><span class="plain">(</span>
<span class="identifier">Inter::get_global_symbols</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">I</span><span class="string">"target_I6"</span><span class="plain">);</span>
<span class="identifier">Inter::get_global_symbols</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">), </span><span class="identifier">I</span><span class="string">"target_I6"</span><span class="plain">);</span>
<span class="functiontext">Emit::guard</span><span class="plain">(</span><span class="identifier">Inter::Pragma::new</span><span class="plain">(&amp;</span><span class="identifier">pragmas_bookmark</span><span class="plain">, </span><span class="identifier">target_name</span><span class="plain">, </span><span class="identifier">ID</span><span class="plain">, 0, </span><span class="identifier">NULL</span><span class="plain">));</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::append</span><span class="plain">(</span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">text</span><span class="plain">) {</span>
<span class="reserved">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="functiontext">Packaging::enter_home_of</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">);</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">symbol</span><span class="plain"> = </span><span class="functiontext">InterNames::to_symbol</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">);</span>
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">ID</span><span class="plain"> = </span><span class="identifier">Inter::create_text</span><span class="plain">(</span><span class="functiontext">Emit::tree</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::Warehouse::create_text</span><span class="plain">(</span><span class="identifier">Inter::warehouse</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">Inter::Bookmarks::package</span><span class="plain">(</span><span class="functiontext">Packaging::at</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::tree</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::Append::new</span><span class="plain">(</span><span class="functiontext">Packaging::at</span><span class="plain">(), </span><span class="identifier">symbol</span><span class="plain">, </span><span class="identifier">ID</span><span class="plain">, </span><span class="functiontext">Emit::baseline</span><span class="plain">(</span><span class="functiontext">Packaging::at</span><span class="plain">()), </span><span class="identifier">NULL</span><span class="plain">));</span>
<span class="functiontext">Packaging::exit</span><span class="plain">(</span><span class="identifier">save</span><span class="plain">);</span>
@ -249,13 +250,14 @@ insert them into the Inter stream close to the top.
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::annotate_symbol_t</span><span class="plain">(</span><span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">symb</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">annot_ID</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">) {</span>
<span class="identifier">Inter::Symbols::annotate_t</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), </span><span class="identifier">symb</span><span class="plain">, </span><span class="identifier">annot_ID</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">);</span>
<span class="identifier">Inter::Symbols::annotate_t</span><span class="plain">(</span><span class="identifier">symb</span><span class="plain">-&gt;</span><span class="identifier">owning_table</span><span class="plain">-&gt;</span><span class="identifier">owning_package</span><span class="plain">-&gt;</span><span class="identifier">stored_in</span><span class="plain">, </span><span class="identifier">symb</span><span class="plain">-&gt;</span><span class="identifier">owning_table</span><span class="plain">-&gt;</span><span class="identifier">owning_package</span><span class="plain">, </span><span class="identifier">symb</span><span class="plain">, </span><span class="identifier">annot_ID</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::annotate_symbol_w</span><span class="plain">(</span><span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">symb</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">annot_ID</span><span class="plain">, </span><span class="identifier">wording</span><span class="plain"> </span><span class="identifier">W</span><span class="plain">) {</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">temp</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">temp</span><span class="plain">, </span><span class="string">"%W"</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">);</span>
<span class="identifier">Inter::Symbols::annotate_t</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), </span><span class="identifier">symb</span><span class="plain">, </span><span class="identifier">annot_ID</span><span class="plain">, </span><span class="identifier">temp</span><span class="plain">);</span>
<span class="identifier">Inter::Symbols::annotate_t</span><span class="plain">(</span><span class="identifier">symb</span><span class="plain">-&gt;</span><span class="identifier">owning_table</span><span class="plain">-&gt;</span><span class="identifier">owning_package</span><span class="plain">-&gt;</span><span class="identifier">stored_in</span><span class="plain">, </span><span class="identifier">symb</span><span class="plain">-&gt;</span><span class="identifier">owning_table</span><span class="plain">-&gt;</span><span class="identifier">owning_package</span><span class="plain">, </span><span class="identifier">symb</span><span class="plain">, </span><span class="identifier">annot_ID</span><span class="plain">, </span><span class="identifier">temp</span><span class="plain">);</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">temp</span><span class="plain">);</span>
<span class="plain">}</span>
@ -395,7 +397,7 @@ insert them into the Inter stream close to the top.
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::named_string_constant</span><span class="plain">(</span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">contents</span><span class="plain">) {</span>
<span class="reserved">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="functiontext">Packaging::enter_home_of</span><span class="plain">(</span><span class="identifier">name</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::tree</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::Warehouse::create_text</span><span class="plain">(</span><span class="identifier">Inter::warehouse</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">Inter::Bookmarks::package</span><span class="plain">(</span><span class="functiontext">Packaging::at</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::tree</span><span class="plain">(), </span><span class="identifier">ID</span><span class="plain">), </span><span class="identifier">contents</span><span class="plain">);</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">con_name</span><span class="plain"> = </span><span class="functiontext">Emit::define_symbol</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">);</span>
<span class="functiontext">Emit::guard</span><span class="plain">(</span><span class="identifier">Inter::Constant::new_textual</span><span class="plain">(</span><span class="functiontext">Packaging::at</span><span class="plain">(), </span><span class="identifier">Inter::SymbolsTables::id_from_IRS_and_symbol</span><span class="plain">(</span><span class="functiontext">Packaging::at</span><span class="plain">(), </span><span class="identifier">con_name</span><span class="plain">), </span><span class="identifier">Inter::SymbolsTables::id_from_IRS_and_symbol</span><span class="plain">(</span><span class="functiontext">Packaging::at</span><span class="plain">(), </span><span class="identifier">string_interk</span><span class="plain">), </span><span class="identifier">ID</span><span class="plain">, </span><span class="functiontext">Emit::baseline</span><span class="plain">(</span><span class="functiontext">Packaging::at</span><span class="plain">()), </span><span class="identifier">NULL</span><span class="plain">));</span>
@ -403,7 +405,7 @@ insert them into the Inter stream close to the top.
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::metadata</span><span class="plain">(</span><span class="reserved">package_request</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">key</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">value</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::tree</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::Warehouse::create_text</span><span class="plain">(</span><span class="identifier">Inter::warehouse</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">Inter::Bookmarks::package</span><span class="plain">(</span><span class="functiontext">Packaging::at</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::tree</span><span class="plain">(), </span><span class="identifier">ID</span><span class="plain">), </span><span class="identifier">value</span><span class="plain">);</span>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain"> = </span><span class="functiontext">InterNames::explicitly_named</span><span class="plain">(</span><span class="identifier">key</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">);</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">key_name</span><span class="plain"> = </span><span class="functiontext">Emit::define_symbol</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">);</span>
@ -662,7 +664,7 @@ insert them into the Inter stream close to the top.
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::array_divider</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">divider_text</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">current_A</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">"entry outside of inter array"</span><span class="plain">);</span>
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">S</span><span class="plain"> = </span><span class="identifier">Inter::create_text</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">());</span>
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">S</span><span class="plain"> = </span><span class="identifier">Inter::Warehouse::create_text</span><span class="plain">(</span><span class="identifier">Inter::warehouse</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">Inter::Bookmarks::package</span><span class="plain">(</span><span class="functiontext">Packaging::at</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::tree</span><span class="plain">(), </span><span class="identifier">S</span><span class="plain">), </span><span class="identifier">divider_text</span><span class="plain">);</span>
<span class="functiontext">Emit::add_entry</span><span class="plain">(</span><span class="identifier">DIVIDER_IVAL</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">);</span>
<span class="plain">}</span>
@ -872,7 +874,7 @@ insert them into the Inter stream close to the top.
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">loc_kind</span><span class="plain"> = </span><span class="functiontext">Emit::kind_to_symbol</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">);</span>
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">ID</span><span class="plain"> = 0;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">comm</span><span class="plain">) &amp;&amp; (</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">comm</span><span class="plain">) &gt; 0)) {</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::tree</span><span class="plain">());</span>
<span class="identifier">ID</span><span class="plain"> = </span><span class="identifier">Inter::Warehouse::create_text</span><span class="plain">(</span><span class="identifier">Inter::warehouse</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">Inter::Bookmarks::package</span><span class="plain">(</span><span class="functiontext">Packaging::at</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::tree</span><span class="plain">(), </span><span class="identifier">ID</span><span class="plain">), </span><span class="identifier">comm</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">annot</span><span class="plain">) </span><span class="functiontext">Emit::annotate_symbol_i</span><span class="plain">(</span><span class="identifier">loc_name</span><span class="plain">, </span><span class="identifier">annot</span><span class="plain">, 0);</span>
@ -918,7 +920,7 @@ insert them into the Inter stream close to the top.
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::inv_assembly</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">opcode</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="identifier">inter_t</span><span class="plain"> </span><span class="identifier">SID</span><span class="plain"> = </span><span class="identifier">Inter::create_text</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">());</span>
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">SID</span><span class="plain"> = </span><span class="identifier">Inter::Warehouse::create_text</span><span class="plain">(</span><span class="identifier">Inter::warehouse</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">Inter::Bookmarks::package</span><span class="plain">(</span><span class="functiontext">Emit::at</span><span class="plain">()));</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">glob_storage</span><span class="plain"> = </span><span class="identifier">Inter::get_text</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), </span><span class="identifier">SID</span><span class="plain">);</span>
<span class="identifier">Str::copy</span><span class="plain">(</span><span class="identifier">glob_storage</span><span class="plain">, </span><span class="identifier">opcode</span><span class="plain">);</span>
<span class="functiontext">Emit::guard</span><span class="plain">(</span><span class="identifier">Inter::Inv::new_assembly</span><span class="plain">(</span><span class="functiontext">Emit::at</span><span class="plain">(), </span><span class="identifier">current_inter_routine</span><span class="plain">, </span><span class="identifier">SID</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>
@ -980,7 +982,7 @@ insert them into the Inter stream close to the top.
<p class="endnote">The function Emit::new_local_symbol appears nowhere else.</p>
<p class="endnote">The function Emit::annotate_symbol_t is used in <a href="#SP5">&#167;5</a>.</p>
<p class="endnote">The function Emit::annotate_symbol_t appears nowhere else.</p>
<p class="endnote">The function Emit::annotate_symbol_w is used in <a href="#SP5">&#167;5</a>.</p>
@ -1365,7 +1367,7 @@ insert them into the Inter stream close to the top.
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::entire_splat</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">content</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">level</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">content</span><span class="plain">) == 0) </span><span class="reserved">return</span><span class="plain">;</span>
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">SID</span><span class="plain"> = </span><span class="identifier">Inter::create_text</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">());</span>
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">SID</span><span class="plain"> = </span><span class="identifier">Inter::Warehouse::create_text</span><span class="plain">(</span><span class="identifier">Inter::warehouse</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">Inter::Bookmarks::package</span><span class="plain">(</span><span class="functiontext">Emit::at</span><span class="plain">()));</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">glob_storage</span><span class="plain"> = </span><span class="identifier">Inter::get_text</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), </span><span class="identifier">SID</span><span class="plain">);</span>
<span class="identifier">Str::copy</span><span class="plain">(</span><span class="identifier">glob_storage</span><span class="plain">, </span><span class="identifier">content</span><span class="plain">);</span>
@ -1386,7 +1388,7 @@ insert them into the Inter stream close to the top.
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::glob_value</span><span class="plain">(</span><span class="identifier">inter_t</span><span class="plain"> *</span><span class="identifier">v1</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> *</span><span class="identifier">v2</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">glob</span><span class="plain">, </span><span class="reserved">char</span><span class="plain"> *</span><span class="identifier">clue</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::tree</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::Warehouse::create_text</span><span class="plain">(</span><span class="identifier">Inter::warehouse</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">Inter::Bookmarks::package</span><span class="plain">(</span><span class="functiontext">Emit::at</span><span class="plain">()));</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">glob_storage</span><span class="plain"> = </span><span class="identifier">Inter::get_text</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), </span><span class="identifier">ID</span><span class="plain">);</span>
<span class="identifier">Str::copy</span><span class="plain">(</span><span class="identifier">glob_storage</span><span class="plain">, </span><span class="identifier">glob</span><span class="plain">);</span>
<span class="plain">*</span><span class="identifier">v1</span><span class="plain"> = </span><span class="identifier">GLOB_IVAL</span><span class="plain">;</span>
@ -1397,7 +1399,7 @@ insert them into the Inter stream close to the top.
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::text_value</span><span class="plain">(</span><span class="identifier">inter_t</span><span class="plain"> *</span><span class="identifier">v1</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> *</span><span class="identifier">v2</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::tree</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::Warehouse::create_text</span><span class="plain">(</span><span class="identifier">Inter::warehouse</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">Inter::Bookmarks::package</span><span class="plain">(</span><span class="functiontext">Emit::at</span><span class="plain">()));</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">text_storage</span><span class="plain"> = </span><span class="identifier">Inter::get_text</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), </span><span class="identifier">ID</span><span class="plain">);</span>
<span class="identifier">Str::copy</span><span class="plain">(</span><span class="identifier">text_storage</span><span class="plain">, </span><span class="identifier">text</span><span class="plain">);</span>
<span class="plain">*</span><span class="identifier">v1</span><span class="plain"> = </span><span class="identifier">LITERAL_TEXT_IVAL</span><span class="plain">;</span>
@ -1409,7 +1411,7 @@ insert them into the Inter stream close to the top.
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::real_value</span><span class="plain">(</span><span class="identifier">inter_t</span><span class="plain"> *</span><span class="identifier">v1</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> *</span><span class="identifier">v2</span><span class="plain">, </span><span class="reserved">double</span><span class="plain"> </span><span class="identifier">g</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::tree</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::Warehouse::create_text</span><span class="plain">(</span><span class="identifier">Inter::warehouse</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">Inter::Bookmarks::package</span><span class="plain">(</span><span class="functiontext">Emit::at</span><span class="plain">()));</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">glob_storage</span><span class="plain"> = </span><span class="identifier">Inter::get_text</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), </span><span class="identifier">ID</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">g</span><span class="plain"> &gt; 0) </span><span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">glob_storage</span><span class="plain">, </span><span class="string">"+"</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">glob_storage</span><span class="plain">, </span><span class="string">"%g"</span><span class="plain">, </span><span class="identifier">g</span><span class="plain">);</span>
@ -1418,7 +1420,7 @@ insert them into the Inter stream close to the top.
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::real_value_from_text</span><span class="plain">(</span><span class="identifier">inter_t</span><span class="plain"> *</span><span class="identifier">v1</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> *</span><span class="identifier">v2</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">) {</span>
<span class="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::tree</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::Warehouse::create_text</span><span class="plain">(</span><span class="identifier">Inter::warehouse</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">Inter::Bookmarks::package</span><span class="plain">(</span><span class="functiontext">Emit::at</span><span class="plain">()));</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">glob_storage</span><span class="plain"> = </span><span class="identifier">Inter::get_text</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), </span><span class="identifier">ID</span><span class="plain">);</span>
<span class="identifier">LOOP_THROUGH_TEXT</span><span class="plain">(</span><span class="identifier">pos</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">)</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::get</span><span class="plain">(</span><span class="identifier">pos</span><span class="plain">) != </span><span class="character">'$'</span><span class="plain">)</span>
@ -1428,7 +1430,7 @@ insert them into the Inter stream close to the top.
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::dword_value</span><span class="plain">(</span><span class="identifier">inter_t</span><span class="plain"> *</span><span class="identifier">v1</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> *</span><span class="identifier">v2</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">glob</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::tree</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::Warehouse::create_text</span><span class="plain">(</span><span class="identifier">Inter::warehouse</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">Inter::Bookmarks::package</span><span class="plain">(</span><span class="functiontext">Emit::at</span><span class="plain">()));</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">glob_storage</span><span class="plain"> = </span><span class="identifier">Inter::get_text</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), </span><span class="identifier">ID</span><span class="plain">);</span>
<span class="identifier">Str::copy</span><span class="plain">(</span><span class="identifier">glob_storage</span><span class="plain">, </span><span class="identifier">glob</span><span class="plain">);</span>
<span class="plain">*</span><span class="identifier">v1</span><span class="plain"> = </span><span class="identifier">DWORD_IVAL</span><span class="plain">;</span>
@ -1436,7 +1438,7 @@ insert them into the Inter stream close to the top.
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::plural_dword_value</span><span class="plain">(</span><span class="identifier">inter_t</span><span class="plain"> *</span><span class="identifier">v1</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> *</span><span class="identifier">v2</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">glob</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::tree</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::Warehouse::create_text</span><span class="plain">(</span><span class="identifier">Inter::warehouse</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">()), </span><span class="identifier">Inter::Bookmarks::package</span><span class="plain">(</span><span class="functiontext">Emit::at</span><span class="plain">()));</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">glob_storage</span><span class="plain"> = </span><span class="identifier">Inter::get_text</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), </span><span class="identifier">ID</span><span class="plain">);</span>
<span class="identifier">Str::copy</span><span class="plain">(</span><span class="identifier">glob_storage</span><span class="plain">, </span><span class="identifier">glob</span><span class="plain">);</span>
<span class="plain">*</span><span class="identifier">v1</span><span class="plain"> = </span><span class="identifier">PDWORD_IVAL</span><span class="plain">;</span>
@ -1444,21 +1446,24 @@ insert them into the Inter stream close to the top.
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::intervention</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">stage</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">segment</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">part</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">i6</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">seg</span><span class="plain">) {</span>
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">ID1</span><span class="plain"> = </span><span class="identifier">Inter::create_text</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">());</span>
<span class="identifier">inter_warehouse</span><span class="plain"> *</span><span class="identifier">warehouse</span><span class="plain"> = </span><span class="identifier">Inter::warehouse</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">());</span>
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">ID1</span><span class="plain"> = </span><span class="identifier">Inter::Warehouse::create_text</span><span class="plain">(</span><span class="identifier">warehouse</span><span class="plain">, </span><span class="identifier">Inter::Bookmarks::package</span><span class="plain">(</span><span class="functiontext">Packaging::at</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::tree</span><span class="plain">(), </span><span class="identifier">ID1</span><span class="plain">), </span><span class="identifier">segment</span><span class="plain">);</span>
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">ID2</span><span class="plain"> = </span><span class="identifier">Inter::create_text</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">());</span>
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">ID2</span><span class="plain"> = </span><span class="identifier">Inter::Warehouse::create_text</span><span class="plain">(</span><span class="identifier">warehouse</span><span class="plain">, </span><span class="identifier">Inter::Bookmarks::package</span><span class="plain">(</span><span class="functiontext">Packaging::at</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::tree</span><span class="plain">(), </span><span class="identifier">ID2</span><span class="plain">), </span><span class="identifier">part</span><span class="plain">);</span>
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">ID3</span><span class="plain"> = </span><span class="identifier">Inter::create_text</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">());</span>
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">ID3</span><span class="plain"> = </span><span class="identifier">Inter::Warehouse::create_text</span><span class="plain">(</span><span class="identifier">warehouse</span><span class="plain">, </span><span class="identifier">Inter::Bookmarks::package</span><span class="plain">(</span><span class="functiontext">Packaging::at</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::tree</span><span class="plain">(), </span><span class="identifier">ID3</span><span class="plain">), </span><span class="identifier">i6</span><span class="plain">);</span>
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">ID4</span><span class="plain"> = </span><span class="identifier">Inter::create_text</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">());</span>
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">ID4</span><span class="plain"> = </span><span class="identifier">Inter::Warehouse::create_text</span><span class="plain">(</span><span class="identifier">warehouse</span><span class="plain">, </span><span class="identifier">Inter::Bookmarks::package</span><span class="plain">(</span><span class="functiontext">Packaging::at</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::tree</span><span class="plain">(), </span><span class="identifier">ID4</span><span class="plain">), </span><span class="identifier">seg</span><span class="plain">);</span>
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">ref</span><span class="plain"> = </span><span class="identifier">Inter::create_ref</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">());</span>
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">ref</span><span class="plain"> = </span><span class="identifier">Inter::Warehouse::create_ref</span><span class="plain">(</span><span class="identifier">warehouse</span><span class="plain">, </span><span class="identifier">Inter::Bookmarks::package</span><span class="plain">(</span><span class="functiontext">Packaging::at</span><span class="plain">()));</span>
<span class="identifier">Inter::set_ref</span><span class="plain">(</span><span class="functiontext">Emit::tree</span><span class="plain">(), </span><span class="identifier">ref</span><span class="plain">, (</span><span class="reserved">void</span><span class="plain"> *) </span><span class="identifier">current_sentence</span><span class="plain">);</span>
<span class="identifier">Inter::Warehouse::attribute_resource</span><span class="plain">(</span><span class="identifier">warehouse</span><span class="plain">, </span><span class="identifier">ref</span><span class="plain">, </span><span class="identifier">Inter::Bookmarks::package</span><span class="plain">(</span><span class="functiontext">Packaging::at</span><span class="plain">()));</span>
<span class="functiontext">Emit::guard</span><span class="plain">(</span><span class="identifier">Inter::Link::new</span><span class="plain">(</span><span class="functiontext">Packaging::at</span><span class="plain">(), (</span><span class="identifier">inter_t</span><span class="plain">) </span><span class="identifier">stage</span><span class="plain">, </span><span class="identifier">ID1</span><span class="plain">, </span><span class="identifier">ID2</span><span class="plain">, </span><span class="identifier">ID3</span><span class="plain">, </span><span class="identifier">ID4</span><span class="plain">, </span><span class="identifier">ref</span><span class="plain">, </span><span class="functiontext">Emit::baseline</span><span class="plain">(</span><span class="functiontext">Packaging::at</span><span class="plain">()), </span><span class="identifier">NULL</span><span class="plain">));</span>
<span class="plain">}</span>
</pre>
@ -1618,10 +1623,6 @@ insert them into the Inter stream close to the top.
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">iname</span><span class="plain">) </span><span class="functiontext">Emit::annotate_symbol_i</span><span class="plain">(</span><span class="functiontext">InterNames::to_symbol</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">), </span><span class="identifier">annot_ID</span><span class="plain">, </span><span class="identifier">V</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::annotate_t</span><span class="plain">(</span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">annot_ID</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="reserved">if</span><span class="plain"> (</span><span class="identifier">iname</span><span class="plain">) </span><span class="functiontext">Emit::annotate_symbol_t</span><span class="plain">(</span><span class="functiontext">InterNames::to_symbol</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">), </span><span class="identifier">annot_ID</span><span class="plain">, </span><span class="identifier">text</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::annotate_w</span><span class="plain">(</span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">annot_ID</span><span class="plain">, </span><span class="identifier">wording</span><span class="plain"> </span><span class="identifier">W</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">iname</span><span class="plain">) </span><span class="functiontext">Emit::annotate_symbol_w</span><span class="plain">(</span><span class="functiontext">InterNames::to_symbol</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">), </span><span class="identifier">annot_ID</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">);</span>
<span class="plain">}</span>
@ -1714,8 +1715,6 @@ insert them into the Inter stream close to the top.
<p class="endnote">The function Emit::annotate_i is used in 13/rsfk (<a href="13-rsfk.html#SP24">&#167;24</a>), 15/pr (<a href="15-pr.html#SP27">&#167;27</a>), 15/epv (<a href="15-epv.html#SP1">&#167;1</a>, <a href="15-epv.html#SP1_1_1">&#167;1.1.1</a>), 17/tl (<a href="17-tl.html#SP7">&#167;7</a>).</p>
<p class="endnote">The function Emit::annotate_t appears nowhere else.</p>
<p class="endnote">The function Emit::annotate_w is used in 15/pr (<a href="15-pr.html#SP27">&#167;27</a>).</p>
<p class="endnote">The function Emit::read_annotation appears nowhere else.</p>

View file

@ -44,6 +44,10 @@
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">IBM</span><span class="plain">-</span><span class="element">&gt;current_package</span><span class="plain">-</span><span class="element">&gt;stored_in</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">inter_warehouse</span><span class="plain"> *</span><span class="functiontext">Inter::Bookmarks::warehouse</span><span class="plain">(</span><span class="reserved">inter_bookmark</span><span class="plain"> *</span><span class="identifier">IBM</span><span class="plain">) {</span>
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">Inter::warehouse</span><span class="plain">(</span><span class="functiontext">Inter::Bookmarks::tree</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">));</span>
<span class="plain">}</span>
<span class="reserved">inter_bookmark</span><span class="plain"> </span><span class="functiontext">Inter::Bookmarks::at_end_of_this_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">if</span><span class="plain"> (</span><span class="identifier">pack</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"no package supplied"</span><span class="plain">);</span>
<span class="reserved">inter_bookmark</span><span class="plain"> </span><span class="identifier">IBM</span><span class="plain">;</span>
@ -134,6 +138,8 @@
<p class="endnote">The function Inter::Bookmarks::tree is used in 2/st (<a href="2-st.html#SP8">&#167;8</a>, <a href="2-st.html#SP9">&#167;9</a>), 2/frm (<a href="2-frm.html#SP3">&#167;3</a>), 3/dfn (<a href="3-dfn.html#SP5">&#167;5</a>), 4/tmc (<a href="4-tmc.html#SP2">&#167;2</a>), 4/tsc (<a href="4-tsc.html#SP1">&#167;1</a>), 4/tpc (<a href="4-tpc.html#SP2">&#167;2</a>), 4/tlc (<a href="4-tlc.html#SP2">&#167;2</a>), 4/tac (<a href="4-tac.html#SP2">&#167;2</a>), 4/tpc3 (<a href="4-tpc3.html#SP2">&#167;2</a>), 4/tkc (<a href="4-tkc.html#SP2">&#167;2</a>), 4/tdc (<a href="4-tdc.html#SP2">&#167;2</a>), 4/tvc2 (<a href="4-tvc2.html#SP2">&#167;2</a>), 4/tcc2 (<a href="4-tcc2.html#SP2">&#167;2</a>), 4/trc (<a href="4-trc.html#SP2">&#167;2</a>), 4/tic (<a href="4-tic.html#SP2">&#167;2</a>), 4/tpc4 (<a href="4-tpc4.html#SP2">&#167;2</a>), 4/tpc5 (<a href="4-tpc5.html#SP2">&#167;2</a>), 4/tpc6 (<a href="4-tpc6.html#SP2">&#167;2</a>), 5/tlc2 (<a href="5-tlc2.html#SP2">&#167;2</a>), 5/tic (<a href="5-tic.html#SP2">&#167;2</a>), 5/trc (<a href="5-trc.html#SP2">&#167;2</a>), 5/tvc (<a href="5-tvc.html#SP2">&#167;2</a>), 5/tcc2 (<a href="5-tcc2.html#SP2">&#167;2</a>), 5/tsc (<a href="5-tsc.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Bookmarks::warehouse is used in 3/dfn (<a href="3-dfn.html#SP5">&#167;5</a>), 4/tmc (<a href="4-tmc.html#SP2">&#167;2</a>), 4/tpc (<a href="4-tpc.html#SP2">&#167;2</a>), 4/tlc (<a href="4-tlc.html#SP2">&#167;2</a>), 4/tac (<a href="4-tac.html#SP2">&#167;2</a>), 4/tpc3 (<a href="4-tpc3.html#SP2">&#167;2</a>), 4/tkc (<a href="4-tkc.html#SP2">&#167;2</a>), 4/tcc2 (<a href="4-tcc2.html#SP2">&#167;2</a>), 4/tic (<a href="4-tic.html#SP2">&#167;2</a>), 4/tpc4 (<a href="4-tpc4.html#SP2">&#167;2</a>), 5/tsc (<a href="5-tsc.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Bookmarks::at_end_of_this_package appears nowhere else.</p>
<p class="endnote">The function Inter::Bookmarks::after_this_frame appears nowhere else.</p>

View file

@ -100,7 +100,7 @@
<p class="inwebparagraph"></p>
<p class="endnote">The function Inter::Frame::warehouse is used in <a href="#SP5">&#167;5</a>, 2/pck (<a href="2-pck.html#SP3">&#167;3</a>).</p>
<p class="endnote">The function Inter::Frame::warehouse is used in <a href="#SP5">&#167;5</a>, 2/iim (<a href="2-iim.html#SP3">&#167;3</a>), 2/pck (<a href="2-pck.html#SP3">&#167;3</a>).</p>
<p class="endnote">The function Inter::Frame::ID_to_symbols_table is used in 4/tpc3 (<a href="4-tpc3.html#SP2">&#167;2</a>).</p>
@ -116,7 +116,7 @@
<p class="endnote">The function Inter::Frame::globals is used in 2/st (<a href="2-st.html#SP7">&#167;7</a>, <a href="2-st.html#SP9">&#167;9</a>), 2/pck (<a href="2-pck.html#SP3">&#167;3</a>), 2/vi (<a href="2-vi.html#SP1">&#167;1</a>), 4/tpc3 (<a href="4-tpc3.html#SP2">&#167;2</a>), 4/tpc7 (<a href="4-tpc7.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Frame::around is used in <a href="#SP6">&#167;6</a>, 2/ie (<a href="2-ie.html#SP1">&#167;1</a>), 2/iim (<a href="2-iim.html#SP4">&#167;4</a>), 2/tw (<a href="2-tw.html#SP2">&#167;2</a>), 2/sym (<a href="2-sym.html#SP2">&#167;2</a>, <a href="2-sym.html#SP4">&#167;4</a>).</p>
<p class="endnote">The function Inter::Frame::around is used in <a href="#SP6">&#167;6</a>, 2/ie (<a href="2-ie.html#SP1">&#167;1</a>), 2/iim (<a href="2-iim.html#SP4">&#167;4</a>), 2/tw (<a href="2-tw.html#SP3">&#167;3</a>), 2/sym (<a href="2-sym.html#SP2">&#167;2</a>, <a href="2-sym.html#SP4">&#167;4</a>).</p>
<p class="endnote">The function Inter::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/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>), 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>
@ -126,8 +126,8 @@
<pre class="display">
<span class="reserved">inter_frame</span><span class="plain"> </span><span class="functiontext">Inter::Frame::root_frame</span><span class="plain">(</span><span class="reserved">inter_tree</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">) {</span>
<span class="reserved">inter_frame</span><span class="plain"> </span><span class="identifier">P</span><span class="plain"> = </span><span class="functiontext">Inter::Warehouse::find_room</span><span class="plain">(</span><span class="functiontext">Inter::warehouse</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">), </span><span class="functiontext">Inter::get_global_symbols</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">), 2, </span><span class="identifier">NULL</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="functiontext">Inter::Frame::root_frame</span><span class="plain">(</span><span class="reserved">inter_warehouse</span><span class="plain"> *</span><span class="identifier">warehouse</span><span class="plain">, </span><span class="reserved">inter_symbols_table</span><span class="plain"> *</span><span class="identifier">globals</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::Warehouse::find_room</span><span class="plain">(</span><span class="identifier">warehouse</span><span class="plain">, </span><span class="identifier">globals</span><span class="plain">, 2, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</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">inter_t</span><span class="plain">) </span><span class="constant">NOP_IST</span><span class="plain">;</span>
<span class="identifier">P</span><span class="element">.data</span><span class="plain">[</span><span class="constant">LEVEL_IFLD</span><span class="plain">] = 0;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">P</span><span class="plain">;</span>
@ -532,7 +532,7 @@
<p class="inwebparagraph"></p>
<p class="endnote">The function Inter::Frame::insert is used in 2/iibf (<a href="2-iibf.html#SP1_7">&#167;1.7</a>), 4/tnc (<a href="4-tnc.html#SP1">&#167;1</a>), 4/tcc (<a href="4-tcc.html#SP1">&#167;1</a>), 4/tmc (<a href="4-tmc.html#SP2">&#167;2</a>), 4/tvc (<a href="4-tvc.html#SP2">&#167;2</a>), 4/tpc (<a href="4-tpc.html#SP2">&#167;2</a>), 4/tlc (<a href="4-tlc.html#SP2">&#167;2</a>), 4/tac (<a href="4-tac.html#SP2">&#167;2</a>), 4/tpc2 (<a href="4-tpc2.html#SP2">&#167;2</a>), 4/tpc3 (<a href="4-tpc3.html#SP2">&#167;2</a>), 4/tkc (<a href="4-tkc.html#SP2">&#167;2</a>), 4/tdc (<a href="4-tdc.html#SP2">&#167;2</a>), 4/tvc2 (<a href="4-tvc2.html#SP2">&#167;2</a>), 4/tcc2 (<a href="4-tcc2.html#SP2">&#167;2</a>), 4/trc (<a href="4-trc.html#SP2">&#167;2</a>), 4/tic (<a href="4-tic.html#SP2">&#167;2</a>), 4/tpc4 (<a href="4-tpc4.html#SP2">&#167;2</a>), 4/tpc5 (<a href="4-tpc5.html#SP2">&#167;2</a>), 4/tpc6 (<a href="4-tpc6.html#SP2">&#167;2</a>), 4/tpc7 (<a href="4-tpc7.html#SP2">&#167;2</a>), 5/tlc (<a href="5-tlc.html#SP2">&#167;2</a>), 5/tlc2 (<a href="5-tlc2.html#SP2">&#167;2</a>), 5/tic (<a href="5-tic.html#SP2">&#167;2</a>), 5/trc (<a href="5-trc.html#SP2">&#167;2</a>), 5/tvc (<a href="5-tvc.html#SP2">&#167;2</a>), 5/tlc3 (<a href="5-tlc3.html#SP2">&#167;2</a>), 5/tcc (<a href="5-tcc.html#SP2">&#167;2</a>), 5/tec (<a href="5-tec.html#SP2">&#167;2</a>), 5/trc2 (<a href="5-trc2.html#SP2">&#167;2</a>), 5/tcc2 (<a href="5-tcc2.html#SP2">&#167;2</a>), 5/tsc (<a href="5-tsc.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Frame::insert is used in 2/iibf (<a href="2-iibf.html#SP1_6">&#167;1.6</a>), 4/tnc (<a href="4-tnc.html#SP1">&#167;1</a>), 4/tcc (<a href="4-tcc.html#SP1">&#167;1</a>), 4/tmc (<a href="4-tmc.html#SP2">&#167;2</a>), 4/tvc (<a href="4-tvc.html#SP2">&#167;2</a>), 4/tpc (<a href="4-tpc.html#SP2">&#167;2</a>), 4/tlc (<a href="4-tlc.html#SP2">&#167;2</a>), 4/tac (<a href="4-tac.html#SP2">&#167;2</a>), 4/tpc2 (<a href="4-tpc2.html#SP2">&#167;2</a>), 4/tpc3 (<a href="4-tpc3.html#SP2">&#167;2</a>), 4/tkc (<a href="4-tkc.html#SP2">&#167;2</a>), 4/tdc (<a href="4-tdc.html#SP2">&#167;2</a>), 4/tvc2 (<a href="4-tvc2.html#SP2">&#167;2</a>), 4/tcc2 (<a href="4-tcc2.html#SP2">&#167;2</a>), 4/trc (<a href="4-trc.html#SP2">&#167;2</a>), 4/tic (<a href="4-tic.html#SP2">&#167;2</a>), 4/tpc4 (<a href="4-tpc4.html#SP2">&#167;2</a>), 4/tpc5 (<a href="4-tpc5.html#SP2">&#167;2</a>), 4/tpc6 (<a href="4-tpc6.html#SP2">&#167;2</a>), 4/tpc7 (<a href="4-tpc7.html#SP2">&#167;2</a>), 5/tlc (<a href="5-tlc.html#SP2">&#167;2</a>), 5/tlc2 (<a href="5-tlc2.html#SP2">&#167;2</a>), 5/tic (<a href="5-tic.html#SP2">&#167;2</a>), 5/trc (<a href="5-trc.html#SP2">&#167;2</a>), 5/tvc (<a href="5-tvc.html#SP2">&#167;2</a>), 5/tlc3 (<a href="5-tlc3.html#SP2">&#167;2</a>), 5/tcc (<a href="5-tcc.html#SP2">&#167;2</a>), 5/tec (<a href="5-tec.html#SP2">&#167;2</a>), 5/trc2 (<a href="5-trc2.html#SP2">&#167;2</a>), 5/tcc2 (<a href="5-tcc2.html#SP2">&#167;2</a>), 5/tsc (<a href="5-tsc.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Frame::retrieve_origin appears nowhere else.</p>
@ -540,7 +540,7 @@
<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>
<p class="endnote">The function Inter::Frame::attach_comment is used in 2/iibf (<a href="2-iibf.html#SP1_7">&#167;1.7</a>), 4/tcc (<a href="4-tcc.html#SP1">&#167;1</a>), 5/tlc2 (<a href="5-tlc2.html#SP2">&#167;2</a>), 5/tsc (<a href="5-tsc.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Frame::attach_comment is used in 2/iibf (<a href="2-iibf.html#SP1_6">&#167;1.6</a>), 4/tcc (<a href="4-tcc.html#SP1">&#167;1</a>), 5/tlc2 (<a href="5-tlc2.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_package is used in 2/pck (<a href="2-pck.html#SP3">&#167;3</a>), 2/iibf (<a href="2-iibf.html#SP2">&#167;2</a>).</p>
@ -548,7 +548,7 @@
<p class="endnote">The function Inter::Frame::backtrace is used in 3/dfn (<a href="3-dfn.html#SP5">&#167;5</a>).</p>
<p class="endnote">The function Inter::Frame::attach_package is used in 2/tw (<a href="2-tw.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Frame::attach_package is used in 2/tw (<a href="2-tw.html#SP3">&#167;3</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_2">&#167;6.2</a>, <a href="#SP6_5">&#167;6.5</a>.</p>

View file

@ -220,32 +220,32 @@
<span class="plain">*</span><span class="identifier">val1</span><span class="plain"> = </span><span class="constant">UNDEF_IVAL</span><span class="plain">; *</span><span class="identifier">val2</span><span class="plain"> = 0; </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">if</span><span class="plain"> ((</span><span class="identifier">Str::begins_with_wide_string</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"\</span><span class="plain">"</span><span class="string">"</span><span class="plain">)) &amp;&amp; (</span><span class="identifier">Str::ends_with_wide_string</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"\</span><span class="plain">"</span><span class="string">"</span><span class="plain">))) {</span>
<span class="plain">*</span><span class="identifier">val1</span><span class="plain"> = </span><span class="constant">LITERAL_TEXT_IVAL</span><span class="plain">; *</span><span class="identifier">val2</span><span class="plain"> = </span><span class="functiontext">Inter::create_text</span><span class="plain">(</span><span class="identifier">IC</span><span class="plain">);</span>
<span class="plain">*</span><span class="identifier">val1</span><span class="plain"> = </span><span class="constant">LITERAL_TEXT_IVAL</span><span class="plain">; *</span><span class="identifier">val2</span><span class="plain"> = </span><span class="functiontext">Inter::Warehouse::create_text</span><span class="plain">(</span><span class="functiontext">Inter::warehouse</span><span class="plain">(</span><span class="identifier">IC</span><span class="plain">), </span><span class="identifier">pack</span><span class="plain">);</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">glob_storage</span><span class="plain"> = </span><span class="functiontext">Inter::get_text</span><span class="plain">(</span><span class="identifier">IC</span><span class="plain">, *</span><span class="identifier">val2</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">Inter::Constant::parse_text</span><span class="plain">(</span><span class="identifier">glob_storage</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">, 1, </span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">)-2, </span><span class="identifier">eloc</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">Str::begins_with_wide_string</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"r\</span><span class="plain">"</span><span class="string">"</span><span class="plain">)) &amp;&amp; (</span><span class="identifier">Str::ends_with_wide_string</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"\</span><span class="plain">"</span><span class="string">"</span><span class="plain">))) {</span>
<span class="plain">*</span><span class="identifier">val1</span><span class="plain"> = </span><span class="constant">REAL_IVAL</span><span class="plain">; *</span><span class="identifier">val2</span><span class="plain"> = </span><span class="functiontext">Inter::create_text</span><span class="plain">(</span><span class="identifier">IC</span><span class="plain">);</span>
<span class="plain">*</span><span class="identifier">val1</span><span class="plain"> = </span><span class="constant">REAL_IVAL</span><span class="plain">; *</span><span class="identifier">val2</span><span class="plain"> = </span><span class="functiontext">Inter::Warehouse::create_text</span><span class="plain">(</span><span class="functiontext">Inter::warehouse</span><span class="plain">(</span><span class="identifier">IC</span><span class="plain">), </span><span class="identifier">pack</span><span class="plain">);</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">glob_storage</span><span class="plain"> = </span><span class="functiontext">Inter::get_text</span><span class="plain">(</span><span class="identifier">IC</span><span class="plain">, *</span><span class="identifier">val2</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">Inter::Constant::parse_text</span><span class="plain">(</span><span class="identifier">glob_storage</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">, 2, </span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">)-2, </span><span class="identifier">eloc</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">Str::begins_with_wide_string</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"&amp;\</span><span class="plain">"</span><span class="string">"</span><span class="plain">)) &amp;&amp; (</span><span class="identifier">Str::ends_with_wide_string</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"\</span><span class="plain">"</span><span class="string">"</span><span class="plain">))) {</span>
<span class="plain">*</span><span class="identifier">val1</span><span class="plain"> = </span><span class="constant">GLOB_IVAL</span><span class="plain">; *</span><span class="identifier">val2</span><span class="plain"> = </span><span class="functiontext">Inter::create_text</span><span class="plain">(</span><span class="identifier">IC</span><span class="plain">);</span>
<span class="plain">*</span><span class="identifier">val1</span><span class="plain"> = </span><span class="constant">GLOB_IVAL</span><span class="plain">; *</span><span class="identifier">val2</span><span class="plain"> = </span><span class="functiontext">Inter::Warehouse::create_text</span><span class="plain">(</span><span class="functiontext">Inter::warehouse</span><span class="plain">(</span><span class="identifier">IC</span><span class="plain">), </span><span class="identifier">pack</span><span class="plain">);</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">glob_storage</span><span class="plain"> = </span><span class="functiontext">Inter::get_text</span><span class="plain">(</span><span class="identifier">IC</span><span class="plain">, *</span><span class="identifier">val2</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">Inter::Constant::parse_text</span><span class="plain">(</span><span class="identifier">glob_storage</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">, 2, </span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">)-2, </span><span class="identifier">eloc</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">Str::begins_with_wide_string</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"dw'"</span><span class="plain">)) &amp;&amp; (</span><span class="identifier">Str::ends_with_wide_string</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"'"</span><span class="plain">))) {</span>
<span class="plain">*</span><span class="identifier">val1</span><span class="plain"> = </span><span class="constant">DWORD_IVAL</span><span class="plain">; *</span><span class="identifier">val2</span><span class="plain"> = </span><span class="functiontext">Inter::create_text</span><span class="plain">(</span><span class="identifier">IC</span><span class="plain">);</span>
<span class="plain">*</span><span class="identifier">val1</span><span class="plain"> = </span><span class="constant">DWORD_IVAL</span><span class="plain">; *</span><span class="identifier">val2</span><span class="plain"> = </span><span class="functiontext">Inter::Warehouse::create_text</span><span class="plain">(</span><span class="functiontext">Inter::warehouse</span><span class="plain">(</span><span class="identifier">IC</span><span class="plain">), </span><span class="identifier">pack</span><span class="plain">);</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">glob_storage</span><span class="plain"> = </span><span class="functiontext">Inter::get_text</span><span class="plain">(</span><span class="identifier">IC</span><span class="plain">, *</span><span class="identifier">val2</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">Inter::Constant::parse_text</span><span class="plain">(</span><span class="identifier">glob_storage</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">, 3, </span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">)-2, </span><span class="identifier">eloc</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">Str::begins_with_wide_string</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"dwp'"</span><span class="plain">)) &amp;&amp; (</span><span class="identifier">Str::ends_with_wide_string</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"'"</span><span class="plain">))) {</span>
<span class="plain">*</span><span class="identifier">val1</span><span class="plain"> = </span><span class="constant">PDWORD_IVAL</span><span class="plain">; *</span><span class="identifier">val2</span><span class="plain"> = </span><span class="functiontext">Inter::create_text</span><span class="plain">(</span><span class="identifier">IC</span><span class="plain">);</span>
<span class="plain">*</span><span class="identifier">val1</span><span class="plain"> = </span><span class="constant">PDWORD_IVAL</span><span class="plain">; *</span><span class="identifier">val2</span><span class="plain"> = </span><span class="functiontext">Inter::Warehouse::create_text</span><span class="plain">(</span><span class="functiontext">Inter::warehouse</span><span class="plain">(</span><span class="identifier">IC</span><span class="plain">), </span><span class="identifier">pack</span><span class="plain">);</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">glob_storage</span><span class="plain"> = </span><span class="functiontext">Inter::get_text</span><span class="plain">(</span><span class="identifier">IC</span><span class="plain">, *</span><span class="identifier">val2</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">Inter::Constant::parse_text</span><span class="plain">(</span><span class="identifier">glob_storage</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">, 4, </span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">)-2, </span><span class="identifier">eloc</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">Str::begins_with_wide_string</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"^\</span><span class="plain">"</span><span class="string">"</span><span class="plain">)) &amp;&amp; (</span><span class="identifier">Str::ends_with_wide_string</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"\</span><span class="plain">"</span><span class="string">"</span><span class="plain">))) {</span>
<span class="plain">*</span><span class="identifier">val1</span><span class="plain"> = </span><span class="constant">DIVIDER_IVAL</span><span class="plain">; *</span><span class="identifier">val2</span><span class="plain"> = </span><span class="functiontext">Inter::create_text</span><span class="plain">(</span><span class="identifier">IC</span><span class="plain">);</span>
<span class="plain">*</span><span class="identifier">val1</span><span class="plain"> = </span><span class="constant">DIVIDER_IVAL</span><span class="plain">; *</span><span class="identifier">val2</span><span class="plain"> = </span><span class="functiontext">Inter::Warehouse::create_text</span><span class="plain">(</span><span class="functiontext">Inter::warehouse</span><span class="plain">(</span><span class="identifier">IC</span><span class="plain">), </span><span class="identifier">pack</span><span class="plain">);</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">divider_storage</span><span class="plain"> = </span><span class="functiontext">Inter::get_text</span><span class="plain">(</span><span class="identifier">IC</span><span class="plain">, *</span><span class="identifier">val2</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">Inter::Constant::parse_text</span><span class="plain">(</span><span class="identifier">divider_storage</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">, 2, </span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">)-2, </span><span class="identifier">eloc</span><span class="plain">);</span>
<span class="plain">}</span>

View file

@ -102,15 +102,15 @@
<p class="inwebparagraph"></p>
<p class="endnote">The function Inter::Errors::file_location is used in 2/tw (<a href="2-tw.html#SP2">&#167;2</a>), 2/frm (<a href="2-frm.html#SP5">&#167;5</a>), 2/iitf (<a href="2-iitf.html#SP1">&#167;1</a>).</p>
<p class="endnote">The function Inter::Errors::file_location is used in 2/tw (<a href="2-tw.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>).</p>
<p class="endnote">The function Inter::Errors::interb_location is used in 2/tw (<a href="2-tw.html#SP2">&#167;2</a>), 2/iibf (<a href="2-iibf.html#SP1">&#167;1</a>).</p>
<p class="endnote">The function Inter::Errors::interb_location is used in 2/tw (<a href="2-tw.html#SP3">&#167;3</a>), 2/iibf (<a href="2-iibf.html#SP1">&#167;1</a>).</p>
<p class="endnote">The function Inter::Errors::quoted is used in 2/st (<a href="2-st.html#SP10">&#167;10</a>), 2/iitf (<a href="2-iitf.html#SP1">&#167;1</a>), 2/idt (<a href="2-idt.html#SP3">&#167;3</a>), 3/dfn (<a href="3-dfn.html#SP5">&#167;5</a>), 4/tmc (<a href="4-tmc.html#SP2">&#167;2</a>), 4/tpc (<a href="4-tpc.html#SP2">&#167;2</a>), 4/tkc (<a href="4-tkc.html#SP2">&#167;2</a>), 4/tcc2 (<a href="4-tcc2.html#SP2">&#167;2</a>), 4/tic (<a href="4-tic.html#SP2">&#167;2</a>), 4/tpc5 (<a href="4-tpc5.html#SP2">&#167;2</a>), 4/tpc6 (<a href="4-tpc6.html#SP2">&#167;2</a>), 4/tpc7 (<a href="4-tpc7.html#SP2">&#167;2</a>), 5/tic (<a href="5-tic.html#SP2">&#167;2</a>).</p>
<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/tsc (<a href="4-tsc.html#SP1">&#167;1</a>), 4/tvc (<a href="4-tvc.html#SP2">&#167;2</a>), 4/tpc (<a href="4-tpc.html#SP2">&#167;2</a>), 4/tlc (<a href="4-tlc.html#SP2">&#167;2</a>), 4/tac (<a href="4-tac.html#SP2">&#167;2</a>), 4/tpc2 (<a href="4-tpc2.html#SP2">&#167;2</a>), 4/tkc (<a href="4-tkc.html#SP2">&#167;2</a>), 4/tcc2 (<a href="4-tcc2.html#SP2">&#167;2</a>), 4/trc (<a href="4-trc.html#SP2">&#167;2</a>), 4/tic (<a href="4-tic.html#SP2">&#167;2</a>), 4/tpc5 (<a href="4-tpc5.html#SP2">&#167;2</a>), 4/tpc6 (<a href="4-tpc6.html#SP2">&#167;2</a>), 4/tpc7 (<a href="4-tpc7.html#SP2">&#167;2</a>), 5/tlc (<a href="5-tlc.html#SP2">&#167;2</a>), 5/tlc2 (<a href="5-tlc2.html#SP2">&#167;2</a>), 5/tic (<a href="5-tic.html#SP2">&#167;2</a>), 5/trc (<a href="5-trc.html#SP2">&#167;2</a>), 5/tvc (<a href="5-tvc.html#SP2">&#167;2</a>), 5/tlc3 (<a href="5-tlc3.html#SP2">&#167;2</a>), 5/tcc (<a href="5-tcc.html#SP2">&#167;2</a>), 5/tec (<a href="5-tec.html#SP2">&#167;2</a>), 5/trc2 (<a href="5-trc2.html#SP2">&#167;2</a>), 5/tcc2 (<a href="5-tcc2.html#SP2">&#167;2</a>), 5/tsc (<a href="5-tsc.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Errors::issue is used in 2/st (<a href="2-st.html#SP10">&#167;10</a>), 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 is used in 2/st (<a href="2-st.html#SP10">&#167;10</a>), 2/iibf (<a href="2-iibf.html#SP1_6">&#167;1.6</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>

View file

@ -19,6 +19,8 @@ complete in itself.
<pre class="display">
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">trace_bin</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Inter::Binary::read</span><span class="plain">(</span><span class="reserved">inter_tree</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">F</span><span class="plain">) {</span>
<span class="identifier">LOGIF</span><span class="plain">(</span><span class="identifier">INTER_FILE_READ</span><span class="plain">, </span><span class="string">"(Reading binary inter file %f)\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">F</span><span class="plain">);</span>
<span class="reserved">long</span><span class="plain"> </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">max_offset</span><span class="plain"> = </span><span class="identifier">BinaryFiles::size</span><span class="plain">(</span><span class="identifier">F</span><span class="plain">);</span>
@ -30,13 +32,16 @@ complete in itself.
<span class="reserved">inter_warehouse</span><span class="plain"> *</span><span class="identifier">warehouse</span><span class="plain"> = </span><span class="functiontext">Inter::warehouse</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">grid</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">grid_extent</span><span class="plain"> = 0;</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>
&lt;<span class="cwebmacro">Read the shibboleth</span> <span class="cwebmacronumber">1.2</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Read the annotations</span> <span class="cwebmacronumber">1.3</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Read the resources</span> <span class="cwebmacronumber">1.5</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Read the symbol equations</span> <span class="cwebmacronumber">1.6</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Read the bytecode</span> <span class="cwebmacronumber">1.7</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Read the resources</span> <span class="cwebmacronumber">1.4</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Read the symbol equations</span> <span class="cwebmacronumber">1.5</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Read the bytecode</span> <span class="cwebmacronumber">1.6</span>&gt;<span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">grid</span><span class="plain">) </span><span class="identifier">Memory::I7_array_free</span><span class="plain">(</span><span class="identifier">grid</span><span class="plain">, </span><span class="constant">INTER_BYTECODE_MREASON</span><span class="plain">, (</span><span class="reserved">int</span><span class="plain">) </span><span class="identifier">grid_extent</span><span class="plain">, </span><span class="reserved">sizeof</span><span class="plain">(</span><span class="constant">inter_t</span><span class="plain">));</span>
<span class="identifier">BinaryFiles::close</span><span class="plain">(</span><span class="identifier">fh</span><span class="plain">);</span>
<span class="plain">}</span>
@ -52,6 +57,7 @@ complete in itself.
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Inter::Binary::write</span><span class="plain">(</span><span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">F</span><span class="plain">, </span><span class="reserved">inter_tree</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">trace_bin</span><span class="plain">) </span><span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">STDOUT</span><span class="plain">, </span><span class="string">"Writing binary inter file %f\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">F</span><span class="plain">);</span>
<span class="identifier">LOGIF</span><span class="plain">(</span><span class="identifier">INTER_FILE_READ</span><span class="plain">, </span><span class="string">"(Writing binary inter file %f)\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">F</span><span class="plain">);</span>
<span class="reserved">FILE</span><span class="plain"> *</span><span class="identifier">fh</span><span class="plain"> = </span><span class="identifier">BinaryFiles::open_for_writing</span><span class="plain">(</span><span class="identifier">F</span><span class="plain">);</span>
<span class="reserved">inter_warehouse</span><span class="plain"> *</span><span class="identifier">warehouse</span><span class="plain"> = </span><span class="functiontext">Inter::warehouse</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">);</span>
@ -165,38 +171,72 @@ resource block later on.
<p class="endnote">This code is used in <a href="#SP1_1">&#167;1.1</a>.</p>
<p class="inwebparagraph"><a id="SP1_4"></a><b>&#167;1.4. </b>There follows a block of resources, which is a list in which each entry opens
with a word identifying which resource is meant; when <code class="display"><span class="extract">NO_IRSRC</span></code> is reached,
that's the end of the list and therefore the block.
with a word identifying which resource number is meant; when this is zero,
that's the end of the list and therefore the block. (There is no resource 0.)
</p>
<pre class="definitions">
<span class="definitionkeyword">enum</span> <span class="constant">NO_IRSRC</span><span class="definitionkeyword"> from </span><span class="constant">0</span>
<span class="definitionkeyword">enum</span> <span class="constant">STRING_IRSRC</span>
<span class="definitionkeyword">enum</span> <span class="constant">SYMBOLS_TABLE_IRSRC</span>
<span class="definitionkeyword">enum</span> <span class="constant">FRAME_LIST_IRSRC</span>
<span class="definitionkeyword">enum</span> <span class="constant">PACKAGE_IRSRC</span>
</pre>
<p class="inwebparagraph"><a id="SP1_5"></a><b>&#167;1.5. </b><code class="display">
&lt;<span class="cwebmacrodefn">Read the resources</span> <span class="cwebmacronumber">1.5</span>&gt; =
<p class="macrodefinition"><code class="display">
&lt;<span class="cwebmacrodefn">Read the resources</span> <span class="cwebmacronumber">1.4</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">resource_counter</span><span class="plain"> = 0;</span>
<span class="reserved">while</span><span class="plain"> (</span><span class="identifier">BinaryFiles::read_int32</span><span class="plain">(</span><span class="identifier">fh</span><span class="plain">, &amp;</span><span class="identifier">X</span><span class="plain">)) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">X</span><span class="plain"> == </span><span class="constant">NO_IRSRC</span><span class="plain">) </span><span class="reserved">break</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">count</span><span class="plain"> = 0;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">BinaryFiles::read_int32</span><span class="plain">(</span><span class="identifier">fh</span><span class="plain">, &amp;</span><span class="identifier">count</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">)</span>
<span class="functiontext">Inter::Binary::read_error</span><span class="plain">(&amp;</span><span class="identifier">eloc</span><span class="plain">, </span><span class="identifier">ftell</span><span class="plain">(</span><span class="identifier">fh</span><span class="plain">), </span><span class="identifier">I</span><span class="string">"bytecode incomplete"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">count</span><span class="plain"> &gt; 0) {</span>
<span class="reserved">unsigned</span><span class="plain"> </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">grid_extent</span><span class="plain"> = 0;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">BinaryFiles::read_int32</span><span class="plain">(</span><span class="identifier">fh</span><span class="plain">, &amp;</span><span class="identifier">grid_extent</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">)</span>
<span class="functiontext">Inter::Binary::read_error</span><span class="plain">(&amp;</span><span class="identifier">eloc</span><span class="plain">, </span><span class="identifier">ftell</span><span class="plain">(</span><span class="identifier">fh</span><span class="plain">), </span><span class="identifier">I</span><span class="string">"bytecode incomplete"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">grid_extent</span><span class="plain"> == 0) {</span>
<span class="functiontext">Inter::Binary::read_error</span><span class="plain">(&amp;</span><span class="identifier">eloc</span><span class="plain">, </span><span class="identifier">ftell</span><span class="plain">(</span><span class="identifier">fh</span><span class="plain">), </span><span class="identifier">I</span><span class="string">"max zero"</span><span class="plain">);</span>
<span class="identifier">grid_extent</span><span class="plain"> = 1000;</span>
<span class="plain">}</span>
<span class="identifier">grid</span><span class="plain"> = (</span><span class="constant">inter_t</span><span class="plain"> *) </span><span class="identifier">Memory::I7_calloc</span><span class="plain">((</span><span class="reserved">int</span><span class="plain">) </span><span class="identifier">grid_extent</span><span class="plain">, </span><span class="reserved">sizeof</span><span class="plain">(</span><span class="constant">inter_t</span><span class="plain">), </span><span class="constant">INTER_BYTECODE_MREASON</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">i</span><span class="plain">=0; </span><span class="identifier">i</span><span class="plain">&lt;</span><span class="identifier">grid_extent</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">++) </span><span class="identifier">grid</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">] = 0;</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">=0; </span><span class="identifier">i</span><span class="plain">&lt;</span><span class="identifier">count</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">from_N</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">BinaryFiles::read_int32</span><span class="plain">(</span><span class="identifier">fh</span><span class="plain">, &amp;</span><span class="identifier">from_N</span><span class="plain">)) {</span>
<span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">n</span><span class="plain">;</span>
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">i</span><span class="plain">) {</span>
<span class="reserved">case</span><span class="plain"> 0: </span><span class="identifier">n</span><span class="plain"> = (</span><span class="constant">inter_t</span><span class="plain">) </span><span class="identifier">I</span><span class="plain">-</span><span class="element">&gt;root_package</span><span class="plain">-</span><span class="element">&gt;package_scope</span><span class="plain">-</span><span class="element">&gt;n_index</span><span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> 1: </span><span class="identifier">n</span><span class="plain"> = (</span><span class="constant">inter_t</span><span class="plain">) </span><span class="identifier">I</span><span class="plain">-</span><span class="element">&gt;root_package</span><span class="plain">-</span><span class="element">&gt;index_n</span><span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">default</span><span class="plain">: </span><span class="identifier">n</span><span class="plain"> = </span><span class="functiontext">Inter::Warehouse::create_resource</span><span class="plain">(</span><span class="identifier">warehouse</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">trace_bin</span><span class="plain">) </span><span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">STDOUT</span><span class="plain">, </span><span class="string">"Reading resource %d &lt;--- %d\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">n</span><span class="plain">, </span><span class="identifier">from_N</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">from_N</span><span class="plain"> &gt;= </span><span class="identifier">grid_extent</span><span class="plain">) {</span>
<span class="identifier">from_N</span><span class="plain"> = </span><span class="identifier">grid_extent</span><span class="plain">-1;</span>
<span class="functiontext">Inter::Binary::read_error</span><span class="plain">(&amp;</span><span class="identifier">eloc</span><span class="plain">, </span><span class="identifier">ftell</span><span class="plain">(</span><span class="identifier">fh</span><span class="plain">), </span><span class="identifier">I</span><span class="string">"max incorrect"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="identifier">grid</span><span class="plain">[</span><span class="identifier">from_N</span><span class="plain">] = </span><span class="identifier">n</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="functiontext">Inter::Binary::read_error</span><span class="plain">(&amp;</span><span class="identifier">eloc</span><span class="plain">, </span><span class="identifier">ftell</span><span class="plain">(</span><span class="identifier">fh</span><span class="plain">), </span><span class="identifier">I</span><span class="string">"bytecode incomplete"</span><span class="plain">);</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">i</span><span class="plain">=0; </span><span class="identifier">i</span><span class="plain">&lt;</span><span class="identifier">grid_extent</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">++) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">trace_bin</span><span class="plain">) </span><span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">STDOUT</span><span class="plain">, </span><span class="string">"%d "</span><span class="plain">, </span><span class="identifier">grid</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">]);</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">trace_bin</span><span class="plain">) </span><span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">STDOUT</span><span class="plain">, </span><span class="string">"\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
<span class="identifier">resource_counter</span><span class="plain">++;</span>
<span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">n</span><span class="plain"> = (</span><span class="constant">inter_t</span><span class="plain">) </span><span class="identifier">resource_counter</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">resource_counter</span><span class="plain"> &gt;= 3) </span><span class="identifier">n</span><span class="plain"> = </span><span class="functiontext">Inter::Warehouse::create_resource</span><span class="plain">(</span><span class="identifier">warehouse</span><span class="plain">);</span>
<span class="reserved">inter_resource_holder</span><span class="plain"> *</span><span class="identifier">res</span><span class="plain"> = &amp;(</span><span class="identifier">warehouse</span><span class="plain">-</span><span class="element">&gt;stored_resources</span><span class="plain">[</span><span class="identifier">n</span><span class="plain">]);</span>
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">X</span><span class="plain">) {</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">STRING_IRSRC</span><span class="plain">: </span>&lt;<span class="cwebmacro">Read a string resource</span> <span class="cwebmacronumber">1.5.1</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">SYMBOLS_TABLE_IRSRC</span><span class="plain">: </span>&lt;<span class="cwebmacro">Read a symbols table resource</span> <span class="cwebmacronumber">1.5.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">FRAME_LIST_IRSRC</span><span class="plain">: </span>&lt;<span class="cwebmacro">Read a frame list resource</span> <span class="cwebmacronumber">1.5.4</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">PACKAGE_IRSRC</span><span class="plain">: </span>&lt;<span class="cwebmacro">Read a package resource</span> <span class="cwebmacronumber">1.5.3</span>&gt;<span class="plain">; </span><span class="reserved">break</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">i</span><span class="plain">=0; </span><span class="identifier">i</span><span class="plain">&lt;</span><span class="identifier">count</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">from_N</span><span class="plain"> = 0;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">BinaryFiles::read_int32</span><span class="plain">(</span><span class="identifier">fh</span><span class="plain">, &amp;</span><span class="identifier">from_N</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">)</span>
<span class="functiontext">Inter::Binary::read_error</span><span class="plain">(&amp;</span><span class="identifier">eloc</span><span class="plain">, </span><span class="identifier">ftell</span><span class="plain">(</span><span class="identifier">fh</span><span class="plain">), </span><span class="identifier">I</span><span class="string">"bytecode incomplete"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">from_N</span><span class="plain"> == 0) || (</span><span class="identifier">from_N</span><span class="plain"> &gt;= </span><span class="identifier">grid_extent</span><span class="plain">)) {</span>
<span class="functiontext">Inter::Binary::read_error</span><span class="plain">(&amp;</span><span class="identifier">eloc</span><span class="plain">, </span><span class="identifier">ftell</span><span class="plain">(</span><span class="identifier">fh</span><span class="plain">), </span><span class="identifier">I</span><span class="string">"from-N out of range"</span><span class="plain">);</span>
<span class="identifier">from_N</span><span class="plain"> = </span><span class="identifier">grid_extent</span><span class="plain"> - 1;</span>
<span class="plain">}</span>
<span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">grid</span><span class="plain">[</span><span class="identifier">from_N</span><span class="plain">];</span>
<span class="reserved">inter_resource_holder</span><span class="plain"> *</span><span class="identifier">res</span><span class="plain"> = &amp;(</span><span class="identifier">warehouse</span><span class="plain">-</span><span class="element">&gt;stored_resources</span><span class="plain">[</span><span class="identifier">n</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"> = </span><span class="constant">NO_IRSRC</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">BinaryFiles::read_int32</span><span class="plain">(</span><span class="identifier">fh</span><span class="plain">, &amp;</span><span class="identifier">X</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">)</span>
<span class="functiontext">Inter::Binary::read_error</span><span class="plain">(&amp;</span><span class="identifier">eloc</span><span class="plain">, </span><span class="identifier">ftell</span><span class="plain">(</span><span class="identifier">fh</span><span class="plain">), </span><span class="identifier">I</span><span class="string">"bytecode incomplete"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">trace_bin</span><span class="plain">) </span><span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">STDOUT</span><span class="plain">, </span><span class="string">"Reading resource %d -&gt; %d type %d\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">from_N</span><span class="plain">, </span><span class="identifier">n</span><span class="plain">, </span><span class="identifier">X</span><span class="plain">);</span>
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">X</span><span class="plain">) {</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">STRING_IRSRC</span><span class="plain">: </span>&lt;<span class="cwebmacro">Read a string resource</span> <span class="cwebmacronumber">1.4.1</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">SYMBOLS_TABLE_IRSRC</span><span class="plain">: </span>&lt;<span class="cwebmacro">Read a symbols table resource</span> <span class="cwebmacronumber">1.4.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">FRAME_LIST_IRSRC</span><span class="plain">: </span>&lt;<span class="cwebmacro">Read a frame list resource</span> <span class="cwebmacronumber">1.4.4</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">PACKAGE_IRSRC</span><span class="plain">: </span>&lt;<span class="cwebmacro">Read a package resource</span> <span class="cwebmacronumber">1.4.3</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="plain">}</span>
</pre>
@ -211,31 +251,51 @@ that's the end of the list and therefore the block.
<pre class="displaydefn">
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">max</span><span class="plain"> = -1, </span><span class="identifier">count</span><span class="plain"> = 0;</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">n</span><span class="plain"> = 1; </span><span class="identifier">n</span><span class="plain"> &lt; </span><span class="identifier">warehouse</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="reserved">inter_resource_holder</span><span class="plain"> *</span><span class="identifier">res</span><span class="plain"> = &amp;(</span><span class="identifier">warehouse</span><span class="plain">-</span><span class="element">&gt;stored_resources</span><span class="plain">[</span><span class="identifier">n</span><span class="plain">]);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">res</span><span class="plain">-</span><span class="element">&gt;stored_text_stream</span><span class="plain">) {</span>
<span class="identifier">BinaryFiles::write_int32</span><span class="plain">(</span><span class="identifier">fh</span><span class="plain">, </span><span class="constant">STRING_IRSRC</span><span class="plain">);</span>
&lt;<span class="cwebmacro">Write a string resource</span> <span class="cwebmacronumber">1.1.3.1</span>&gt;<span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">res</span><span class="plain">-</span><span class="element">&gt;stored_symbols_table</span><span class="plain">) {</span>
<span class="identifier">BinaryFiles::write_int32</span><span class="plain">(</span><span class="identifier">fh</span><span class="plain">, </span><span class="constant">SYMBOLS_TABLE_IRSRC</span><span class="plain">);</span>
&lt;<span class="cwebmacro">Write a symbols table resource</span> <span class="cwebmacronumber">1.1.3.2</span>&gt;<span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">res</span><span class="plain">-</span><span class="element">&gt;stored_package</span><span class="plain">) {</span>
<span class="identifier">BinaryFiles::write_int32</span><span class="plain">(</span><span class="identifier">fh</span><span class="plain">, </span><span class="constant">PACKAGE_IRSRC</span><span class="plain">);</span>
&lt;<span class="cwebmacro">Write a package resource</span> <span class="cwebmacronumber">1.1.3.3</span>&gt;<span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="identifier">BinaryFiles::write_int32</span><span class="plain">(</span><span class="identifier">fh</span><span class="plain">, </span><span class="constant">FRAME_LIST_IRSRC</span><span class="plain">);</span>
&lt;<span class="cwebmacro">Write a frame list resource</span> <span class="cwebmacronumber">1.1.3.4</span>&gt;<span class="plain">;</span>
<span class="reserved">inter_package</span><span class="plain"> *</span><span class="identifier">owner</span><span class="plain"> = </span><span class="identifier">warehouse</span><span class="plain">-</span><span class="element">&gt;stored_resources</span><span class="plain">[</span><span class="identifier">n</span><span class="plain">]</span><span class="element">.owning_package</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">owner</span><span class="plain">) &amp;&amp; (</span><span class="identifier">owner</span><span class="plain">-</span><span class="element">&gt;stored_in</span><span class="plain"> != </span><span class="identifier">I</span><span class="plain">)) </span><span class="reserved">continue</span><span class="plain">;</span>
<span class="identifier">count</span><span class="plain">++;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">n</span><span class="plain">+1 &gt; </span><span class="identifier">max</span><span class="plain">) </span><span class="identifier">max</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">+1;</span>
<span class="plain">}</span>
<span class="identifier">BinaryFiles::write_int32</span><span class="plain">(</span><span class="identifier">fh</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">count</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">count</span><span class="plain"> &gt;= 0) {</span>
<span class="identifier">BinaryFiles::write_int32</span><span class="plain">(</span><span class="identifier">fh</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">max</span><span class="plain">);</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">n</span><span class="plain"> = 1; </span><span class="identifier">n</span><span class="plain"> &lt; </span><span class="identifier">warehouse</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="reserved">inter_package</span><span class="plain"> *</span><span class="identifier">owner</span><span class="plain"> = </span><span class="identifier">warehouse</span><span class="plain">-</span><span class="element">&gt;stored_resources</span><span class="plain">[</span><span class="identifier">n</span><span class="plain">]</span><span class="element">.owning_package</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">owner</span><span class="plain">) &amp;&amp; (</span><span class="identifier">owner</span><span class="plain">-</span><span class="element">&gt;stored_in</span><span class="plain"> != </span><span class="identifier">I</span><span class="plain">)) </span><span class="reserved">continue</span><span class="plain">;</span>
<span class="identifier">BinaryFiles::write_int32</span><span class="plain">(</span><span class="identifier">fh</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">n</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">n</span><span class="plain"> = 1; </span><span class="identifier">n</span><span class="plain"> &lt; </span><span class="identifier">warehouse</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="reserved">inter_package</span><span class="plain"> *</span><span class="identifier">owner</span><span class="plain"> = </span><span class="identifier">warehouse</span><span class="plain">-</span><span class="element">&gt;stored_resources</span><span class="plain">[</span><span class="identifier">n</span><span class="plain">]</span><span class="element">.owning_package</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">owner</span><span class="plain">) &amp;&amp; (</span><span class="identifier">owner</span><span class="plain">-</span><span class="element">&gt;stored_in</span><span class="plain"> != </span><span class="identifier">I</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">trace_bin</span><span class="plain">) </span><span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">STDOUT</span><span class="plain">, </span><span class="string">"Writing resource %d type %d owner %s\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">n</span><span class="plain">, </span><span class="identifier">warehouse</span><span class="plain">-</span><span class="element">&gt;stored_resources</span><span class="plain">[</span><span class="identifier">n</span><span class="plain">]</span><span class="element">.irsrc</span><span class="plain">,</span>
<span class="plain">(</span><span class="identifier">owner</span><span class="plain">)?</span><span class="string">"yes"</span><span class="plain">:</span><span class="string">"no"</span><span class="plain">);</span>
<span class="identifier">BinaryFiles::write_int32</span><span class="plain">(</span><span class="identifier">fh</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">n</span><span class="plain">);</span>
<span class="reserved">inter_resource_holder</span><span class="plain"> *</span><span class="identifier">res</span><span class="plain"> = &amp;(</span><span class="identifier">warehouse</span><span class="plain">-</span><span class="element">&gt;stored_resources</span><span class="plain">[</span><span class="identifier">n</span><span class="plain">]);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">res</span><span class="plain">-</span><span class="element">&gt;stored_text_stream</span><span class="plain">) {</span>
<span class="identifier">BinaryFiles::write_int32</span><span class="plain">(</span><span class="identifier">fh</span><span class="plain">, </span><span class="constant">STRING_IRSRC</span><span class="plain">);</span>
&lt;<span class="cwebmacro">Write a string resource</span> <span class="cwebmacronumber">1.1.3.1</span>&gt;<span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">res</span><span class="plain">-</span><span class="element">&gt;stored_symbols_table</span><span class="plain">) {</span>
<span class="identifier">BinaryFiles::write_int32</span><span class="plain">(</span><span class="identifier">fh</span><span class="plain">, </span><span class="constant">SYMBOLS_TABLE_IRSRC</span><span class="plain">);</span>
&lt;<span class="cwebmacro">Write a symbols table resource</span> <span class="cwebmacronumber">1.1.3.2</span>&gt;<span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">res</span><span class="plain">-</span><span class="element">&gt;stored_package</span><span class="plain">) {</span>
<span class="identifier">BinaryFiles::write_int32</span><span class="plain">(</span><span class="identifier">fh</span><span class="plain">, </span><span class="constant">PACKAGE_IRSRC</span><span class="plain">);</span>
&lt;<span class="cwebmacro">Write a package resource</span> <span class="cwebmacronumber">1.1.3.3</span>&gt;<span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="identifier">BinaryFiles::write_int32</span><span class="plain">(</span><span class="identifier">fh</span><span class="plain">, </span><span class="constant">FRAME_LIST_IRSRC</span><span class="plain">);</span>
&lt;<span class="cwebmacro">Write a frame list resource</span> <span class="cwebmacronumber">1.1.3.4</span>&gt;<span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="identifier">BinaryFiles::write_int32</span><span class="plain">(</span><span class="identifier">fh</span><span class="plain">, </span><span class="constant">NO_IRSRC</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP1_1">&#167;1.1</a>.</p>
<p class="inwebparagraph"><a id="SP1_5_1"></a><b>&#167;1.5.1. </b><code class="display">
&lt;<span class="cwebmacrodefn">Read a string resource</span> <span class="cwebmacronumber">1.5.1</span>&gt; =
<p class="inwebparagraph"><a id="SP1_4_1"></a><b>&#167;1.4.1. </b><code class="display">
&lt;<span class="cwebmacrodefn">Read a string resource</span> <span class="cwebmacronumber">1.4.1</span>&gt; =
</code></p>
@ -252,7 +312,7 @@ that's the end of the list and therefore the block.
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP1_5">&#167;1.5</a>.</p>
<p class="endnote">This code is used in <a href="#SP1_4">&#167;1.4</a>.</p>
<p class="inwebparagraph"><a id="SP1_1_3_1"></a><b>&#167;1.1.3.1. </b><code class="display">
&lt;<span class="cwebmacrodefn">Write a string resource</span> <span class="cwebmacronumber">1.1.3.1</span>&gt; =
@ -269,8 +329,8 @@ that's the end of the list and therefore the block.
<p class="endnote">This code is used in <a href="#SP1_1_3">&#167;1.1.3</a>.</p>
<p class="inwebparagraph"><a id="SP1_5_2"></a><b>&#167;1.5.2. </b><code class="display">
&lt;<span class="cwebmacrodefn">Read a symbols table resource</span> <span class="cwebmacronumber">1.5.2</span>&gt; =
<p class="inwebparagraph"><a id="SP1_4_2"></a><b>&#167;1.4.2. </b><code class="display">
&lt;<span class="cwebmacrodefn">Read a symbols table resource</span> <span class="cwebmacronumber">1.4.2</span>&gt; =
</code></p>
@ -333,7 +393,7 @@ that's the end of the list and therefore the block.
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP1_5">&#167;1.5</a>.</p>
<p class="endnote">This code is used in <a href="#SP1_4">&#167;1.4</a>.</p>
<p class="inwebparagraph"><a id="SP1_1_3_2"></a><b>&#167;1.1.3.2. </b><code class="display">
&lt;<span class="cwebmacrodefn">Write a symbols table resource</span> <span class="cwebmacronumber">1.1.3.2</span>&gt; =
@ -377,12 +437,12 @@ that's the end of the list and therefore the block.
<p class="endnote">This code is used in <a href="#SP1_1_3">&#167;1.1.3</a>.</p>
<p class="inwebparagraph"><a id="SP1_5_3"></a><b>&#167;1.5.3. </b>And similarly for packages.
<p class="inwebparagraph"><a id="SP1_4_3"></a><b>&#167;1.4.3. </b>And similarly for packages.
</p>
<p class="macrodefinition"><code class="display">
&lt;<span class="cwebmacrodefn">Read a package resource</span> <span class="cwebmacronumber">1.5.3</span>&gt; =
&lt;<span class="cwebmacrodefn">Read a package resource</span> <span class="cwebmacronumber">1.4.3</span>&gt; =
</code></p>
@ -391,18 +451,23 @@ that's the end of the list and therefore the block.
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">BinaryFiles::read_int32</span><span class="plain">(</span><span class="identifier">fh</span><span class="plain">, &amp;</span><span class="identifier">p</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">) </span><span class="functiontext">Inter::Binary::read_error</span><span class="plain">(&amp;</span><span class="identifier">eloc</span><span class="plain">, </span><span class="identifier">ftell</span><span class="plain">(</span><span class="identifier">fh</span><span class="plain">), </span><span class="identifier">I</span><span class="string">"bytecode incomplete"</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">cl</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">BinaryFiles::read_int32</span><span class="plain">(</span><span class="identifier">fh</span><span class="plain">, &amp;</span><span class="identifier">cl</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">) </span><span class="functiontext">Inter::Binary::read_error</span><span class="plain">(&amp;</span><span class="identifier">eloc</span><span class="plain">, </span><span class="identifier">ftell</span><span class="plain">(</span><span class="identifier">fh</span><span class="plain">), </span><span class="identifier">I</span><span class="string">"bytecode incomplete"</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">rl</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">BinaryFiles::read_int32</span><span class="plain">(</span><span class="identifier">fh</span><span class="plain">, &amp;</span><span class="identifier">rl</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">) </span><span class="functiontext">Inter::Binary::read_error</span><span class="plain">(&amp;</span><span class="identifier">eloc</span><span class="plain">, </span><span class="identifier">ftell</span><span class="plain">(</span><span class="identifier">fh</span><span class="plain">), </span><span class="identifier">I</span><span class="string">"bytecode incomplete"</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">sc</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">BinaryFiles::read_int32</span><span class="plain">(</span><span class="identifier">fh</span><span class="plain">, &amp;</span><span class="identifier">sc</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">) </span><span class="functiontext">Inter::Binary::read_error</span><span class="plain">(&amp;</span><span class="identifier">eloc</span><span class="plain">, </span><span class="identifier">ftell</span><span class="plain">(</span><span class="identifier">fh</span><span class="plain">), </span><span class="identifier">I</span><span class="string">"bytecode incomplete"</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">nid</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">BinaryFiles::read_int32</span><span class="plain">(</span><span class="identifier">fh</span><span class="plain">, &amp;</span><span class="identifier">nid</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">) </span><span class="functiontext">Inter::Binary::read_error</span><span class="plain">(&amp;</span><span class="identifier">eloc</span><span class="plain">, </span><span class="identifier">ftell</span><span class="plain">(</span><span class="identifier">fh</span><span class="plain">), </span><span class="identifier">I</span><span class="string">"bytecode incomplete"</span><span class="plain">);</span>
<span class="reserved">inter_package</span><span class="plain"> *</span><span class="identifier">parent</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">p</span><span class="plain"> != 0) </span><span class="identifier">parent</span><span class="plain"> = </span><span class="functiontext">Inter::get_package</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">p</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">p</span><span class="plain"> != 0) </span><span class="identifier">parent</span><span class="plain"> = </span><span class="functiontext">Inter::get_package</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">grid</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">res</span><span class="plain">-</span><span class="element">&gt;stored_package</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
<span class="identifier">res</span><span class="plain">-</span><span class="element">&gt;stored_package</span><span class="plain"> = </span><span class="functiontext">Inter::Packages::new</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">n</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">cl</span><span class="plain">) </span><span class="functiontext">Inter::Packages::make_codelike</span><span class="plain">(</span><span class="identifier">res</span><span class="plain">-</span><span class="element">&gt;stored_package</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">nid</span><span class="plain"> == 0) </span><span class="functiontext">Inter::Packages::make_rootlike</span><span class="plain">(</span><span class="identifier">res</span><span class="plain">-</span><span class="element">&gt;stored_package</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">sc</span><span class="plain"> != 0) </span><span class="functiontext">Inter::Packages::set_scope</span><span class="plain">(</span><span class="identifier">res</span><span class="plain">-</span><span class="element">&gt;stored_package</span><span class="plain">, </span><span class="functiontext">Inter::get_symbols_table</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">sc</span><span class="plain">));</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">rl</span><span class="plain">) </span><span class="functiontext">Inter::Packages::make_rootlike</span><span class="plain">(</span><span class="identifier">res</span><span class="plain">-</span><span class="element">&gt;stored_package</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">sc</span><span class="plain"> != 0) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">grid</span><span class="plain">) </span><span class="identifier">sc</span><span class="plain"> = </span><span class="identifier">grid</span><span class="plain">[</span><span class="identifier">sc</span><span class="plain">];</span>
<span class="functiontext">Inter::Packages::set_scope</span><span class="plain">(</span><span class="identifier">res</span><span class="plain">-</span><span class="element">&gt;stored_package</span><span class="plain">, </span><span class="functiontext">Inter::get_symbols_table</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">sc</span><span class="plain">));</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">nid</span><span class="plain"> != 0) {</span>
<span class="reserved">inter_symbol</span><span class="plain"> *</span><span class="identifier">pack_name</span><span class="plain"> = </span><span class="functiontext">Inter::SymbolsTables::symbol_from_id</span><span class="plain">(</span><span class="identifier">parent</span><span class="plain">?(</span><span class="functiontext">Inter::Packages::scope</span><span class="plain">(</span><span class="identifier">parent</span><span class="plain">)):</span><span class="functiontext">Inter::get_global_symbols</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">), </span><span class="identifier">nid</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">pack_name</span><span class="plain">)</span>
@ -414,7 +479,7 @@ that's the end of the list and therefore the block.
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP1_5">&#167;1.5</a>.</p>
<p class="endnote">This code is used in <a href="#SP1_4">&#167;1.4</a>.</p>
<p class="inwebparagraph"><a id="SP1_1_3_3"></a><b>&#167;1.1.3.3. </b><code class="display">
&lt;<span class="cwebmacrodefn">Write a package resource</span> <span class="cwebmacronumber">1.1.3.3</span>&gt; =
@ -428,6 +493,7 @@ that's the end of the list and therefore the block.
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">par</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">BinaryFiles::write_int32</span><span class="plain">(</span><span class="identifier">fh</span><span class="plain">, 0);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">BinaryFiles::write_int32</span><span class="plain">(</span><span class="identifier">fh</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">par</span><span class="plain">-</span><span class="element">&gt;index_n</span><span class="plain">);</span>
<span class="identifier">BinaryFiles::write_int32</span><span class="plain">(</span><span class="identifier">fh</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="functiontext">Inter::Packages::is_codelike</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">));</span>
<span class="identifier">BinaryFiles::write_int32</span><span class="plain">(</span><span class="identifier">fh</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="functiontext">Inter::Packages::is_rootlike</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">));</span>
<span class="identifier">BinaryFiles::write_int32</span><span class="plain">(</span><span class="identifier">fh</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">P</span><span class="plain">-</span><span class="element">&gt;package_scope</span><span class="plain">-</span><span class="element">&gt;n_index</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">P</span><span class="plain">-</span><span class="element">&gt;package_name</span><span class="plain">)</span>
<span class="identifier">BinaryFiles::write_int32</span><span class="plain">(</span><span class="identifier">fh</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">P</span><span class="plain">-</span><span class="element">&gt;package_name</span><span class="plain">-</span><span class="element">&gt;symbol_ID</span><span class="plain">);</span>
@ -440,13 +506,13 @@ that's the end of the list and therefore the block.
<p class="endnote">This code is used in <a href="#SP1_1_3">&#167;1.1.3</a>.</p>
<p class="inwebparagraph"><a id="SP1_5_4"></a><b>&#167;1.5.4. </b>We do nothing here, because frame lists are built new on reading. It's
<p class="inwebparagraph"><a id="SP1_4_4"></a><b>&#167;1.4.4. </b>We do nothing here, because frame lists are built new on reading. It's
enough that the slot exists for the eventual list to be stored in.
</p>
<p class="macrodefinition"><code class="display">
&lt;<span class="cwebmacrodefn">Read a frame list resource</span> <span class="cwebmacronumber">1.5.4</span>&gt; =
&lt;<span class="cwebmacrodefn">Read a frame list resource</span> <span class="cwebmacronumber">1.4.4</span>&gt; =
</code></p>
@ -456,7 +522,7 @@ enough that the slot exists for the eventual list to be stored in.
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP1_5">&#167;1.5</a>.</p>
<p class="endnote">This code is used in <a href="#SP1_4">&#167;1.4</a>.</p>
<p class="inwebparagraph"><a id="SP1_1_3_4"></a><b>&#167;1.1.3.4. </b><code class="display">
&lt;<span class="cwebmacrodefn">Write a frame list resource</span> <span class="cwebmacronumber">1.1.3.4</span>&gt; =
@ -471,14 +537,15 @@ enough that the slot exists for the eventual list to be stored in.
<p class="endnote">This code is used in <a href="#SP1_1_3">&#167;1.1.3</a>.</p>
<p class="inwebparagraph"><a id="SP1_6"></a><b>&#167;1.6. </b><code class="display">
&lt;<span class="cwebmacrodefn">Read the symbol equations</span> <span class="cwebmacronumber">1.6</span>&gt; =
<p class="inwebparagraph"><a id="SP1_5"></a><b>&#167;1.5. </b><code class="display">
&lt;<span class="cwebmacrodefn">Read the symbol equations</span> <span class="cwebmacronumber">1.5</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="reserved">while</span><span class="plain"> (</span><span class="identifier">BinaryFiles::read_int32</span><span class="plain">(</span><span class="identifier">fh</span><span class="plain">, &amp;</span><span class="identifier">X</span><span class="plain">)) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">X</span><span class="plain"> == 0) </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">grid</span><span class="plain">) </span><span class="identifier">X</span><span class="plain"> = </span><span class="identifier">grid</span><span class="plain">[</span><span class="identifier">X</span><span class="plain">];</span>
<span class="reserved">inter_symbols_table</span><span class="plain"> *</span><span class="identifier">from_T</span><span class="plain"> = </span><span class="functiontext">Inter::get_symbols_table</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">X</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">from_T</span><span class="plain"> == </span><span class="identifier">NULL</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">"It's %d\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">X</span><span class="plain">);</span>
@ -491,6 +558,8 @@ enough that the slot exists for the eventual list to be stored in.
<span class="reserved">unsigned</span><span class="plain"> </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">to_ID</span><span class="plain"> = 0;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">BinaryFiles::read_int32</span><span class="plain">(</span><span class="identifier">fh</span><span class="plain">, &amp;</span><span class="identifier">to_T_id</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">)</span>
<span class="functiontext">Inter::Binary::read_error</span><span class="plain">(&amp;</span><span class="identifier">eloc</span><span class="plain">, </span><span class="identifier">ftell</span><span class="plain">(</span><span class="identifier">fh</span><span class="plain">), </span><span class="identifier">I</span><span class="string">"bytecode incomplete"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">grid</span><span class="plain">) </span><span class="identifier">to_T_id</span><span class="plain"> = </span><span class="identifier">grid</span><span class="plain">[</span><span class="identifier">to_T_id</span><span class="plain">];</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">trace_bin</span><span class="plain">) </span><span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">STDOUT</span><span class="plain">, </span><span class="string">"Read eqn %d -&gt; %d\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">X</span><span class="plain">, </span><span class="identifier">to_T_id</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">BinaryFiles::read_int32</span><span class="plain">(</span><span class="identifier">fh</span><span class="plain">, &amp;</span><span class="identifier">to_ID</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">)</span>
<span class="functiontext">Inter::Binary::read_error</span><span class="plain">(&amp;</span><span class="identifier">eloc</span><span class="plain">, </span><span class="identifier">ftell</span><span class="plain">(</span><span class="identifier">fh</span><span class="plain">), </span><span class="identifier">I</span><span class="string">"bytecode incomplete"</span><span class="plain">);</span>
<span class="reserved">inter_symbols_table</span><span class="plain"> *</span><span class="identifier">to_T</span><span class="plain"> = </span><span class="functiontext">Inter::get_symbols_table</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">to_T_id</span><span class="plain">);</span>
@ -502,7 +571,6 @@ enough that the slot exists for the eventual list to be stored in.
<span class="functiontext">Inter::SymbolsTables::equate</span><span class="plain">(</span><span class="identifier">from_S</span><span class="plain">, </span><span class="identifier">to_S</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
@ -516,6 +584,8 @@ enough that the slot exists for the eventual list to be stored in.
<pre class="displaydefn">
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">n</span><span class="plain"> = 1; </span><span class="identifier">n</span><span class="plain"> &lt; </span><span class="identifier">warehouse</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="reserved">inter_package</span><span class="plain"> *</span><span class="identifier">owner</span><span class="plain"> = </span><span class="identifier">warehouse</span><span class="plain">-</span><span class="element">&gt;stored_resources</span><span class="plain">[</span><span class="identifier">n</span><span class="plain">]</span><span class="element">.owning_package</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">owner</span><span class="plain">) &amp;&amp; (</span><span class="identifier">owner</span><span class="plain">-</span><span class="element">&gt;stored_in</span><span class="plain"> != </span><span class="identifier">I</span><span class="plain">)) </span><span class="reserved">continue</span><span class="plain">;</span>
<span class="reserved">inter_resource_holder</span><span class="plain"> *</span><span class="identifier">res</span><span class="plain"> = &amp;(</span><span class="identifier">warehouse</span><span class="plain">-</span><span class="element">&gt;stored_resources</span><span class="plain">[</span><span class="identifier">n</span><span class="plain">]);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">res</span><span class="plain">-</span><span class="element">&gt;stored_symbols_table</span><span class="plain">) {</span>
<span class="reserved">inter_symbols_table</span><span class="plain"> *</span><span class="identifier">from_T</span><span class="plain"> = </span><span class="identifier">res</span><span class="plain">-</span><span class="element">&gt;stored_symbols_table</span><span class="plain">;</span>
@ -525,6 +595,7 @@ enough that the slot exists for the eventual list to be stored in.
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">symb</span><span class="plain">) &amp;&amp; (</span><span class="identifier">symb</span><span class="plain">-</span><span class="element">&gt;equated_to</span><span class="plain">)) {</span>
<span class="identifier">BinaryFiles::write_int32</span><span class="plain">(</span><span class="identifier">fh</span><span class="plain">, </span><span class="identifier">symb</span><span class="plain">-</span><span class="element">&gt;symbol_ID</span><span class="plain">);</span>
<span class="identifier">BinaryFiles::write_int32</span><span class="plain">(</span><span class="identifier">fh</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">symb</span><span class="plain">-</span><span class="element">&gt;equated_to</span><span class="plain">-</span><span class="element">&gt;owning_table</span><span class="plain">-</span><span class="element">&gt;n_index</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">trace_bin</span><span class="plain">) </span><span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">STDOUT</span><span class="plain">, </span><span class="string">"Write eqn %d -&gt; %d\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">n</span><span class="plain">, </span><span class="identifier">symb</span><span class="plain">-</span><span class="element">&gt;equated_to</span><span class="plain">-</span><span class="element">&gt;owning_table</span><span class="plain">-</span><span class="element">&gt;n_index</span><span class="plain">);</span>
<span class="identifier">BinaryFiles::write_int32</span><span class="plain">(</span><span class="identifier">fh</span><span class="plain">, </span><span class="identifier">symb</span><span class="plain">-</span><span class="element">&gt;equated_to</span><span class="plain">-</span><span class="element">&gt;symbol_ID</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">}</span>
@ -538,8 +609,8 @@ enough that the slot exists for the eventual list to be stored in.
<p class="endnote">This code is used in <a href="#SP1_1">&#167;1.1</a>.</p>
<p class="inwebparagraph"><a id="SP1_7"></a><b>&#167;1.7. </b><code class="display">
&lt;<span class="cwebmacrodefn">Read the bytecode</span> <span class="cwebmacronumber">1.7</span>&gt; =
<p class="inwebparagraph"><a id="SP1_6"></a><b>&#167;1.6. </b><code class="display">
&lt;<span class="cwebmacrodefn">Read the bytecode</span> <span class="cwebmacronumber">1.6</span>&gt; =
</code></p>
@ -548,10 +619,17 @@ enough that the slot exists for the eventual list to be stored in.
<span class="identifier">eloc</span><span class="element">.error_offset</span><span class="plain"> = (</span><span class="identifier">size_t</span><span class="plain">) </span><span class="identifier">ftell</span><span class="plain">(</span><span class="identifier">fh</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">extent</span><span class="plain"> = (</span><span class="reserved">int</span><span class="plain">) </span><span class="identifier">X</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">extent</span><span class="plain"> &lt; 2) || ((</span><span class="reserved">long</span><span class="plain"> </span><span class="reserved">int</span><span class="plain">) </span><span class="identifier">extent</span><span class="plain"> &gt;= </span><span class="identifier">max_offset</span><span class="plain">)) </span><span class="functiontext">Inter::Binary::read_error</span><span class="plain">(&amp;</span><span class="identifier">eloc</span><span class="plain">, </span><span class="identifier">ftell</span><span class="plain">(</span><span class="identifier">fh</span><span class="plain">), </span><span class="identifier">I</span><span class="string">"overlarge line"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">trace_bin</span><span class="plain">) </span><span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">STDOUT</span><span class="plain">, </span><span class="string">"Reading bytecode, extent %d\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">extent</span><span class="plain">);</span>
<span class="reserved">inter_package</span><span class="plain"> *</span><span class="identifier">owner</span><span class="plain"> = </span><span class="identifier">NULL</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">PID</span><span class="plain"> = 0;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">BinaryFiles::read_int32</span><span class="plain">(</span><span class="identifier">fh</span><span class="plain">, &amp;</span><span class="identifier">PID</span><span class="plain">)) </span><span class="identifier">owner</span><span class="plain"> = </span><span class="functiontext">Inter::Packages::from_PID</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">PID</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">BinaryFiles::read_int32</span><span class="plain">(</span><span class="identifier">fh</span><span class="plain">, &amp;</span><span class="identifier">PID</span><span class="plain">)) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">grid</span><span class="plain">) </span><span class="identifier">PID</span><span class="plain"> = </span><span class="identifier">grid</span><span class="plain">[</span><span class="identifier">PID</span><span class="plain">];</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">trace_bin</span><span class="plain">) </span><span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">STDOUT</span><span class="plain">, </span><span class="string">"PID %d\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">PID</span><span class="plain">);</span>
<span class="identifier">owner</span><span class="plain"> = </span><span class="functiontext">Inter::Packages::from_PID</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">PID</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">trace_bin</span><span class="plain">) </span><span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">STDOUT</span><span class="plain">, </span><span class="string">"Owner has ID %d, table %d\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">owner</span><span class="plain">-</span><span class="element">&gt;index_n</span><span class="plain">, </span><span class="identifier">owner</span><span class="plain">-</span><span class="element">&gt;package_scope</span><span class="plain">-</span><span class="element">&gt;n_index</span><span class="plain">);</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::Warehouse::find_room</span><span class="plain">(</span><span class="identifier">warehouse</span><span class="plain">, </span><span class="functiontext">Inter::get_global_symbols</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">), </span><span class="identifier">extent</span><span class="plain">-1, &amp;</span><span class="identifier">eloc</span><span class="plain">, </span><span class="identifier">owner</span><span class="plain">);</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">=0; </span><span class="identifier">i</span><span class="plain">&lt;</span><span class="identifier">extent</span><span class="plain">-1; </span><span class="identifier">i</span><span class="plain">++) {</span>
@ -563,9 +641,13 @@ enough that the slot exists for the eventual list to be stored in.
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">BinaryFiles::read_int32</span><span class="plain">(</span><span class="identifier">fh</span><span class="plain">, &amp;</span><span class="identifier">comment</span><span class="plain">)) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">comment</span><span class="plain"> != 0) </span><span class="functiontext">Inter::Frame::attach_comment</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, (</span><span class="constant">inter_t</span><span class="plain">) </span><span class="identifier">comment</span><span class="plain">);</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="functiontext">Inter::Binary::read_error</span><span class="plain">(&amp;</span><span class="identifier">eloc</span><span class="plain">, </span><span class="identifier">ftell</span><span class="plain">(</span><span class="identifier">fh</span><span class="plain">), </span><span class="identifier">I</span><span class="string">"bytecode incomplete"</span><span class="plain">);</span>
<span class="reserved">inter_error_message</span><span class="plain"> *</span><span class="identifier">E</span><span class="plain"> = </span><span class="functiontext">Inter::Defn::verify_construct</span><span class="plain">(</span><span class="identifier">owner</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">trace_bin</span><span class="plain">) </span><span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">STDOUT</span><span class="plain">, </span><span class="string">"Verify\</span><span class="plain">n</span><span class="string">"</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">if</span><span class="plain"> (</span><span class="identifier">grid</span><span class="plain">) </span><span class="identifier">E</span><span class="plain"> = </span><span class="functiontext">Inter::Defn::transpose_construct</span><span class="plain">(</span><span class="identifier">owner</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">grid</span><span class="plain">, </span><span class="identifier">grid_extent</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="identifier">E</span><span class="plain"> = </span><span class="functiontext">Inter::Defn::verify_construct</span><span class="plain">(</span><span class="identifier">owner</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="reserved">if</span><span class="plain"> (</span><span class="identifier">trace_bin</span><span class="plain">) </span><span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">STDOUT</span><span class="plain">, </span><span class="string">"Done\</span><span class="plain">n</span><span class="string">"</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>
</pre>
@ -621,7 +703,7 @@ enough that the slot exists for the eventual list to be stored in.
<p class="inwebparagraph"></p>
<p class="endnote">The function Inter::Binary::read_error is used in <a href="#SP1_2">&#167;1.2</a>, <a href="#SP1_3">&#167;1.3</a>, <a href="#SP1_5_1">&#167;1.5.1</a>, <a href="#SP1_5_2">&#167;1.5.2</a>, <a href="#SP1_5_3">&#167;1.5.3</a>, <a href="#SP1_6">&#167;1.6</a>, <a href="#SP1_7">&#167;1.7</a>.</p>
<p class="endnote">The function Inter::Binary::read_error is used in <a href="#SP1_2">&#167;1.2</a>, <a href="#SP1_3">&#167;1.3</a>, <a href="#SP1_4">&#167;1.4</a>, <a href="#SP1_4_1">&#167;1.4.1</a>, <a href="#SP1_4_2">&#167;1.4.2</a>, <a href="#SP1_4_3">&#167;1.4.3</a>, <a href="#SP1_5">&#167;1.5</a>, <a href="#SP1_6">&#167;1.6</a>.</p>
<p class="inwebparagraph"><a id="SP4"></a><b>&#167;4. </b>This tests a file to see if it looks like Inter binary:
</p>

View file

@ -42,7 +42,6 @@
<pre class="display">
<span class="reserved">typedef</span><span class="plain"> </span><span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inter_tree</span><span class="plain"> {</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inter_warehouse</span><span class="plain"> *</span><span class="identifier">warehouse</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">root_definition_frame</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">root_package</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>
@ -52,7 +51,7 @@
<p class="inwebparagraph"></p>
<p class="endnote">The structure inter_tree is accessed in 2/pck, 2/frm, 2/bkm and here.</p>
<p class="endnote">The structure inter_tree is accessed in 2/pck, 2/frm, 2/bkm, 2/iibf, 3/dfn and here.</p>
<p class="inwebparagraph"><a id="SP3"></a><b>&#167;3. </b></p>
@ -62,27 +61,19 @@
<span class="reserved">inter_tree</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_tree</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="identifier">I</span><span class="plain">-</span><span class="element">&gt;warehouse</span><span class="plain"> = </span><span class="functiontext">Inter::Warehouse::new</span><span class="plain">();</span>
<span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">N</span><span class="plain"> = </span><span class="functiontext">Inter::create_symbols_table</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;root_package</span><span class="plain"> = </span><span class="functiontext">Inter::get_package</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="functiontext">Inter::create_package</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;root_definition_frame</span><span class="plain"> = </span><span class="functiontext">Inter::Frame::root_frame</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">);</span>
<span class="reserved">inter_warehouse</span><span class="plain"> *</span><span class="identifier">warehouse</span><span class="plain"> = </span><span class="functiontext">Inter::Warehouse::new</span><span class="plain">();</span>
<span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">N</span><span class="plain"> = </span><span class="functiontext">Inter::Warehouse::create_symbols_table</span><span class="plain">(</span><span class="identifier">warehouse</span><span class="plain">);</span>
<span class="reserved">inter_symbols_table</span><span class="plain"> *</span><span class="identifier">globals</span><span class="plain"> = </span><span class="functiontext">Inter::Warehouse::get_symbols_table</span><span class="plain">(</span><span class="identifier">warehouse</span><span class="plain">, </span><span class="identifier">N</span><span class="plain">);</span>
<span class="identifier">I</span><span class="plain">-</span><span class="element">&gt;root_package</span><span class="plain"> = </span><span class="functiontext">Inter::Warehouse::get_package</span><span class="plain">(</span><span class="identifier">warehouse</span><span class="plain">, </span><span class="functiontext">Inter::Warehouse::create_package</span><span class="plain">(</span><span class="identifier">warehouse</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;root_definition_frame</span><span class="plain"> = </span><span class="functiontext">Inter::Frame::root_frame</span><span class="plain">(</span><span class="identifier">warehouse</span><span class="plain">, </span><span class="identifier">globals</span><span class="plain">);</span>
<span class="functiontext">Inter::Packages::make_rootlike</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">-</span><span class="element">&gt;root_package</span><span class="plain">);</span>
<span class="functiontext">Inter::Packages::set_scope</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">-</span><span class="element">&gt;root_package</span><span class="plain">, </span><span class="functiontext">Inter::get_symbols_table</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">N</span><span class="plain">));</span>
<span class="functiontext">Inter::Packages::set_scope</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">-</span><span class="element">&gt;root_package</span><span class="plain">, </span><span class="identifier">globals</span><span class="plain">);</span>
<span class="functiontext">Inter::Warehouse::attribute_resource</span><span class="plain">(</span><span class="identifier">warehouse</span><span class="plain">, </span><span class="identifier">N</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">-</span><span class="element">&gt;root_package</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_warehouse</span><span class="plain"> *</span><span class="functiontext">Inter::warehouse</span><span class="plain">(</span><span class="reserved">inter_tree</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">) {</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="plain">-</span><span class="element">&gt;warehouse</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="constant">inter_t</span><span class="plain"> </span><span class="functiontext">Inter::create_symbols_table</span><span class="plain">(</span><span class="reserved">inter_tree</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">) {</span>
<span class="reserved">inter_warehouse</span><span class="plain"> *</span><span class="identifier">warehouse</span><span class="plain"> = </span><span class="functiontext">Inter::warehouse</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">n</span><span class="plain"> = </span><span class="functiontext">Inter::Warehouse::create_resource</span><span class="plain">(</span><span class="identifier">warehouse</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">warehouse</span><span class="plain">-</span><span class="element">&gt;stored_resources</span><span class="plain">[</span><span class="identifier">n</span><span class="plain">]</span><span class="element">.stored_symbols_table</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
<span class="identifier">warehouse</span><span class="plain">-</span><span class="element">&gt;stored_resources</span><span class="plain">[</span><span class="identifier">n</span><span class="plain">]</span><span class="element">.stored_symbols_table</span><span class="plain"> = </span><span class="functiontext">Inter::SymbolsTables::new</span><span class="plain">();</span>
<span class="identifier">warehouse</span><span class="plain">-</span><span class="element">&gt;stored_resources</span><span class="plain">[</span><span class="identifier">n</span><span class="plain">]</span><span class="element">.stored_symbols_table</span><span class="plain">-</span><span class="element">&gt;n_index</span><span class="plain"> = (</span><span class="reserved">int</span><span class="plain">) </span><span class="identifier">n</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">n</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">Inter::Frame::warehouse</span><span class="plain">(&amp;(</span><span class="identifier">I</span><span class="plain">-</span><span class="element">&gt;root_definition_frame</span><span class="plain">));</span>
<span class="plain">}</span>
<span class="reserved">inter_symbols_table</span><span class="plain"> *</span><span class="functiontext">Inter::get_global_symbols</span><span class="plain">(</span><span class="reserved">inter_tree</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">) {</span>
@ -93,39 +84,18 @@
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">Inter::Warehouse::get_symbols_table</span><span class="plain">(</span><span class="functiontext">Inter::warehouse</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">), </span><span class="identifier">n</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="constant">inter_t</span><span class="plain"> </span><span class="functiontext">Inter::create_package</span><span class="plain">(</span><span class="reserved">inter_tree</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">) {</span>
<span class="reserved">inter_warehouse</span><span class="plain"> *</span><span class="identifier">warehouse</span><span class="plain"> = </span><span class="functiontext">Inter::warehouse</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">n</span><span class="plain"> = </span><span class="functiontext">Inter::Warehouse::create_resource</span><span class="plain">(</span><span class="identifier">warehouse</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">warehouse</span><span class="plain">-</span><span class="element">&gt;stored_resources</span><span class="plain">[</span><span class="identifier">n</span><span class="plain">]</span><span class="element">.stored_package</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
<span class="identifier">warehouse</span><span class="plain">-</span><span class="element">&gt;stored_resources</span><span class="plain">[</span><span class="identifier">n</span><span class="plain">]</span><span class="element">.stored_package</span><span class="plain"> = </span><span class="functiontext">Inter::Packages::new</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">n</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">n</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">inter_package</span><span class="plain"> *</span><span class="functiontext">Inter::get_package</span><span class="plain">(</span><span class="reserved">inter_tree</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">, </span><span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">n</span><span class="plain">) {</span>
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">Inter::Warehouse::get_package</span><span class="plain">(</span><span class="functiontext">Inter::warehouse</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">), </span><span class="identifier">n</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="constant">inter_t</span><span class="plain"> </span><span class="functiontext">Inter::create_text</span><span class="plain">(</span><span class="reserved">inter_tree</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">) {</span>
<span class="reserved">inter_warehouse</span><span class="plain"> *</span><span class="identifier">warehouse</span><span class="plain"> = </span><span class="functiontext">Inter::warehouse</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">n</span><span class="plain"> = </span><span class="functiontext">Inter::Warehouse::create_resource</span><span class="plain">(</span><span class="identifier">warehouse</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">warehouse</span><span class="plain">-</span><span class="element">&gt;stored_resources</span><span class="plain">[</span><span class="identifier">n</span><span class="plain">]</span><span class="element">.stored_text_stream</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
<span class="identifier">warehouse</span><span class="plain">-</span><span class="element">&gt;stored_resources</span><span class="plain">[</span><span class="identifier">n</span><span class="plain">]</span><span class="element">.stored_text_stream</span><span class="plain"> = </span><span class="identifier">Str::new</span><span class="plain">();</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">n</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">Inter::Warehouse::create_text</span><span class="plain">(</span><span class="functiontext">Inter::warehouse</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">), </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="functiontext">Inter::get_text</span><span class="plain">(</span><span class="reserved">inter_tree</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">, </span><span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">n</span><span class="plain">) {</span>
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">Inter::Warehouse::get_text</span><span class="plain">(</span><span class="functiontext">Inter::warehouse</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">), </span><span class="identifier">n</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="constant">inter_t</span><span class="plain"> </span><span class="functiontext">Inter::create_ref</span><span class="plain">(</span><span class="reserved">inter_tree</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">) {</span>
<span class="reserved">inter_warehouse</span><span class="plain"> *</span><span class="identifier">warehouse</span><span class="plain"> = </span><span class="functiontext">Inter::warehouse</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">n</span><span class="plain"> = </span><span class="functiontext">Inter::Warehouse::create_resource</span><span class="plain">(</span><span class="identifier">warehouse</span><span class="plain">);</span>
<span class="identifier">warehouse</span><span class="plain">-</span><span class="element">&gt;stored_resources</span><span class="plain">[</span><span class="identifier">n</span><span class="plain">]</span><span class="element">.stored_ref</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">n</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> *</span><span class="functiontext">Inter::get_ref</span><span class="plain">(</span><span class="reserved">inter_tree</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">, </span><span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">n</span><span class="plain">) {</span>
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">Inter::Warehouse::get_ref</span><span class="plain">(</span><span class="functiontext">Inter::warehouse</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">), </span><span class="identifier">n</span><span class="plain">);</span>
<span class="plain">}</span>
@ -146,18 +116,6 @@
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">ifl</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="constant">inter_t</span><span class="plain"> </span><span class="functiontext">Inter::create_frame_list</span><span class="plain">(</span><span class="reserved">inter_tree</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">) {</span>
<span class="reserved">inter_warehouse</span><span class="plain"> *</span><span class="identifier">warehouse</span><span class="plain"> = </span><span class="functiontext">Inter::warehouse</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">n</span><span class="plain"> = </span><span class="functiontext">Inter::Warehouse::create_resource</span><span class="plain">(</span><span class="identifier">warehouse</span><span class="plain">);</span>
<span class="identifier">warehouse</span><span class="plain">-</span><span class="element">&gt;stored_resources</span><span class="plain">[</span><span class="identifier">n</span><span class="plain">]</span><span class="element">.stored_frame_list</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">inter_frame_list</span><span class="plain">);</span>
<span class="identifier">warehouse</span><span class="plain">-</span><span class="element">&gt;stored_resources</span><span class="plain">[</span><span class="identifier">n</span><span class="plain">]</span><span class="element">.stored_frame_list</span><span class="plain">-</span><span class="element">&gt;spare_storage</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">warehouse</span><span class="plain">-</span><span class="element">&gt;stored_resources</span><span class="plain">[</span><span class="identifier">n</span><span class="plain">]</span><span class="element">.stored_frame_list</span><span class="plain">-</span><span class="element">&gt;storage_used</span><span class="plain"> = 0;</span>
<span class="identifier">warehouse</span><span class="plain">-</span><span class="element">&gt;stored_resources</span><span class="plain">[</span><span class="identifier">n</span><span class="plain">]</span><span class="element">.stored_frame_list</span><span class="plain">-</span><span class="element">&gt;storage_capacity</span><span class="plain"> = 0;</span>
<span class="identifier">warehouse</span><span class="plain">-</span><span class="element">&gt;stored_resources</span><span class="plain">[</span><span class="identifier">n</span><span class="plain">]</span><span class="element">.stored_frame_list</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">warehouse</span><span class="plain">-</span><span class="element">&gt;stored_resources</span><span class="plain">[</span><span class="identifier">n</span><span class="plain">]</span><span class="element">.stored_frame_list</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="reserved">return</span><span class="plain"> </span><span class="identifier">n</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">typedef</span><span class="plain"> </span><span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inter_frame_list</span><span class="plain"> {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">storage_used</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">storage_capacity</span><span class="plain">;</span>
@ -179,31 +137,23 @@
<p class="endnote">The function Inter::create appears nowhere else.</p>
<p class="endnote">The function Inter::warehouse is used in <a href="#SP4">&#167;4</a>, 2/frm (<a href="2-frm.html#SP3">&#167;3</a>), 2/iibf (<a href="2-iibf.html#SP1">&#167;1</a>, <a href="2-iibf.html#SP1_1">&#167;1.1</a>).</p>
<p class="endnote">The function Inter::warehouse is used in <a href="#SP4">&#167;4</a>, 2/sym (<a href="2-sym.html#SP4">&#167;4</a>), 2/frm (<a href="2-frm.html#SP3">&#167;3</a>), 2/bkm (<a href="2-bkm.html#SP2">&#167;2</a>), 2/iibf (<a href="2-iibf.html#SP1">&#167;1</a>, <a href="2-iibf.html#SP1_1">&#167;1.1</a>), 2/idt (<a href="2-idt.html#SP3">&#167;3</a>), 3/dfn (<a href="3-dfn.html#SP4">&#167;4</a>).</p>
<p class="endnote">The function Inter::create_symbols_table is used in 4/tpc3 (<a href="4-tpc3.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::get_global_symbols is used in 2/st (<a href="2-st.html#SP8">&#167;8</a>, <a href="2-st.html#SP9">&#167;9</a>, <a href="2-st.html#SP11">&#167;11</a>), 2/frm (<a href="2-frm.html#SP3">&#167;3</a>), 2/bkm (<a href="2-bkm.html#SP2">&#167;2</a>), 2/iibf (<a href="2-iibf.html#SP1_6">&#167;1.6</a>), 4/tpc3 (<a href="4-tpc3.html#SP2">&#167;2</a>), 5/tic (<a href="5-tic.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::get_global_symbols is used in 2/st (<a href="2-st.html#SP8">&#167;8</a>, <a href="2-st.html#SP9">&#167;9</a>, <a href="2-st.html#SP11">&#167;11</a>), 2/frm (<a href="2-frm.html#SP3">&#167;3</a>), 2/bkm (<a href="2-bkm.html#SP2">&#167;2</a>), 2/iibf (<a href="2-iibf.html#SP1_7">&#167;1.7</a>), 4/tpc3 (<a href="4-tpc3.html#SP2">&#167;2</a>), 5/tic (<a href="5-tic.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::get_symbols_table is used in 2/iibf (<a href="2-iibf.html#SP1_4_3">&#167;1.4.3</a>, <a href="2-iibf.html#SP1_5">&#167;1.5</a>).</p>
<p class="endnote">The function Inter::get_symbols_table is used in 2/iibf (<a href="2-iibf.html#SP1_5_3">&#167;1.5.3</a>, <a href="2-iibf.html#SP1_6">&#167;1.6</a>).</p>
<p class="endnote">The function Inter::get_package is used in 2/pck (<a href="2-pck.html#SP3">&#167;3</a>), 2/iibf (<a href="2-iibf.html#SP1_4_3">&#167;1.4.3</a>).</p>
<p class="endnote">The function Inter::create_package is used in 4/tpc3 (<a href="4-tpc3.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::get_package is used in 2/pck (<a href="2-pck.html#SP3">&#167;3</a>), 2/iibf (<a href="2-iibf.html#SP1_5_3">&#167;1.5.3</a>).</p>
<p class="endnote">The function Inter::create_text is used in 2/sym (<a href="2-sym.html#SP4">&#167;4</a>), 2/idt (<a href="2-idt.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/tmc (<a href="4-tmc.html#SP2">&#167;2</a>), 4/tpc (<a href="4-tpc.html#SP2">&#167;2</a>), 4/tlc (<a href="4-tlc.html#SP2">&#167;2</a>), 4/tac (<a href="4-tac.html#SP2">&#167;2</a>), 4/tcc2 (<a href="4-tcc2.html#SP2">&#167;2</a>), 5/tsc (<a href="5-tsc.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::create_text appears nowhere else.</p>
<p class="endnote">The function Inter::get_text is used in 2/pck (<a href="2-pck.html#SP3">&#167;3</a>), 2/sym (<a href="2-sym.html#SP4">&#167;4</a>), 2/idt (<a href="2-idt.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/tmc (<a href="4-tmc.html#SP2">&#167;2</a>), 4/tpc (<a href="4-tpc.html#SP2">&#167;2</a>), 4/tlc (<a href="4-tlc.html#SP2">&#167;2</a>), 4/tac (<a href="4-tac.html#SP2">&#167;2</a>), 4/tcc2 (<a href="4-tcc2.html#SP2">&#167;2</a>), 5/tsc (<a href="5-tsc.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::create_ref appears nowhere else.</p>
<p class="endnote">The function Inter::get_ref appears nowhere else.</p>
<p class="endnote">The function Inter::set_ref appears nowhere else.</p>
<p class="endnote">The function Inter::new_frame_list is used in 2/iibf (<a href="2-iibf.html#SP1_5_4">&#167;1.5.4</a>).</p>
<p class="endnote">The function Inter::create_frame_list is used in 4/tkc (<a href="4-tkc.html#SP2">&#167;2</a>), 4/tic (<a href="4-tic.html#SP2">&#167;2</a>), 4/tpc4 (<a href="4-tpc4.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::new_frame_list is used in 2/tw (<a href="2-tw.html#SP3">&#167;3</a>), 2/iibf (<a href="2-iibf.html#SP1_4_4">&#167;1.4.4</a>).</p>
<p class="endnote">The structure inter_frame_list is private to this section.</p>

View file

@ -246,27 +246,27 @@
<p class="inwebparagraph"></p>
<p class="endnote">The function Inter::Packages::new is used in 2/iim (<a href="2-iim.html#SP3">&#167;3</a>), 2/iibf (<a href="2-iibf.html#SP1_5_3">&#167;1.5.3</a>).</p>
<p class="endnote">The function Inter::Packages::new is used in 2/tw (<a href="2-tw.html#SP3">&#167;3</a>), 2/iibf (<a href="2-iibf.html#SP1_4_3">&#167;1.4.3</a>).</p>
<p class="endnote">The function Inter::Packages::is_codelike is used in 2/iibf (<a href="2-iibf.html#SP1_1_3_3">&#167;1.1.3.3</a>), 3/dfn (<a href="3-dfn.html#SP5">&#167;5</a>).</p>
<p class="endnote">The function Inter::Packages::make_codelike is used in 2/iibf (<a href="2-iibf.html#SP1_5_3">&#167;1.5.3</a>), 4/tpc3 (<a href="4-tpc3.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Packages::make_codelike is used in 2/iibf (<a href="2-iibf.html#SP1_4_3">&#167;1.4.3</a>), 4/tpc3 (<a href="4-tpc3.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Packages::is_linklike is used in 2/st (<a href="2-st.html#SP10">&#167;10</a>), 4/tsc (<a href="4-tsc.html#SP1">&#167;1</a>).</p>
<p class="endnote">The function Inter::Packages::make_linklike is used in 4/tpc3 (<a href="4-tpc3.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Packages::is_rootlike is used in 2/bkm (<a href="2-bkm.html#SP2">&#167;2</a>), 3/dfn (<a href="3-dfn.html#SP5">&#167;5</a>).</p>
<p class="endnote">The function Inter::Packages::is_rootlike is used in 2/bkm (<a href="2-bkm.html#SP2">&#167;2</a>), 2/iibf (<a href="2-iibf.html#SP1_1_3_3">&#167;1.1.3.3</a>), 3/dfn (<a href="3-dfn.html#SP5">&#167;5</a>).</p>
<p class="endnote">The function Inter::Packages::make_rootlike is used in 2/iim (<a href="2-iim.html#SP3">&#167;3</a>), 2/iibf (<a href="2-iibf.html#SP1_5_3">&#167;1.5.3</a>).</p>
<p class="endnote">The function Inter::Packages::make_rootlike is used in 2/iim (<a href="2-iim.html#SP3">&#167;3</a>), 2/iibf (<a href="2-iibf.html#SP1_4_3">&#167;1.4.3</a>).</p>
<p class="endnote">The function Inter::Packages::parent is used in 2/iim (<a href="2-iim.html#SP4">&#167;4</a>), 2/st (<a href="2-st.html#SP11">&#167;11</a>), 2/iibf (<a href="2-iibf.html#SP1_1_3_3">&#167;1.1.3.3</a>), 3/dfn (<a href="3-dfn.html#SP5">&#167;5</a>).</p>
<p class="endnote">The function Inter::Packages::unmark_all appears nowhere else.</p>
<p class="endnote">The function Inter::Packages::set_scope is used in 2/iim (<a href="2-iim.html#SP3">&#167;3</a>), 2/iibf (<a href="2-iibf.html#SP1_5_3">&#167;1.5.3</a>), 4/tpc3 (<a href="4-tpc3.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Packages::set_scope is used in 2/iim (<a href="2-iim.html#SP3">&#167;3</a>), 2/iibf (<a href="2-iibf.html#SP1_4_3">&#167;1.4.3</a>), 4/tpc3 (<a href="4-tpc3.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Packages::set_name is used in 2/iibf (<a href="2-iibf.html#SP1_5_3">&#167;1.5.3</a>), 4/tpc3 (<a href="4-tpc3.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Packages::set_name is used in 2/iibf (<a href="2-iibf.html#SP1_4_3">&#167;1.4.3</a>), 4/tpc3 (<a href="4-tpc3.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Packages::log is used in 1/im (<a href="1-im.html#SP3_6">&#167;3.6</a>).</p>
@ -284,13 +284,13 @@
<p class="endnote">The function Inter::Packages::search_resources_exhaustively appears nowhere else.</p>
<p class="endnote">The function Inter::Packages::to_PID is used in 2/tw (<a href="2-tw.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Packages::to_PID is used in 2/tw (<a href="2-tw.html#SP3">&#167;3</a>).</p>
<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::from_PID is used in 2/iibf (<a href="2-iibf.html#SP1_6">&#167;1.6</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/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>), 5/tlc (<a href="5-tlc.html#SP2">&#167;2</a>), 5/tlc2 (<a href="5-tlc2.html#SP2">&#167;2</a>), 5/trc (<a href="5-trc.html#SP2">&#167;2</a>), 5/tlc3 (<a href="5-tlc3.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Packages::scope is used in 2/iim (<a href="2-iim.html#SP3">&#167;3</a>), 2/st (<a href="2-st.html#SP4">&#167;4</a>, <a href="2-st.html#SP8">&#167;8</a>, <a href="2-st.html#SP9">&#167;9</a>, <a href="2-st.html#SP10">&#167;10</a>, <a href="2-st.html#SP11">&#167;11</a>), 2/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>), 2/vi (<a href="2-vi.html#SP1">&#167;1</a>), 4/tac (<a href="4-tac.html#SP2">&#167;2</a>), 4/tpc3 (<a href="4-tpc3.html#SP2">&#167;2</a>), 4/tkc (<a href="4-tkc.html#SP2">&#167;2</a>), 4/tcc2 (<a href="4-tcc2.html#SP2">&#167;2</a>), 4/tic (<a href="4-tic.html#SP2">&#167;2</a>), 4/tpc5 (<a href="4-tpc5.html#SP2">&#167;2</a>), 4/tpc6 (<a href="4-tpc6.html#SP2">&#167;2</a>), 5/tlc (<a href="5-tlc.html#SP2">&#167;2</a>), 5/tlc2 (<a href="5-tlc2.html#SP2">&#167;2</a>), 5/trc (<a href="5-trc.html#SP2">&#167;2</a>), 5/tvc (<a href="5-tvc.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Packages::scope is used in 2/iim (<a href="2-iim.html#SP3">&#167;3</a>), 2/st (<a href="2-st.html#SP4">&#167;4</a>, <a href="2-st.html#SP8">&#167;8</a>, <a href="2-st.html#SP9">&#167;9</a>, <a href="2-st.html#SP10">&#167;10</a>, <a href="2-st.html#SP11">&#167;11</a>), 2/bkm (<a href="2-bkm.html#SP2">&#167;2</a>), 2/iibf (<a href="2-iibf.html#SP1_4_3">&#167;1.4.3</a>), 2/vi (<a href="2-vi.html#SP1">&#167;1</a>), 4/tac (<a href="4-tac.html#SP2">&#167;2</a>), 4/tpc3 (<a href="4-tpc3.html#SP2">&#167;2</a>), 4/tkc (<a href="4-tkc.html#SP2">&#167;2</a>), 4/tcc2 (<a href="4-tcc2.html#SP2">&#167;2</a>), 4/tic (<a href="4-tic.html#SP2">&#167;2</a>), 4/tpc5 (<a href="4-tpc5.html#SP2">&#167;2</a>), 4/tpc6 (<a href="4-tpc6.html#SP2">&#167;2</a>), 5/tlc (<a href="5-tlc.html#SP2">&#167;2</a>), 5/tlc2 (<a href="5-tlc2.html#SP2">&#167;2</a>), 5/trc (<a href="5-trc.html#SP2">&#167;2</a>), 5/tvc (<a href="5-tvc.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Packages::scope_of is used in 2/st (<a href="2-st.html#SP7">&#167;7</a>), 4/tmc (<a href="4-tmc.html#SP2">&#167;2</a>), 4/tkc (<a href="4-tkc.html#SP2">&#167;2</a>), 4/tdc (<a href="4-tdc.html#SP2">&#167;2</a>), 4/tvc2 (<a href="4-tvc2.html#SP2">&#167;2</a>), 4/tcc2 (<a href="4-tcc2.html#SP2">&#167;2</a>), 4/trc (<a href="4-trc.html#SP2">&#167;2</a>), 4/tic (<a href="4-tic.html#SP2">&#167;2</a>), 4/tpc5 (<a href="4-tpc5.html#SP2">&#167;2</a>), 5/tvc (<a href="5-tvc.html#SP2">&#167;2</a>), 5/tcc2 (<a href="5-tcc2.html#SP2">&#167;2</a>).</p>

View file

@ -67,7 +67,7 @@
<p class="inwebparagraph"></p>
<p class="endnote">The function Inter::SymbolsTables::new is used in 2/iim (<a href="2-iim.html#SP3">&#167;3</a>), 2/iibf (<a href="2-iibf.html#SP1_5_2">&#167;1.5.2</a>).</p>
<p class="endnote">The function Inter::SymbolsTables::new is used in 2/tw (<a href="2-tw.html#SP3">&#167;3</a>), 2/iibf (<a href="2-iibf.html#SP1_4_2">&#167;1.4.2</a>).</p>
<p class="endnote">The function Inter::SymbolsTables::log is used in 1/im (<a href="1-im.html#SP3_6">&#167;3.6</a>).</p>
@ -206,7 +206,7 @@
<p class="endnote">The function Inter::SymbolsTables::symbol_from_name_creating is used in <a href="#SP5">&#167;5</a>, 2/iitf (<a href="2-iitf.html#SP1">&#167;1</a>).</p>
<p class="endnote">The function Inter::SymbolsTables::symbol_from_name_creating_at_ID is used in 2/iibf (<a href="2-iibf.html#SP1_5_2">&#167;1.5.2</a>).</p>
<p class="endnote">The function Inter::SymbolsTables::symbol_from_name_creating_at_ID is used in 2/iibf (<a href="2-iibf.html#SP1_4_2">&#167;1.4.2</a>).</p>
<p class="endnote">The function Inter::SymbolsTables::symbol_from_name_in_main appears nowhere else.</p>
@ -277,7 +277,7 @@ to access this: one following equations, the other not.
<p class="endnote">The function Inter::SymbolsTables::unequated_symbol_from_id is used in 2/vi (<a href="2-vi.html#SP1">&#167;1</a>).</p>
<p class="endnote">The function Inter::SymbolsTables::symbol_from_id is used in <a href="#SP7">&#167;7</a>, 2/sym (<a href="2-sym.html#SP4">&#167;4</a>), 2/iibf (<a href="2-iibf.html#SP1_5_3">&#167;1.5.3</a>, <a href="2-iibf.html#SP1_6">&#167;1.6</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/tac (<a href="4-tac.html#SP2">&#167;2</a>), 4/tpc3 (<a href="4-tpc3.html#SP2">&#167;2</a>), 4/tkc (<a href="4-tkc.html#SP2">&#167;2</a>), 4/tcc2 (<a href="4-tcc2.html#SP2">&#167;2</a>), 4/tic (<a href="4-tic.html#SP2">&#167;2</a>), 4/tpc5 (<a href="4-tpc5.html#SP2">&#167;2</a>), 4/tpc6 (<a href="4-tpc6.html#SP2">&#167;2</a>), 4/tpc7 (<a href="4-tpc7.html#SP2">&#167;2</a>), 5/trc (<a href="5-trc.html#SP2">&#167;2</a>), 5/tvc (<a href="5-tvc.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::SymbolsTables::symbol_from_id is used in <a href="#SP7">&#167;7</a>, 2/sym (<a href="2-sym.html#SP4">&#167;4</a>), 2/iibf (<a href="2-iibf.html#SP1_4_3">&#167;1.4.3</a>, <a href="2-iibf.html#SP1_5">&#167;1.5</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/tac (<a href="4-tac.html#SP2">&#167;2</a>), 4/tpc3 (<a href="4-tpc3.html#SP2">&#167;2</a>), 4/tkc (<a href="4-tkc.html#SP2">&#167;2</a>), 4/tcc2 (<a href="4-tcc2.html#SP2">&#167;2</a>), 4/tic (<a href="4-tic.html#SP2">&#167;2</a>), 4/tpc5 (<a href="4-tpc5.html#SP2">&#167;2</a>), 4/tpc6 (<a href="4-tpc6.html#SP2">&#167;2</a>), 4/tpc7 (<a href="4-tpc7.html#SP2">&#167;2</a>), 5/trc (<a href="5-trc.html#SP2">&#167;2</a>), 5/tvc (<a href="5-tvc.html#SP2">&#167;2</a>).</p>
<p class="inwebparagraph"><a id="SP7"></a><b>&#167;7. </b>It's convenient to have some abbreviations for common ways to access the above.
</p>
@ -476,7 +476,7 @@ a global symbol in any non-global context.
<p class="inwebparagraph"></p>
<p class="endnote">The function Inter::SymbolsTables::equate is used in <a href="#SP9">&#167;9</a>, 2/iibf (<a href="2-iibf.html#SP1_6">&#167;1.6</a>), 4/tsc (<a href="4-tsc.html#SP1">&#167;1</a>).</p>
<p class="endnote">The function Inter::SymbolsTables::equate is used in <a href="#SP9">&#167;9</a>, 2/iibf (<a href="2-iibf.html#SP1_5">&#167;1.5</a>), 4/tsc (<a href="4-tsc.html#SP1">&#167;1</a>).</p>
<p class="endnote">The function Inter::SymbolsTables::equate_textual is used in 4/tsc (<a href="4-tsc.html#SP1">&#167;1</a>).</p>

View file

@ -323,8 +323,8 @@
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Inter::Symbols::annotate_t</span><span class="plain">(</span><span class="reserved">inter_tree</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">, </span><span class="reserved">inter_symbol</span><span class="plain"> *</span><span class="identifier">symb</span><span class="plain">, </span><span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">annot_ID</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">) {</span>
<span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">n</span><span class="plain"> = </span><span class="functiontext">Inter::create_text</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">);</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Inter::Symbols::annotate_t</span><span class="plain">(</span><span class="reserved">inter_tree</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">, </span><span class="reserved">inter_package</span><span class="plain"> *</span><span class="identifier">owner</span><span class="plain">, </span><span class="reserved">inter_symbol</span><span class="plain"> *</span><span class="identifier">symb</span><span class="plain">, </span><span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">annot_ID</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">) {</span>
<span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">n</span><span class="plain"> = </span><span class="functiontext">Inter::Warehouse::create_text</span><span class="plain">(</span><span class="functiontext">Inter::warehouse</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">), </span><span class="identifier">owner</span><span class="plain">);</span>
<span class="identifier">Str::copy</span><span class="plain">(</span><span class="functiontext">Inter::get_text</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">n</span><span class="plain">), </span><span class="identifier">S</span><span class="plain">);</span>
<span class="reserved">inter_annotation</span><span class="plain"> </span><span class="identifier">IA</span><span class="plain"> = </span><span class="functiontext">Inter::Defn::annotation_from_bytecode</span><span class="plain">(</span><span class="identifier">annot_ID</span><span class="plain">, </span><span class="identifier">n</span><span class="plain">);</span>
<span class="functiontext">Inter::Symbols::annotate</span><span class="plain">(</span><span class="identifier">symb</span><span class="plain">, </span><span class="identifier">IA</span><span class="plain">);</span>
@ -371,7 +371,7 @@
<p class="endnote">The function Inter::Symbols::get_bridge appears nowhere else.</p>
<p class="endnote">The function Inter::Symbols::set_translate is used in 2/iibf (<a href="2-iibf.html#SP1_5_2">&#167;1.5.2</a>), 4/tsc (<a href="4-tsc.html#SP1">&#167;1</a>).</p>
<p class="endnote">The function Inter::Symbols::set_translate is used in 2/iibf (<a href="2-iibf.html#SP1_4_2">&#167;1.4.2</a>), 4/tsc (<a href="4-tsc.html#SP1">&#167;1</a>).</p>
<p class="endnote">The function Inter::Symbols::get_translate appears nowhere else.</p>
@ -383,7 +383,7 @@
<p class="endnote">The function Inter::Symbols::get_append appears nowhere else.</p>
<p class="endnote">The function Inter::Symbols::annotate is used in 2/iibf (<a href="2-iibf.html#SP1_5_2">&#167;1.5.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/tpc4 (<a href="4-tpc4.html#SP2">&#167;2</a>), 5/tlc2 (<a href="5-tlc2.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Symbols::annotate is used in 2/iibf (<a href="2-iibf.html#SP1_4_2">&#167;1.4.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/tpc4 (<a href="4-tpc4.html#SP2">&#167;2</a>), 5/tlc2 (<a href="5-tlc2.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Symbols::annotate_i appears nowhere else.</p>

View file

@ -23,8 +23,28 @@
<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="identifier">MEMORY_MANAGEMENT</span>
<span class="plain">} </span><span class="reserved">inter_warehouse</span><span class="plain">;</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The structure inter_warehouse is accessed in 2/iim, 2/st, 2/frm, 2/iibf and here.</p>
<p class="inwebparagraph"><a id="SP2"></a><b>&#167;2. </b></p>
<pre class="definitions">
<span class="definitionkeyword">enum</span> <span class="constant">NO_IRSRC</span><span class="definitionkeyword"> from </span><span class="constant">0</span>
<span class="definitionkeyword">enum</span> <span class="constant">STRING_IRSRC</span>
<span class="definitionkeyword">enum</span> <span class="constant">SYMBOLS_TABLE_IRSRC</span>
<span class="definitionkeyword">enum</span> <span class="constant">FRAME_LIST_IRSRC</span>
<span class="definitionkeyword">enum</span> <span class="constant">PACKAGE_IRSRC</span>
<span class="definitionkeyword">enum</span> <span class="constant">REF_IRSRC</span>
</pre>
<pre class="display">
<span class="reserved">typedef</span><span class="plain"> </span><span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inter_resource_holder</span><span class="plain"> {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">irsrc</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">owning_package</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">inter_symbols_table</span><span class="plain"> *</span><span class="identifier">stored_symbols_table</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">stored_frame_list</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">stored_package</span><span class="plain">;</span>
@ -45,13 +65,11 @@
<p class="inwebparagraph"></p>
<p class="endnote">The structure inter_warehouse is accessed in 2/iim, 2/st, 2/frm, 2/iibf and here.</p>
<p class="endnote">The structure inter_resource_holder is accessed in 2/iim, 2/iibf and here.</p>
<p class="endnote">The structure inter_resource_holder is accessed in 2/iim, 2/st, 2/pck, 2/iibf and here.</p>
<p class="endnote">The structure inter_warehouse_room is accessed in 2/iim, 2/st, 2/frm, 2/iibf, 4/tac, 4/tic, 4/tpc5, 4/tpc6 and here.</p>
<p class="inwebparagraph"><a id="SP2"></a><b>&#167;2. </b></p>
<p class="inwebparagraph"><a id="SP3"></a><b>&#167;3. </b></p>
<pre class="display">
@ -139,6 +157,8 @@
<span class="identifier">warehouse</span><span class="plain">-</span><span class="element">&gt;capacity</span><span class="plain"> = </span><span class="identifier">new_size</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">warehouse</span><span class="plain">-</span><span class="element">&gt;size</span><span class="plain"> ++;</span>
<span class="identifier">warehouse</span><span class="plain">-</span><span class="element">&gt;stored_resources</span><span class="plain">[</span><span class="identifier">n</span><span class="plain">]</span><span class="element">.irsrc</span><span class="plain"> = </span><span class="constant">NO_IRSRC</span><span class="plain">;</span>
<span class="identifier">warehouse</span><span class="plain">-</span><span class="element">&gt;stored_resources</span><span class="plain">[</span><span class="identifier">n</span><span class="plain">]</span><span class="element">.owning_package</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">warehouse</span><span class="plain">-</span><span class="element">&gt;stored_resources</span><span class="plain">[</span><span class="identifier">n</span><span class="plain">]</span><span class="element">.stored_symbols_table</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">warehouse</span><span class="plain">-</span><span class="element">&gt;stored_resources</span><span class="plain">[</span><span class="identifier">n</span><span class="plain">]</span><span class="element">.stored_ref</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">warehouse</span><span class="plain">-</span><span class="element">&gt;stored_resources</span><span class="plain">[</span><span class="identifier">n</span><span class="plain">]</span><span class="element">.stored_package</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
@ -195,28 +215,78 @@
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">warehouse</span><span class="plain">-</span><span class="element">&gt;stored_resources</span><span class="plain">[</span><span class="identifier">n</span><span class="plain">]</span><span class="element">.stored_symbols_table</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="constant">inter_t</span><span class="plain"> </span><span class="functiontext">Inter::Warehouse::create_symbols_table</span><span class="plain">(</span><span class="reserved">inter_warehouse</span><span class="plain"> *</span><span class="identifier">warehouse</span><span class="plain">) {</span>
<span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">n</span><span class="plain"> = </span><span class="functiontext">Inter::Warehouse::create_resource</span><span class="plain">(</span><span class="identifier">warehouse</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">warehouse</span><span class="plain">-</span><span class="element">&gt;stored_resources</span><span class="plain">[</span><span class="identifier">n</span><span class="plain">]</span><span class="element">.stored_symbols_table</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
<span class="identifier">warehouse</span><span class="plain">-</span><span class="element">&gt;stored_resources</span><span class="plain">[</span><span class="identifier">n</span><span class="plain">]</span><span class="element">.irsrc</span><span class="plain"> = </span><span class="constant">SYMBOLS_TABLE_IRSRC</span><span class="plain">;</span>
<span class="identifier">warehouse</span><span class="plain">-</span><span class="element">&gt;stored_resources</span><span class="plain">[</span><span class="identifier">n</span><span class="plain">]</span><span class="element">.stored_symbols_table</span><span class="plain"> = </span><span class="functiontext">Inter::SymbolsTables::new</span><span class="plain">();</span>
<span class="identifier">warehouse</span><span class="plain">-</span><span class="element">&gt;stored_resources</span><span class="plain">[</span><span class="identifier">n</span><span class="plain">]</span><span class="element">.stored_symbols_table</span><span class="plain">-</span><span class="element">&gt;n_index</span><span class="plain"> = (</span><span class="reserved">int</span><span class="plain">) </span><span class="identifier">n</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">n</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Inter::Warehouse::attribute_resource</span><span class="plain">(</span><span class="reserved">inter_warehouse</span><span class="plain"> *</span><span class="identifier">warehouse</span><span class="plain">, </span><span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">n</span><span class="plain">, </span><span class="reserved">inter_package</span><span class="plain"> *</span><span class="identifier">owner</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">n</span><span class="plain"> &gt;= (</span><span class="constant">inter_t</span><span class="plain">) </span><span class="identifier">warehouse</span><span class="plain">-</span><span class="element">&gt;size</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"out of range"</span><span class="plain">);</span>
<span class="identifier">warehouse</span><span class="plain">-</span><span class="element">&gt;stored_resources</span><span class="plain">[</span><span class="identifier">n</span><span class="plain">]</span><span class="element">.owning_package</span><span class="plain"> = </span><span class="identifier">owner</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="functiontext">Inter::Warehouse::get_text</span><span class="plain">(</span><span class="reserved">inter_warehouse</span><span class="plain"> *</span><span class="identifier">warehouse</span><span class="plain">, </span><span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">n</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">n</span><span class="plain"> &gt;= (</span><span class="constant">inter_t</span><span class="plain">) </span><span class="identifier">warehouse</span><span class="plain">-</span><span class="element">&gt;size</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">warehouse</span><span class="plain">-</span><span class="element">&gt;stored_resources</span><span class="plain">[</span><span class="identifier">n</span><span class="plain">]</span><span class="element">.stored_text_stream</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="constant">inter_t</span><span class="plain"> </span><span class="functiontext">Inter::Warehouse::create_text</span><span class="plain">(</span><span class="reserved">inter_warehouse</span><span class="plain"> *</span><span class="identifier">warehouse</span><span class="plain">, </span><span class="reserved">inter_package</span><span class="plain"> *</span><span class="identifier">owner</span><span class="plain">) {</span>
<span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">n</span><span class="plain"> = </span><span class="functiontext">Inter::Warehouse::create_resource</span><span class="plain">(</span><span class="identifier">warehouse</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">warehouse</span><span class="plain">-</span><span class="element">&gt;stored_resources</span><span class="plain">[</span><span class="identifier">n</span><span class="plain">]</span><span class="element">.stored_text_stream</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
<span class="identifier">warehouse</span><span class="plain">-</span><span class="element">&gt;stored_resources</span><span class="plain">[</span><span class="identifier">n</span><span class="plain">]</span><span class="element">.irsrc</span><span class="plain"> = </span><span class="constant">STRING_IRSRC</span><span class="plain">;</span>
<span class="identifier">warehouse</span><span class="plain">-</span><span class="element">&gt;stored_resources</span><span class="plain">[</span><span class="identifier">n</span><span class="plain">]</span><span class="element">.stored_text_stream</span><span class="plain"> = </span><span class="identifier">Str::new</span><span class="plain">();</span>
<span class="identifier">warehouse</span><span class="plain">-</span><span class="element">&gt;stored_resources</span><span class="plain">[</span><span class="identifier">n</span><span class="plain">]</span><span class="element">.owning_package</span><span class="plain"> = </span><span class="identifier">owner</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">n</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">inter_package</span><span class="plain"> *</span><span class="functiontext">Inter::Warehouse::get_package</span><span class="plain">(</span><span class="reserved">inter_warehouse</span><span class="plain"> *</span><span class="identifier">warehouse</span><span class="plain">, </span><span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">n</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">n</span><span class="plain"> &gt;= (</span><span class="constant">inter_t</span><span class="plain">) </span><span class="identifier">warehouse</span><span class="plain">-</span><span class="element">&gt;size</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">if</span><span class="plain"> (</span><span class="identifier">n</span><span class="plain"> == 0) </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">warehouse</span><span class="plain">-</span><span class="element">&gt;stored_resources</span><span class="plain">[</span><span class="identifier">n</span><span class="plain">]</span><span class="element">.stored_package</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="constant">inter_t</span><span class="plain"> </span><span class="functiontext">Inter::Warehouse::create_package</span><span class="plain">(</span><span class="reserved">inter_warehouse</span><span class="plain"> *</span><span class="identifier">warehouse</span><span class="plain">, </span><span class="reserved">inter_tree</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">) {</span>
<span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">n</span><span class="plain"> = </span><span class="functiontext">Inter::Warehouse::create_resource</span><span class="plain">(</span><span class="identifier">warehouse</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">warehouse</span><span class="plain">-</span><span class="element">&gt;stored_resources</span><span class="plain">[</span><span class="identifier">n</span><span class="plain">]</span><span class="element">.stored_package</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
<span class="identifier">warehouse</span><span class="plain">-</span><span class="element">&gt;stored_resources</span><span class="plain">[</span><span class="identifier">n</span><span class="plain">]</span><span class="element">.irsrc</span><span class="plain"> = </span><span class="constant">PACKAGE_IRSRC</span><span class="plain">;</span>
<span class="identifier">warehouse</span><span class="plain">-</span><span class="element">&gt;stored_resources</span><span class="plain">[</span><span class="identifier">n</span><span class="plain">]</span><span class="element">.stored_package</span><span class="plain"> = </span><span class="functiontext">Inter::Packages::new</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">n</span><span class="plain">);</span>
<span class="identifier">warehouse</span><span class="plain">-</span><span class="element">&gt;stored_resources</span><span class="plain">[</span><span class="identifier">n</span><span class="plain">]</span><span class="element">.owning_package</span><span class="plain"> =</span>
<span class="identifier">warehouse</span><span class="plain">-</span><span class="element">&gt;stored_resources</span><span class="plain">[</span><span class="identifier">n</span><span class="plain">]</span><span class="element">.stored_package</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">n</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> *</span><span class="functiontext">Inter::Warehouse::get_ref</span><span class="plain">(</span><span class="reserved">inter_warehouse</span><span class="plain"> *</span><span class="identifier">warehouse</span><span class="plain">, </span><span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">n</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">n</span><span class="plain"> &gt;= (</span><span class="constant">inter_t</span><span class="plain">) </span><span class="identifier">warehouse</span><span class="plain">-</span><span class="element">&gt;size</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">warehouse</span><span class="plain">-</span><span class="element">&gt;stored_resources</span><span class="plain">[</span><span class="identifier">n</span><span class="plain">]</span><span class="element">.stored_ref</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="constant">inter_t</span><span class="plain"> </span><span class="functiontext">Inter::Warehouse::create_ref</span><span class="plain">(</span><span class="reserved">inter_warehouse</span><span class="plain"> *</span><span class="identifier">warehouse</span><span class="plain">) {</span>
<span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">n</span><span class="plain"> = </span><span class="functiontext">Inter::Warehouse::create_resource</span><span class="plain">(</span><span class="identifier">warehouse</span><span class="plain">);</span>
<span class="identifier">warehouse</span><span class="plain">-</span><span class="element">&gt;stored_resources</span><span class="plain">[</span><span class="identifier">n</span><span class="plain">]</span><span class="element">.irsrc</span><span class="plain"> = </span><span class="constant">REF_IRSRC</span><span class="plain">;</span>
<span class="identifier">warehouse</span><span class="plain">-</span><span class="element">&gt;stored_resources</span><span class="plain">[</span><span class="identifier">n</span><span class="plain">]</span><span class="element">.stored_ref</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">n</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">inter_frame_list</span><span class="plain"> *</span><span class="functiontext">Inter::Warehouse::get_frame_list</span><span class="plain">(</span><span class="reserved">inter_warehouse</span><span class="plain"> *</span><span class="identifier">warehouse</span><span class="plain">, </span><span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">N</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">warehouse</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">int</span><span class="plain"> </span><span class="identifier">n</span><span class="plain"> = (</span><span class="reserved">int</span><span class="plain">) </span><span class="identifier">N</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">n</span><span class="plain"> &gt;= </span><span class="identifier">warehouse</span><span class="plain">-</span><span class="element">&gt;size</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">warehouse</span><span class="plain">-</span><span class="element">&gt;stored_resources</span><span class="plain">[</span><span class="identifier">n</span><span class="plain">]</span><span class="element">.stored_frame_list</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="constant">inter_t</span><span class="plain"> </span><span class="functiontext">Inter::Warehouse::create_frame_list</span><span class="plain">(</span><span class="reserved">inter_warehouse</span><span class="plain"> *</span><span class="identifier">warehouse</span><span class="plain">) {</span>
<span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">n</span><span class="plain"> = </span><span class="functiontext">Inter::Warehouse::create_resource</span><span class="plain">(</span><span class="identifier">warehouse</span><span class="plain">);</span>
<span class="identifier">warehouse</span><span class="plain">-</span><span class="element">&gt;stored_resources</span><span class="plain">[</span><span class="identifier">n</span><span class="plain">]</span><span class="element">.irsrc</span><span class="plain"> = </span><span class="constant">FRAME_LIST_IRSRC</span><span class="plain">;</span>
<span class="identifier">warehouse</span><span class="plain">-</span><span class="element">&gt;stored_resources</span><span class="plain">[</span><span class="identifier">n</span><span class="plain">]</span><span class="element">.stored_frame_list</span><span class="plain"> = </span><span class="functiontext">Inter::new_frame_list</span><span class="plain">();</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">n</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
@ -229,9 +299,9 @@
<p class="endnote">The function Inter::Warehouse::enlarge_size is used in 2/frm (<a href="2-frm.html#SP4">&#167;4</a>).</p>
<p class="endnote">The function Inter::Warehouse::find_room is used in 2/frm (<a href="2-frm.html#SP3">&#167;3</a>), 2/iibf (<a href="2-iibf.html#SP1_7">&#167;1.7</a>).</p>
<p class="endnote">The function Inter::Warehouse::find_room is used in 2/frm (<a href="2-frm.html#SP3">&#167;3</a>), 2/iibf (<a href="2-iibf.html#SP1_6">&#167;1.6</a>).</p>
<p class="endnote">The function Inter::Warehouse::create_resource is used in 2/iim (<a href="2-iim.html#SP3">&#167;3</a>), 2/iibf (<a href="2-iibf.html#SP1_5">&#167;1.5</a>).</p>
<p class="endnote">The function Inter::Warehouse::create_resource is used in 2/iibf (<a href="2-iibf.html#SP1_4">&#167;1.4</a>).</p>
<p class="endnote">The function Inter::Warehouse::store_origin appears nowhere else.</p>
@ -241,14 +311,26 @@
<p class="endnote">The function Inter::Warehouse::get_symbols_table is used in 2/iim (<a href="2-iim.html#SP3">&#167;3</a>), 2/frm (<a href="2-frm.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Warehouse::create_symbols_table is used in 2/iim (<a href="2-iim.html#SP3">&#167;3</a>), 4/tpc3 (<a href="4-tpc3.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Warehouse::attribute_resource is used in 2/iim (<a href="2-iim.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/tic (<a href="4-tic.html#SP2">&#167;2</a>), 4/tpc4 (<a href="4-tpc4.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Warehouse::get_text is used in 2/iim (<a href="2-iim.html#SP3">&#167;3</a>), 2/frm (<a href="2-frm.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Warehouse::create_text is used in 2/iim (<a href="2-iim.html#SP3">&#167;3</a>), 2/sym (<a href="2-sym.html#SP4">&#167;4</a>), 2/idt (<a href="2-idt.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/tmc (<a href="4-tmc.html#SP2">&#167;2</a>), 4/tpc (<a href="4-tpc.html#SP2">&#167;2</a>), 4/tlc (<a href="4-tlc.html#SP2">&#167;2</a>), 4/tac (<a href="4-tac.html#SP2">&#167;2</a>), 4/tcc2 (<a href="4-tcc2.html#SP2">&#167;2</a>), 5/tsc (<a href="5-tsc.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Warehouse::get_package is used in 2/iim (<a href="2-iim.html#SP3">&#167;3</a>), 2/frm (<a href="2-frm.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Warehouse::create_package is used in 2/iim (<a href="2-iim.html#SP3">&#167;3</a>), 4/tpc3 (<a href="4-tpc3.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Warehouse::get_ref is used in 2/iim (<a href="2-iim.html#SP3">&#167;3</a>), 2/frm (<a href="2-frm.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Warehouse::create_ref appears nowhere else.</p>
<p class="endnote">The function Inter::Warehouse::get_frame_list is used in 2/iim (<a href="2-iim.html#SP4">&#167;4</a>), 2/frm (<a href="2-frm.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Warehouse::create_frame_list is used in 4/tkc (<a href="4-tkc.html#SP2">&#167;2</a>), 4/tic (<a href="4-tic.html#SP2">&#167;2</a>), 4/tpc4 (<a href="4-tpc4.html#SP2">&#167;2</a>).</p>
<hr class="tocbar">
<ul class="toc"><li><a href="2-iim.html">Back to 'Inter in Memory'</a></li><li><a href="2-st.html">Continue with 'Symbols Tables'</a></li></ul><hr class="tocbar">
<!--End of weave-->

View file

@ -104,6 +104,7 @@
<pre class="definitions">
<span class="definitionkeyword">enum</span> <span class="constant">CONSTRUCT_READ_MTID</span>
<span class="definitionkeyword">enum</span> <span class="constant">CONSTRUCT_TRANSPOSE_MTID</span>
<span class="definitionkeyword">enum</span> <span class="constant">CONSTRUCT_VERIFY_MTID</span>
<span class="definitionkeyword">enum</span> <span class="constant">CONSTRUCT_WRITE_MTID</span>
<span class="definitionkeyword">enum</span> <span class="constant">VERIFY_INTER_CHILDREN_MTID</span>
@ -111,6 +112,7 @@
<pre class="display">
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">CONSTRUCT_READ_MTID</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_bookmark</span><span class="plain"> *, </span><span class="reserved">inter_line_parse</span><span class="plain"> *, </span><span class="reserved">inter_error_location</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">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">CONSTRUCT_TRANSPOSE_MTID</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="constant">inter_t</span><span class="plain"> *</span><span class="identifier">grid</span><span class="plain">, </span><span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">max</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">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">CONSTRUCT_VERIFY_MTID</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_package</span><span class="plain"> *</span><span class="identifier">owner</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">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">CONSTRUCT_WRITE_MTID</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">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</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="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">VERIFY_INTER_CHILDREN_MTID</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>
@ -202,7 +204,8 @@
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">parsed_text</span><span class="plain">);</span>
<span class="reserved">inter_error_message</span><span class="plain"> *</span><span class="identifier">EP</span><span class="plain"> =</span>
<span class="functiontext">Inter::Constant::parse_text</span><span class="plain">(</span><span class="identifier">parsed_text</span><span class="plain">, </span><span class="identifier">keyword</span><span class="plain">, </span><span class="identifier">P</span><span class="element">.index</span><span class="plain">+2, </span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">keyword</span><span class="plain">)-2, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="identifier">val</span><span class="plain"> = </span><span class="functiontext">Inter::create_text</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">);</span>
<span class="reserved">inter_warehouse</span><span class="plain"> *</span><span class="identifier">warehouse</span><span class="plain"> = </span><span class="functiontext">Inter::warehouse</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">);</span>
<span class="identifier">val</span><span class="plain"> = </span><span class="functiontext">Inter::Warehouse::create_text</span><span class="plain">(</span><span class="identifier">warehouse</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">-</span><span class="element">&gt;root_package</span><span class="plain">);</span>
<span class="identifier">Str::copy</span><span class="plain">(</span><span class="functiontext">Inter::get_text</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">val</span><span class="plain">), </span><span class="identifier">parsed_text</span><span class="plain">);</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">parsed_text</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">EP</span><span class="plain">) *</span><span class="identifier">E</span><span class="plain"> = </span><span class="identifier">EP</span><span class="plain">;</span>
@ -273,9 +276,9 @@
<p class="endnote">The function Inter::Defn::read_annotation is used in <a href="#SP5">&#167;5</a>.</p>
<p class="endnote">The function Inter::Defn::annotation_from_bytecode is used in 2/sym (<a href="2-sym.html#SP4">&#167;4</a>), 2/iibf (<a href="2-iibf.html#SP1_5_2">&#167;1.5.2</a>).</p>
<p class="endnote">The function Inter::Defn::annotation_from_bytecode is used in 2/sym (<a href="2-sym.html#SP4">&#167;4</a>), 2/iibf (<a href="2-iibf.html#SP1_4_2">&#167;1.4.2</a>).</p>
<p class="endnote">The function Inter::Defn::is_invalid is used in 2/iibf (<a href="2-iibf.html#SP1_5_2">&#167;1.5.2</a>).</p>
<p class="endnote">The function Inter::Defn::is_invalid is used in 2/iibf (<a href="2-iibf.html#SP1_4_2">&#167;1.4.2</a>).</p>
<p class="endnote">The function Inter::Defn::annotation_to_bytecode is used in 2/iibf (<a href="2-iibf.html#SP1_1_3_2">&#167;1.1.3.2</a>).</p>
@ -300,6 +303,14 @@
<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::transpose_construct</span><span class="plain">(</span><span class="reserved">inter_package</span><span class="plain"> *</span><span class="identifier">owner</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="constant">inter_t</span><span class="plain"> *</span><span class="identifier">grid</span><span class="plain">, </span><span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">max</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="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">IC</span><span class="plain">, </span><span class="constant">CONSTRUCT_TRANSPOSE_MTID</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">grid</span><span class="plain">, </span><span class="identifier">max</span><span class="plain">, &amp;</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::get_construct</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">to</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">P</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="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">"invalid frame"</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
@ -360,7 +371,7 @@
<span class="identifier">literal</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">c</span><span class="plain"> == </span><span class="character">'\</span><span class="plain">\</span><span class="character">'</span><span class="plain">) </span><span class="identifier">literal</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">c</span><span class="plain"> == </span><span class="character">'#'</span><span class="plain">) &amp;&amp; ((</span><span class="identifier">P</span><span class="element">.index</span><span class="plain"> == 0) || (</span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">ilp</span><span class="element">.line</span><span class="plain">, </span><span class="identifier">P</span><span class="element">.index</span><span class="plain">-1) != </span><span class="character">'#'</span><span class="plain">)) &amp;&amp; (</span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">ilp</span><span class="element">.line</span><span class="plain">, </span><span class="identifier">P</span><span class="element">.index</span><span class="plain">+1) != </span><span class="character">'#'</span><span class="plain">) &amp;&amp; (</span><span class="identifier">quoted</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">)) {</span>
<span class="identifier">ilp</span><span class="element">.terminal_comment</span><span class="plain"> = </span><span class="functiontext">Inter::create_text</span><span class="plain">(</span><span class="functiontext">Inter::Bookmarks::tree</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">));</span>
<span class="identifier">ilp</span><span class="element">.terminal_comment</span><span class="plain"> = </span><span class="functiontext">Inter::Warehouse::create_text</span><span class="plain">(</span><span class="functiontext">Inter::Bookmarks::warehouse</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">), </span><span class="functiontext">Inter::Bookmarks::package</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">));</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">at</span><span class="plain"> = </span><span class="identifier">Str::index</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">Str::forward</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">);</span>
<span class="reserved">while</span><span class="plain"> (</span><span class="identifier">Str::get</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">) == </span><span class="character">' '</span><span class="plain">) </span><span class="identifier">P</span><span class="plain"> = </span><span class="identifier">Str::forward</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">);</span>
@ -458,7 +469,9 @@
<p class="inwebparagraph"></p>
<p class="endnote">The function Inter::Defn::verify_construct is used in 2/iibf (<a href="2-iibf.html#SP1_7">&#167;1.7</a>), 4/tnc (<a href="4-tnc.html#SP1">&#167;1</a>), 4/tcc (<a href="4-tcc.html#SP1">&#167;1</a>), 4/tmc (<a href="4-tmc.html#SP2">&#167;2</a>), 4/tvc (<a href="4-tvc.html#SP2">&#167;2</a>), 4/tpc (<a href="4-tpc.html#SP2">&#167;2</a>), 4/tlc (<a href="4-tlc.html#SP2">&#167;2</a>), 4/tac (<a href="4-tac.html#SP2">&#167;2</a>), 4/tpc2 (<a href="4-tpc2.html#SP2">&#167;2</a>), 4/tpc3 (<a href="4-tpc3.html#SP2">&#167;2</a>), 4/tkc (<a href="4-tkc.html#SP2">&#167;2</a>), 4/tdc (<a href="4-tdc.html#SP2">&#167;2</a>), 4/tvc2 (<a href="4-tvc2.html#SP2">&#167;2</a>), 4/tcc2 (<a href="4-tcc2.html#SP2">&#167;2</a>), 4/trc (<a href="4-trc.html#SP2">&#167;2</a>), 4/tic (<a href="4-tic.html#SP2">&#167;2</a>), 4/tpc4 (<a href="4-tpc4.html#SP2">&#167;2</a>), 4/tpc5 (<a href="4-tpc5.html#SP2">&#167;2</a>), 4/tpc6 (<a href="4-tpc6.html#SP2">&#167;2</a>), 4/tpc7 (<a href="4-tpc7.html#SP2">&#167;2</a>), 5/tlc (<a href="5-tlc.html#SP2">&#167;2</a>), 5/tlc2 (<a href="5-tlc2.html#SP2">&#167;2</a>), 5/tic (<a href="5-tic.html#SP2">&#167;2</a>), 5/trc (<a href="5-trc.html#SP2">&#167;2</a>), 5/tvc (<a href="5-tvc.html#SP2">&#167;2</a>), 5/tlc3 (<a href="5-tlc3.html#SP2">&#167;2</a>), 5/tcc (<a href="5-tcc.html#SP2">&#167;2</a>), 5/tec (<a href="5-tec.html#SP2">&#167;2</a>), 5/trc2 (<a href="5-trc2.html#SP2">&#167;2</a>), 5/tcc2 (<a href="5-tcc2.html#SP2">&#167;2</a>), 5/tsc (<a href="5-tsc.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Defn::verify_construct is used in 2/iibf (<a href="2-iibf.html#SP1_6">&#167;1.6</a>), 4/tnc (<a href="4-tnc.html#SP1">&#167;1</a>), 4/tcc (<a href="4-tcc.html#SP1">&#167;1</a>), 4/tmc (<a href="4-tmc.html#SP2">&#167;2</a>), 4/tvc (<a href="4-tvc.html#SP2">&#167;2</a>), 4/tpc (<a href="4-tpc.html#SP2">&#167;2</a>), 4/tlc (<a href="4-tlc.html#SP2">&#167;2</a>), 4/tac (<a href="4-tac.html#SP2">&#167;2</a>), 4/tpc2 (<a href="4-tpc2.html#SP2">&#167;2</a>), 4/tpc3 (<a href="4-tpc3.html#SP2">&#167;2</a>), 4/tkc (<a href="4-tkc.html#SP2">&#167;2</a>), 4/tdc (<a href="4-tdc.html#SP2">&#167;2</a>), 4/tvc2 (<a href="4-tvc2.html#SP2">&#167;2</a>), 4/tcc2 (<a href="4-tcc2.html#SP2">&#167;2</a>), 4/trc (<a href="4-trc.html#SP2">&#167;2</a>), 4/tic (<a href="4-tic.html#SP2">&#167;2</a>), 4/tpc4 (<a href="4-tpc4.html#SP2">&#167;2</a>), 4/tpc5 (<a href="4-tpc5.html#SP2">&#167;2</a>), 4/tpc6 (<a href="4-tpc6.html#SP2">&#167;2</a>), 4/tpc7 (<a href="4-tpc7.html#SP2">&#167;2</a>), 5/tlc (<a href="5-tlc.html#SP2">&#167;2</a>), 5/tlc2 (<a href="5-tlc2.html#SP2">&#167;2</a>), 5/tic (<a href="5-tic.html#SP2">&#167;2</a>), 5/trc (<a href="5-trc.html#SP2">&#167;2</a>), 5/tvc (<a href="5-tvc.html#SP2">&#167;2</a>), 5/tlc3 (<a href="5-tlc3.html#SP2">&#167;2</a>), 5/tcc (<a href="5-tcc.html#SP2">&#167;2</a>), 5/tec (<a href="5-tec.html#SP2">&#167;2</a>), 5/trc2 (<a href="5-trc2.html#SP2">&#167;2</a>), 5/tcc2 (<a href="5-tcc2.html#SP2">&#167;2</a>), 5/tsc (<a href="5-tsc.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Defn::transpose_construct is used in 2/iibf (<a href="2-iibf.html#SP1_6">&#167;1.6</a>).</p>
<p class="endnote">The function Inter::Defn::get_construct appears nowhere else.</p>

View file

@ -59,7 +59,7 @@
<span class="reserved">return</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">ID</span><span class="plain"> = </span><span class="functiontext">Inter::create_text</span><span class="plain">(</span><span class="functiontext">Inter::Bookmarks::tree</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">));</span>
<span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">ID</span><span class="plain"> = </span><span class="functiontext">Inter::Warehouse::create_text</span><span class="plain">(</span><span class="functiontext">Inter::Bookmarks::warehouse</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">), </span><span class="functiontext">Inter::Bookmarks::package</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">));</span>
<span class="plain">*</span><span class="identifier">E</span><span class="plain"> = </span><span class="functiontext">Inter::Constant::parse_text</span><span class="plain">(</span><span class="functiontext">Inter::get_text</span><span class="plain">(</span><span class="functiontext">Inter::Bookmarks::tree</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">), </span><span class="identifier">ID</span><span class="plain">), </span><span class="identifier">ilp</span><span class="plain">-</span><span class="element">&gt;mr</span><span class="plain">.</span><span class="identifier">exp</span><span class="plain">[1], 0, </span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">ilp</span><span class="plain">-</span><span class="element">&gt;mr</span><span class="plain">.</span><span class="identifier">exp</span><span class="plain">[1]), </span><span class="identifier">eloc</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>

View file

@ -184,7 +184,7 @@
<span class="plain">*</span><span class="identifier">E</span><span class="plain"> = </span><span class="functiontext">Inter::Constant::parse_text</span><span class="plain">(</span><span class="identifier">parsed_text</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">, 1, </span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">)-2, </span><span class="identifier">eloc</span><span class="plain">);</span>
<span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">ID</span><span class="plain"> = 0;</span>
<span class="reserved">if</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="identifier">ID</span><span class="plain"> = </span><span class="functiontext">Inter::create_text</span><span class="plain">(</span><span class="functiontext">Inter::Bookmarks::tree</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">));</span>
<span class="identifier">ID</span><span class="plain"> = </span><span class="functiontext">Inter::Warehouse::create_text</span><span class="plain">(</span><span class="functiontext">Inter::Bookmarks::warehouse</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">), </span><span class="functiontext">Inter::Bookmarks::package</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">));</span>
<span class="identifier">Str::copy</span><span class="plain">(</span><span class="functiontext">Inter::get_text</span><span class="plain">(</span><span class="functiontext">Inter::Bookmarks::tree</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">), </span><span class="identifier">ID</span><span class="plain">), </span><span class="identifier">parsed_text</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">parsed_text</span><span class="plain">);</span>

View file

@ -25,6 +25,7 @@
<span class="identifier">L</span><span class="string">"instance (%i+) (%c+)"</span><span class="plain">,</span>
<span class="identifier">I</span><span class="string">"instance"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"instances"</span><span class="plain">);</span>
<span class="identifier">METHOD_ADD</span><span class="plain">(</span><span class="identifier">IC</span><span class="plain">, </span><span class="constant">CONSTRUCT_READ_MTID</span><span class="plain">, </span><span class="functiontext">Inter::Instance::read</span><span class="plain">);</span>
<span class="identifier">METHOD_ADD</span><span class="plain">(</span><span class="identifier">IC</span><span class="plain">, </span><span class="constant">CONSTRUCT_TRANSPOSE_MTID</span><span class="plain">, </span><span class="functiontext">Inter::Instance::transpose</span><span class="plain">);</span>
<span class="identifier">METHOD_ADD</span><span class="plain">(</span><span class="identifier">IC</span><span class="plain">, </span><span class="constant">CONSTRUCT_VERIFY_MTID</span><span class="plain">, </span><span class="functiontext">Inter::Instance::verify</span><span class="plain">);</span>
<span class="identifier">METHOD_ADD</span><span class="plain">(</span><span class="identifier">IC</span><span class="plain">, </span><span class="constant">CONSTRUCT_WRITE_MTID</span><span class="plain">, </span><span class="functiontext">Inter::Instance::write</span><span class="plain">);</span>
<span class="plain">}</span>
@ -77,13 +78,23 @@
<span class="plain">}</span>
<span class="reserved">inter_error_message</span><span class="plain"> *</span><span class="functiontext">Inter::Instance::new</span><span class="plain">(</span><span class="reserved">inter_bookmark</span><span class="plain"> *</span><span class="identifier">IBM</span><span class="plain">, </span><span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">SID</span><span class="plain">, </span><span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">KID</span><span class="plain">, </span><span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">V1</span><span class="plain">, </span><span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">V2</span><span class="plain">, </span><span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">level</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="reserved">inter_frame</span><span class="plain"> </span><span class="identifier">P</span><span class="plain"> = </span><span class="functiontext">Inter::Frame::fill_6</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="constant">INSTANCE_IST</span><span class="plain">, </span><span class="identifier">SID</span><span class="plain">, </span><span class="identifier">KID</span><span class="plain">, </span><span class="identifier">V1</span><span class="plain">, </span><span class="identifier">V2</span><span class="plain">, </span><span class="functiontext">Inter::create_frame_list</span><span class="plain">(</span><span class="functiontext">Inter::Bookmarks::tree</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">)), </span><span class="functiontext">Inter::create_frame_list</span><span class="plain">(</span><span class="functiontext">Inter::Bookmarks::tree</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">)), </span><span class="identifier">eloc</span><span class="plain">, </span><span class="identifier">level</span><span class="plain">);</span>
<span class="reserved">inter_warehouse</span><span class="plain"> *</span><span class="identifier">warehouse</span><span class="plain"> = </span><span class="functiontext">Inter::Bookmarks::warehouse</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">);</span>
<span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">L1</span><span class="plain"> = </span><span class="functiontext">Inter::Warehouse::create_frame_list</span><span class="plain">(</span><span class="identifier">warehouse</span><span class="plain">);</span>
<span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">L2</span><span class="plain"> = </span><span class="functiontext">Inter::Warehouse::create_frame_list</span><span class="plain">(</span><span class="identifier">warehouse</span><span class="plain">);</span>
<span class="functiontext">Inter::Warehouse::attribute_resource</span><span class="plain">(</span><span class="identifier">warehouse</span><span class="plain">, </span><span class="identifier">L1</span><span class="plain">, </span><span class="functiontext">Inter::Bookmarks::package</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">));</span>
<span class="functiontext">Inter::Warehouse::attribute_resource</span><span class="plain">(</span><span class="identifier">warehouse</span><span class="plain">, </span><span class="identifier">L2</span><span class="plain">, </span><span class="functiontext">Inter::Bookmarks::package</span><span class="plain">(</span><span class="identifier">IBM</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::fill_6</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="constant">INSTANCE_IST</span><span class="plain">, </span><span class="identifier">SID</span><span class="plain">, </span><span class="identifier">KID</span><span class="plain">, </span><span class="identifier">V1</span><span class="plain">, </span><span class="identifier">V2</span><span class="plain">, </span><span class="identifier">L1</span><span class="plain">, </span><span class="identifier">L2</span><span class="plain">, </span><span class="identifier">eloc</span><span class="plain">, </span><span class="identifier">level</span><span class="plain">);</span>
<span class="reserved">inter_error_message</span><span class="plain"> *</span><span class="identifier">E</span><span class="plain"> = </span><span class="functiontext">Inter::Defn::verify_construct</span><span class="plain">(</span><span class="functiontext">Inter::Bookmarks::package</span><span class="plain">(</span><span class="identifier">IBM</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="reserved">return</span><span class="plain"> </span><span class="identifier">E</span><span class="plain">;</span>
<span class="functiontext">Inter::Frame::insert</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">IBM</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Inter::Instance::transpose</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="constant">inter_t</span><span class="plain"> *</span><span class="identifier">grid</span><span class="plain">, </span><span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">grid_extent</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">P</span><span class="element">.data</span><span class="plain">[</span><span class="constant">PLIST_INST_IFLD</span><span class="plain">] = </span><span class="identifier">grid</span><span class="plain">[</span><span class="identifier">P</span><span class="element">.data</span><span class="plain">[</span><span class="constant">PLIST_INST_IFLD</span><span class="plain">]];</span>
<span class="identifier">P</span><span class="element">.data</span><span class="plain">[</span><span class="constant">PERM_LIST_INST_IFLD</span><span class="plain">] = </span><span class="identifier">grid</span><span class="plain">[</span><span class="identifier">P</span><span class="element">.data</span><span class="plain">[</span><span class="constant">PERM_LIST_INST_IFLD</span><span class="plain">]];</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Inter::Instance::verify</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_package</span><span class="plain"> *</span><span class="identifier">owner</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">if</span><span class="plain"> (</span><span class="identifier">P</span><span class="element">.extent</span><span class="plain"> != </span><span class="constant">EXTENT_INST_IFR</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">"extent wrong"</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="identifier">E</span><span class="plain"> = </span><span class="identifier">Inter__Verify__defn</span><span class="plain">(</span><span class="identifier">owner</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">, </span><span class="constant">DEFN_INST_IFLD</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>
@ -148,6 +159,8 @@
<p class="endnote">The function Inter::Instance::new appears nowhere else.</p>
<p class="endnote">The function Inter::Instance::transpose is used in <a href="#SP1">&#167;1</a>.</p>
<p class="endnote">The function Inter::Instance::verify is used in <a href="#SP1">&#167;1</a>.</p>
<p class="endnote">The function Inter::Instance::permissions_list is used in 4/tpc5 (<a href="4-tpc5.html#SP2">&#167;2</a>), 4/tpc6 (<a href="4-tpc6.html#SP2">&#167;2</a>).</p>

View file

@ -25,6 +25,7 @@
<span class="identifier">L</span><span class="string">"kind (%i+) (%c+)"</span><span class="plain">,</span>
<span class="identifier">I</span><span class="string">"kind"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"kinds"</span><span class="plain">);</span>
<span class="identifier">METHOD_ADD</span><span class="plain">(</span><span class="identifier">IC</span><span class="plain">, </span><span class="constant">CONSTRUCT_READ_MTID</span><span class="plain">, </span><span class="functiontext">Inter::Kind::read</span><span class="plain">);</span>
<span class="identifier">METHOD_ADD</span><span class="plain">(</span><span class="identifier">IC</span><span class="plain">, </span><span class="constant">CONSTRUCT_TRANSPOSE_MTID</span><span class="plain">, </span><span class="functiontext">Inter::Kind::transpose</span><span class="plain">);</span>
<span class="identifier">METHOD_ADD</span><span class="plain">(</span><span class="identifier">IC</span><span class="plain">, </span><span class="constant">CONSTRUCT_VERIFY_MTID</span><span class="plain">, </span><span class="functiontext">Inter::Kind::verify</span><span class="plain">);</span>
<span class="identifier">METHOD_ADD</span><span class="plain">(</span><span class="identifier">IC</span><span class="plain">, </span><span class="constant">CONSTRUCT_WRITE_MTID</span><span class="plain">, </span><span class="functiontext">Inter::Kind::write</span><span class="plain">);</span>
<span class="plain">}</span>
@ -176,8 +177,13 @@
<span class="reserved">inter_error_message</span><span class="plain"> *</span><span class="functiontext">Inter::Kind::new</span><span class="plain">(</span><span class="reserved">inter_bookmark</span><span class="plain"> *</span><span class="identifier">IBM</span><span class="plain">, </span><span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">SID</span><span class="plain">, </span><span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">TID</span><span class="plain">, </span><span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">SUP</span><span class="plain">,</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">constructor</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">arity</span><span class="plain">, </span><span class="constant">inter_t</span><span class="plain"> *</span><span class="identifier">operands</span><span class="plain">, </span><span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">level</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="reserved">inter_warehouse</span><span class="plain"> *</span><span class="identifier">warehouse</span><span class="plain"> = </span><span class="functiontext">Inter::Bookmarks::warehouse</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">);</span>
<span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">L1</span><span class="plain"> = </span><span class="functiontext">Inter::Warehouse::create_frame_list</span><span class="plain">(</span><span class="identifier">warehouse</span><span class="plain">);</span>
<span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">L2</span><span class="plain"> = </span><span class="functiontext">Inter::Warehouse::create_frame_list</span><span class="plain">(</span><span class="identifier">warehouse</span><span class="plain">);</span>
<span class="functiontext">Inter::Warehouse::attribute_resource</span><span class="plain">(</span><span class="identifier">warehouse</span><span class="plain">, </span><span class="identifier">L1</span><span class="plain">, </span><span class="functiontext">Inter::Bookmarks::package</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">));</span>
<span class="functiontext">Inter::Warehouse::attribute_resource</span><span class="plain">(</span><span class="identifier">warehouse</span><span class="plain">, </span><span class="identifier">L2</span><span class="plain">, </span><span class="functiontext">Inter::Bookmarks::package</span><span class="plain">(</span><span class="identifier">IBM</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::fill_8</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">,</span>
<span class="constant">KIND_IST</span><span class="plain">, </span><span class="identifier">SID</span><span class="plain">, </span><span class="identifier">TID</span><span class="plain">, 0, 0, </span><span class="identifier">SUP</span><span class="plain">, </span><span class="functiontext">Inter::create_frame_list</span><span class="plain">(</span><span class="functiontext">Inter::Bookmarks::tree</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">)), </span><span class="functiontext">Inter::create_frame_list</span><span class="plain">(</span><span class="functiontext">Inter::Bookmarks::tree</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">)),</span>
<span class="constant">KIND_IST</span><span class="plain">, </span><span class="identifier">SID</span><span class="plain">, </span><span class="identifier">TID</span><span class="plain">, 0, 0, </span><span class="identifier">SUP</span><span class="plain">, </span><span class="identifier">L1</span><span class="plain">, </span><span class="identifier">L2</span><span class="plain">,</span>
<span class="plain">(</span><span class="constant">inter_t</span><span class="plain">) </span><span class="identifier">constructor</span><span class="plain">, </span><span class="identifier">eloc</span><span class="plain">, </span><span class="identifier">level</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">arity</span><span class="plain"> &gt; 0) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Inter::Frame::extend</span><span class="plain">(&amp;</span><span class="identifier">P</span><span class="plain">, (</span><span class="constant">inter_t</span><span class="plain">) </span><span class="identifier">arity</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">)</span>
@ -189,6 +195,11 @@
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Inter::Kind::transpose</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="constant">inter_t</span><span class="plain"> *</span><span class="identifier">grid</span><span class="plain">, </span><span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">grid_extent</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">P</span><span class="element">.data</span><span class="plain">[</span><span class="constant">PERM_LIST_KIND_IFLD</span><span class="plain">] = </span><span class="identifier">grid</span><span class="plain">[</span><span class="identifier">P</span><span class="element">.data</span><span class="plain">[</span><span class="constant">PERM_LIST_KIND_IFLD</span><span class="plain">]];</span>
<span class="identifier">P</span><span class="element">.data</span><span class="plain">[</span><span class="constant">PLIST_KIND_IFLD</span><span class="plain">] = </span><span class="identifier">grid</span><span class="plain">[</span><span class="identifier">P</span><span class="element">.data</span><span class="plain">[</span><span class="constant">PLIST_KIND_IFLD</span><span class="plain">]];</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Inter::Kind::verify</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_package</span><span class="plain"> *</span><span class="identifier">owner</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">if</span><span class="plain"> (</span><span class="identifier">P</span><span class="element">.extent</span><span class="plain"> &lt; </span><span class="constant">MIN_EXTENT_KIND_IFR</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">"extent wrong"</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="identifier">E</span><span class="plain"> = </span><span class="identifier">Inter__Verify__defn</span><span class="plain">(</span><span class="identifier">owner</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">, </span><span class="constant">DEFN_KIND_IFLD</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>
@ -427,6 +438,8 @@
<p class="endnote">The function Inter::Kind::new appears nowhere else.</p>
<p class="endnote">The function Inter::Kind::transpose is used in <a href="#SP1">&#167;1</a>.</p>
<p class="endnote">The function Inter::Kind::verify is used in <a href="#SP1">&#167;1</a>.</p>
<p class="endnote">The function Inter::Kind::permissions_list is used in 4/tpc5 (<a href="4-tpc5.html#SP2">&#167;2</a>), 4/tpc6 (<a href="4-tpc6.html#SP2">&#167;2</a>).</p>

View file

@ -69,7 +69,7 @@
<span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">SIDS</span><span class="plain">[5];</span>
<span class="identifier">SIDS</span><span class="plain">[0] = </span><span class="identifier">stage</span><span class="plain">;</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">=1; </span><span class="identifier">i</span><span class="plain">&lt;=4; </span><span class="identifier">i</span><span class="plain">++) {</span>
<span class="identifier">SIDS</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">] = </span><span class="functiontext">Inter::create_text</span><span class="plain">(</span><span class="functiontext">Inter::Bookmarks::tree</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">));</span>
<span class="identifier">SIDS</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">] = </span><span class="functiontext">Inter::Warehouse::create_text</span><span class="plain">(</span><span class="functiontext">Inter::Bookmarks::warehouse</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">), </span><span class="functiontext">Inter::Bookmarks::package</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">));</span>
<span class="plain">*</span><span class="identifier">E</span><span class="plain"> = </span><span class="functiontext">Inter::Constant::parse_text</span><span class="plain">(</span><span class="functiontext">Inter::get_text</span><span class="plain">(</span><span class="functiontext">Inter::Bookmarks::tree</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">), </span><span class="identifier">SIDS</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">]), </span><span class="identifier">ilp</span><span class="plain">-</span><span class="element">&gt;mr</span><span class="plain">.</span><span class="identifier">exp</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">], 0, </span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">ilp</span><span class="plain">-</span><span class="element">&gt;mr</span><span class="plain">.</span><span class="identifier">exp</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">]), </span><span class="identifier">eloc</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="plain">}</span>

View file

@ -58,7 +58,7 @@
<span class="plain">*</span><span class="identifier">E</span><span class="plain"> = </span><span class="functiontext">Inter::Constant::parse_text</span><span class="plain">(</span><span class="identifier">parsed_text</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">, 1, </span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">)-2, </span><span class="identifier">eloc</span><span class="plain">);</span>
<span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">ID</span><span class="plain"> = 0;</span>
<span class="reserved">if</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="identifier">ID</span><span class="plain"> = </span><span class="functiontext">Inter::create_text</span><span class="plain">(</span><span class="functiontext">Inter::Bookmarks::tree</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">));</span>
<span class="identifier">ID</span><span class="plain"> = </span><span class="functiontext">Inter::Warehouse::create_text</span><span class="plain">(</span><span class="functiontext">Inter::Bookmarks::warehouse</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">), </span><span class="functiontext">Inter::Bookmarks::package</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">));</span>
<span class="identifier">Str::copy</span><span class="plain">(</span><span class="functiontext">Inter::get_text</span><span class="plain">(</span><span class="functiontext">Inter::Bookmarks::tree</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">), </span><span class="identifier">ID</span><span class="plain">), </span><span class="identifier">parsed_text</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">parsed_text</span><span class="plain">);</span>

View file

@ -57,7 +57,7 @@
<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">text_stream</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain"> = </span><span class="identifier">ilp</span><span class="plain">-</span><span class="element">&gt;mr</span><span class="plain">.</span><span class="identifier">exp</span><span class="plain">[1];</span>
<span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">ID</span><span class="plain"> = </span><span class="functiontext">Inter::create_text</span><span class="plain">(</span><span class="functiontext">Inter::Bookmarks::tree</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">));</span>
<span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">ID</span><span class="plain"> = </span><span class="functiontext">Inter::Warehouse::create_text</span><span class="plain">(</span><span class="functiontext">Inter::Bookmarks::warehouse</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">), </span><span class="functiontext">Inter::Bookmarks::package</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">));</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">literal_mode</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="identifier">LOOP_THROUGH_TEXT</span><span class="plain">(</span><span class="identifier">pos</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">c</span><span class="plain"> = (</span><span class="reserved">int</span><span class="plain">) </span><span class="identifier">Str::get</span><span class="plain">(</span><span class="identifier">pos</span><span class="plain">);</span>

View file

@ -26,6 +26,7 @@
<span class="identifier">I</span><span class="string">"package"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"packages"</span><span class="plain">);</span>
<span class="identifier">IC</span><span class="plain">-</span><span class="element">&gt;usage_permissions</span><span class="plain"> = </span><span class="constant">OUTSIDE_OF_PACKAGES</span><span class="plain"> + </span><span class="constant">INSIDE_PLAIN_PACKAGE</span><span class="plain"> + </span><span class="constant">CAN_HAVE_CHILDREN</span><span class="plain">;</span>
<span class="identifier">METHOD_ADD</span><span class="plain">(</span><span class="identifier">IC</span><span class="plain">, </span><span class="constant">CONSTRUCT_READ_MTID</span><span class="plain">, </span><span class="functiontext">Inter::Package::read</span><span class="plain">);</span>
<span class="identifier">METHOD_ADD</span><span class="plain">(</span><span class="identifier">IC</span><span class="plain">, </span><span class="constant">CONSTRUCT_TRANSPOSE_MTID</span><span class="plain">, </span><span class="functiontext">Inter::Package::transpose</span><span class="plain">);</span>
<span class="identifier">METHOD_ADD</span><span class="plain">(</span><span class="identifier">IC</span><span class="plain">, </span><span class="constant">CONSTRUCT_VERIFY_MTID</span><span class="plain">, </span><span class="functiontext">Inter::Package::verify</span><span class="plain">);</span>
<span class="identifier">METHOD_ADD</span><span class="plain">(</span><span class="identifier">IC</span><span class="plain">, </span><span class="constant">CONSTRUCT_WRITE_MTID</span><span class="plain">, </span><span class="functiontext">Inter::Package::write</span><span class="plain">);</span>
<span class="identifier">METHOD_ADD</span><span class="plain">(</span><span class="identifier">IC</span><span class="plain">, </span><span class="constant">VERIFY_INTER_CHILDREN_MTID</span><span class="plain">, </span><span class="functiontext">Inter::Package::verify_children</span><span class="plain">);</span>
@ -65,7 +66,7 @@
<span class="plain">}</span>
<span class="reserved">inter_error_message</span><span class="plain"> *</span><span class="functiontext">Inter::Package::new_package</span><span class="plain">(</span><span class="reserved">inter_bookmark</span><span class="plain"> *</span><span class="identifier">IBM</span><span class="plain">, </span><span class="reserved">inter_symbol</span><span class="plain"> *</span><span class="identifier">package_name</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="constant">inter_t</span><span class="plain"> </span><span class="identifier">level</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="reserved">inter_package</span><span class="plain"> **</span><span class="identifier">created</span><span class="plain">) {</span>
<span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">STID</span><span class="plain"> = </span><span class="functiontext">Inter::create_symbols_table</span><span class="plain">(</span><span class="functiontext">Inter::Bookmarks::tree</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">));</span>
<span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">STID</span><span class="plain"> = </span><span class="functiontext">Inter::Warehouse::create_symbols_table</span><span class="plain">(</span><span class="functiontext">Inter::Bookmarks::warehouse</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">));</span>
<span class="identifier">LOGIF</span><span class="plain">(</span><span class="identifier">INTER_SYMBOLS</span><span class="plain">, </span><span class="string">"Package $3 at IBM $5\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">package_name</span><span class="plain">, </span><span class="identifier">IBM</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::fill_4</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">,</span>
<span class="constant">PACKAGE_IST</span><span class="plain">, </span><span class="functiontext">Inter::SymbolsTables::id_from_IRS_and_symbol</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">package_name</span><span class="plain">), </span><span class="functiontext">Inter::SymbolsTables::id_from_symbol</span><span class="plain">(</span><span class="functiontext">Inter::Bookmarks::tree</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">), </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">ptype_name</span><span class="plain">), </span><span class="identifier">STID</span><span class="plain">, 0, </span><span class="identifier">eloc</span><span class="plain">, </span><span class="identifier">level</span><span class="plain">);</span>
@ -73,7 +74,7 @@
<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="functiontext">Inter::Frame::insert</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">IBM</span><span class="plain">);</span>
<span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">PID</span><span class="plain"> = </span><span class="functiontext">Inter::create_package</span><span class="plain">(</span><span class="functiontext">Inter::Bookmarks::tree</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">));</span>
<span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">PID</span><span class="plain"> = </span><span class="functiontext">Inter::Warehouse::create_package</span><span class="plain">(</span><span class="functiontext">Inter::Bookmarks::warehouse</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">), </span><span class="functiontext">Inter::Bookmarks::tree</span><span class="plain">(</span><span class="identifier">IBM</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::from_PID</span><span class="plain">(</span><span class="functiontext">Inter::Bookmarks::tree</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">), </span><span class="identifier">PID</span><span class="plain">);</span>
<span class="functiontext">Inter::Packages::set_name</span><span class="plain">(</span><span class="identifier">pack</span><span class="plain">, </span><span class="identifier">package_name</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="functiontext">Inter::Packages::make_codelike</span><span class="plain">(</span><span class="identifier">pack</span><span class="plain">);</span>
@ -81,12 +82,18 @@
<span class="functiontext">Inter::Packages::make_linklike</span><span class="plain">(</span><span class="identifier">pack</span><span class="plain">);</span>
<span class="functiontext">Inter::Packages::set_scope</span><span class="plain">(</span><span class="identifier">pack</span><span class="plain">, </span><span class="functiontext">Inter::Package::local_symbols</span><span class="plain">(</span><span class="identifier">package_name</span><span class="plain">));</span>
<span class="identifier">P</span><span class="element">.data</span><span class="plain">[</span><span class="constant">PID_PACKAGE_IFLD</span><span class="plain">] = </span><span class="identifier">PID</span><span class="plain">;</span>
<span class="functiontext">Inter::Warehouse::attribute_resource</span><span class="plain">(</span><span class="functiontext">Inter::Bookmarks::warehouse</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">), </span><span class="identifier">STID</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">created</span><span class="plain">) *</span><span class="identifier">created</span><span class="plain"> = </span><span class="identifier">pack</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Inter::Package::transpose</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="constant">inter_t</span><span class="plain"> *</span><span class="identifier">grid</span><span class="plain">, </span><span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">grid_extent</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">P</span><span class="element">.data</span><span class="plain">[</span><span class="constant">PID_PACKAGE_IFLD</span><span class="plain">] = </span><span class="identifier">grid</span><span class="plain">[</span><span class="identifier">P</span><span class="element">.data</span><span class="plain">[</span><span class="constant">PID_PACKAGE_IFLD</span><span class="plain">]];</span>
<span class="identifier">P</span><span class="element">.data</span><span class="plain">[</span><span class="constant">SYMBOLS_PACKAGE_IFLD</span><span class="plain">] = </span><span class="identifier">grid</span><span class="plain">[</span><span class="identifier">P</span><span class="element">.data</span><span class="plain">[</span><span class="constant">SYMBOLS_PACKAGE_IFLD</span><span class="plain">]];</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Inter::Package::verify</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_package</span><span class="plain"> *</span><span class="identifier">owner</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="plain">*</span><span class="identifier">E</span><span class="plain"> = </span><span class="identifier">Inter__Verify__defn</span><span class="plain">(</span><span class="identifier">owner</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">, </span><span class="constant">DEFN_PACKAGE_IFLD</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="reserved">inter_symbols_table</span><span class="plain"> *</span><span class="identifier">T</span><span class="plain"> = </span><span class="functiontext">Inter::Packages::scope</span><span class="plain">(</span><span class="identifier">owner</span><span class="plain">);</span>
@ -173,6 +180,8 @@
<p class="endnote">The function Inter::Package::new_package appears nowhere else.</p>
<p class="endnote">The function Inter::Package::transpose is used in <a href="#SP1">&#167;1</a>.</p>
<p class="endnote">The function Inter::Package::verify is used in <a href="#SP1">&#167;1</a>.</p>
<p class="endnote">The function Inter::Package::write is used in <a href="#SP1">&#167;1</a>.</p>

View file

@ -25,6 +25,7 @@
<span class="identifier">L</span><span class="string">"property (%i+) (%i+)"</span><span class="plain">,</span>
<span class="identifier">I</span><span class="string">"property"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"properties"</span><span class="plain">);</span>
<span class="identifier">METHOD_ADD</span><span class="plain">(</span><span class="identifier">IC</span><span class="plain">, </span><span class="constant">CONSTRUCT_READ_MTID</span><span class="plain">, </span><span class="functiontext">Inter::Property::read</span><span class="plain">);</span>
<span class="identifier">METHOD_ADD</span><span class="plain">(</span><span class="identifier">IC</span><span class="plain">, </span><span class="constant">CONSTRUCT_TRANSPOSE_MTID</span><span class="plain">, </span><span class="functiontext">Inter::Property::transpose</span><span class="plain">);</span>
<span class="identifier">METHOD_ADD</span><span class="plain">(</span><span class="identifier">IC</span><span class="plain">, </span><span class="constant">CONSTRUCT_VERIFY_MTID</span><span class="plain">, </span><span class="functiontext">Inter::Property::verify</span><span class="plain">);</span>
<span class="identifier">METHOD_ADD</span><span class="plain">(</span><span class="identifier">IC</span><span class="plain">, </span><span class="constant">CONSTRUCT_WRITE_MTID</span><span class="plain">, </span><span class="functiontext">Inter::Property::write</span><span class="plain">);</span>
<span class="plain">}</span>
@ -61,13 +62,20 @@
<span class="plain">}</span>
<span class="reserved">inter_error_message</span><span class="plain"> *</span><span class="functiontext">Inter::Property::new</span><span class="plain">(</span><span class="reserved">inter_bookmark</span><span class="plain"> *</span><span class="identifier">IBM</span><span class="plain">, </span><span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">PID</span><span class="plain">, </span><span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">KID</span><span class="plain">, </span><span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">level</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="reserved">inter_frame</span><span class="plain"> </span><span class="identifier">P</span><span class="plain"> = </span><span class="functiontext">Inter::Frame::fill_3</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="constant">PROPERTY_IST</span><span class="plain">, </span><span class="identifier">PID</span><span class="plain">, </span><span class="identifier">KID</span><span class="plain">, </span><span class="functiontext">Inter::create_frame_list</span><span class="plain">(</span><span class="functiontext">Inter::Bookmarks::tree</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">)), </span><span class="identifier">eloc</span><span class="plain">, </span><span class="identifier">level</span><span class="plain">);</span>
<span class="reserved">inter_warehouse</span><span class="plain"> *</span><span class="identifier">warehouse</span><span class="plain"> = </span><span class="functiontext">Inter::Bookmarks::warehouse</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">);</span>
<span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">L1</span><span class="plain"> = </span><span class="functiontext">Inter::Warehouse::create_frame_list</span><span class="plain">(</span><span class="identifier">warehouse</span><span class="plain">);</span>
<span class="functiontext">Inter::Warehouse::attribute_resource</span><span class="plain">(</span><span class="identifier">warehouse</span><span class="plain">, </span><span class="identifier">L1</span><span class="plain">, </span><span class="functiontext">Inter::Bookmarks::package</span><span class="plain">(</span><span class="identifier">IBM</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::fill_3</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="constant">PROPERTY_IST</span><span class="plain">, </span><span class="identifier">PID</span><span class="plain">, </span><span class="identifier">KID</span><span class="plain">, </span><span class="identifier">L1</span><span class="plain">, </span><span class="identifier">eloc</span><span class="plain">, </span><span class="identifier">level</span><span class="plain">);</span>
<span class="reserved">inter_error_message</span><span class="plain"> *</span><span class="identifier">E</span><span class="plain"> = </span><span class="functiontext">Inter::Defn::verify_construct</span><span class="plain">(</span><span class="functiontext">Inter::Bookmarks::package</span><span class="plain">(</span><span class="identifier">IBM</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="reserved">return</span><span class="plain"> </span><span class="identifier">E</span><span class="plain">;</span>
<span class="functiontext">Inter::Frame::insert</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">IBM</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Inter::Property::transpose</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="constant">inter_t</span><span class="plain"> *</span><span class="identifier">grid</span><span class="plain">, </span><span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">grid_extent</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">P</span><span class="element">.data</span><span class="plain">[</span><span class="constant">PERM_LIST_PROP_IFLD</span><span class="plain">] = </span><span class="identifier">grid</span><span class="plain">[</span><span class="identifier">P</span><span class="element">.data</span><span class="plain">[</span><span class="constant">PERM_LIST_PROP_IFLD</span><span class="plain">]];</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Inter::Property::verify</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_package</span><span class="plain"> *</span><span class="identifier">owner</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">if</span><span class="plain"> (</span><span class="identifier">P</span><span class="element">.extent</span><span class="plain"> != </span><span class="constant">EXTENT_PROP_IFR</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">"extent wrong"</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="identifier">E</span><span class="plain"> = </span><span class="identifier">Inter__Verify__defn</span><span class="plain">(</span><span class="identifier">owner</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">, </span><span class="constant">DEFN_PROP_IFLD</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>
@ -105,6 +113,8 @@
<p class="endnote">The function Inter::Property::new appears nowhere else.</p>
<p class="endnote">The function Inter::Property::transpose is used in <a href="#SP1">&#167;1</a>.</p>
<p class="endnote">The function Inter::Property::verify is used in <a href="#SP1">&#167;1</a>.</p>
<p class="endnote">The function Inter::Property::permissions_list is used in 4/tpc6 (<a href="4-tpc6.html#SP2">&#167;2</a>).</p>

View file

@ -142,7 +142,7 @@
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">prop_X</span><span class="plain"> == </span><span class="identifier">prop_P</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">"duplicate permission"</span><span class="plain">, </span><span class="identifier">prop_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="reserved">inter_symbol</span><span class="plain"> *</span><span class="identifier">owner_X</span><span class="plain"> = </span><span class="functiontext">Inter::SymbolsTables::symbol_from_frame_data</span><span class="plain">(</span><span class="identifier">X</span><span class="plain">, </span><span class="constant">OWNER_PERM_IFLD</span><span class="plain">);</span>
<span class="reserved">inter_symbol</span><span class="plain"> *</span><span class="identifier">owner_P</span><span class="plain"> = </span><span class="functiontext">Inter::SymbolsTables::symbol_from_id</span><span class="plain">(</span><span class="functiontext">Inter::Packages::scope</span><span class="plain">(</span><span class="identifier">owner</span><span class="plain">), </span><span class="identifier">P</span><span class="element">.data</span><span class="plain">[</span><span class="constant">OWNER_PERM_IFLD</span><span class="plain">]);;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">owner_X</span><span class="plain"> != </span><span class="identifier">owner_P</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">"kind permission list malformed A"</span><span class="plain">, </span><span class="identifier">owner_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="reserved">if</span><span class="plain"> (</span><span class="identifier">owner_X</span><span class="plain"> != </span><span class="identifier">owner_P</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">"kind permission list malformed"</span><span class="plain">, </span><span class="identifier">owner_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>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="identifier">FL</span><span class="plain"> = </span><span class="functiontext">Inter::Frame::ID_to_frame_list</span><span class="plain">(&amp;</span><span class="identifier">P</span><span class="plain">, </span><span class="functiontext">Inter::Instance::permissions_list</span><span class="plain">(</span><span class="identifier">owner_name</span><span class="plain">));</span>
@ -154,7 +154,7 @@
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">prop_X</span><span class="plain"> == </span><span class="identifier">prop_P</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">"duplicate permission"</span><span class="plain">, </span><span class="identifier">prop_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="reserved">inter_symbol</span><span class="plain"> *</span><span class="identifier">owner_X</span><span class="plain"> = </span><span class="functiontext">Inter::SymbolsTables::symbol_from_frame_data</span><span class="plain">(</span><span class="identifier">X</span><span class="plain">, </span><span class="constant">OWNER_PERM_IFLD</span><span class="plain">);</span>
<span class="reserved">inter_symbol</span><span class="plain"> *</span><span class="identifier">owner_P</span><span class="plain"> = </span><span class="functiontext">Inter::SymbolsTables::symbol_from_id</span><span class="plain">(</span><span class="functiontext">Inter::Packages::scope</span><span class="plain">(</span><span class="identifier">owner</span><span class="plain">), </span><span class="identifier">P</span><span class="element">.data</span><span class="plain">[</span><span class="constant">OWNER_PERM_IFLD</span><span class="plain">]);;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">owner_X</span><span class="plain"> != </span><span class="identifier">owner_P</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">"kind permission list malformed A"</span><span class="plain">, </span><span class="identifier">owner_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="reserved">if</span><span class="plain"> (</span><span class="identifier">owner_X</span><span class="plain"> != </span><span class="identifier">owner_P</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 permission list malformed"</span><span class="plain">, </span><span class="identifier">owner_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>
<span class="plain">}</span>

View file

@ -80,7 +80,7 @@
<span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">plm</span><span class="plain"> = </span><span class="functiontext">Inter::Splat::parse_plm</span><span class="plain">(</span><span class="identifier">ilp</span><span class="plain">-</span><span class="element">&gt;mr</span><span class="plain">.</span><span class="identifier">exp</span><span class="plain">[0]);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">plm</span><span class="plain"> == 1000000) { *</span><span class="identifier">E</span><span class="plain"> = </span><span class="functiontext">Inter::Errors::plain</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"unknown PLM code before text matter"</span><span class="plain">, </span><span class="identifier">eloc</span><span class="plain">); </span><span class="reserved">return</span><span class="plain">; }</span>
<span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">SID</span><span class="plain"> = </span><span class="functiontext">Inter::create_text</span><span class="plain">(</span><span class="functiontext">Inter::Bookmarks::tree</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">));</span>
<span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">SID</span><span class="plain"> = </span><span class="functiontext">Inter::Warehouse::create_text</span><span class="plain">(</span><span class="functiontext">Inter::Bookmarks::warehouse</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">), </span><span class="functiontext">Inter::Bookmarks::package</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">));</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">glob_storage</span><span class="plain"> = </span><span class="functiontext">Inter::get_text</span><span class="plain">(</span><span class="functiontext">Inter::Bookmarks::tree</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">), </span><span class="identifier">SID</span><span class="plain">);</span>
<span class="plain">*</span><span class="identifier">E</span><span class="plain"> = </span><span class="functiontext">Inter::Constant::parse_text</span><span class="plain">(</span><span class="identifier">glob_storage</span><span class="plain">, </span><span class="identifier">ilp</span><span class="plain">-</span><span class="element">&gt;mr</span><span class="plain">.</span><span class="identifier">exp</span><span class="plain">[1], 0, </span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">ilp</span><span class="plain">-</span><span class="element">&gt;mr</span><span class="plain">.</span><span class="identifier">exp</span><span class="plain">[1]), </span><span class="identifier">eloc</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>

View file

@ -101,7 +101,7 @@ inter_symbol *Emit::packagetype(text_stream *name, int enclosing) {
}
void Emit::comment(text_stream *text) {
inter_t ID = Inter::create_text(Emit::tree());
inter_t ID = Inter::Warehouse::create_text(Inter::warehouse(Emit::tree()), Inter::Bookmarks::package(Packaging::at()));
Str::copy(Inter::get_text(Emit::tree(), ID), text);
Emit::guard(Inter::Comment::new(Packaging::at(), Emit::baseline(Packaging::at()), NULL, ID));
}
@ -148,18 +148,19 @@ insert them into the Inter stream close to the top.
=
void Emit::pragma(text_stream *text) {
inter_t ID = Inter::create_text(Emit::tree());
Str::copy(Inter::get_text(Emit::tree(), ID), text);
inter_tree *I = Emit::tree();
inter_t ID = Inter::Warehouse::create_text(I, I->root_package);
Str::copy(Inter::get_text(I, ID), text);
inter_symbol *target_name =
Inter::SymbolsTables::symbol_from_name_creating(
Inter::get_global_symbols(Emit::tree()), I"target_I6");
Inter::get_global_symbols(I), I"target_I6");
Emit::guard(Inter::Pragma::new(&pragmas_bookmark, target_name, ID, 0, NULL));
}
void Emit::append(inter_name *iname, text_stream *text) {
packaging_state save = Packaging::enter_home_of(iname);
inter_symbol *symbol = InterNames::to_symbol(iname);
inter_t ID = Inter::create_text(Emit::tree());
inter_t ID = Inter::Warehouse::create_text(Inter::warehouse(Emit::tree()), Inter::Bookmarks::package(Packaging::at()));
Str::copy(Inter::get_text(Emit::tree(), ID), text);
Emit::guard(Inter::Append::new(Packaging::at(), symbol, ID, Emit::baseline(Packaging::at()), NULL));
Packaging::exit(save);
@ -207,13 +208,14 @@ inter_symbol *Emit::new_local_symbol(inter_symbol *rsymb, text_stream *name) {
}
void Emit::annotate_symbol_t(inter_symbol *symb, inter_t annot_ID, text_stream *S) {
Inter::Symbols::annotate_t(Emit::tree(), symb, annot_ID, S);
Inter::Symbols::annotate_t(symb->owning_table->owning_package->stored_in, symb->owning_table->owning_package, symb, annot_ID, S);
}
void Emit::annotate_symbol_w(inter_symbol *symb, inter_t annot_ID, wording W) {
TEMPORARY_TEXT(temp);
WRITE_TO(temp, "%W", W);
Inter::Symbols::annotate_t(Emit::tree(), symb, annot_ID, temp);
Inter::Symbols::annotate_t(symb->owning_table->owning_package->stored_in, symb->owning_table->owning_package, symb, annot_ID, temp);
DISCARD_TEXT(temp);
}
@ -353,7 +355,7 @@ void Emit::instance_propertyvalue(property *P, instance *I, inter_t v1, inter_t
void Emit::named_string_constant(inter_name *name, text_stream *contents) {
packaging_state save = Packaging::enter_home_of(name);
inter_t ID = Inter::create_text(Emit::tree());
inter_t ID = Inter::Warehouse::create_text(Inter::warehouse(Emit::tree()), Inter::Bookmarks::package(Packaging::at()));
Str::copy(Inter::get_text(Emit::tree(), ID), contents);
inter_symbol *con_name = Emit::define_symbol(name);
Emit::guard(Inter::Constant::new_textual(Packaging::at(), Inter::SymbolsTables::id_from_IRS_and_symbol(Packaging::at(), con_name), Inter::SymbolsTables::id_from_IRS_and_symbol(Packaging::at(), string_interk), ID, Emit::baseline(Packaging::at()), NULL));
@ -361,7 +363,7 @@ void Emit::named_string_constant(inter_name *name, text_stream *contents) {
}
void Emit::metadata(package_request *P, text_stream *key, text_stream *value) {
inter_t ID = Inter::create_text(Emit::tree());
inter_t ID = Inter::Warehouse::create_text(Inter::warehouse(Emit::tree()), Inter::Bookmarks::package(Packaging::at()));
Str::copy(Inter::get_text(Emit::tree(), ID), value);
inter_name *iname = InterNames::explicitly_named(key, P);
inter_symbol *key_name = Emit::define_symbol(iname);
@ -620,7 +622,7 @@ void Emit::array_numeric_entry(inter_t N) {
void Emit::array_divider(text_stream *divider_text) {
if (current_A == NULL) internal_error("entry outside of inter array");
inter_t S = Inter::create_text(Emit::tree());
inter_t S = Inter::Warehouse::create_text(Inter::warehouse(Emit::tree()), Inter::Bookmarks::package(Packaging::at()));
Str::copy(Inter::get_text(Emit::tree(), S), divider_text);
Emit::add_entry(DIVIDER_IVAL, S);
}
@ -712,14 +714,14 @@ inter_bookmark begin_bookmark;
inter_bookmark code_bookmark;
void Emit::early_comment(text_stream *text) {
/* inter_t ID = Inter::create_text(Emit::tree());
/* inter_t ID = Inter::Warehouse::create_text(Inter::warehouse(Emit::tree()), Inter::Bookmarks::package(Packaging::at()));
Str::copy(Inter::get_text(Emit::tree(), 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::tree());
/* inter_t ID = Inter::Warehouse::create_text(Inter::warehouse(Emit::tree()), Inter::Bookmarks::package(Packaging::at()));
Str::copy(Inter::get_text(Emit::tree(), ID), text);
Emit::guard(Inter::Comment::new(Emit::at(), (inter_t) Emit::level(), NULL, ID));
*/
@ -830,7 +832,7 @@ inter_symbol *Emit::local(kind *K, text_stream *lname, inter_t annot, text_strea
inter_symbol *loc_kind = Emit::kind_to_symbol(K);
inter_t ID = 0;
if ((comm) && (Str::len(comm) > 0)) {
ID = Inter::create_text(Emit::tree());
ID = Inter::Warehouse::create_text(Inter::warehouse(Emit::tree()), Inter::Bookmarks::package(Packaging::at()));
Str::copy(Inter::get_text(Emit::tree(), ID), comm);
}
if (annot) Emit::annotate_symbol_i(loc_name, annot, 0);
@ -876,7 +878,7 @@ void Emit::inv_indirect_call(int arity) {
void Emit::inv_assembly(text_stream *opcode) {
if (current_inter_routine == NULL) internal_error("not in an inter routine");
inter_t SID = Inter::create_text(Emit::tree());
inter_t SID = Inter::Warehouse::create_text(Inter::warehouse(Emit::tree()), Inter::Bookmarks::package(Emit::at()));
text_stream *glob_storage = Inter::get_text(Emit::tree(), SID);
Str::copy(glob_storage, opcode);
Emit::guard(Inter::Inv::new_assembly(Emit::at(), current_inter_routine, SID, (inter_t) Emit::level(), NULL));
@ -1149,7 +1151,7 @@ void Emit::end_splat(void) {
void Emit::entire_splat(text_stream *content, inter_t level) {
if (Str::len(content) == 0) return;
inter_t SID = Inter::create_text(Emit::tree());
inter_t SID = Inter::Warehouse::create_text(Inter::warehouse(Emit::tree()), Inter::Bookmarks::package(Emit::at()));
text_stream *glob_storage = Inter::get_text(Emit::tree(), SID);
Str::copy(glob_storage, content);
@ -1170,7 +1172,7 @@ void Emit::write_bytecode(filename *F) {
}
void Emit::glob_value(inter_t *v1, inter_t *v2, text_stream *glob, char *clue) {
inter_t ID = Inter::create_text(Emit::tree());
inter_t ID = Inter::Warehouse::create_text(Inter::warehouse(Emit::tree()), Inter::Bookmarks::package(Emit::at()));
text_stream *glob_storage = Inter::get_text(Emit::tree(), ID);
Str::copy(glob_storage, glob);
*v1 = GLOB_IVAL;
@ -1181,7 +1183,7 @@ void Emit::glob_value(inter_t *v1, inter_t *v2, text_stream *glob, char *clue) {
}
void Emit::text_value(inter_t *v1, inter_t *v2, text_stream *text) {
inter_t ID = Inter::create_text(Emit::tree());
inter_t ID = Inter::Warehouse::create_text(Inter::warehouse(Emit::tree()), Inter::Bookmarks::package(Emit::at()));
text_stream *text_storage = Inter::get_text(Emit::tree(), ID);
Str::copy(text_storage, text);
*v1 = LITERAL_TEXT_IVAL;
@ -1193,7 +1195,7 @@ int Emit::glob_count(void) {
}
void Emit::real_value(inter_t *v1, inter_t *v2, double g) {
inter_t ID = Inter::create_text(Emit::tree());
inter_t ID = Inter::Warehouse::create_text(Inter::warehouse(Emit::tree()), Inter::Bookmarks::package(Emit::at()));
text_stream *glob_storage = Inter::get_text(Emit::tree(), ID);
if (g > 0) WRITE_TO(glob_storage, "+");
WRITE_TO(glob_storage, "%g", g);
@ -1202,7 +1204,7 @@ void Emit::real_value(inter_t *v1, inter_t *v2, double g) {
}
void Emit::real_value_from_text(inter_t *v1, inter_t *v2, text_stream *S) {
inter_t ID = Inter::create_text(Emit::tree());
inter_t ID = Inter::Warehouse::create_text(Inter::warehouse(Emit::tree()), Inter::Bookmarks::package(Emit::at()));
text_stream *glob_storage = Inter::get_text(Emit::tree(), ID);
LOOP_THROUGH_TEXT(pos, S)
if (Str::get(pos) != '$')
@ -1212,7 +1214,7 @@ void Emit::real_value_from_text(inter_t *v1, inter_t *v2, text_stream *S) {
}
void Emit::dword_value(inter_t *v1, inter_t *v2, text_stream *glob) {
inter_t ID = Inter::create_text(Emit::tree());
inter_t ID = Inter::Warehouse::create_text(Inter::warehouse(Emit::tree()), Inter::Bookmarks::package(Emit::at()));
text_stream *glob_storage = Inter::get_text(Emit::tree(), ID);
Str::copy(glob_storage, glob);
*v1 = DWORD_IVAL;
@ -1220,7 +1222,7 @@ void Emit::dword_value(inter_t *v1, inter_t *v2, text_stream *glob) {
}
void Emit::plural_dword_value(inter_t *v1, inter_t *v2, text_stream *glob) {
inter_t ID = Inter::create_text(Emit::tree());
inter_t ID = Inter::Warehouse::create_text(Inter::warehouse(Emit::tree()), Inter::Bookmarks::package(Emit::at()));
text_stream *glob_storage = Inter::get_text(Emit::tree(), ID);
Str::copy(glob_storage, glob);
*v1 = PDWORD_IVAL;
@ -1228,21 +1230,24 @@ void Emit::plural_dword_value(inter_t *v1, inter_t *v2, text_stream *glob) {
}
void Emit::intervention(int stage, text_stream *segment, text_stream *part, text_stream *i6, text_stream *seg) {
inter_t ID1 = Inter::create_text(Emit::tree());
inter_warehouse *warehouse = Inter::warehouse(Emit::tree());
inter_t ID1 = Inter::Warehouse::create_text(warehouse, Inter::Bookmarks::package(Packaging::at()));
Str::copy(Inter::get_text(Emit::tree(), ID1), segment);
inter_t ID2 = Inter::create_text(Emit::tree());
inter_t ID2 = Inter::Warehouse::create_text(warehouse, Inter::Bookmarks::package(Packaging::at()));
Str::copy(Inter::get_text(Emit::tree(), ID2), part);
inter_t ID3 = Inter::create_text(Emit::tree());
inter_t ID3 = Inter::Warehouse::create_text(warehouse, Inter::Bookmarks::package(Packaging::at()));
Str::copy(Inter::get_text(Emit::tree(), ID3), i6);
inter_t ID4 = Inter::create_text(Emit::tree());
inter_t ID4 = Inter::Warehouse::create_text(warehouse, Inter::Bookmarks::package(Packaging::at()));
Str::copy(Inter::get_text(Emit::tree(), ID4), seg);
inter_t ref = Inter::create_ref(Emit::tree());
inter_t ref = Inter::Warehouse::create_ref(warehouse, Inter::Bookmarks::package(Packaging::at()));
Inter::set_ref(Emit::tree(), ref, (void *) current_sentence);
Inter::Warehouse::attribute_resource(warehouse, ref, Inter::Bookmarks::package(Packaging::at()));
Emit::guard(Inter::Link::new(Packaging::at(), (inter_t) stage, ID1, ID2, ID3, ID4, ref, Emit::baseline(Packaging::at()), NULL));
}
@ -1308,10 +1313,6 @@ void Emit::annotate_i(inter_name *iname, inter_t annot_ID, inter_t V) {
if (iname) Emit::annotate_symbol_i(InterNames::to_symbol(iname), annot_ID, V);
}
void Emit::annotate_t(inter_name *iname, inter_t annot_ID, text_stream *text) {
if (iname) Emit::annotate_symbol_t(InterNames::to_symbol(iname), annot_ID, text);
}
void Emit::annotate_w(inter_name *iname, inter_t annot_ID, wording W) {
if (iname) Emit::annotate_symbol_w(InterNames::to_symbol(iname), annot_ID, W);
}

3
inter/.gitignore vendored
View file

@ -18,6 +18,9 @@ inter.mk
Tests/Invalid/_Results_Actual/
Tests/General/_Results_Actual/
Tests/General/_Console/
Tests/Duplex/_Results_Actual/
Tests/Duplex/_Console/
Tests/Duplex/_Binaries/
Tests/Valid/_Binary/
Tests/Valid/_Console/
Tests/Valid/_Textual/

View file

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

View file

@ -0,0 +1,4 @@
read 0 <- *inA
read 1 <- *inB
generate 0 text -> *outA
generate 1 text -> *outB

View file

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

View file

@ -0,0 +1,5 @@
read 0 <- *inA
read 1 <- *inB
move 1 <- 0:/main/my_fn
generate 0 text -> *outA
generate 1 text -> *outB

View file

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

View file

@ -0,0 +1,168 @@
# This is a miscellany of tests.
packagetype _plain
packagetype _code
version 7
primitive !return val -> void
primitive !modulo val val -> val
primitive !plus val val -> val
pragma target_I6 "$MAX_STATIC_DATA=180000"
package main _plain
symbol public misc K_number
symbol public misc K_truth_state
symbol public misc V_banana
symbol public misc C_death
symbol public misc C_taxes
symbol public misc V_anxiety
symbol public misc C_x
symbol public misc cornelius
symbol public misc gaius
symbol public misc mark_my_words
symbol external misc peach
symbol public misc K_colour
symbol public misc I_green
symbol public misc I_red
symbol public misc V_shade
symbol public misc K_list_of_number
symbol public misc C_primes
symbol public misc C_concealed
symbol public misc V_watch_list
symbol public misc 718_varieties
symbol public misc K_text
symbol public misc C_complaint
symbol public misc C_raw
symbol public misc K_odour
symbol public misc I_citrus
symbol public misc I_leather
symbol public misc P_strength
symbol public misc pp_auto_1
symbol public misc P_lingeringness
symbol public misc pp_auto_2
symbol public misc K_table
symbol public misc K_column_of_number
symbol public misc K_column_of_colour
symbol public misc C_egtable_col1
symbol public misc C_egtable_col2
symbol public misc C_egtable
symbol public misc K_object
symbol public misc I_board
symbol public misc K_piece
symbol public misc I_bishop
symbol public misc I_rook
symbol public misc K_list_of_objects
symbol public misc C_majors
symbol public misc pp_auto_3
symbol public misc K_func
symbol public misc K_rule
symbol public misc K_rulebook
symbol public misc K_stuff
symbol public misc S_stuff
symbol public misc R_after1_B
symbol public misc R_after2_B
symbol public misc R_after1
symbol public misc R_after2
symbol public misc RB_after
symbol public misc K_colour____colour
symbol public misc R_101_B
symbol public misc R_101
symbol public misc R_102_B
symbol public misc R_102
symbol public misc amount
symbol public misc R_101_A
kind K_number int32
kind K_truth_state int2
defaultvalue K_number = 47
variable V_banana K_number = 100
constant C_death K_number = -5
constant C_taxes K_number = 14
variable V_anxiety K_number = C_death
constant C_x K_number = 0x7f2a __hex
link early "alpha" "beta" "gamma" "delta"
link before "alpha" "" "" ""
link instead "" "beta" "" ""
link after "" "" "gamma" ""
constant cornelius K_number = dw'frogs'
constant gaius K_number = dw'toads'
splat &"Sing a song of \"six splats\"...\nand don't wait up"
kind K_colour enum
instance I_green K_colour = 1
instance I_red K_colour = 17
variable V_shade K_colour = I_red
kind K_list_of_number list of K_number
constant C_primes K_list_of_number = { 2, 3, 5, 7, 11, 13, 17, 19 }
constant C_concealed K_list_of_number = C_primes
variable V_watch_list K_list_of_number = C_concealed
kind K_text text
constant C_complaint K_text = "This is already quite a long test case."
constant C_raw K_number = &"SOME_I6_DRIVEL"
kind K_odour enum
instance I_citrus K_odour = 5
instance I_leather K_odour = 10
property P_strength K_number __property_name="strength"
permission P_strength K_odour
propertyvalue P_strength I_citrus = 20
propertyvalue P_strength I_leather = 7
property P_lingeringness K_number
permission P_lingeringness K_odour
propertyvalue P_lingeringness I_citrus = 1
propertyvalue P_lingeringness I_leather = 3
propertyvalue P_lingeringness K_odour = 2
kind K_table table
kind K_column_of_number column of K_number
kind K_column_of_colour column of K_colour
constant C_egtable_col1 K_column_of_number = { 1, 4, 9, 16 }
constant C_egtable_col2 K_column_of_colour = { I_green, undef, I_red }
constant C_egtable K_table = { C_egtable_col1, C_egtable_col2 }
kind K_object enum
instance I_board K_object = 1
kind K_piece <= K_object
instance I_bishop K_piece = 2
instance I_rook K_piece = 3
kind K_list_of_objects list of K_object
constant C_majors K_list_of_objects = { I_bishop, I_rook }
permission P_lingeringness I_bishop
kind K_func function K_colour K_number -> K_odour
kind K_rule rule void -> void
kind K_rulebook rulebook of K_rule
kind K_stuff struct K_number K_colour K_odour
constant S_stuff K_stuff = { 5, I_red, I_citrus }
package R_after1_B _code
package R_after2_B _code
constant R_after1 K_rule = R_after1_B
constant R_after2 K_rule = R_after2_B
constant RB_after K_rulebook = { R_after1, R_after2 }
kind K_colour____colour function K_colour -> K_colour
package R_101_B _code
symbol private misc x
symbol external misc K_colour == /main/K_colour
symbol external misc R_102 == /main/R_102
symbol external misc I_green == /main/I_green
symbol external misc K_number == /main/K_number
symbol external misc K_truth_state == /main/K_truth_state
local x K_colour __call_parameter
code
inv R_102
val K_colour I_green
inv !return
inv !modulo
inv !plus
cast K_number <- K_colour
val K_colour x
val K_number 1
val K_truth_state &"a b"
constant R_101 K_colour____colour = R_101_B
package R_102_B _code
symbol private misc x
symbol external misc K_colour == /main/K_colour
symbol external misc I_red == /main/I_red
local x K_colour __call_parameter
code
inv !return
val K_colour I_red
constant R_102 K_colour____colour = R_102_B
constant amount K_number = sum{ 2, C_taxes }
response R_101_A R_101 0 = C_taxes

View file

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

View file

@ -0,0 +1,168 @@
# This is a miscellany of tests.
packagetype _plain
packagetype _code
version 7
primitive !return val -> void
primitive !modulo val val -> val
primitive !plus val val -> val
pragma target_I6 "$MAX_STATIC_DATA=180000"
package main _plain
symbol public misc K_number
symbol public misc K_truth_state
symbol public misc V_banana
symbol public misc C_death
symbol public misc C_taxes
symbol public misc V_anxiety
symbol public misc C_x
symbol public misc cornelius
symbol public misc gaius
symbol public misc mark_my_words
symbol external misc peach
symbol public misc K_colour
symbol public misc I_green
symbol public misc I_red
symbol public misc V_shade
symbol public misc K_list_of_number
symbol public misc C_primes
symbol public misc C_concealed
symbol public misc V_watch_list
symbol public misc 718_varieties
symbol public misc K_text
symbol public misc C_complaint
symbol public misc C_raw
symbol public misc K_odour
symbol public misc I_citrus
symbol public misc I_leather
symbol public misc P_strength
symbol public misc pp_auto_1
symbol public misc P_lingeringness
symbol public misc pp_auto_2
symbol public misc K_table
symbol public misc K_column_of_number
symbol public misc K_column_of_colour
symbol public misc C_egtable_col1
symbol public misc C_egtable_col2
symbol public misc C_egtable
symbol public misc K_object
symbol public misc I_board
symbol public misc K_piece
symbol public misc I_bishop
symbol public misc I_rook
symbol public misc K_list_of_objects
symbol public misc C_majors
symbol public misc pp_auto_3
symbol public misc K_func
symbol public misc K_rule
symbol public misc K_rulebook
symbol public misc K_stuff
symbol public misc S_stuff
symbol public misc R_after1_B
symbol public misc R_after2_B
symbol public misc R_after1
symbol public misc R_after2
symbol public misc RB_after
symbol public misc K_colour____colour
symbol public misc R_101_B
symbol public misc R_101
symbol public misc R_102_B
symbol public misc R_102
symbol public misc amount
symbol public misc R_101_A
kind K_number int32
kind K_truth_state int2
defaultvalue K_number = 47
variable V_banana K_number = 100
constant C_death K_number = -5
constant C_taxes K_number = 14
variable V_anxiety K_number = C_death
constant C_x K_number = 0x7f2a __hex
link early "alpha" "beta" "gamma" "delta"
link before "alpha" "" "" ""
link instead "" "beta" "" ""
link after "" "" "gamma" ""
constant cornelius K_number = dw'frogs'
constant gaius K_number = dw'toads'
splat &"Sing a song of \"six splats\"...\nand don't wait up"
kind K_colour enum
instance I_green K_colour = 1
instance I_red K_colour = 17
variable V_shade K_colour = I_red
kind K_list_of_number list of K_number
constant C_primes K_list_of_number = { 2, 3, 5, 7, 11, 13, 17, 19 }
constant C_concealed K_list_of_number = C_primes
variable V_watch_list K_list_of_number = C_concealed
kind K_text text
constant C_complaint K_text = "This is already quite a long test case."
constant C_raw K_number = &"SOME_I6_DRIVEL"
kind K_odour enum
instance I_citrus K_odour = 5
instance I_leather K_odour = 10
property P_strength K_number __property_name="strength"
permission P_strength K_odour
propertyvalue P_strength I_citrus = 20
propertyvalue P_strength I_leather = 7
property P_lingeringness K_number
permission P_lingeringness K_odour
propertyvalue P_lingeringness I_citrus = 1
propertyvalue P_lingeringness I_leather = 3
propertyvalue P_lingeringness K_odour = 2
kind K_table table
kind K_column_of_number column of K_number
kind K_column_of_colour column of K_colour
constant C_egtable_col1 K_column_of_number = { 1, 4, 9, 16 }
constant C_egtable_col2 K_column_of_colour = { I_green, undef, I_red }
constant C_egtable K_table = { C_egtable_col1, C_egtable_col2 }
kind K_object enum
instance I_board K_object = 1
kind K_piece <= K_object
instance I_bishop K_piece = 2
instance I_rook K_piece = 3
kind K_list_of_objects list of K_object
constant C_majors K_list_of_objects = { I_bishop, I_rook }
permission P_lingeringness I_bishop
kind K_func function K_colour K_number -> K_odour
kind K_rule rule void -> void
kind K_rulebook rulebook of K_rule
kind K_stuff struct K_number K_colour K_odour
constant S_stuff K_stuff = { 5, I_red, I_citrus }
package R_after1_B _code
package R_after2_B _code
constant R_after1 K_rule = R_after1_B
constant R_after2 K_rule = R_after2_B
constant RB_after K_rulebook = { R_after1, R_after2 }
kind K_colour____colour function K_colour -> K_colour
package R_101_B _code
symbol private misc x
symbol external misc K_colour == /main/K_colour
symbol external misc R_102 == /main/R_102
symbol external misc I_green == /main/I_green
symbol external misc K_number == /main/K_number
symbol external misc K_truth_state == /main/K_truth_state
local x K_colour __call_parameter
code
inv R_102
val K_colour I_green
inv !return
inv !modulo
inv !plus
cast K_number <- K_colour
val K_colour x
val K_number 1
val K_truth_state &"a b"
constant R_101 K_colour____colour = R_101_B
package R_102_B _code
symbol private misc x
symbol external misc K_colour == /main/K_colour
symbol external misc I_red == /main/I_red
local x K_colour __call_parameter
code
inv !return
val K_colour I_red
constant R_102 K_colour____colour = R_102_B
constant amount K_number = sum{ 2, C_taxes }
response R_101_A R_101 0 = C_taxes

View file

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

View file

@ -0,0 +1,168 @@
# This is a miscellany of tests.
packagetype _plain
packagetype _code
version 7
primitive !return val -> void
primitive !modulo val val -> val
primitive !plus val val -> val
pragma target_I6 "$MAX_STATIC_DATA=180000"
package main _plain
symbol public misc K_number
symbol public misc K_truth_state
symbol public misc V_banana
symbol public misc C_death
symbol public misc C_taxes
symbol public misc V_anxiety
symbol public misc C_x
symbol public misc cornelius
symbol public misc gaius
symbol public misc mark_my_words
symbol external misc peach
symbol public misc K_colour
symbol public misc I_green
symbol public misc I_red
symbol public misc V_shade
symbol public misc K_list_of_number
symbol public misc C_primes
symbol public misc C_concealed
symbol public misc V_watch_list
symbol public misc 718_varieties
symbol public misc K_text
symbol public misc C_complaint
symbol public misc C_raw
symbol public misc K_odour
symbol public misc I_citrus
symbol public misc I_leather
symbol public misc P_strength
symbol public misc pp_auto_1
symbol public misc P_lingeringness
symbol public misc pp_auto_2
symbol public misc K_table
symbol public misc K_column_of_number
symbol public misc K_column_of_colour
symbol public misc C_egtable_col1
symbol public misc C_egtable_col2
symbol public misc C_egtable
symbol public misc K_object
symbol public misc I_board
symbol public misc K_piece
symbol public misc I_bishop
symbol public misc I_rook
symbol public misc K_list_of_objects
symbol public misc C_majors
symbol public misc pp_auto_3
symbol public misc K_func
symbol public misc K_rule
symbol public misc K_rulebook
symbol public misc K_stuff
symbol public misc S_stuff
symbol public misc R_after1_B
symbol public misc R_after2_B
symbol public misc R_after1
symbol public misc R_after2
symbol public misc RB_after
symbol public misc K_colour____colour
symbol public misc R_101_B
symbol public misc R_101
symbol public misc R_102_B
symbol public misc R_102
symbol public misc amount
symbol public misc R_101_A
kind K_number int32
kind K_truth_state int2
defaultvalue K_number = 47
variable V_banana K_number = 100
constant C_death K_number = -5
constant C_taxes K_number = 14
variable V_anxiety K_number = C_death
constant C_x K_number = 0x7f2a __hex
link early "alpha" "beta" "gamma" "delta"
link before "alpha" "" "" ""
link instead "" "beta" "" ""
link after "" "" "gamma" ""
constant cornelius K_number = dw'frogs'
constant gaius K_number = dw'toads'
splat &"Sing a song of \"six splats\"...\nand don't wait up"
kind K_colour enum
instance I_green K_colour = 1
instance I_red K_colour = 17
variable V_shade K_colour = I_red
kind K_list_of_number list of K_number
constant C_primes K_list_of_number = { 2, 3, 5, 7, 11, 13, 17, 19 }
constant C_concealed K_list_of_number = C_primes
variable V_watch_list K_list_of_number = C_concealed
kind K_text text
constant C_complaint K_text = "This is already quite a long test case."
constant C_raw K_number = &"SOME_I6_DRIVEL"
kind K_odour enum
instance I_citrus K_odour = 5
instance I_leather K_odour = 10
property P_strength K_number __property_name="strength"
permission P_strength K_odour
propertyvalue P_strength I_citrus = 20
propertyvalue P_strength I_leather = 7
property P_lingeringness K_number
permission P_lingeringness K_odour
propertyvalue P_lingeringness I_citrus = 1
propertyvalue P_lingeringness I_leather = 3
propertyvalue P_lingeringness K_odour = 2
kind K_table table
kind K_column_of_number column of K_number
kind K_column_of_colour column of K_colour
constant C_egtable_col1 K_column_of_number = { 1, 4, 9, 16 }
constant C_egtable_col2 K_column_of_colour = { I_green, undef, I_red }
constant C_egtable K_table = { C_egtable_col1, C_egtable_col2 }
kind K_object enum
instance I_board K_object = 1
kind K_piece <= K_object
instance I_bishop K_piece = 2
instance I_rook K_piece = 3
kind K_list_of_objects list of K_object
constant C_majors K_list_of_objects = { I_bishop, I_rook }
permission P_lingeringness I_bishop
kind K_func function K_colour K_number -> K_odour
kind K_rule rule void -> void
kind K_rulebook rulebook of K_rule
kind K_stuff struct K_number K_colour K_odour
constant S_stuff K_stuff = { 5, I_red, I_citrus }
package R_after1_B _code
package R_after2_B _code
constant R_after1 K_rule = R_after1_B
constant R_after2 K_rule = R_after2_B
constant RB_after K_rulebook = { R_after1, R_after2 }
kind K_colour____colour function K_colour -> K_colour
package R_101_B _code
symbol private misc x
symbol external misc K_colour == /main/K_colour
symbol external misc R_102 == /main/R_102
symbol external misc I_green == /main/I_green
symbol external misc K_number == /main/K_number
symbol external misc K_truth_state == /main/K_truth_state
local x K_colour __call_parameter
code
inv R_102
val K_colour I_green
inv !return
inv !modulo
inv !plus
cast K_number <- K_colour
val K_colour x
val K_number 1
val K_truth_state &"a b"
constant R_101 K_colour____colour = R_101_B
package R_102_B _code
symbol private misc x
symbol external misc K_colour == /main/K_colour
symbol external misc I_red == /main/I_red
local x K_colour __call_parameter
code
inv !return
val K_colour I_red
constant R_102 K_colour____colour = R_102_B
constant amount K_number = sum{ 2, C_taxes }
response R_101_A R_101 0 = C_taxes

View file

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

View file

@ -0,0 +1,168 @@
# This is a miscellany of tests.
packagetype _plain
packagetype _code
version 7
primitive !return val -> void
primitive !modulo val val -> val
primitive !plus val val -> val
pragma target_I6 "$MAX_STATIC_DATA=180000"
package main _plain
symbol public misc K_number
symbol public misc K_truth_state
symbol public misc V_banana
symbol public misc C_death
symbol public misc C_taxes
symbol public misc V_anxiety
symbol public misc C_x
symbol public misc cornelius
symbol public misc gaius
symbol public misc mark_my_words
symbol external misc peach
symbol public misc K_colour
symbol public misc I_green
symbol public misc I_red
symbol public misc V_shade
symbol public misc K_list_of_number
symbol public misc C_primes
symbol public misc C_concealed
symbol public misc V_watch_list
symbol public misc 718_varieties
symbol public misc K_text
symbol public misc C_complaint
symbol public misc C_raw
symbol public misc K_odour
symbol public misc I_citrus
symbol public misc I_leather
symbol public misc P_strength
symbol public misc pp_auto_1
symbol public misc P_lingeringness
symbol public misc pp_auto_2
symbol public misc K_table
symbol public misc K_column_of_number
symbol public misc K_column_of_colour
symbol public misc C_egtable_col1
symbol public misc C_egtable_col2
symbol public misc C_egtable
symbol public misc K_object
symbol public misc I_board
symbol public misc K_piece
symbol public misc I_bishop
symbol public misc I_rook
symbol public misc K_list_of_objects
symbol public misc C_majors
symbol public misc pp_auto_3
symbol public misc K_func
symbol public misc K_rule
symbol public misc K_rulebook
symbol public misc K_stuff
symbol public misc S_stuff
symbol public misc R_after1_B
symbol public misc R_after2_B
symbol public misc R_after1
symbol public misc R_after2
symbol public misc RB_after
symbol public misc K_colour____colour
symbol public misc R_101_B
symbol public misc R_101
symbol public misc R_102_B
symbol public misc R_102
symbol public misc amount
symbol public misc R_101_A
kind K_number int32
kind K_truth_state int2
defaultvalue K_number = 47
variable V_banana K_number = 100
constant C_death K_number = -5
constant C_taxes K_number = 14
variable V_anxiety K_number = C_death
constant C_x K_number = 0x7f2a __hex
link early "alpha" "beta" "gamma" "delta"
link before "alpha" "" "" ""
link instead "" "beta" "" ""
link after "" "" "gamma" ""
constant cornelius K_number = dw'frogs'
constant gaius K_number = dw'toads'
splat &"Sing a song of \"six splats\"...\nand don't wait up"
kind K_colour enum
instance I_green K_colour = 1
instance I_red K_colour = 17
variable V_shade K_colour = I_red
kind K_list_of_number list of K_number
constant C_primes K_list_of_number = { 2, 3, 5, 7, 11, 13, 17, 19 }
constant C_concealed K_list_of_number = C_primes
variable V_watch_list K_list_of_number = C_concealed
kind K_text text
constant C_complaint K_text = "This is already quite a long test case."
constant C_raw K_number = &"SOME_I6_DRIVEL"
kind K_odour enum
instance I_citrus K_odour = 5
instance I_leather K_odour = 10
property P_strength K_number __property_name="strength"
permission P_strength K_odour
propertyvalue P_strength I_citrus = 20
propertyvalue P_strength I_leather = 7
property P_lingeringness K_number
permission P_lingeringness K_odour
propertyvalue P_lingeringness I_citrus = 1
propertyvalue P_lingeringness I_leather = 3
propertyvalue P_lingeringness K_odour = 2
kind K_table table
kind K_column_of_number column of K_number
kind K_column_of_colour column of K_colour
constant C_egtable_col1 K_column_of_number = { 1, 4, 9, 16 }
constant C_egtable_col2 K_column_of_colour = { I_green, undef, I_red }
constant C_egtable K_table = { C_egtable_col1, C_egtable_col2 }
kind K_object enum
instance I_board K_object = 1
kind K_piece <= K_object
instance I_bishop K_piece = 2
instance I_rook K_piece = 3
kind K_list_of_objects list of K_object
constant C_majors K_list_of_objects = { I_bishop, I_rook }
permission P_lingeringness I_bishop
kind K_func function K_colour K_number -> K_odour
kind K_rule rule void -> void
kind K_rulebook rulebook of K_rule
kind K_stuff struct K_number K_colour K_odour
constant S_stuff K_stuff = { 5, I_red, I_citrus }
package R_after1_B _code
package R_after2_B _code
constant R_after1 K_rule = R_after1_B
constant R_after2 K_rule = R_after2_B
constant RB_after K_rulebook = { R_after1, R_after2 }
kind K_colour____colour function K_colour -> K_colour
package R_101_B _code
symbol private misc x
symbol external misc K_colour == /main/K_colour
symbol external misc R_102 == /main/R_102
symbol external misc I_green == /main/I_green
symbol external misc K_number == /main/K_number
symbol external misc K_truth_state == /main/K_truth_state
local x K_colour __call_parameter
code
inv R_102
val K_colour I_green
inv !return
inv !modulo
inv !plus
cast K_number <- K_colour
val K_colour x
val K_number 1
val K_truth_state &"a b"
constant R_101 K_colour____colour = R_101_B
package R_102_B _code
symbol private misc x
symbol external misc K_colour == /main/K_colour
symbol external misc I_red == /main/I_red
local x K_colour __call_parameter
code
inv !return
val K_colour I_red
constant R_102 K_colour____colour = R_102_B
constant amount K_number = sum{ 2, C_taxes }
response R_101_A R_101 0 = C_taxes

View file

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

View file

@ -0,0 +1,168 @@
# This is a miscellany of tests.
packagetype _plain
packagetype _code
version 7
primitive !return val -> void
primitive !modulo val val -> val
primitive !plus val val -> val
pragma target_I6 "$MAX_STATIC_DATA=180000"
package main _plain
symbol public misc K_number
symbol public misc K_truth_state
symbol public misc V_banana
symbol public misc C_death
symbol public misc C_taxes
symbol public misc V_anxiety
symbol public misc C_x
symbol public misc cornelius
symbol public misc gaius
symbol public misc mark_my_words
symbol external misc peach
symbol public misc K_colour
symbol public misc I_green
symbol public misc I_red
symbol public misc V_shade
symbol public misc K_list_of_number
symbol public misc C_primes
symbol public misc C_concealed
symbol public misc V_watch_list
symbol public misc 718_varieties
symbol public misc K_text
symbol public misc C_complaint
symbol public misc C_raw
symbol public misc K_odour
symbol public misc I_citrus
symbol public misc I_leather
symbol public misc P_strength
symbol public misc pp_auto_1
symbol public misc P_lingeringness
symbol public misc pp_auto_2
symbol public misc K_table
symbol public misc K_column_of_number
symbol public misc K_column_of_colour
symbol public misc C_egtable_col1
symbol public misc C_egtable_col2
symbol public misc C_egtable
symbol public misc K_object
symbol public misc I_board
symbol public misc K_piece
symbol public misc I_bishop
symbol public misc I_rook
symbol public misc K_list_of_objects
symbol public misc C_majors
symbol public misc pp_auto_3
symbol public misc K_func
symbol public misc K_rule
symbol public misc K_rulebook
symbol public misc K_stuff
symbol public misc S_stuff
symbol public misc R_after1_B
symbol public misc R_after2_B
symbol public misc R_after1
symbol public misc R_after2
symbol public misc RB_after
symbol public misc K_colour____colour
symbol public misc R_101_B
symbol public misc R_101
symbol public misc R_102_B
symbol public misc R_102
symbol public misc amount
symbol public misc R_101_A
kind K_number int32
kind K_truth_state int2
defaultvalue K_number = 47
variable V_banana K_number = 100
constant C_death K_number = -5
constant C_taxes K_number = 14
variable V_anxiety K_number = C_death
constant C_x K_number = 0x7f2a __hex
link early "alpha" "beta" "gamma" "delta"
link before "alpha" "" "" ""
link instead "" "beta" "" ""
link after "" "" "gamma" ""
constant cornelius K_number = dw'frogs'
constant gaius K_number = dw'toads'
splat &"Sing a song of \"six splats\"...\nand don't wait up"
kind K_colour enum
instance I_green K_colour = 1
instance I_red K_colour = 17
variable V_shade K_colour = I_red
kind K_list_of_number list of K_number
constant C_primes K_list_of_number = { 2, 3, 5, 7, 11, 13, 17, 19 }
constant C_concealed K_list_of_number = C_primes
variable V_watch_list K_list_of_number = C_concealed
kind K_text text
constant C_complaint K_text = "This is already quite a long test case."
constant C_raw K_number = &"SOME_I6_DRIVEL"
kind K_odour enum
instance I_citrus K_odour = 5
instance I_leather K_odour = 10
property P_strength K_number __property_name="strength"
permission P_strength K_odour
propertyvalue P_strength I_citrus = 20
propertyvalue P_strength I_leather = 7
property P_lingeringness K_number
permission P_lingeringness K_odour
propertyvalue P_lingeringness I_citrus = 1
propertyvalue P_lingeringness I_leather = 3
propertyvalue P_lingeringness K_odour = 2
kind K_table table
kind K_column_of_number column of K_number
kind K_column_of_colour column of K_colour
constant C_egtable_col1 K_column_of_number = { 1, 4, 9, 16 }
constant C_egtable_col2 K_column_of_colour = { I_green, undef, I_red }
constant C_egtable K_table = { C_egtable_col1, C_egtable_col2 }
kind K_object enum
instance I_board K_object = 1
kind K_piece <= K_object
instance I_bishop K_piece = 2
instance I_rook K_piece = 3
kind K_list_of_objects list of K_object
constant C_majors K_list_of_objects = { I_bishop, I_rook }
permission P_lingeringness I_bishop
kind K_func function K_colour K_number -> K_odour
kind K_rule rule void -> void
kind K_rulebook rulebook of K_rule
kind K_stuff struct K_number K_colour K_odour
constant S_stuff K_stuff = { 5, I_red, I_citrus }
package R_after1_B _code
package R_after2_B _code
constant R_after1 K_rule = R_after1_B
constant R_after2 K_rule = R_after2_B
constant RB_after K_rulebook = { R_after1, R_after2 }
kind K_colour____colour function K_colour -> K_colour
package R_101_B _code
symbol private misc x
symbol external misc K_colour == /main/K_colour
symbol external misc R_102 == /main/R_102
symbol external misc I_green == /main/I_green
symbol external misc K_number == /main/K_number
symbol external misc K_truth_state == /main/K_truth_state
local x K_colour __call_parameter
code
inv R_102
val K_colour I_green
inv !return
inv !modulo
inv !plus
cast K_number <- K_colour
val K_colour x
val K_number 1
val K_truth_state &"a b"
constant R_101 K_colour____colour = R_101_B
package R_102_B _code
symbol private misc x
symbol external misc K_colour == /main/K_colour
symbol external misc I_red == /main/I_red
local x K_colour __call_parameter
code
inv !return
val K_colour I_red
constant R_102 K_colour____colour = R_102_B
constant amount K_number = sum{ 2, C_taxes }
response R_101_A R_101 0 = C_taxes

View file

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

View file

@ -0,0 +1,168 @@
# This is a miscellany of tests.
packagetype _plain
packagetype _code
version 7
primitive !return val -> void
primitive !modulo val val -> val
primitive !plus val val -> val
pragma target_I6 "$MAX_STATIC_DATA=180000"
package main _plain
symbol public misc K_number
symbol public misc K_truth_state
symbol public misc V_banana
symbol public misc C_death
symbol public misc C_taxes
symbol public misc V_anxiety
symbol public misc C_x
symbol public misc cornelius
symbol public misc gaius
symbol public misc mark_my_words
symbol external misc peach
symbol public misc K_colour
symbol public misc I_green
symbol public misc I_red
symbol public misc V_shade
symbol public misc K_list_of_number
symbol public misc C_primes
symbol public misc C_concealed
symbol public misc V_watch_list
symbol public misc 718_varieties
symbol public misc K_text
symbol public misc C_complaint
symbol public misc C_raw
symbol public misc K_odour
symbol public misc I_citrus
symbol public misc I_leather
symbol public misc P_strength
symbol public misc pp_auto_1
symbol public misc P_lingeringness
symbol public misc pp_auto_2
symbol public misc K_table
symbol public misc K_column_of_number
symbol public misc K_column_of_colour
symbol public misc C_egtable_col1
symbol public misc C_egtable_col2
symbol public misc C_egtable
symbol public misc K_object
symbol public misc I_board
symbol public misc K_piece
symbol public misc I_bishop
symbol public misc I_rook
symbol public misc K_list_of_objects
symbol public misc C_majors
symbol public misc pp_auto_3
symbol public misc K_func
symbol public misc K_rule
symbol public misc K_rulebook
symbol public misc K_stuff
symbol public misc S_stuff
symbol public misc R_after1_B
symbol public misc R_after2_B
symbol public misc R_after1
symbol public misc R_after2
symbol public misc RB_after
symbol public misc K_colour____colour
symbol public misc R_101_B
symbol public misc R_101
symbol public misc R_102_B
symbol public misc R_102
symbol public misc amount
symbol public misc R_101_A
kind K_number int32
kind K_truth_state int2
defaultvalue K_number = 47
variable V_banana K_number = 100
constant C_death K_number = -5
constant C_taxes K_number = 14
variable V_anxiety K_number = C_death
constant C_x K_number = 0x7f2a __hex
link early "alpha" "beta" "gamma" "delta"
link before "alpha" "" "" ""
link instead "" "beta" "" ""
link after "" "" "gamma" ""
constant cornelius K_number = dw'frogs'
constant gaius K_number = dw'toads'
splat &"Sing a song of \"six splats\"...\nand don't wait up"
kind K_colour enum
instance I_green K_colour = 1
instance I_red K_colour = 17
variable V_shade K_colour = I_red
kind K_list_of_number list of K_number
constant C_primes K_list_of_number = { 2, 3, 5, 7, 11, 13, 17, 19 }
constant C_concealed K_list_of_number = C_primes
variable V_watch_list K_list_of_number = C_concealed
kind K_text text
constant C_complaint K_text = "This is already quite a long test case."
constant C_raw K_number = &"SOME_I6_DRIVEL"
kind K_odour enum
instance I_citrus K_odour = 5
instance I_leather K_odour = 10
property P_strength K_number __property_name="strength"
permission P_strength K_odour
propertyvalue P_strength I_citrus = 20
propertyvalue P_strength I_leather = 7
property P_lingeringness K_number
permission P_lingeringness K_odour
propertyvalue P_lingeringness I_citrus = 1
propertyvalue P_lingeringness I_leather = 3
propertyvalue P_lingeringness K_odour = 2
kind K_table table
kind K_column_of_number column of K_number
kind K_column_of_colour column of K_colour
constant C_egtable_col1 K_column_of_number = { 1, 4, 9, 16 }
constant C_egtable_col2 K_column_of_colour = { I_green, undef, I_red }
constant C_egtable K_table = { C_egtable_col1, C_egtable_col2 }
kind K_object enum
instance I_board K_object = 1
kind K_piece <= K_object
instance I_bishop K_piece = 2
instance I_rook K_piece = 3
kind K_list_of_objects list of K_object
constant C_majors K_list_of_objects = { I_bishop, I_rook }
permission P_lingeringness I_bishop
kind K_func function K_colour K_number -> K_odour
kind K_rule rule void -> void
kind K_rulebook rulebook of K_rule
kind K_stuff struct K_number K_colour K_odour
constant S_stuff K_stuff = { 5, I_red, I_citrus }
package R_after1_B _code
package R_after2_B _code
constant R_after1 K_rule = R_after1_B
constant R_after2 K_rule = R_after2_B
constant RB_after K_rulebook = { R_after1, R_after2 }
kind K_colour____colour function K_colour -> K_colour
package R_101_B _code
symbol private misc x
symbol external misc K_colour == /main/K_colour
symbol external misc R_102 == /main/R_102
symbol external misc I_green == /main/I_green
symbol external misc K_number == /main/K_number
symbol external misc K_truth_state == /main/K_truth_state
local x K_colour __call_parameter
code
inv R_102
val K_colour I_green
inv !return
inv !modulo
inv !plus
cast K_number <- K_colour
val K_colour x
val K_number 1
val K_truth_state &"a b"
constant R_101 K_colour____colour = R_101_B
package R_102_B _code
symbol private misc x
symbol external misc K_colour == /main/K_colour
symbol external misc I_red == /main/I_red
local x K_colour __call_parameter
code
inv !return
val K_colour I_red
constant R_102 K_colour____colour = R_102_B
constant amount K_number = sum{ 2, C_taxes }
response R_101_A R_101 0 = C_taxes

View file

@ -1,6 +1,7 @@
-cases [Valid] 'inter/Tests/Valid'
-cases [Invalid] 'inter/Tests/Invalid'
-cases [General] 'inter/Tests/General'
-cases [Duplex] 'inter/Tests/Duplex'
-cases [PipelineErrors] 'inter/Tests/PipelineErrors'
-cases [Units] 'inter/Tests/Units'
@ -69,6 +70,37 @@
-end
-recipe [Duplex]
set: $P = $PATH/$CASE.interpipeline
set: $OA = $PATH/_Pairs/$CASE+A.intert
set: $OB = $PATH/_Pairs/$CASE+B.intert
set: $BA = $PATH/_Binaries/$CASE+A.interb
set: $BB = $PATH/_Binaries/$CASE+B.interb
set: $AA = $PATH/_Results_Actual/$CASE+A.txt
set: $IA = $PATH/_Results_Ideal/$CASE+A.txt
set: $AB = $PATH/_Results_Actual/$CASE+B.txt
set: $IB = $PATH/_Results_Ideal/$CASE+B.txt
set: $T = $PATH/_Console/$CASE.txt
mkdir: $PATH/_Results_Actual
mkdir: $PATH/_Results_Ideal
mkdir: $PATH/_Console
mkdir: $PATH/_Binaries
step: inter/Tangled/inter -variable '*inA=$OA' -variable '*inB=$OB' -variable '*binA=$BA' -variable '*binB=$BB' -variable '*outA=$AA' -variable '*outB=$AB' -pipeline-file $P
or: 'failed to produce output' $T
show: $A
match text: $AA $IA
or: 'produced incorrect output on A'
match text: $AB $IB
or: 'produced incorrect output on B'
-end
-recipe [PipelineErrors]
set: $O = $PATH/$CASE.intert

View file

@ -22,6 +22,7 @@ typedef struct pipeline_step {
int repository_argument;
struct text_stream *text_out_file;
struct inter_tree *repository;
struct codegen_pipeline *pipeline;
MEMORY_MANAGEMENT
} pipeline_step;
@ -46,6 +47,7 @@ void CodeGen::Pipeline::clean_step(pipeline_step *step) {
step->from_memory = FALSE;
step->the_PP = NULL;
step->repository = NULL;
step->pipeline = NULL;
}
@ Here we write a textual description to a string, which is useful for
@ -255,6 +257,7 @@ void CodeGen::Pipeline::run(pathname *P, codegen_pipeline *S, int N, pathname **
step->the_N = N;
step->the_PP = PP;
step->repository = I;
step->pipeline = S;
TEMPORARY_TEXT(STAGE_NAME);
WRITE_TO(STAGE_NAME, "inter step %d/%d (at %dcs): ", ++step_count, step_total,
@ -399,6 +402,9 @@ void CodeGen::Pipeline::visitor(inter_tree *I, inter_frame P, void *state) {
LOG("Frame gives package as $3, but its location is in package $3\n",
Inter::Frame::ID_to_package(&P, c)->package_name,
Inter::Frame::ID_to_package(&P, a)->package_name);
WRITE_TO(STDERR, "Frame gives package as %d, but its location is in package %d\n",
Inter::Frame::ID_to_package(&P, c)->index_n,
Inter::Frame::ID_to_package(&P, a)->index_n);
internal_error("zap");
}

View file

@ -46,6 +46,7 @@ void CodeGen::Stage::make_stages(void) {
CodeGen::Stage::new(I"stop", CodeGen::Stage::run_stop_stage, NO_STAGE_ARG, FALSE);
CodeGen::Stage::new(I"read", CodeGen::Stage::run_read_stage, FILE_STAGE_ARG, TRUE);
CodeGen::Stage::new(I"move", CodeGen::Stage::run_move_stage, GENERAL_STAGE_ARG, TRUE);
CodeGen::Stage::new(I"mask", CodeGen::Stage::run_mask_stage, GENERAL_STAGE_ARG, TRUE);
CodeGen::Stage::new(I"unmask", CodeGen::Stage::run_unmask_stage, NO_STAGE_ARG, FALSE);
@ -77,6 +78,27 @@ int CodeGen::Stage::run_read_stage(pipeline_step *step) {
return TRUE;
}
int CodeGen::Stage::run_move_stage(pipeline_step *step) {
LOG("Arg is %S.\n", step->step_argument);
match_results mr = Regexp::create_mr();
inter_symbol *S = NULL;
if (Regexp::match(&mr, step->step_argument, L"(%d):(%c+)")) {
int from_rep = Str::atoi(mr.exp[0], 0);
if (step->pipeline->repositories[from_rep] == NULL)
internal_error("no such repository");
S = Inter::SymbolsTables::url_name_to_symbol(
step->pipeline->repositories[from_rep], NULL, mr.exp[1]);
}
Regexp::dispose_of(&mr);
if (S == NULL) internal_error("no such location");
inter_package *pack = Inter::Package::which(S);
if (pack == NULL) internal_error("not a package");
if (trace_bin) WRITE_TO(STDOUT, "Move %S\n", pack->package_name->symbol_name);
return TRUE;
}
int CodeGen::Stage::run_mask_stage(pipeline_step *step) {
LOG("Arg is %S.\n", step->step_argument);
inter_symbol *S = Inter::SymbolsTables::url_name_to_symbol(step->repository, NULL, step->step_argument);

View file

@ -557,7 +557,7 @@ void CodeGen::Assimilate::value(inter_tree *I, inter_package *pack, inter_bookma
int c = Str::get(pos);
PUT_TO(dw, c);
}
inter_t ID = Inter::create_text(I);
inter_t ID = Inter::Warehouse::create_text(Inter::warehouse(I), pack);
text_stream *glob_storage = Inter::get_text(I, ID);
Str::copy(glob_storage, dw);
*val1 = DWORD_IVAL; *val2 = ID;
@ -574,7 +574,7 @@ void CodeGen::Assimilate::value(inter_tree *I, inter_package *pack, inter_bookma
int c = Str::get(pos);
PUT_TO(dw, c);
}
inter_t ID = Inter::create_text(I);
inter_t ID = Inter::Warehouse::create_text(Inter::warehouse(I), pack);
text_stream *glob_storage = Inter::get_text(I, ID);
Str::copy(glob_storage, dw);
*val1 = LITERAL_TEXT_IVAL; *val2 = ID;
@ -675,7 +675,7 @@ inter_symbol *CodeGen::Assimilate::compute_constant(inter_tree *I, inter_package
WRITE_TO(STDERR, "Forced to glob: %S\n", sch->converted_from);
internal_error("Reduced to glob in assimilation");
inter_t ID = Inter::create_text(I);
inter_t ID = Inter::Warehouse::create_text(Inter::warehouse(I), pack);
text_stream *glob_storage = Inter::get_text(I, ID);
Str::copy(glob_storage, sch->converted_from);

View file

@ -144,7 +144,7 @@ void CodeGen::MergeTemplate::guard(inter_error_message *ERR) {
}
void CodeGen::MergeTemplate::entire_splat(inter_bookmark *IBM, text_stream *origin, text_stream *content, inter_t level, inter_symbol *code_block) {
inter_t SID = Inter::create_text(Inter::Bookmarks::tree(IBM));
inter_t SID = Inter::Warehouse::create_text(Inter::Bookmarks::warehouse(IBM), Inter::Bookmarks::package(IBM));
text_stream *glob_storage = Inter::get_text(Inter::Bookmarks::tree(IBM), SID);
Str::copy(glob_storage, content);
CodeGen::MergeTemplate::guard(Inter::Splat::new(IBM, code_block, SID, 0, level, 0, NULL));

View file

@ -8,6 +8,9 @@ inter.mk
Tests/Invalid/_Results_Actual/
Tests/General/_Results_Actual/
Tests/General/_Console/
Tests/Duplex/_Results_Actual/
Tests/Duplex/_Console/
Tests/Duplex/_Binaries/
Tests/Valid/_Binary/
Tests/Valid/_Console/
Tests/Valid/_Textual/

View file

@ -24,6 +24,10 @@ inter_tree *Inter::Bookmarks::tree(inter_bookmark *IBM) {
return IBM->current_package->stored_in;
}
inter_warehouse *Inter::Bookmarks::warehouse(inter_bookmark *IBM) {
return Inter::warehouse(Inter::Bookmarks::tree(IBM));
}
inter_bookmark Inter::Bookmarks::at_end_of_this_package(inter_package *pack) {
if (pack == NULL) internal_error("no package supplied");
inter_bookmark IBM;

View file

@ -78,8 +78,8 @@ int Inter::Frame::eq(inter_frame *F1, inter_frame *F2) {
}
@ =
inter_frame Inter::Frame::root_frame(inter_tree *I) {
inter_frame P = Inter::Warehouse::find_room(Inter::warehouse(I), Inter::get_global_symbols(I), 2, NULL, NULL);
inter_frame Inter::Frame::root_frame(inter_warehouse *warehouse, inter_symbols_table *globals) {
inter_frame P = Inter::Warehouse::find_room(warehouse, globals, 2, NULL, NULL);
P.data[ID_IFLD] = (inter_t) NOP_IST;
P.data[LEVEL_IFLD] = 0;
return P;

View file

@ -183,32 +183,32 @@ inter_error_message *Inter::Types::read(text_stream *line, inter_error_location
*val1 = UNDEF_IVAL; *val2 = 0; return NULL;
}
if ((Str::begins_with_wide_string(S, L"\"")) && (Str::ends_with_wide_string(S, L"\""))) {
*val1 = LITERAL_TEXT_IVAL; *val2 = Inter::create_text(IC);
*val1 = LITERAL_TEXT_IVAL; *val2 = Inter::Warehouse::create_text(Inter::warehouse(IC), pack);
text_stream *glob_storage = Inter::get_text(IC, *val2);
return Inter::Constant::parse_text(glob_storage, S, 1, Str::len(S)-2, eloc);
}
if ((Str::begins_with_wide_string(S, L"r\"")) && (Str::ends_with_wide_string(S, L"\""))) {
*val1 = REAL_IVAL; *val2 = Inter::create_text(IC);
*val1 = REAL_IVAL; *val2 = Inter::Warehouse::create_text(Inter::warehouse(IC), pack);
text_stream *glob_storage = Inter::get_text(IC, *val2);
return Inter::Constant::parse_text(glob_storage, S, 2, Str::len(S)-2, eloc);
}
if ((Str::begins_with_wide_string(S, L"&\"")) && (Str::ends_with_wide_string(S, L"\""))) {
*val1 = GLOB_IVAL; *val2 = Inter::create_text(IC);
*val1 = GLOB_IVAL; *val2 = Inter::Warehouse::create_text(Inter::warehouse(IC), pack);
text_stream *glob_storage = Inter::get_text(IC, *val2);
return Inter::Constant::parse_text(glob_storage, S, 2, Str::len(S)-2, eloc);
}
if ((Str::begins_with_wide_string(S, L"dw'")) && (Str::ends_with_wide_string(S, L"'"))) {
*val1 = DWORD_IVAL; *val2 = Inter::create_text(IC);
*val1 = DWORD_IVAL; *val2 = Inter::Warehouse::create_text(Inter::warehouse(IC), pack);
text_stream *glob_storage = Inter::get_text(IC, *val2);
return Inter::Constant::parse_text(glob_storage, S, 3, Str::len(S)-2, eloc);
}
if ((Str::begins_with_wide_string(S, L"dwp'")) && (Str::ends_with_wide_string(S, L"'"))) {
*val1 = PDWORD_IVAL; *val2 = Inter::create_text(IC);
*val1 = PDWORD_IVAL; *val2 = Inter::Warehouse::create_text(Inter::warehouse(IC), pack);
text_stream *glob_storage = Inter::get_text(IC, *val2);
return Inter::Constant::parse_text(glob_storage, S, 4, Str::len(S)-2, eloc);
}
if ((Str::begins_with_wide_string(S, L"^\"")) && (Str::ends_with_wide_string(S, L"\""))) {
*val1 = DIVIDER_IVAL; *val2 = Inter::create_text(IC);
*val1 = DIVIDER_IVAL; *val2 = Inter::Warehouse::create_text(Inter::warehouse(IC), pack);
text_stream *divider_storage = Inter::get_text(IC, *val2);
return Inter::Constant::parse_text(divider_storage, S, 2, Str::len(S)-2, eloc);
}

View file

@ -7,6 +7,8 @@ The binary representation of Inter, saved out to a file, is portable and
complete in itself.
=
int trace_bin = FALSE;
void Inter::Binary::read(inter_tree *I, filename *F) {
LOGIF(INTER_FILE_READ, "(Reading binary inter file %f)\n", F);
long int max_offset = BinaryFiles::size(F);
@ -18,6 +20,8 @@ void Inter::Binary::read(inter_tree *I, filename *F) {
inter_warehouse *warehouse = Inter::warehouse(I);
inter_t *grid = NULL;
inter_t grid_extent = 0;
unsigned int X = 0;
@<Read the shibboleth@>;
@ -25,6 +29,7 @@ void Inter::Binary::read(inter_tree *I, filename *F) {
@<Read the resources@>;
@<Read the symbol equations@>;
@<Read the bytecode@>;
if (grid) Memory::I7_array_free(grid, INTER_BYTECODE_MREASON, (int) grid_extent, sizeof(inter_t));
BinaryFiles::close(fh);
}
@ -33,6 +38,7 @@ void Inter::Binary::read(inter_tree *I, filename *F) {
=
void Inter::Binary::write(filename *F, inter_tree *I) {
if (trace_bin) WRITE_TO(STDOUT, "Writing binary inter file %f\n", F);
LOGIF(INTER_FILE_READ, "(Writing binary inter file %f)\n", F);
FILE *fh = BinaryFiles::open_for_writing(F);
inter_warehouse *warehouse = Inter::warehouse(I);
@ -95,51 +101,106 @@ resource block later on.
BinaryFiles::write_int32(fh, 0);
@ There follows a block of resources, which is a list in which each entry opens
with a word identifying which resource is meant; when |NO_IRSRC| is reached,
that's the end of the list and therefore the block.
@e NO_IRSRC from 0
@e STRING_IRSRC
@e SYMBOLS_TABLE_IRSRC
@e FRAME_LIST_IRSRC
@e PACKAGE_IRSRC
with a word identifying which resource number is meant; when this is zero,
that's the end of the list and therefore the block. (There is no resource 0.)
@<Read the resources@> =
int resource_counter = 0;
while (BinaryFiles::read_int32(fh, &X)) {
if (X == NO_IRSRC) break;
resource_counter++;
inter_t n = (inter_t) resource_counter;
if (resource_counter >= 3) n = Inter::Warehouse::create_resource(warehouse);
inter_resource_holder *res = &(warehouse->stored_resources[n]);
switch (X) {
case STRING_IRSRC: @<Read a string resource@>; break;
case SYMBOLS_TABLE_IRSRC: @<Read a symbols table resource@>; break;
case FRAME_LIST_IRSRC: @<Read a frame list resource@>; break;
case PACKAGE_IRSRC: @<Read a package resource@>; break;
unsigned int count = 0;
if (BinaryFiles::read_int32(fh, &count) == FALSE)
Inter::Binary::read_error(&eloc, ftell(fh), I"bytecode incomplete");
if (count > 0) {
unsigned int grid_extent = 0;
if (BinaryFiles::read_int32(fh, &grid_extent) == FALSE)
Inter::Binary::read_error(&eloc, ftell(fh), I"bytecode incomplete");
if (grid_extent == 0) {
Inter::Binary::read_error(&eloc, ftell(fh), I"max zero");
grid_extent = 1000;
}
grid = (inter_t *) Memory::I7_calloc((int) grid_extent, sizeof(inter_t), INTER_BYTECODE_MREASON);
for (inter_t i=0; i<grid_extent; i++) grid[i] = 0;
for (inter_t i=0; i<count; i++) {
unsigned int from_N;
if (BinaryFiles::read_int32(fh, &from_N)) {
inter_t n;
switch (i) {
case 0: n = (inter_t) I->root_package->package_scope->n_index; break;
case 1: n = (inter_t) I->root_package->index_n; break;
default: n = Inter::Warehouse::create_resource(warehouse); break;
}
if (trace_bin) WRITE_TO(STDOUT, "Reading resource %d <--- %d\n", n, from_N);
if (from_N >= grid_extent) {
from_N = grid_extent-1;
Inter::Binary::read_error(&eloc, ftell(fh), I"max incorrect");
}
grid[from_N] = n;
} else Inter::Binary::read_error(&eloc, ftell(fh), I"bytecode incomplete");
}
for (inter_t i=0; i<grid_extent; i++) {
if (trace_bin) WRITE_TO(STDOUT, "%d ", grid[i]);
}
if (trace_bin) WRITE_TO(STDOUT, "\n");
for (inter_t i=0; i<count; i++) {
unsigned int from_N = 0;
if (BinaryFiles::read_int32(fh, &from_N) == FALSE)
Inter::Binary::read_error(&eloc, ftell(fh), I"bytecode incomplete");
if ((from_N == 0) || (from_N >= grid_extent)) {
Inter::Binary::read_error(&eloc, ftell(fh), I"from-N out of range");
from_N = grid_extent - 1;
}
inter_t n = grid[from_N];
inter_resource_holder *res = &(warehouse->stored_resources[n]);
unsigned int X = NO_IRSRC;
if (BinaryFiles::read_int32(fh, &X) == FALSE)
Inter::Binary::read_error(&eloc, ftell(fh), I"bytecode incomplete");
if (trace_bin) WRITE_TO(STDOUT, "Reading resource %d -> %d type %d\n", from_N, n, X);
switch (X) {
case STRING_IRSRC: @<Read a string resource@>; break;
case SYMBOLS_TABLE_IRSRC: @<Read a symbols table resource@>; break;
case FRAME_LIST_IRSRC: @<Read a frame list resource@>; break;
case PACKAGE_IRSRC: @<Read a package resource@>; break;
}
}
}
@<Write the resources@> =
int max = -1, count = 0;
for (int n = 1; n < warehouse->size; n++) {
inter_resource_holder *res = &(warehouse->stored_resources[n]);
if (res->stored_text_stream) {
BinaryFiles::write_int32(fh, STRING_IRSRC);
@<Write a string resource@>;
} else if (res->stored_symbols_table) {
BinaryFiles::write_int32(fh, SYMBOLS_TABLE_IRSRC);
@<Write a symbols table resource@>;
} else if (res->stored_package) {
BinaryFiles::write_int32(fh, PACKAGE_IRSRC);
@<Write a package resource@>;
} else {
BinaryFiles::write_int32(fh, FRAME_LIST_IRSRC);
@<Write a frame list resource@>;
inter_package *owner = warehouse->stored_resources[n].owning_package;
if ((owner) && (owner->stored_in != I)) continue;
count++;
if (n+1 > max) max = n+1;
}
BinaryFiles::write_int32(fh, (unsigned int) count);
if (count >= 0) {
BinaryFiles::write_int32(fh, (unsigned int) max);
for (int n = 1; n < warehouse->size; n++) {
inter_package *owner = warehouse->stored_resources[n].owning_package;
if ((owner) && (owner->stored_in != I)) continue;
BinaryFiles::write_int32(fh, (unsigned int) n);
}
for (int n = 1; n < warehouse->size; n++) {
inter_package *owner = warehouse->stored_resources[n].owning_package;
if ((owner) && (owner->stored_in != I)) continue;
if (trace_bin) WRITE_TO(STDOUT, "Writing resource %d type %d owner %s\n", n, warehouse->stored_resources[n].irsrc,
(owner)?"yes":"no");
BinaryFiles::write_int32(fh, (unsigned int) n);
inter_resource_holder *res = &(warehouse->stored_resources[n]);
if (res->stored_text_stream) {
BinaryFiles::write_int32(fh, STRING_IRSRC);
@<Write a string resource@>;
} else if (res->stored_symbols_table) {
BinaryFiles::write_int32(fh, SYMBOLS_TABLE_IRSRC);
@<Write a symbols table resource@>;
} else if (res->stored_package) {
BinaryFiles::write_int32(fh, PACKAGE_IRSRC);
@<Write a package resource@>;
} else {
BinaryFiles::write_int32(fh, FRAME_LIST_IRSRC);
@<Write a frame list resource@>;
}
}
}
BinaryFiles::write_int32(fh, NO_IRSRC);
@<Read a string resource@> =
res->stored_text_stream = Str::new();
@ -251,18 +312,23 @@ that's the end of the list and therefore the block.
if (BinaryFiles::read_int32(fh, &p) == FALSE) Inter::Binary::read_error(&eloc, ftell(fh), I"bytecode incomplete");
unsigned int cl;
if (BinaryFiles::read_int32(fh, &cl) == FALSE) Inter::Binary::read_error(&eloc, ftell(fh), I"bytecode incomplete");
unsigned int rl;
if (BinaryFiles::read_int32(fh, &rl) == FALSE) Inter::Binary::read_error(&eloc, ftell(fh), I"bytecode incomplete");
unsigned int sc;
if (BinaryFiles::read_int32(fh, &sc) == FALSE) Inter::Binary::read_error(&eloc, ftell(fh), I"bytecode incomplete");
unsigned int nid;
if (BinaryFiles::read_int32(fh, &nid) == FALSE) Inter::Binary::read_error(&eloc, ftell(fh), I"bytecode incomplete");
inter_package *parent = NULL;
if (p != 0) parent = Inter::get_package(I, p);
if (p != 0) parent = Inter::get_package(I, grid[p]);
if (res->stored_package == NULL) {
res->stored_package = Inter::Packages::new(I, n);
}
if (cl) Inter::Packages::make_codelike(res->stored_package);
if (nid == 0) Inter::Packages::make_rootlike(res->stored_package);
if (sc != 0) Inter::Packages::set_scope(res->stored_package, Inter::get_symbols_table(I, sc));
if (rl) Inter::Packages::make_rootlike(res->stored_package);
if (sc != 0) {
if (grid) sc = grid[sc];
Inter::Packages::set_scope(res->stored_package, Inter::get_symbols_table(I, sc));
}
if (nid != 0) {
inter_symbol *pack_name = Inter::SymbolsTables::symbol_from_id(parent?(Inter::Packages::scope(parent)):Inter::get_global_symbols(I), nid);
if (pack_name)
@ -278,6 +344,7 @@ that's the end of the list and therefore the block.
if (par == NULL) BinaryFiles::write_int32(fh, 0);
else BinaryFiles::write_int32(fh, (unsigned int) par->index_n);
BinaryFiles::write_int32(fh, (unsigned int) Inter::Packages::is_codelike(P));
BinaryFiles::write_int32(fh, (unsigned int) Inter::Packages::is_rootlike(P));
BinaryFiles::write_int32(fh, (unsigned int) P->package_scope->n_index);
if (P->package_name)
BinaryFiles::write_int32(fh, (unsigned int) P->package_name->symbol_ID);
@ -297,6 +364,7 @@ enough that the slot exists for the eventual list to be stored in.
@<Read the symbol equations@> =
while (BinaryFiles::read_int32(fh, &X)) {
if (X == 0) break;
if (grid) X = grid[X];
inter_symbols_table *from_T = Inter::get_symbols_table(I, X);
if (from_T == NULL) {
WRITE_TO(STDERR, "It's %d\n", X);
@ -309,6 +377,8 @@ enough that the slot exists for the eventual list to be stored in.
unsigned int to_ID = 0;
if (BinaryFiles::read_int32(fh, &to_T_id) == FALSE)
Inter::Binary::read_error(&eloc, ftell(fh), I"bytecode incomplete");
if (grid) to_T_id = grid[to_T_id];
if (trace_bin) WRITE_TO(STDOUT, "Read eqn %d -> %d\n", X, to_T_id);
if (BinaryFiles::read_int32(fh, &to_ID) == FALSE)
Inter::Binary::read_error(&eloc, ftell(fh), I"bytecode incomplete");
inter_symbols_table *to_T = Inter::get_symbols_table(I, to_T_id);
@ -321,9 +391,10 @@ enough that the slot exists for the eventual list to be stored in.
}
}
@<Write the symbol equations@> =
for (int n = 1; n < warehouse->size; n++) {
inter_package *owner = warehouse->stored_resources[n].owning_package;
if ((owner) && (owner->stored_in != I)) continue;
inter_resource_holder *res = &(warehouse->stored_resources[n]);
if (res->stored_symbols_table) {
inter_symbols_table *from_T = res->stored_symbols_table;
@ -333,6 +404,7 @@ enough that the slot exists for the eventual list to be stored in.
if ((symb) && (symb->equated_to)) {
BinaryFiles::write_int32(fh, symb->symbol_ID);
BinaryFiles::write_int32(fh, (unsigned int) symb->equated_to->owning_table->n_index);
if (trace_bin) WRITE_TO(STDOUT, "Write eqn %d -> %d\n", n, symb->equated_to->owning_table->n_index);
BinaryFiles::write_int32(fh, symb->equated_to->symbol_ID);
}
}
@ -346,10 +418,17 @@ enough that the slot exists for the eventual list to be stored in.
eloc.error_offset = (size_t) ftell(fh) - PREFRAME_SIZE;
int extent = (int) X;
if ((extent < 2) || ((long int) extent >= max_offset)) Inter::Binary::read_error(&eloc, ftell(fh), I"overlarge line");
if (trace_bin) WRITE_TO(STDOUT, "Reading bytecode, extent %d\n", extent);
inter_package *owner = NULL;
unsigned int PID = 0;
if (BinaryFiles::read_int32(fh, &PID)) owner = Inter::Packages::from_PID(I, PID);
if (BinaryFiles::read_int32(fh, &PID)) {
if (grid) PID = grid[PID];
if (trace_bin) WRITE_TO(STDOUT, "PID %d\n", PID);
owner = Inter::Packages::from_PID(I, PID);
if (trace_bin) WRITE_TO(STDOUT, "Owner has ID %d, table %d\n", owner->index_n, owner->package_scope->n_index);
}
inter_frame P = Inter::Warehouse::find_room(warehouse, Inter::get_global_symbols(I), extent-1, &eloc, owner);
for (int i=0; i<extent-1; i++) {
@ -361,9 +440,13 @@ enough that the slot exists for the eventual list to be stored in.
if (BinaryFiles::read_int32(fh, &comment)) {
if (comment != 0) Inter::Frame::attach_comment(P, (inter_t) comment);
} else Inter::Binary::read_error(&eloc, ftell(fh), I"bytecode incomplete");
inter_error_message *E = Inter::Defn::verify_construct(owner, P);
if (trace_bin) WRITE_TO(STDOUT, "Verify\n");
inter_error_message *E = NULL;
if (grid) E = Inter::Defn::transpose_construct(owner, P, grid, grid_extent);
if (E) { Inter::Errors::issue(E); exit(1); }
E = Inter::Defn::verify_construct(owner, P);
if (E) { Inter::Errors::issue(E); exit(1); }
if (trace_bin) WRITE_TO(STDOUT, "Done\n");
Inter::Frame::insert(P, &at);
}

View file

@ -28,7 +28,6 @@ To store bytecode-like intermediate code in memory.
=
typedef struct inter_tree {
struct inter_warehouse *warehouse;
struct inter_frame root_definition_frame;
struct inter_package *root_package;
struct inter_package *main_package;
@ -40,27 +39,19 @@ inter_tree *Inter::create(void) {
inter_tree *I = CREATE(inter_tree);
I->main_package = NULL;
I->warehouse = Inter::Warehouse::new();
inter_t N = Inter::create_symbols_table(I);
I->root_package = Inter::get_package(I, Inter::create_package(I));
I->root_definition_frame = Inter::Frame::root_frame(I);
inter_warehouse *warehouse = Inter::Warehouse::new();
inter_t N = Inter::Warehouse::create_symbols_table(warehouse);
inter_symbols_table *globals = Inter::Warehouse::get_symbols_table(warehouse, N);
I->root_package = Inter::Warehouse::get_package(warehouse, Inter::Warehouse::create_package(warehouse, I));
I->root_definition_frame = Inter::Frame::root_frame(warehouse, globals);
Inter::Packages::make_rootlike(I->root_package);
Inter::Packages::set_scope(I->root_package, Inter::get_symbols_table(I, N));
Inter::Packages::set_scope(I->root_package, globals);
Inter::Warehouse::attribute_resource(warehouse, N, I->root_package);
return I;
}
inter_warehouse *Inter::warehouse(inter_tree *I) {
return I->warehouse;
}
inter_t Inter::create_symbols_table(inter_tree *I) {
inter_warehouse *warehouse = Inter::warehouse(I);
inter_t n = Inter::Warehouse::create_resource(warehouse);
if (warehouse->stored_resources[n].stored_symbols_table == NULL) {
warehouse->stored_resources[n].stored_symbols_table = Inter::SymbolsTables::new();
warehouse->stored_resources[n].stored_symbols_table->n_index = (int) n;
}
return n;
return Inter::Frame::warehouse(&(I->root_definition_frame));
}
inter_symbols_table *Inter::get_global_symbols(inter_tree *I) {
@ -71,39 +62,18 @@ inter_symbols_table *Inter::get_symbols_table(inter_tree *I, inter_t n) {
return Inter::Warehouse::get_symbols_table(Inter::warehouse(I), n);
}
inter_t Inter::create_package(inter_tree *I) {
inter_warehouse *warehouse = Inter::warehouse(I);
inter_t n = Inter::Warehouse::create_resource(warehouse);
if (warehouse->stored_resources[n].stored_package == NULL) {
warehouse->stored_resources[n].stored_package = Inter::Packages::new(I, n);
}
return n;
}
inter_package *Inter::get_package(inter_tree *I, inter_t n) {
return Inter::Warehouse::get_package(Inter::warehouse(I), n);
}
inter_t Inter::create_text(inter_tree *I) {
inter_warehouse *warehouse = Inter::warehouse(I);
inter_t n = Inter::Warehouse::create_resource(warehouse);
if (warehouse->stored_resources[n].stored_text_stream == NULL) {
warehouse->stored_resources[n].stored_text_stream = Str::new();
}
return n;
return Inter::Warehouse::create_text(Inter::warehouse(I), NULL);
}
text_stream *Inter::get_text(inter_tree *I, inter_t n) {
return Inter::Warehouse::get_text(Inter::warehouse(I), n);
}
inter_t Inter::create_ref(inter_tree *I) {
inter_warehouse *warehouse = Inter::warehouse(I);
inter_t n = Inter::Warehouse::create_resource(warehouse);
warehouse->stored_resources[n].stored_ref = NULL;
return n;
}
void *Inter::get_ref(inter_tree *I, inter_t n) {
return Inter::Warehouse::get_ref(Inter::warehouse(I), n);
}
@ -124,18 +94,6 @@ inter_frame_list *Inter::new_frame_list(void) {
return ifl;
}
inter_t Inter::create_frame_list(inter_tree *I) {
inter_warehouse *warehouse = Inter::warehouse(I);
inter_t n = Inter::Warehouse::create_resource(warehouse);
warehouse->stored_resources[n].stored_frame_list = CREATE(inter_frame_list);
warehouse->stored_resources[n].stored_frame_list->spare_storage = NULL;
warehouse->stored_resources[n].stored_frame_list->storage_used = 0;
warehouse->stored_resources[n].stored_frame_list->storage_capacity = 0;
warehouse->stored_resources[n].stored_frame_list->first_in_ifl = NULL;
warehouse->stored_resources[n].stored_frame_list->last_in_ifl = NULL;
return n;
}
typedef struct inter_frame_list {
int storage_used;
int storage_capacity;

View file

@ -281,8 +281,8 @@ text_stream *Inter::Symbols::read_annotation_t(inter_symbol *symb, inter_tree *I
return NULL;
}
void Inter::Symbols::annotate_t(inter_tree *I, inter_symbol *symb, inter_t annot_ID, text_stream *S) {
inter_t n = Inter::create_text(I);
void Inter::Symbols::annotate_t(inter_tree *I, inter_package *owner, inter_symbol *symb, inter_t annot_ID, text_stream *S) {
inter_t n = Inter::Warehouse::create_text(Inter::warehouse(I), owner);
Str::copy(Inter::get_text(I, n), S);
inter_annotation IA = Inter::Defn::annotation_from_bytecode(annot_ID, n);
Inter::Symbols::annotate(symb, IA);

View file

@ -14,7 +14,19 @@ typedef struct inter_warehouse {
MEMORY_MANAGEMENT
} inter_warehouse;
@
@e NO_IRSRC from 0
@e STRING_IRSRC
@e SYMBOLS_TABLE_IRSRC
@e FRAME_LIST_IRSRC
@e PACKAGE_IRSRC
@e REF_IRSRC
=
typedef struct inter_resource_holder {
int irsrc;
struct inter_package *owning_package;
struct inter_symbols_table *stored_symbols_table;
struct inter_frame_list *stored_frame_list;
struct inter_package *stored_package;
@ -117,6 +129,8 @@ inter_t Inter::Warehouse::create_resource(inter_warehouse *warehouse) {
warehouse->capacity = new_size;
}
int n = warehouse->size ++;
warehouse->stored_resources[n].irsrc = NO_IRSRC;
warehouse->stored_resources[n].owning_package = NULL;
warehouse->stored_resources[n].stored_symbols_table = NULL;
warehouse->stored_resources[n].stored_ref = NULL;
warehouse->stored_resources[n].stored_package = NULL;
@ -173,25 +187,75 @@ inter_symbols_table *Inter::Warehouse::get_symbols_table(inter_warehouse *wareho
return warehouse->stored_resources[n].stored_symbols_table;
}
inter_t Inter::Warehouse::create_symbols_table(inter_warehouse *warehouse) {
inter_t n = Inter::Warehouse::create_resource(warehouse);
if (warehouse->stored_resources[n].stored_symbols_table == NULL) {
warehouse->stored_resources[n].irsrc = SYMBOLS_TABLE_IRSRC;
warehouse->stored_resources[n].stored_symbols_table = Inter::SymbolsTables::new();
warehouse->stored_resources[n].stored_symbols_table->n_index = (int) n;
}
return n;
}
void Inter::Warehouse::attribute_resource(inter_warehouse *warehouse, inter_t n, inter_package *owner) {
if (n >= (inter_t) warehouse->size) internal_error("out of range");
warehouse->stored_resources[n].owning_package = owner;
}
text_stream *Inter::Warehouse::get_text(inter_warehouse *warehouse, inter_t n) {
if (n >= (inter_t) warehouse->size) return NULL;
return warehouse->stored_resources[n].stored_text_stream;
}
inter_t Inter::Warehouse::create_text(inter_warehouse *warehouse, inter_package *owner) {
inter_t n = Inter::Warehouse::create_resource(warehouse);
if (warehouse->stored_resources[n].stored_text_stream == NULL) {
warehouse->stored_resources[n].irsrc = STRING_IRSRC;
warehouse->stored_resources[n].stored_text_stream = Str::new();
warehouse->stored_resources[n].owning_package = owner;
}
return n;
}
inter_package *Inter::Warehouse::get_package(inter_warehouse *warehouse, inter_t n) {
if (n >= (inter_t) warehouse->size) return NULL;
if (n == 0) return NULL;
return warehouse->stored_resources[n].stored_package;
}
inter_t Inter::Warehouse::create_package(inter_warehouse *warehouse, inter_tree *I) {
inter_t n = Inter::Warehouse::create_resource(warehouse);
if (warehouse->stored_resources[n].stored_package == NULL) {
warehouse->stored_resources[n].irsrc = PACKAGE_IRSRC;
warehouse->stored_resources[n].stored_package = Inter::Packages::new(I, n);
warehouse->stored_resources[n].owning_package =
warehouse->stored_resources[n].stored_package;
}
return n;
}
void *Inter::Warehouse::get_ref(inter_warehouse *warehouse, inter_t n) {
if (n >= (inter_t) warehouse->size) return NULL;
return warehouse->stored_resources[n].stored_ref;
}
inter_t Inter::Warehouse::create_ref(inter_warehouse *warehouse) {
inter_t n = Inter::Warehouse::create_resource(warehouse);
warehouse->stored_resources[n].irsrc = REF_IRSRC;
warehouse->stored_resources[n].stored_ref = NULL;
return n;
}
inter_frame_list *Inter::Warehouse::get_frame_list(inter_warehouse *warehouse, inter_t N) {
if (warehouse == NULL) return NULL;
int n = (int) N;
if (n >= warehouse->size) return NULL;
return warehouse->stored_resources[n].stored_frame_list;
}
inter_t Inter::Warehouse::create_frame_list(inter_warehouse *warehouse) {
inter_t n = Inter::Warehouse::create_resource(warehouse);
warehouse->stored_resources[n].irsrc = FRAME_LIST_IRSRC;
warehouse->stored_resources[n].stored_frame_list = Inter::new_frame_list();
return n;
}

View file

@ -71,12 +71,14 @@ inter_symbol *linkage_packagetype = NULL;
@
@e CONSTRUCT_READ_MTID
@e CONSTRUCT_TRANSPOSE_MTID
@e CONSTRUCT_VERIFY_MTID
@e CONSTRUCT_WRITE_MTID
@e VERIFY_INTER_CHILDREN_MTID
=
VMETHOD_TYPE(CONSTRUCT_READ_MTID, inter_construct *IC, inter_bookmark *, inter_line_parse *, inter_error_location *, inter_error_message **E)
VMETHOD_TYPE(CONSTRUCT_TRANSPOSE_MTID, inter_construct *IC, inter_frame P, inter_t *grid, inter_t max, inter_error_message **E)
VMETHOD_TYPE(CONSTRUCT_VERIFY_MTID, inter_construct *IC, inter_frame P, inter_package *owner, inter_error_message **E)
VMETHOD_TYPE(CONSTRUCT_WRITE_MTID, inter_construct *IC, text_stream *OUT, inter_frame P, inter_error_message **E)
VMETHOD_TYPE(VERIFY_INTER_CHILDREN_MTID, inter_construct *IC, inter_frame P, inter_error_message **E)
@ -163,7 +165,8 @@ inter_annotation Inter::Defn::read_annotation(inter_tree *I, text_stream *keywor
TEMPORARY_TEXT(parsed_text);
inter_error_message *EP =
Inter::Constant::parse_text(parsed_text, keyword, P.index+2, Str::len(keyword)-2, NULL);
val = Inter::create_text(I);
inter_warehouse *warehouse = Inter::warehouse(I);
val = Inter::Warehouse::create_text(warehouse, I->root_package);
Str::copy(Inter::get_text(I, val), parsed_text);
DISCARD_TEXT(parsed_text);
if (EP) *E = EP;
@ -239,6 +242,14 @@ inter_error_message *Inter::Defn::verify_construct(inter_package *owner, inter_f
return E;
}
inter_error_message *Inter::Defn::transpose_construct(inter_package *owner, inter_frame P, inter_t *grid, inter_t max) {
inter_construct *IC = NULL;
inter_error_message *E = Inter::Defn::get_construct(P, &IC);
if (E) return E;
VMETHOD_CALL(IC, CONSTRUCT_TRANSPOSE_MTID, P, grid, max, &E);
return E;
}
inter_error_message *Inter::Defn::get_construct(inter_frame P, inter_construct **to) {
if (Inter::Frame::valid(&P) == FALSE) {
return Inter::Frame::error(&P, I"invalid frame", NULL);
@ -299,7 +310,7 @@ inter_error_message *Inter::Defn::read_construct_text(text_stream *line, inter_e
literal = FALSE;
if (c == '\\') literal = TRUE;
if ((c == '#') && ((P.index == 0) || (Str::get_at(ilp.line, P.index-1) != '#')) && (Str::get_at(ilp.line, P.index+1) != '#') && (quoted == FALSE)) {
ilp.terminal_comment = Inter::create_text(Inter::Bookmarks::tree(IBM));
ilp.terminal_comment = Inter::Warehouse::create_text(Inter::Bookmarks::warehouse(IBM), Inter::Bookmarks::package(IBM));
int at = Str::index(P);
P = Str::forward(P);
while (Str::get(P) == ' ') P = Str::forward(P);

View file

@ -40,7 +40,7 @@ void Inter::Append::read(inter_construct *IC, inter_bookmark *IBM, inter_line_pa
return;
}
inter_t ID = Inter::create_text(Inter::Bookmarks::tree(IBM));
inter_t ID = Inter::Warehouse::create_text(Inter::Bookmarks::warehouse(IBM), Inter::Bookmarks::package(IBM));
*E = Inter::Constant::parse_text(Inter::get_text(Inter::Bookmarks::tree(IBM), ID), ilp->mr.exp[1], 0, Str::len(ilp->mr.exp[1]), eloc);
if (*E) return;

View file

@ -165,7 +165,7 @@ void Inter::Constant::read(inter_construct *IC, inter_bookmark *IBM, inter_line_
*E = Inter::Constant::parse_text(parsed_text, S, 1, Str::len(S)-2, eloc);
inter_t ID = 0;
if (*E == NULL) {
ID = Inter::create_text(Inter::Bookmarks::tree(IBM));
ID = Inter::Warehouse::create_text(Inter::Bookmarks::warehouse(IBM), Inter::Bookmarks::package(IBM));
Str::copy(Inter::get_text(Inter::Bookmarks::tree(IBM), ID), parsed_text);
}
DISCARD_TEXT(parsed_text);

View file

@ -13,6 +13,7 @@ void Inter::Instance::define(void) {
L"instance (%i+) (%c+)",
I"instance", I"instances");
METHOD_ADD(IC, CONSTRUCT_READ_MTID, Inter::Instance::read);
METHOD_ADD(IC, CONSTRUCT_TRANSPOSE_MTID, Inter::Instance::transpose);
METHOD_ADD(IC, CONSTRUCT_VERIFY_MTID, Inter::Instance::verify);
METHOD_ADD(IC, CONSTRUCT_WRITE_MTID, Inter::Instance::write);
}
@ -58,13 +59,23 @@ void Inter::Instance::read(inter_construct *IC, inter_bookmark *IBM, inter_line_
}
inter_error_message *Inter::Instance::new(inter_bookmark *IBM, inter_t SID, inter_t KID, inter_t V1, inter_t V2, inter_t level, inter_error_location *eloc) {
inter_frame P = Inter::Frame::fill_6(IBM, INSTANCE_IST, SID, KID, V1, V2, Inter::create_frame_list(Inter::Bookmarks::tree(IBM)), Inter::create_frame_list(Inter::Bookmarks::tree(IBM)), eloc, level);
inter_warehouse *warehouse = Inter::Bookmarks::warehouse(IBM);
inter_t L1 = Inter::Warehouse::create_frame_list(warehouse);
inter_t L2 = Inter::Warehouse::create_frame_list(warehouse);
Inter::Warehouse::attribute_resource(warehouse, L1, Inter::Bookmarks::package(IBM));
Inter::Warehouse::attribute_resource(warehouse, L2, Inter::Bookmarks::package(IBM));
inter_frame P = Inter::Frame::fill_6(IBM, INSTANCE_IST, SID, KID, V1, V2, L1, L2, eloc, level);
inter_error_message *E = Inter::Defn::verify_construct(Inter::Bookmarks::package(IBM), P);
if (E) return E;
Inter::Frame::insert(P, IBM);
return NULL;
}
void Inter::Instance::transpose(inter_construct *IC, inter_frame P, inter_t *grid, inter_t grid_extent, inter_error_message **E) {
P.data[PLIST_INST_IFLD] = grid[P.data[PLIST_INST_IFLD]];
P.data[PERM_LIST_INST_IFLD] = grid[P.data[PERM_LIST_INST_IFLD]];
}
void Inter::Instance::verify(inter_construct *IC, inter_frame P, inter_package *owner, inter_error_message **E) {
if (P.extent != EXTENT_INST_IFR) { *E = Inter::Frame::error(&P, I"extent wrong", NULL); return; }
*E = Inter__Verify__defn(owner, P, DEFN_INST_IFLD); if (*E) return;

View file

@ -13,6 +13,7 @@ void Inter::Kind::define(void) {
L"kind (%i+) (%c+)",
I"kind", I"kinds");
METHOD_ADD(IC, CONSTRUCT_READ_MTID, Inter::Kind::read);
METHOD_ADD(IC, CONSTRUCT_TRANSPOSE_MTID, Inter::Kind::transpose);
METHOD_ADD(IC, CONSTRUCT_VERIFY_MTID, Inter::Kind::verify);
METHOD_ADD(IC, CONSTRUCT_WRITE_MTID, Inter::Kind::write);
}
@ -159,8 +160,13 @@ void Inter::Kind::read(inter_construct *IC, inter_bookmark *IBM, inter_line_pars
inter_error_message *Inter::Kind::new(inter_bookmark *IBM, inter_t SID, inter_t TID, inter_t SUP,
int constructor, int arity, inter_t *operands, inter_t level, inter_error_location *eloc) {
inter_warehouse *warehouse = Inter::Bookmarks::warehouse(IBM);
inter_t L1 = Inter::Warehouse::create_frame_list(warehouse);
inter_t L2 = Inter::Warehouse::create_frame_list(warehouse);
Inter::Warehouse::attribute_resource(warehouse, L1, Inter::Bookmarks::package(IBM));
Inter::Warehouse::attribute_resource(warehouse, L2, Inter::Bookmarks::package(IBM));
inter_frame P = Inter::Frame::fill_8(IBM,
KIND_IST, SID, TID, 0, 0, SUP, Inter::create_frame_list(Inter::Bookmarks::tree(IBM)), Inter::create_frame_list(Inter::Bookmarks::tree(IBM)),
KIND_IST, SID, TID, 0, 0, SUP, L1, L2,
(inter_t) constructor, eloc, level);
if (arity > 0) {
if (Inter::Frame::extend(&P, (inter_t) arity) == FALSE)
@ -172,6 +178,11 @@ inter_error_message *Inter::Kind::new(inter_bookmark *IBM, inter_t SID, inter_t
return NULL;
}
void Inter::Kind::transpose(inter_construct *IC, inter_frame P, inter_t *grid, inter_t grid_extent, inter_error_message **E) {
P.data[PERM_LIST_KIND_IFLD] = grid[P.data[PERM_LIST_KIND_IFLD]];
P.data[PLIST_KIND_IFLD] = grid[P.data[PLIST_KIND_IFLD]];
}
void Inter::Kind::verify(inter_construct *IC, inter_frame P, inter_package *owner, inter_error_message **E) {
if (P.extent < MIN_EXTENT_KIND_IFR) { *E = Inter::Frame::error(&P, I"extent wrong", NULL); return; }
*E = Inter__Verify__defn(owner, P, DEFN_KIND_IFLD); if (*E) return;

View file

@ -51,7 +51,7 @@ void Inter::Link::read(inter_construct *IC, inter_bookmark *IBM, inter_line_pars
inter_t SIDS[5];
SIDS[0] = stage;
for (int i=1; i<=4; i++) {
SIDS[i] = Inter::create_text(Inter::Bookmarks::tree(IBM));
SIDS[i] = Inter::Warehouse::create_text(Inter::Bookmarks::warehouse(IBM), Inter::Bookmarks::package(IBM));
*E = Inter::Constant::parse_text(Inter::get_text(Inter::Bookmarks::tree(IBM), SIDS[i]), ilp->mr.exp[i], 0, Str::len(ilp->mr.exp[i]), eloc);
if (*E) return;
}

View file

@ -39,7 +39,7 @@ void Inter::Metadata::read(inter_construct *IC, inter_bookmark *IBM, inter_line_
*E = Inter::Constant::parse_text(parsed_text, S, 1, Str::len(S)-2, eloc);
inter_t ID = 0;
if (*E == NULL) {
ID = Inter::create_text(Inter::Bookmarks::tree(IBM));
ID = Inter::Warehouse::create_text(Inter::Bookmarks::warehouse(IBM), Inter::Bookmarks::package(IBM));
Str::copy(Inter::get_text(Inter::Bookmarks::tree(IBM), ID), parsed_text);
}
DISCARD_TEXT(parsed_text);

View file

@ -14,6 +14,7 @@ void Inter::Package::define(void) {
I"package", I"packages");
IC->usage_permissions = OUTSIDE_OF_PACKAGES + INSIDE_PLAIN_PACKAGE + CAN_HAVE_CHILDREN;
METHOD_ADD(IC, CONSTRUCT_READ_MTID, Inter::Package::read);
METHOD_ADD(IC, CONSTRUCT_TRANSPOSE_MTID, Inter::Package::transpose);
METHOD_ADD(IC, CONSTRUCT_VERIFY_MTID, Inter::Package::verify);
METHOD_ADD(IC, CONSTRUCT_WRITE_MTID, Inter::Package::write);
METHOD_ADD(IC, VERIFY_INTER_CHILDREN_MTID, Inter::Package::verify_children);
@ -45,7 +46,7 @@ void Inter::Package::read(inter_construct *IC, inter_bookmark *IBM, inter_line_p
}
inter_error_message *Inter::Package::new_package(inter_bookmark *IBM, inter_symbol *package_name, inter_symbol *ptype_name, inter_t level, inter_error_location *eloc, inter_package **created) {
inter_t STID = Inter::create_symbols_table(Inter::Bookmarks::tree(IBM));
inter_t STID = Inter::Warehouse::create_symbols_table(Inter::Bookmarks::warehouse(IBM));
LOGIF(INTER_SYMBOLS, "Package $3 at IBM $5\n", package_name, IBM);
inter_frame P = Inter::Frame::fill_4(IBM,
PACKAGE_IST, Inter::SymbolsTables::id_from_IRS_and_symbol(IBM, package_name), Inter::SymbolsTables::id_from_symbol(Inter::Bookmarks::tree(IBM), NULL, ptype_name), STID, 0, eloc, level);
@ -53,7 +54,7 @@ inter_error_message *Inter::Package::new_package(inter_bookmark *IBM, inter_symb
if (E) return E;
Inter::Frame::insert(P, IBM);
inter_t PID = Inter::create_package(Inter::Bookmarks::tree(IBM));
inter_t PID = Inter::Warehouse::create_package(Inter::Bookmarks::warehouse(IBM), Inter::Bookmarks::tree(IBM));
inter_package *pack = Inter::Packages::from_PID(Inter::Bookmarks::tree(IBM), PID);
Inter::Packages::set_name(pack, package_name);
if (ptype_name == code_packagetype) Inter::Packages::make_codelike(pack);
@ -61,12 +62,18 @@ inter_error_message *Inter::Package::new_package(inter_bookmark *IBM, inter_symb
Inter::Packages::make_linklike(pack);
Inter::Packages::set_scope(pack, Inter::Package::local_symbols(package_name));
P.data[PID_PACKAGE_IFLD] = PID;
Inter::Warehouse::attribute_resource(Inter::Bookmarks::warehouse(IBM), STID, pack);
if (created) *created = pack;
return NULL;
}
void Inter::Package::transpose(inter_construct *IC, inter_frame P, inter_t *grid, inter_t grid_extent, inter_error_message **E) {
P.data[PID_PACKAGE_IFLD] = grid[P.data[PID_PACKAGE_IFLD]];
P.data[SYMBOLS_PACKAGE_IFLD] = grid[P.data[SYMBOLS_PACKAGE_IFLD]];
}
void Inter::Package::verify(inter_construct *IC, inter_frame P, inter_package *owner, inter_error_message **E) {
*E = Inter__Verify__defn(owner, P, DEFN_PACKAGE_IFLD); if (*E) return;
inter_symbols_table *T = Inter::Packages::scope(owner);

View file

@ -123,7 +123,7 @@ void Inter::Permission::verify(inter_construct *IC, inter_frame P, inter_package
if (prop_X == prop_P) { *E = Inter::Frame::error(&P, I"duplicate permission", prop_name->symbol_name); return; }
inter_symbol *owner_X = Inter::SymbolsTables::symbol_from_frame_data(X, OWNER_PERM_IFLD);
inter_symbol *owner_P = Inter::SymbolsTables::symbol_from_id(Inter::Packages::scope(owner), P.data[OWNER_PERM_IFLD]);;
if (owner_X != owner_P) { *E = Inter::Frame::error(&P, I"kind permission list malformed A", owner_name->symbol_name); return; }
if (owner_X != owner_P) { *E = Inter::Frame::error(&P, I"kind permission list malformed", owner_name->symbol_name); return; }
}
} else {
FL = Inter::Frame::ID_to_frame_list(&P, Inter::Instance::permissions_list(owner_name));
@ -135,7 +135,7 @@ void Inter::Permission::verify(inter_construct *IC, inter_frame P, inter_package
if (prop_X == prop_P) { *E = Inter::Frame::error(&P, I"duplicate permission", prop_name->symbol_name); return; }
inter_symbol *owner_X = Inter::SymbolsTables::symbol_from_frame_data(X, OWNER_PERM_IFLD);
inter_symbol *owner_P = Inter::SymbolsTables::symbol_from_id(Inter::Packages::scope(owner), P.data[OWNER_PERM_IFLD]);;
if (owner_X != owner_P) { *E = Inter::Frame::error(&P, I"kind permission list malformed A", owner_name->symbol_name); return; }
if (owner_X != owner_P) { *E = Inter::Frame::error(&P, I"instance permission list malformed", owner_name->symbol_name); return; }
}
}

View file

@ -38,7 +38,7 @@ void Inter::Pragma::read(inter_construct *IC, inter_bookmark *IBM, inter_line_pa
if (*E) return;
text_stream *S = ilp->mr.exp[1];
inter_t ID = Inter::create_text(Inter::Bookmarks::tree(IBM));
inter_t ID = Inter::Warehouse::create_text(Inter::Bookmarks::warehouse(IBM), Inter::Bookmarks::package(IBM));
int literal_mode = FALSE;
LOOP_THROUGH_TEXT(pos, S) {
int c = (int) Str::get(pos);

View file

@ -13,6 +13,7 @@ void Inter::Property::define(void) {
L"property (%i+) (%i+)",
I"property", I"properties");
METHOD_ADD(IC, CONSTRUCT_READ_MTID, Inter::Property::read);
METHOD_ADD(IC, CONSTRUCT_TRANSPOSE_MTID, Inter::Property::transpose);
METHOD_ADD(IC, CONSTRUCT_VERIFY_MTID, Inter::Property::verify);
METHOD_ADD(IC, CONSTRUCT_WRITE_MTID, Inter::Property::write);
}
@ -42,13 +43,20 @@ void Inter::Property::read(inter_construct *IC, inter_bookmark *IBM, inter_line_
}
inter_error_message *Inter::Property::new(inter_bookmark *IBM, inter_t PID, inter_t KID, inter_t level, inter_error_location *eloc) {
inter_frame P = Inter::Frame::fill_3(IBM, PROPERTY_IST, PID, KID, Inter::create_frame_list(Inter::Bookmarks::tree(IBM)), eloc, level);
inter_warehouse *warehouse = Inter::Bookmarks::warehouse(IBM);
inter_t L1 = Inter::Warehouse::create_frame_list(warehouse);
Inter::Warehouse::attribute_resource(warehouse, L1, Inter::Bookmarks::package(IBM));
inter_frame P = Inter::Frame::fill_3(IBM, PROPERTY_IST, PID, KID, L1, eloc, level);
inter_error_message *E = Inter::Defn::verify_construct(Inter::Bookmarks::package(IBM), P);
if (E) return E;
Inter::Frame::insert(P, IBM);
return NULL;
}
void Inter::Property::transpose(inter_construct *IC, inter_frame P, inter_t *grid, inter_t grid_extent, inter_error_message **E) {
P.data[PERM_LIST_PROP_IFLD] = grid[P.data[PERM_LIST_PROP_IFLD]];
}
void Inter::Property::verify(inter_construct *IC, inter_frame P, inter_package *owner, inter_error_message **E) {
if (P.extent != EXTENT_PROP_IFR) { *E = Inter::Frame::error(&P, I"extent wrong", NULL); return; }
*E = Inter__Verify__defn(owner, P, DEFN_PROP_IFLD); if (*E) return;

View file

@ -62,7 +62,7 @@ void Inter::Splat::read(inter_construct *IC, inter_bookmark *IBM, inter_line_par
inter_t plm = Inter::Splat::parse_plm(ilp->mr.exp[0]);
if (plm == 1000000) { *E = Inter::Errors::plain(I"unknown PLM code before text matter", eloc); return; }
inter_t SID = Inter::create_text(Inter::Bookmarks::tree(IBM));
inter_t SID = Inter::Warehouse::create_text(Inter::Bookmarks::warehouse(IBM), Inter::Bookmarks::package(IBM));
text_stream *glob_storage = Inter::get_text(Inter::Bookmarks::tree(IBM), SID);
*E = Inter::Constant::parse_text(glob_storage, ilp->mr.exp[1], 0, Str::len(ilp->mr.exp[1]), eloc);
if (*E) return;