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

Further work on package naming

This commit is contained in:
Graham Nelson 2019-07-27 11:16:22 +01:00
parent 3178f53767
commit 1ff1d6137f
62 changed files with 344 additions and 362 deletions

View file

@ -53,16 +53,13 @@
<pre class="display">
<span class="identifier">inter_bookmark</span><span class="plain"> </span><span class="functiontext">CodeGen::Assimilate::template_submodule</span><span class="plain">(</span><span class="identifier">inter_tree</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">inter_tree_node</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">submodule_ptype_symbol</span><span class="plain">) {</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">fns</span><span class="plain"> = </span><span class="identifier">Inter::SymbolsTables::symbol_from_name_in_template_creating</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">name</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Inter::Symbols::is_defined</span><span class="plain">(</span><span class="identifier">fns</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">) {</span>
<span class="identifier">inter_package</span><span class="plain"> *</span><span class="identifier">t_p</span><span class="plain"> = </span><span class="identifier">Inter::Packages::by_name</span><span class="plain">(</span><span class="identifier">template_package</span><span class="plain">, </span><span class="identifier">name</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">t_p</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
<span class="identifier">inter_bookmark</span><span class="plain"> </span><span class="identifier">IBM</span><span class="plain"> = </span><span class="identifier">Inter::Bookmarks::after_this_frame</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">);</span>
<span class="functiontext">CodeGen::Assimilate::new_package</span><span class="plain">(&amp;</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">fns</span><span class="plain">, </span><span class="identifier">submodule_ptype_symbol</span><span class="plain">);</span>
<span class="identifier">t_p</span><span class="plain"> = </span><span class="functiontext">CodeGen::Assimilate::new_package_named</span><span class="plain">(&amp;</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">submodule_ptype_symbol</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Inter::Symbols::is_defined</span><span class="plain">(</span><span class="identifier">fns</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"failed to define"</span><span class="plain">);</span>
<span class="identifier">inter_tree_node</span><span class="plain"> *</span><span class="identifier">D</span><span class="plain"> = </span><span class="identifier">Inter::Symbols::definition</span><span class="plain">(</span><span class="identifier">fns</span><span class="plain">);</span>
<span class="identifier">inter_package</span><span class="plain"> *</span><span class="identifier">fns_package</span><span class="plain"> = </span><span class="identifier">Inter::Package::defined_by_frame</span><span class="plain">(</span><span class="identifier">D</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">fns_package</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">return</span><span class="plain"> </span><span class="identifier">Inter::Bookmarks::at_end_of_this_package</span><span class="plain">(</span><span class="identifier">fns_package</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">t_p</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"failed to define"</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">Inter::Bookmarks::at_end_of_this_package</span><span class="plain">(</span><span class="identifier">t_p</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">Inter::Bookmarks::after_this_frame</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">);</span>
<span class="plain">}</span>
@ -228,11 +225,10 @@
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">subpackage_name</span><span class="plain">, </span><span class="string">"assim_command_%d"</span><span class="plain">, ++</span><span class="identifier">no_assimilated_commands</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">subpackage_symbol</span><span class="plain"> = </span><span class="identifier">Inter::SymbolsTables::create_with_unique_name</span><span class="plain">(</span><span class="identifier">Inter::Bookmarks::scope</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">), </span><span class="identifier">subpackage_name</span><span class="plain">);</span>
<span class="identifier">Inter::Bookmarks::set_current_package</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">,</span>
<span class="functiontext">CodeGen::Assimilate::new_package_named</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">subpackage_name</span><span class="plain">, </span><span class="identifier">subpackage_type</span><span class="plain">));</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">subpackage_name</span><span class="plain">);</span>
<span class="identifier">Inter::Bookmarks::set_current_package</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">,</span>
<span class="functiontext">CodeGen::Assimilate::new_package</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">subpackage_symbol</span><span class="plain">, </span><span class="identifier">subpackage_type</span><span class="plain">));</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">CodeGen::Assimilate::maybe_extern</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">identifier</span><span class="plain">, </span><span class="identifier">Inter::Bookmarks::scope</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">));</span>
@ -497,26 +493,22 @@
<span class="identifier">inter_bookmark</span><span class="plain"> </span><span class="identifier">IBM_d</span><span class="plain"> = </span><span class="functiontext">CodeGen::Assimilate::template_submodule</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"functions"</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">);</span>
<span class="identifier">inter_bookmark</span><span class="plain"> *</span><span class="identifier">IBM</span><span class="plain"> = &amp;</span><span class="identifier">IBM_d</span><span class="plain">;</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">fname</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">fname</span><span class="plain">, </span><span class="string">"%S_fn"</span><span class="plain">, </span><span class="identifier">identifier</span><span class="plain">);</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">function_name</span><span class="plain"> = </span><span class="identifier">Inter::SymbolsTables::create_with_unique_name</span><span class="plain">(</span><span class="identifier">Inter::Bookmarks::scope</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">), </span><span class="identifier">fname</span><span class="plain">);</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">fname</span><span class="plain">);</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">fnt</span><span class="plain"> = </span><span class="identifier">function_ptype_symbol</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">fnt</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">fnt</span><span class="plain"> = </span><span class="identifier">plain_packagetype</span><span class="plain">;</span>
<span class="identifier">inter_package</span><span class="plain"> *</span><span class="identifier">FP</span><span class="plain"> = </span><span class="functiontext">CodeGen::Assimilate::new_package</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">function_name</span><span class="plain">, </span><span class="identifier">fnt</span><span class="plain">);</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">fname</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">fname</span><span class="plain">, </span><span class="string">"%S_fn"</span><span class="plain">, </span><span class="identifier">identifier</span><span class="plain">);</span>
<span class="identifier">inter_package</span><span class="plain"> *</span><span class="identifier">FP</span><span class="plain"> = </span><span class="functiontext">CodeGen::Assimilate::new_package_named</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">fname</span><span class="plain">, </span><span class="identifier">fnt</span><span class="plain">);</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">fname</span><span class="plain">);</span>
<span class="identifier">inter_bookmark</span><span class="plain"> </span><span class="identifier">outer_save</span><span class="plain"> = </span><span class="identifier">Inter::Bookmarks::snapshot</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">);</span>
<span class="identifier">Inter::Bookmarks::set_current_package</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">FP</span><span class="plain">);</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">bname</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">bname</span><span class="plain">, </span><span class="string">"%S_B"</span><span class="plain">, </span><span class="identifier">identifier</span><span class="plain">);</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">block_name</span><span class="plain"> = </span><span class="identifier">Inter::SymbolsTables::create_with_unique_name</span><span class="plain">(</span><span class="identifier">Inter::Bookmarks::scope</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">), </span><span class="identifier">bname</span><span class="plain">);</span>
<span class="identifier">inter_package</span><span class="plain"> *</span><span class="identifier">IP</span><span class="plain"> = </span><span class="functiontext">CodeGen::Assimilate::new_package_named</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">bname</span><span class="plain">, </span><span class="identifier">code_packagetype</span><span class="plain">);</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">bname</span><span class="plain">);</span>
<span class="identifier">inter_package</span><span class="plain"> *</span><span class="identifier">IP</span><span class="plain"> = </span><span class="functiontext">CodeGen::Assimilate::new_package</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">block_name</span><span class="plain">, </span><span class="identifier">code_packagetype</span><span class="plain">);</span>
<span class="identifier">inter_bookmark</span><span class="plain"> </span><span class="identifier">inner_save</span><span class="plain"> = </span><span class="identifier">Inter::Bookmarks::snapshot</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">);</span>
<span class="identifier">Inter::Bookmarks::set_current_package</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">IP</span><span class="plain">);</span>
<span class="identifier">inter_bookmark</span><span class="plain"> </span><span class="identifier">block_bookmark</span><span class="plain"> = </span><span class="identifier">Inter::Bookmarks::snapshot</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">);</span>
@ -527,9 +519,9 @@
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">value</span><span class="plain">);</span>
&lt;<span class="cwebmacro">Extract a token</span> <span class="cwebmacronumber">2.1.2.1</span>&gt;<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">value</span><span class="plain">) == 0) </span><span class="reserved">break</span><span class="plain">;</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">loc_name</span><span class="plain"> = </span><span class="identifier">Inter::SymbolsTables::create_with_unique_name</span><span class="plain">(</span><span class="identifier">Inter::Package::local_symbols</span><span class="plain">(</span><span class="identifier">block_name</span><span class="plain">), </span><span class="identifier">value</span><span class="plain">);</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">loc_name</span><span class="plain"> = </span><span class="identifier">Inter::SymbolsTables::create_with_unique_name</span><span class="plain">(</span><span class="identifier">Inter::Packages::scope</span><span class="plain">(</span><span class="identifier">IP</span><span class="plain">), </span><span class="identifier">value</span><span class="plain">);</span>
<span class="identifier">Inter::Symbols::local</span><span class="plain">(</span><span class="identifier">loc_name</span><span class="plain">);</span>
<span class="functiontext">CodeGen::MergeTemplate::guard</span><span class="plain">(</span><span class="identifier">Inter::Local::new</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">block_name</span><span class="plain">, </span><span class="identifier">loc_name</span><span class="plain">, </span><span class="identifier">unchecked_kind_symbol</span><span class="plain">, 0, (</span><span class="identifier">inter_t</span><span class="plain">) </span><span class="identifier">Inter::Bookmarks::baseline</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">) + 1, </span><span class="identifier">NULL</span><span class="plain">));</span>
<span class="functiontext">CodeGen::MergeTemplate::guard</span><span class="plain">(</span><span class="identifier">Inter::Local::new</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">loc_name</span><span class="plain">, </span><span class="identifier">unchecked_kind_symbol</span><span class="plain">, 0, (</span><span class="identifier">inter_t</span><span class="plain">) </span><span class="identifier">Inter::Bookmarks::baseline</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">) + 1, </span><span class="identifier">NULL</span><span class="plain">));</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">value</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">}</span>
@ -540,7 +532,7 @@
<span class="reserved">while</span><span class="plain"> ((</span><span class="identifier">L</span><span class="plain">&gt;0) &amp;&amp; (</span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">body</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">) != </span><span class="character">']'</span><span class="plain">)) </span><span class="identifier">L</span><span class="plain">--;</span>
<span class="reserved">while</span><span class="plain"> ((</span><span class="identifier">L</span><span class="plain">&gt;0) &amp;&amp; (</span><span class="identifier">Characters::is_whitespace</span><span class="plain">(</span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">body</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">-1)))) </span><span class="identifier">L</span><span class="plain">--;</span>
<span class="identifier">Str::truncate</span><span class="plain">(</span><span class="identifier">body</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">);</span>
<span class="functiontext">CodeGen::Assimilate::routine_body</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">block_name</span><span class="plain">, (</span><span class="identifier">inter_t</span><span class="plain">) </span><span class="identifier">Inter::Bookmarks::baseline</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">) + 1, </span><span class="identifier">body</span><span class="plain">, </span><span class="identifier">block_bookmark</span><span class="plain">);</span>
<span class="functiontext">CodeGen::Assimilate::routine_body</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">IP</span><span class="plain">, (</span><span class="identifier">inter_t</span><span class="plain">) </span><span class="identifier">Inter::Bookmarks::baseline</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">) + 1, </span><span class="identifier">body</span><span class="plain">, </span><span class="identifier">block_bookmark</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">*</span><span class="identifier">IBM</span><span class="plain"> = </span><span class="identifier">inner_save</span><span class="plain">;</span>
@ -550,7 +542,7 @@
<span class="functiontext">CodeGen::MergeTemplate::guard</span><span class="plain">(</span><span class="identifier">Inter::Constant::new_function</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">,</span>
<span class="identifier">Inter::SymbolsTables::id_from_symbol</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">FP</span><span class="plain">, </span><span class="identifier">rsymb</span><span class="plain">),</span>
<span class="identifier">Inter::SymbolsTables::id_from_symbol</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">FP</span><span class="plain">, </span><span class="identifier">unchecked_function_symbol</span><span class="plain">),</span>
<span class="identifier">Inter::SymbolsTables::id_from_symbol</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">FP</span><span class="plain">, </span><span class="identifier">block_name</span><span class="plain">),</span>
<span class="identifier">IP</span><span class="plain">,</span>
<span class="plain">(</span><span class="identifier">inter_t</span><span class="plain">) </span><span class="identifier">Inter::Bookmarks::baseline</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">) + 1, </span><span class="identifier">NULL</span><span class="plain">));</span>
<span class="plain">*</span><span class="identifier">IBM</span><span class="plain"> = </span><span class="identifier">outer_save</span><span class="plain">;</span>
@ -571,9 +563,9 @@
<pre class="display">
<span class="identifier">inter_package</span><span class="plain"> *</span><span class="functiontext">CodeGen::Assimilate::new_package</span><span class="plain">(</span><span class="identifier">inter_bookmark</span><span class="plain"> *</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">pname</span><span class="plain">, </span><span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">ptype</span><span class="plain">) {</span>
<span class="identifier">inter_package</span><span class="plain"> *</span><span class="functiontext">CodeGen::Assimilate::new_package_named</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">name</span><span class="plain">, </span><span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">ptype</span><span class="plain">) {</span>
<span class="identifier">inter_package</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="functiontext">CodeGen::MergeTemplate::guard</span><span class="plain">(</span><span class="identifier">Inter::Package::new_package</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">pname</span><span class="plain">,</span>
<span class="functiontext">CodeGen::MergeTemplate::guard</span><span class="plain">(</span><span class="identifier">Inter::Package::new_package_named</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">,</span>
<span class="identifier">ptype</span><span class="plain">, (</span><span class="identifier">inter_t</span><span class="plain">) </span><span class="identifier">Inter::Bookmarks::baseline</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">) + 1, </span><span class="identifier">NULL</span><span class="plain">, &amp;</span><span class="identifier">P</span><span class="plain">));</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">P</span><span class="plain">;</span>
<span class="plain">}</span>
@ -608,7 +600,7 @@
<p class="inwebparagraph"></p>
<p class="endnote">The function CodeGen::Assimilate::new_package is used in <a href="#SP2">&#167;2</a>, <a href="#SP2_1_2">&#167;2.1.2</a>, <a href="#SP2_2_2">&#167;2.2.2</a>, <a href="#SP5">&#167;5</a>.</p>
<p class="endnote">The function CodeGen::Assimilate::new_package_named is used in <a href="#SP2">&#167;2</a>, <a href="#SP2_1_2">&#167;2.1.2</a>, <a href="#SP2_2_2">&#167;2.2.2</a>, <a href="#SP5">&#167;5</a>.</p>
<p class="endnote">The function CodeGen::Assimilate::install_alias is used in <a href="#SP2_1_2">&#167;2.1.2</a>.</p>
@ -653,13 +645,12 @@
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">CodeGen::MergeTemplate::find_name</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">value</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">) == </span><span class="identifier">NULL</span><span class="plain">) {</span>
<span class="identifier">inter_bookmark</span><span class="plain"> </span><span class="identifier">IBM_d</span><span class="plain"> = </span><span class="functiontext">CodeGen::Assimilate::template_submodule</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"actions"</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">);</span>
<span class="identifier">inter_bookmark</span><span class="plain"> *</span><span class="identifier">IBM</span><span class="plain"> = &amp;</span><span class="identifier">IBM_d</span><span class="plain">;</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">an</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">an</span><span class="plain">, </span><span class="string">"assim_action_%d"</span><span class="plain">, ++</span><span class="identifier">no_assimilated_actions</span><span class="plain">);</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">housing_symbol</span><span class="plain"> = </span><span class="identifier">Inter::SymbolsTables::create_with_unique_name</span><span class="plain">(</span><span class="identifier">Inter::Bookmarks::scope</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">), </span><span class="identifier">an</span><span class="plain">);</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">an</span><span class="plain">);</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">ptype</span><span class="plain"> = </span><span class="identifier">action_ptype_symbol</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ptype</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">ptype</span><span class="plain"> = </span><span class="identifier">plain_packagetype</span><span class="plain">;</span>
<span class="identifier">Inter::Bookmarks::set_current_package</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="functiontext">CodeGen::Assimilate::new_package</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">housing_symbol</span><span class="plain">, </span><span class="identifier">ptype</span><span class="plain">));</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">an</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">an</span><span class="plain">, </span><span class="string">"assim_action_%d"</span><span class="plain">, ++</span><span class="identifier">no_assimilated_actions</span><span class="plain">);</span>
<span class="identifier">Inter::Bookmarks::set_current_package</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="functiontext">CodeGen::Assimilate::new_package_named</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">an</span><span class="plain">, </span><span class="identifier">ptype</span><span class="plain">));</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">an</span><span class="plain">);</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">asymb</span><span class="plain"> = </span><span class="functiontext">CodeGen::Assimilate::maybe_extern</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">value</span><span class="plain">, </span><span class="identifier">Inter::Bookmarks::scope</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">));</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">unsharped</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">unsharped</span><span class="plain">, </span><span class="string">"%SSub"</span><span class="plain">, </span><span class="identifier">value</span><span class="plain">);</span>
@ -932,21 +923,21 @@
<span class="plain">#</span><span class="identifier">ifdef</span><span class="plain"> </span><span class="identifier">CORE_MODULE</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">package_request</span><span class="plain"> *</span><span class="identifier">enclosure</span><span class="plain">;</span>
<span class="plain">#</span><span class="identifier">endif</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">block_name</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">inter_package</span><span class="plain"> *</span><span class="identifier">block_package</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">pass2_offset</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">body</span><span class="plain">;</span>
<span class="identifier">MEMORY_MANAGEMENT</span>
<span class="plain">} </span><span class="reserved">routine_body_request</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">rb_splat_count</span><span class="plain"> = 1;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">CodeGen::Assimilate::routine_body</span><span class="plain">(</span><span class="identifier">inter_bookmark</span><span class="plain"> *</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">block_name</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">offset</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">body</span><span class="plain">, </span><span class="identifier">inter_bookmark</span><span class="plain"> </span><span class="identifier">bb</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">CodeGen::Assimilate::routine_body</span><span class="plain">(</span><span class="identifier">inter_bookmark</span><span class="plain"> *</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">inter_package</span><span class="plain"> *</span><span class="identifier">block_package</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">offset</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">body</span><span class="plain">, </span><span class="identifier">inter_bookmark</span><span class="plain"> </span><span class="identifier">bb</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::is_whitespace</span><span class="plain">(</span><span class="identifier">body</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="plain">#</span><span class="identifier">ifdef</span><span class="plain"> </span><span class="identifier">CORE_MODULE</span>
<span class="reserved">routine_body_request</span><span class="plain"> *</span><span class="identifier">req</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">routine_body_request</span><span class="plain">);</span>
<span class="identifier">req</span><span class="plain">-</span><span class="element">&gt;block_bookmark</span><span class="plain"> = </span><span class="identifier">bb</span><span class="plain">;</span>
<span class="identifier">req</span><span class="plain">-</span><span class="element">&gt;enclosure</span><span class="plain"> = </span><span class="identifier">Packaging::enclosure</span><span class="plain">();</span>
<span class="identifier">req</span><span class="plain">-</span><span class="element">&gt;position</span><span class="plain"> = </span><span class="identifier">Packaging::bubble_at</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">);</span>
<span class="identifier">req</span><span class="plain">-</span><span class="element">&gt;block_name</span><span class="plain"> = </span><span class="identifier">block_name</span><span class="plain">;</span>
<span class="identifier">req</span><span class="plain">-</span><span class="element">&gt;block_package</span><span class="plain"> = </span><span class="identifier">block_package</span><span class="plain">;</span>
<span class="identifier">req</span><span class="plain">-</span><span class="element">&gt;pass2_offset</span><span class="plain"> = (</span><span class="reserved">int</span><span class="plain">) </span><span class="identifier">offset</span><span class="plain"> - 2;</span>
<span class="identifier">req</span><span class="plain">-</span><span class="element">&gt;body</span><span class="plain"> = </span><span class="identifier">Str::duplicate</span><span class="plain">(</span><span class="identifier">body</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
@ -961,7 +952,7 @@
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::Assimilate::function_bodies</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="reserved">routine_body_request</span><span class="plain"> *</span><span class="identifier">req</span><span class="plain">;</span>
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">req</span><span class="plain">, </span><span class="reserved">routine_body_request</span><span class="plain">) {</span>
<span class="identifier">LOGIF</span><span class="plain">(</span><span class="identifier">SCHEMA_COMPILATION</span><span class="plain">, </span><span class="string">"=======\</span><span class="plain">n</span><span class="string">\</span><span class="plain">n</span><span class="string">Routine (%S) len %d: '%S'\</span><span class="plain">n</span><span class="string">\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">req</span><span class="plain">-</span><span class="element">&gt;block_name</span><span class="plain">-&gt;</span><span class="identifier">symbol_name</span><span class="plain">, </span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">req</span><span class="plain">-</span><span class="element">&gt;body</span><span class="plain">), </span><span class="identifier">req</span><span class="plain">-</span><span class="element">&gt;body</span><span class="plain">);</span>
<span class="identifier">LOGIF</span><span class="plain">(</span><span class="identifier">SCHEMA_COMPILATION</span><span class="plain">, </span><span class="string">"=======\</span><span class="plain">n</span><span class="string">\</span><span class="plain">n</span><span class="string">Routine (%S) len %d: '%S'\</span><span class="plain">n</span><span class="string">\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">Inter::Packages::name</span><span class="plain">(</span><span class="identifier">req</span><span class="plain">-</span><span class="element">&gt;block_package</span><span class="plain">), </span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">req</span><span class="plain">-</span><span class="element">&gt;body</span><span class="plain">), </span><span class="identifier">req</span><span class="plain">-</span><span class="element">&gt;body</span><span class="plain">);</span>
<span class="reserved">inter_schema</span><span class="plain"> *</span><span class="identifier">sch</span><span class="plain"> = </span><span class="functiontext">InterSchemas::from_text</span><span class="plain">(</span><span class="identifier">req</span><span class="plain">-</span><span class="element">&gt;body</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">, 0, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Log::aspect_switched_on</span><span class="plain">(</span><span class="constant">SCHEMA_COMPILATION_DA</span><span class="plain">)) {</span>
@ -973,11 +964,11 @@
<span class="plain">}</span>
<span class="plain">#</span><span class="identifier">ifdef</span><span class="plain"> </span><span class="identifier">CORE_MODULE</span>
<span class="identifier">current_inter_routine</span><span class="plain"> = </span><span class="identifier">req</span><span class="plain">-</span><span class="element">&gt;block_name</span><span class="plain">;</span>
<span class="identifier">current_inter_routine</span><span class="plain"> = </span><span class="identifier">req</span><span class="plain">-</span><span class="element">&gt;block_package</span><span class="plain">;</span>
<span class="identifier">Packaging::set_state</span><span class="plain">(&amp;(</span><span class="identifier">req</span><span class="plain">-</span><span class="element">&gt;position</span><span class="plain">), </span><span class="identifier">req</span><span class="plain">-</span><span class="element">&gt;enclosure</span><span class="plain">);</span>
<span class="identifier">Emit::push_code_position</span><span class="plain">(</span><span class="identifier">Emit::new_cip</span><span class="plain">(&amp;(</span><span class="identifier">req</span><span class="plain">-</span><span class="element">&gt;position</span><span class="plain">)), </span><span class="identifier">Inter::Bookmarks::snapshot</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">()));</span>
<span class="identifier">value_holster</span><span class="plain"> </span><span class="identifier">VH</span><span class="plain"> = </span><span class="identifier">Holsters::new</span><span class="plain">(</span><span class="identifier">INTER_VOID_VHMODE</span><span class="plain">);</span>
<span class="identifier">inter_symbols_table</span><span class="plain"> *</span><span class="identifier">scope1</span><span class="plain"> = </span><span class="identifier">Inter::Package::local_symbols</span><span class="plain">(</span><span class="identifier">req</span><span class="plain">-</span><span class="element">&gt;block_name</span><span class="plain">);</span>
<span class="identifier">inter_symbols_table</span><span class="plain"> *</span><span class="identifier">scope1</span><span class="plain"> = </span><span class="identifier">Inter::Packages::scope</span><span class="plain">(</span><span class="identifier">req</span><span class="plain">-</span><span class="element">&gt;block_package</span><span class="plain">);</span>
<span class="identifier">inter_symbols_table</span><span class="plain"> *</span><span class="identifier">scope2</span><span class="plain"> = </span><span class="identifier">Inter::Packages::scope</span><span class="plain">(</span><span class="identifier">Packaging::incarnate</span><span class="plain">(</span><span class="identifier">Hierarchy::template</span><span class="plain">()));</span>
<span class="identifier">EmitInterSchemas::emit</span><span class="plain">(&amp;</span><span class="identifier">VH</span><span class="plain">, </span><span class="identifier">sch</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">, </span><span class="identifier">scope1</span><span class="plain">, </span><span class="identifier">scope2</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="identifier">Emit::pop_code_position</span><span class="plain">();</span>

View file

@ -201,10 +201,10 @@ is 20. We instead compile this as
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Inter::Constant::is_routine</span><span class="plain">(</span><span class="identifier">con_name</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::Constant::code_block</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">);</span>
<span class="identifier">inter_package</span><span class="plain"> *</span><span class="identifier">code_block</span><span class="plain"> = </span><span class="identifier">Inter::Constant::code_block</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"[ %S"</span><span class="plain">, </span><span class="functiontext">CodeGen::CL::name</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">));</span>
<span class="identifier">void_level</span><span class="plain"> = </span><span class="identifier">Inter::Defn::get_level</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">) + 2;</span>
<span class="identifier">inter_tree_node</span><span class="plain"> *</span><span class="identifier">D</span><span class="plain"> = </span><span class="identifier">Inter::Symbols::definition</span><span class="plain">(</span><span class="identifier">code_block</span><span class="plain">);</span>
<span class="identifier">inter_tree_node</span><span class="plain"> *</span><span class="identifier">D</span><span class="plain"> = </span><span class="identifier">Inter::Packages::definition</span><span class="plain">(</span><span class="identifier">code_block</span><span class="plain">);</span>
<span class="functiontext">CodeGen::FC::frame</span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">, </span><span class="identifier">D</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain">;</span>
<span class="plain">}</span>

View file

@ -1506,7 +1506,7 @@ syntax to break or continue a loop other than the innermost one.
<span class="identifier">NextOuterLoop_labels</span><span class="plain">[</span><span class="identifier">reason</span><span class="plain">] = </span><span class="functiontext">Emit::reserve_label</span><span class="plain">(</span><span class="identifier">L</span><span class="plain">);</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">L</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="functiontext">Emit::place_label</span><span class="plain">(</span><span class="identifier">NextOuterLoop_labels</span><span class="plain">[</span><span class="identifier">reason</span><span class="plain">], </span><span class="identifier">TRUE</span><span class="plain">);</span>
<span class="functiontext">Emit::place_label</span><span class="plain">(</span><span class="identifier">NextOuterLoop_labels</span><span class="plain">[</span><span class="identifier">reason</span><span class="plain">]);</span>
</pre>
<p class="inwebparagraph"></p>

View file

@ -747,7 +747,7 @@ do.
<p class="endnote">The function Rules::shell_iname is used in <a href="#SP22_1">&#167;22.1</a>.</p>
<p class="endnote">The function Rules::iname is used in <a href="#SP11_2">&#167;11.2</a>, <a href="#SP20_2">&#167;20.2</a>, <a href="#SP20_2_1">&#167;20.2.1</a>, <a href="#SP22">&#167;22</a>, 14/rv (<a href="14-rv.html#SP24_3">&#167;24.3</a>), 17/rs (<a href="17-rs.html#SP7_2">&#167;7.2</a>), 27/ei (<a href="27-ei.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Rules::iname is used in <a href="#SP11_2">&#167;11.2</a>, <a href="#SP20_2">&#167;20.2</a>, <a href="#SP20_2_1">&#167;20.2.1</a>, 14/rv (<a href="14-rv.html#SP24_3">&#167;24.3</a>), 17/rs (<a href="17-rs.html#SP7_2">&#167;7.2</a>), 27/ei (<a href="27-ei.html#SP2">&#167;2</a>).</p>
<p class="inwebparagraph"><a id="SP20"></a><b>&#167;20. Printing rule names at run time. </b></p>
@ -956,14 +956,9 @@ what we compile, of course, is the phrase in question.
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Rules::unimport</span><span class="plain">(</span><span class="reserved">rule</span><span class="plain"> *</span><span class="identifier">R</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">R</span><span class="plain">-</span><span class="element">&gt;defn_compiled</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">) { </span><span class="identifier">R</span><span class="plain">-</span><span class="element">&gt;do_not_import</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">; </span><span class="reserved">return</span><span class="plain">; }</span>
<span class="comment">inter_symbol *symb = InterNames::to_symbol(Rules::iname(R));</span>
<span class="comment">if (symb-&gt;importation_frame) {</span>
<span class="comment">LOG("Unimport rule %n!\n", Rules::iname(R));</span>
<span class="comment">Inter::Tree::remove_node(symb-&gt;importation_frame);</span>
<span class="identifier">R</span><span class="plain">-</span><span class="element">&gt;defn_compiled</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="identifier">R</span><span class="plain">-</span><span class="element">&gt;do_not_import</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="identifier">R</span><span class="plain">-</span><span class="element">&gt;defn_as_phrase</span><span class="plain">-</span><span class="element">&gt;imported</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="comment">}</span>
<span class="identifier">R</span><span class="plain">-</span><span class="element">&gt;defn_compiled</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="identifier">R</span><span class="plain">-</span><span class="element">&gt;do_not_import</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="identifier">R</span><span class="plain">-</span><span class="element">&gt;defn_as_phrase</span><span class="plain">-</span><span class="element">&gt;imported</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>

View file

@ -295,7 +295,7 @@ many of them.
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">block_being_compiled</span><span class="plain">-</span><span class="element">&gt;label_following</span><span class="plain"> &gt;= 0) {</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">TL</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">TL</span><span class="plain">, </span><span class="string">".loop_break_%d"</span><span class="plain">, </span><span class="identifier">block_being_compiled</span><span class="plain">-</span><span class="element">&gt;label_following</span><span class="plain">);</span>
<span class="functiontext">Emit::place_label</span><span class="plain">(</span><span class="functiontext">Emit::reserve_label</span><span class="plain">(</span><span class="identifier">TL</span><span class="plain">), </span><span class="identifier">TRUE</span><span class="plain">);</span>
<span class="functiontext">Emit::place_label</span><span class="plain">(</span><span class="functiontext">Emit::reserve_label</span><span class="plain">(</span><span class="identifier">TL</span><span class="plain">));</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">TL</span><span class="plain">);</span>
<span class="plain">}</span>

View file

@ -865,7 +865,7 @@ inline definitions for "say if" and similar.
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">SAYL</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">SAYL</span><span class="plain">, </span><span class="string">"."</span><span class="plain">);</span>
<span class="functiontext">JumpLabels::write</span><span class="plain">(</span><span class="identifier">SAYL</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Say"</span><span class="plain">);</span>
<span class="functiontext">Emit::place_label</span><span class="plain">(</span><span class="functiontext">Emit::reserve_label</span><span class="plain">(</span><span class="identifier">SAYL</span><span class="plain">), </span><span class="identifier">TRUE</span><span class="plain">);</span>
<span class="functiontext">Emit::place_label</span><span class="plain">(</span><span class="functiontext">Emit::reserve_label</span><span class="plain">(</span><span class="identifier">SAYL</span><span class="plain">));</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">SAYL</span><span class="plain">);</span>
<span class="functiontext">JumpLabels::read_counter</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"Say"</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">);</span>
@ -873,7 +873,7 @@ inline definitions for "say if" and similar.
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">SAYXL</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">SAYXL</span><span class="plain">, </span><span class="string">"."</span><span class="plain">);</span>
<span class="functiontext">JumpLabels::write</span><span class="plain">(</span><span class="identifier">SAYXL</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"SayX"</span><span class="plain">);</span>
<span class="functiontext">Emit::place_label</span><span class="plain">(</span><span class="functiontext">Emit::reserve_label</span><span class="plain">(</span><span class="identifier">SAYXL</span><span class="plain">), </span><span class="identifier">TRUE</span><span class="plain">);</span>
<span class="functiontext">Emit::place_label</span><span class="plain">(</span><span class="functiontext">Emit::reserve_label</span><span class="plain">(</span><span class="identifier">SAYXL</span><span class="plain">));</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">SAYXL</span><span class="plain">);</span>
<span class="functiontext">JumpLabels::read_counter</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"SayX"</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">);</span>

View file

@ -38,7 +38,7 @@ we need to keep track of:
<pre class="display">
<span class="reserved">ph_stack_frame</span><span class="plain"> *</span><span class="identifier">currently_compiling_in_frame</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">; </span> <span class="comment">the stack frame for this routine</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">currently_compiling_nnp</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">; </span> <span class="comment">is this a nonphrasal stack frame we made ourselves?</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">currently_compiling_inter_block</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">; </span> <span class="comment">where Inter is being emitted to</span>
<span class="identifier">inter_package</span><span class="plain"> *</span><span class="identifier">currently_compiling_inter_block</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">; </span> <span class="comment">where Inter is being emitted to</span>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">currently_compiling_iname</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">; </span> <span class="comment">routine we end up with</span>
</pre>
@ -63,18 +63,12 @@ pre-existing stack frame:
<span class="functiontext">LocalVariables::declare</span><span class="plain">(</span><span class="identifier">phsf</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">save</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="functiontext">Routines::self</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">currently_compiling_inter_block</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function Routines::begin_framed is used in <a href="#SP1">&#167;1</a>, 25/cp (<a href="25-cp.html#SP3">&#167;3</a>).</p>
<p class="endnote">The function Routines::self appears nowhere else.</p>
<p class="inwebparagraph"><a id="SP3_1"></a><b>&#167;3.1. </b>If the <code class="display"><span class="extract">phsf</span></code> argument is set, then we'll use that; otherwise we will
create a new nonphrasal stack frame.
</p>
@ -123,7 +117,7 @@ did not.
&lt;<span class="cwebmacro">Issue a problem for too many locals</span> <span class="cwebmacronumber">4.2</span>&gt;<span class="plain">;</span>
<span class="functiontext">LocalVariables::declare</span><span class="plain">(</span><span class="identifier">currently_compiling_in_frame</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
<span class="functiontext">Emit::end_block</span><span class="plain">(</span><span class="identifier">currently_compiling_inter_block</span><span class="plain">);</span>
<span class="functiontext">Emit::end_block</span><span class="plain">();</span>
<span class="functiontext">Emit::routine</span><span class="plain">(</span><span class="identifier">kernel_name</span><span class="plain">?</span><span class="identifier">kernel_name</span><span class="plain">:</span><span class="identifier">public_name</span><span class="plain">,</span>
<span class="identifier">R_kind</span><span class="plain">, </span><span class="identifier">currently_compiling_inter_block</span><span class="plain">);</span>
@ -150,7 +144,7 @@ did not.
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">returns_block_value</span><span class="plain"> =</span>
<span class="identifier">Kinds::Behaviour::uses_pointer_values</span><span class="plain">(</span><span class="identifier">currently_compiling_in_frame</span><span class="plain">-</span><span class="element">&gt;kind_returned</span><span class="plain">);</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">rsymb</span><span class="plain"> = </span><span class="functiontext">Emit::block</span><span class="plain">(</span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">public_name</span><span class="plain">);</span>
<span class="identifier">inter_package</span><span class="plain"> *</span><span class="identifier">block_package</span><span class="plain"> = </span><span class="functiontext">Emit::block</span><span class="plain">(</span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">public_name</span><span class="plain">);</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">I7RBLK_symbol</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
&lt;<span class="cwebmacro">Compile I6 locals for the outer shell</span> <span class="cwebmacronumber">4.1.1</span>&gt;<span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">NBV</span><span class="plain"> = 0;</span>
@ -158,8 +152,8 @@ did not.
&lt;<span class="cwebmacro">Compile a call to the kernel</span> <span class="cwebmacronumber">4.1.3</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Compile some teardown code now that the kernel has finished</span> <span class="cwebmacronumber">4.1.4</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Compile a return from the outer shell</span> <span class="cwebmacronumber">4.1.5</span>&gt;<span class="plain">;</span>
<span class="functiontext">Emit::end_block</span><span class="plain">(</span><span class="identifier">rsymb</span><span class="plain">);</span>
<span class="functiontext">Emit::routine</span><span class="plain">(</span><span class="identifier">public_name</span><span class="plain">, </span><span class="identifier">R_kind</span><span class="plain">, </span><span class="identifier">rsymb</span><span class="plain">);</span>
<span class="functiontext">Emit::end_block</span><span class="plain">();</span>
<span class="functiontext">Emit::routine</span><span class="plain">(</span><span class="identifier">public_name</span><span class="plain">, </span><span class="identifier">R_kind</span><span class="plain">, </span><span class="identifier">block_package</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>

View file

@ -246,8 +246,8 @@ insert them into the Inter stream close to the top.
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">symb</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="functiontext">Emit::new_local_symbol</span><span class="plain">(</span><span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">rsymb</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">) {</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">Inter::SymbolsTables::create_with_unique_name</span><span class="plain">(</span><span class="identifier">Inter::Package::local_symbols</span><span class="plain">(</span><span class="identifier">rsymb</span><span class="plain">), </span><span class="identifier">name</span><span class="plain">);</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="functiontext">Emit::new_local_symbol</span><span class="plain">(</span><span class="identifier">inter_package</span><span class="plain"> *</span><span class="identifier">rpack</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">) {</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">Inter::SymbolsTables::create_with_unique_name</span><span class="plain">(</span><span class="identifier">Inter::Packages::scope</span><span class="plain">(</span><span class="identifier">rpack</span><span class="plain">), </span><span class="identifier">name</span><span class="plain">);</span>
<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>
@ -750,7 +750,7 @@ insert them into the Inter stream close to the top.
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">name</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">inter_symbol</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">inter_package</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">inter_bookmark</span><span class="plain"> </span><span class="identifier">current_inter_bookmark</span><span class="plain">;</span>
<span class="identifier">inter_bookmark</span><span class="plain"> </span><span class="identifier">locals_bookmark</span><span class="plain">;</span>
<span class="identifier">inter_bookmark</span><span class="plain"> </span><span class="identifier">begin_bookmark</span><span class="plain">;</span>
@ -770,20 +770,20 @@ insert them into the Inter stream close to the top.
<span class="plain">*/</span>
<span class="plain">}</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="functiontext">Emit::package</span><span class="plain">(</span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain">, </span><span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">ptype</span><span class="plain">, </span><span class="identifier">inter_package</span><span class="plain"> **</span><span class="identifier">P</span><span class="plain">) {</span>
<span class="identifier">inter_package</span><span class="plain"> *</span><span class="functiontext">Emit::package</span><span class="plain">(</span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain">, </span><span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">ptype</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ptype</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 type"</span><span class="plain">);</span>
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">B</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">inter_symbol</span><span class="plain"> *</span><span class="identifier">rsymb</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>
<span class="comment">inter_symbol *rsymb = Emit::define_symbol(iname);</span>
<span class="identifier">inter_package</span><span class="plain"> *</span><span class="identifier">IP</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="functiontext">Emit::guard</span><span class="plain">(</span><span class="identifier">Inter::Package::new_package</span><span class="plain">(</span><span class="functiontext">Packaging::at</span><span class="plain">(), </span><span class="identifier">rsymb</span><span class="plain">, </span><span class="identifier">ptype</span><span class="plain">, </span><span class="identifier">B</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, &amp;</span><span class="identifier">IP</span><span class="plain">));</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">IP</span><span class="plain">) {</span>
<span class="identifier">Inter::Bookmarks::set_current_package</span><span class="plain">(</span><span class="functiontext">Packaging::at</span><span class="plain">(), </span><span class="identifier">IP</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">P</span><span class="plain">) *</span><span class="identifier">P</span><span class="plain"> = </span><span class="identifier">IP</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">rsymb</span><span class="plain">;</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">hmm</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">hmm</span><span class="plain">, </span><span class="string">"%n"</span><span class="plain">, </span><span class="identifier">iname</span><span class="plain">);</span>
<span class="functiontext">Emit::guard</span><span class="plain">(</span><span class="identifier">Inter::Package::new_package_named</span><span class="plain">(</span><span class="functiontext">Packaging::at</span><span class="plain">(), </span><span class="identifier">hmm</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">, </span><span class="identifier">ptype</span><span class="plain">, </span><span class="identifier">B</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, &amp;</span><span class="identifier">IP</span><span class="plain">));</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">hmm</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">IP</span><span class="plain">) </span><span class="identifier">Inter::Bookmarks::set_current_package</span><span class="plain">(</span><span class="functiontext">Packaging::at</span><span class="plain">(), </span><span class="identifier">IP</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">IP</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="functiontext">Emit::block</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="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain">) {</span>
<span class="identifier">inter_package</span><span class="plain"> *</span><span class="functiontext">Emit::block</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="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">current_inter_routine</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"nested routines"</span><span class="plain">);</span>
<span class="reserved">if</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">internal_error</span><span class="plain">(</span><span class="string">"no inter repository"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">save</span><span class="plain">) {</span>
@ -800,10 +800,10 @@ insert them into the Inter stream close to the top.
<span class="identifier">block_iname</span><span class="plain"> = </span><span class="functiontext">Hierarchy::make_block_iname</span><span class="plain">(</span><span class="functiontext">InterNames::location</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">));</span>
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"routine outside function package"</span><span class="plain">);</span>
<span class="identifier">inter_bookmark</span><span class="plain"> </span><span class="identifier">save_ib</span><span class="plain"> = </span><span class="identifier">Inter::Bookmarks::snapshot</span><span class="plain">(</span><span class="functiontext">Packaging::at</span><span class="plain">());</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">rsymb</span><span class="plain"> = </span><span class="functiontext">Emit::package</span><span class="plain">(</span><span class="identifier">block_iname</span><span class="plain">, </span><span class="identifier">code_packagetype</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="identifier">current_inter_routine</span><span class="plain"> = </span><span class="functiontext">Emit::package</span><span class="plain">(</span><span class="identifier">block_iname</span><span class="plain">, </span><span class="identifier">code_packagetype</span><span class="plain">);</span>
<span class="identifier">current_inter_routine</span><span class="plain"> = </span><span class="identifier">rsymb</span><span class="plain">;</span>
<span class="identifier">current_inter_bookmark</span><span class="plain"> = </span><span class="functiontext">Emit::bookmark</span><span class="plain">();</span>
<span class="functiontext">Emit::guard</span><span class="plain">(</span><span class="identifier">Inter::Code::new</span><span class="plain">(</span><span class="functiontext">Packaging::at</span><span class="plain">(),</span>
<span class="plain">(</span><span class="reserved">int</span><span class="plain">) </span><span class="functiontext">Emit::baseline</span><span class="plain">(</span><span class="functiontext">Packaging::at</span><span class="plain">()) + 1, </span><span class="identifier">NULL</span><span class="plain">));</span>
@ -816,7 +816,7 @@ insert them into the Inter stream close to the top.
<span class="identifier">code_bookmark</span><span class="plain"> = </span><span class="functiontext">Emit::bookmark</span><span class="plain">();</span>
<span class="reserved">code_insertion_point</span><span class="plain"> </span><span class="identifier">cip</span><span class="plain"> = </span><span class="functiontext">Emit::new_cip</span><span class="plain">(&amp;</span><span class="identifier">code_bookmark</span><span class="plain">);</span>
<span class="functiontext">Emit::push_code_position</span><span class="plain">(</span><span class="identifier">cip</span><span class="plain">, </span><span class="identifier">save_ib</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">rsymb</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">current_inter_routine</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="functiontext">Emit::kernel</span><span class="plain">(</span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">public_name</span><span class="plain">) {</span>
@ -829,14 +829,14 @@ insert them into the Inter stream close to the top.
<span class="functiontext">Packaging::exit</span><span class="plain">(</span><span class="identifier">save</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::routine</span><span class="plain">(</span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">rname</span><span class="plain">, </span><span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">rkind</span><span class="plain">, </span><span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">block_name</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::routine</span><span class="plain">(</span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">rname</span><span class="plain">, </span><span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">rkind</span><span class="plain">, </span><span class="identifier">inter_package</span><span class="plain"> *</span><span class="identifier">block</span><span class="plain">) {</span>
<span class="reserved">if</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">internal_error</span><span class="plain">(</span><span class="string">"no inter repository"</span><span class="plain">);</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">AB_symbol</span><span class="plain"> = </span><span class="functiontext">Emit::kind_to_symbol</span><span class="plain">(</span><span class="identifier">rkind</span><span class="plain">);</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">rsymb</span><span class="plain"> = </span><span class="functiontext">Emit::define_symbol</span><span class="plain">(</span><span class="identifier">rname</span><span class="plain">);</span>
<span class="functiontext">Emit::guard</span><span class="plain">(</span><span class="identifier">Inter::Constant::new_function</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">rsymb</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">AB_symbol</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">block_name</span><span class="plain">),</span>
<span class="identifier">block</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>
@ -856,16 +856,12 @@ insert them into the Inter stream close to the top.
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">lab_name</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::place_label</span><span class="plain">(</span><span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">lab_name</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">inside</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">inside</span><span class="plain">) {</span>
<span class="functiontext">Emit::guard</span><span class="plain">(</span><span class="identifier">Inter::Label::new</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">lab_name</span><span class="plain">, (</span><span class="identifier">inter_t</span><span class="plain">) </span><span class="functiontext">Emit::level</span><span class="plain">(), </span><span class="identifier">NULL</span><span class="plain">));</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="functiontext">Emit::guard</span><span class="plain">(</span><span class="identifier">Inter::Label::new</span><span class="plain">(</span><span class="functiontext">Packaging::at</span><span class="plain">(), </span><span class="identifier">current_inter_routine</span><span class="plain">, </span><span class="identifier">lab_name</span><span class="plain">, </span><span class="functiontext">Emit::baseline</span><span class="plain">(</span><span class="functiontext">Packaging::at</span><span class="plain">()) + 1, </span><span class="identifier">NULL</span><span class="plain">));</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::place_label</span><span class="plain">(</span><span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">lab_name</span><span class="plain">) {</span>
<span class="functiontext">Emit::guard</span><span class="plain">(</span><span class="identifier">Inter::Label::new</span><span class="plain">(</span><span class="functiontext">Emit::at</span><span class="plain">(), </span><span class="identifier">lab_name</span><span class="plain">, (</span><span class="identifier">inter_t</span><span class="plain">) </span><span class="functiontext">Emit::level</span><span class="plain">(), </span><span class="identifier">NULL</span><span class="plain">));</span>
<span class="plain">}</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="functiontext">Emit::local_exists</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">lname</span><span class="plain">) {</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">Inter::SymbolsTables::symbol_from_name</span><span class="plain">(</span><span class="identifier">Inter::Package::local_symbols</span><span class="plain">(</span><span class="identifier">current_inter_routine</span><span class="plain">), </span><span class="identifier">lname</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">Inter::SymbolsTables::symbol_from_name</span><span class="plain">(</span><span class="identifier">Inter::Packages::scope</span><span class="plain">(</span><span class="identifier">current_inter_routine</span><span class="plain">), </span><span class="identifier">lname</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="functiontext">Emit::local</span><span class="plain">(</span><span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">K</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">lname</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">annot</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">comm</span><span class="plain">) {</span>
@ -880,7 +876,7 @@ insert them into the Inter stream close to the top.
<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>
<span class="identifier">Inter::Symbols::local</span><span class="plain">(</span><span class="identifier">loc_name</span><span class="plain">);</span>
<span class="functiontext">Emit::guard</span><span class="plain">(</span><span class="identifier">Inter::Local::new</span><span class="plain">(&amp;</span><span class="identifier">locals_bookmark</span><span class="plain">, </span><span class="identifier">current_inter_routine</span><span class="plain">, </span><span class="identifier">loc_name</span><span class="plain">, </span><span class="identifier">loc_kind</span><span class="plain">, </span><span class="identifier">ID</span><span class="plain">, </span><span class="functiontext">Emit::baseline</span><span class="plain">(&amp;</span><span class="identifier">locals_bookmark</span><span class="plain">) + 1, </span><span class="identifier">NULL</span><span class="plain">));</span>
<span class="functiontext">Emit::guard</span><span class="plain">(</span><span class="identifier">Inter::Local::new</span><span class="plain">(&amp;</span><span class="identifier">locals_bookmark</span><span class="plain">, </span><span class="identifier">loc_name</span><span class="plain">, </span><span class="identifier">loc_kind</span><span class="plain">, </span><span class="identifier">ID</span><span class="plain">, </span><span class="functiontext">Emit::baseline</span><span class="plain">(&amp;</span><span class="identifier">locals_bookmark</span><span class="plain">) + 1, </span><span class="identifier">NULL</span><span class="plain">));</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">loc_name</span><span class="plain">;</span>
<span class="plain">}</span>
@ -894,18 +890,18 @@ insert them into the Inter stream close to the top.
<span class="plain">(</span><span class="identifier">prim_symb</span><span class="plain"> == </span><span class="identifier">do_interp</span><span class="plain">) ||</span>
<span class="plain">(</span><span class="identifier">prim_symb</span><span class="plain"> == </span><span class="identifier">objectloop_interp</span><span class="plain">)) </span><span class="functiontext">Emit::note_level</span><span class="plain">(</span><span class="identifier">prim_symb</span><span class="plain">);</span>
<span class="functiontext">Emit::guard</span><span class="plain">(</span><span class="identifier">Inter::Inv::new_primitive</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">prim_symb</span><span class="plain">, (</span><span class="identifier">inter_t</span><span class="plain">) </span><span class="functiontext">Emit::level</span><span class="plain">(), </span><span class="identifier">NULL</span><span class="plain">));</span>
<span class="functiontext">Emit::guard</span><span class="plain">(</span><span class="identifier">Inter::Inv::new_primitive</span><span class="plain">(</span><span class="functiontext">Emit::at</span><span class="plain">(), </span><span class="identifier">prim_symb</span><span class="plain">, (</span><span class="identifier">inter_t</span><span class="plain">) </span><span class="functiontext">Emit::level</span><span class="plain">(), </span><span class="identifier">NULL</span><span class="plain">));</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::inv_call</span><span class="plain">(</span><span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">prim_symb</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="functiontext">Emit::guard</span><span class="plain">(</span><span class="identifier">Inter::Inv::new_call</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">prim_symb</span><span class="plain">, (</span><span class="identifier">inter_t</span><span class="plain">) </span><span class="functiontext">Emit::level</span><span class="plain">(), </span><span class="identifier">NULL</span><span class="plain">));</span>
<span class="functiontext">Emit::guard</span><span class="plain">(</span><span class="identifier">Inter::Inv::new_call</span><span class="plain">(</span><span class="functiontext">Emit::at</span><span class="plain">(), </span><span class="identifier">prim_symb</span><span class="plain">, (</span><span class="identifier">inter_t</span><span class="plain">) </span><span class="functiontext">Emit::level</span><span class="plain">(), </span><span class="identifier">NULL</span><span class="plain">));</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::inv_call_iname</span><span class="plain">(</span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain">) {</span>
<span class="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_symbol</span><span class="plain"> *</span><span class="identifier">prim_symb</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="functiontext">Emit::guard</span><span class="plain">(</span><span class="identifier">Inter::Inv::new_call</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">prim_symb</span><span class="plain">, (</span><span class="identifier">inter_t</span><span class="plain">) </span><span class="functiontext">Emit::level</span><span class="plain">(), </span><span class="identifier">NULL</span><span class="plain">));</span>
<span class="functiontext">Emit::guard</span><span class="plain">(</span><span class="identifier">Inter::Inv::new_call</span><span class="plain">(</span><span class="functiontext">Emit::at</span><span class="plain">(), </span><span class="identifier">prim_symb</span><span class="plain">, (</span><span class="identifier">inter_t</span><span class="plain">) </span><span class="functiontext">Emit::level</span><span class="plain">(), </span><span class="identifier">NULL</span><span class="plain">));</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::inv_indirect_call</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">arity</span><span class="plain">) {</span>
@ -924,7 +920,7 @@ insert them into the Inter stream close to the top.
<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::Tree::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::Warehouse::get_text</span><span class="plain">(</span><span class="identifier">Inter::Tree::warehouse</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>
<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">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>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::return</span><span class="plain">(</span><span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">K</span><span class="plain">, </span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain">) {</span>
@ -1241,19 +1237,19 @@ insert them into the Inter stream close to the top.
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::evaluation</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">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="functiontext">Emit::guard</span><span class="plain">(</span><span class="identifier">Inter::Evaluation::new</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="functiontext">Emit::level</span><span class="plain">(), </span><span class="identifier">NULL</span><span class="plain">));</span>
<span class="functiontext">Emit::guard</span><span class="plain">(</span><span class="identifier">Inter::Evaluation::new</span><span class="plain">(</span><span class="functiontext">Emit::at</span><span class="plain">(), </span><span class="functiontext">Emit::level</span><span class="plain">(), </span><span class="identifier">NULL</span><span class="plain">));</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::reference</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">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="functiontext">Emit::guard</span><span class="plain">(</span><span class="identifier">Inter::Reference::new</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="functiontext">Emit::level</span><span class="plain">(), </span><span class="identifier">NULL</span><span class="plain">));</span>
<span class="functiontext">Emit::guard</span><span class="plain">(</span><span class="identifier">Inter::Reference::new</span><span class="plain">(</span><span class="functiontext">Emit::at</span><span class="plain">(), </span><span class="functiontext">Emit::level</span><span class="plain">(), </span><span class="identifier">NULL</span><span class="plain">));</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::val</span><span class="plain">(</span><span class="identifier">kind</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">val1</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">val2</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_symbol</span><span class="plain"> *</span><span class="identifier">val_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="reserved">if</span><span class="plain"> (</span><span class="identifier">val_kind</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 kind for val"</span><span class="plain">);</span>
<span class="functiontext">Emit::guard</span><span class="plain">(</span><span class="identifier">Inter::Val::new</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">val_kind</span><span class="plain">, </span><span class="functiontext">Emit::level</span><span class="plain">(), </span><span class="identifier">val1</span><span class="plain">, </span><span class="identifier">val2</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">));</span>
<span class="functiontext">Emit::guard</span><span class="plain">(</span><span class="identifier">Inter::Val::new</span><span class="plain">(</span><span class="functiontext">Emit::at</span><span class="plain">(), </span><span class="identifier">val_kind</span><span class="plain">, </span><span class="functiontext">Emit::level</span><span class="plain">(), </span><span class="identifier">val1</span><span class="plain">, </span><span class="identifier">val2</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">Emit::val_nothing</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
@ -1262,14 +1258,14 @@ insert them into the Inter stream close to the top.
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::lab</span><span class="plain">(</span><span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">L</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="functiontext">Emit::guard</span><span class="plain">(</span><span class="identifier">Inter::Lab::new</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">L</span><span class="plain">, (</span><span class="identifier">inter_t</span><span class="plain">) </span><span class="functiontext">Emit::level</span><span class="plain">(), </span><span class="identifier">NULL</span><span class="plain">));</span>
<span class="functiontext">Emit::guard</span><span class="plain">(</span><span class="identifier">Inter::Lab::new</span><span class="plain">(</span><span class="functiontext">Emit::at</span><span class="plain">(), </span><span class="identifier">L</span><span class="plain">, (</span><span class="identifier">inter_t</span><span class="plain">) </span><span class="functiontext">Emit::level</span><span class="plain">(), </span><span class="identifier">NULL</span><span class="plain">));</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::ref</span><span class="plain">(</span><span class="identifier">kind</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">val1</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">val2</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_symbol</span><span class="plain"> *</span><span class="identifier">val_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="reserved">if</span><span class="plain"> (</span><span class="identifier">val_kind</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 kind for ref"</span><span class="plain">);</span>
<span class="functiontext">Emit::guard</span><span class="plain">(</span><span class="identifier">Inter::Ref::new</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">val_kind</span><span class="plain">, </span><span class="functiontext">Emit::level</span><span class="plain">(), </span><span class="identifier">val1</span><span class="plain">, </span><span class="identifier">val2</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">));</span>
<span class="functiontext">Emit::guard</span><span class="plain">(</span><span class="identifier">Inter::Ref::new</span><span class="plain">(</span><span class="functiontext">Emit::at</span><span class="plain">(), </span><span class="identifier">val_kind</span><span class="plain">, </span><span class="functiontext">Emit::level</span><span class="plain">(), </span><span class="identifier">val1</span><span class="plain">, </span><span class="identifier">val2</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">Emit::val_iname</span><span class="plain">(</span><span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">K</span><span class="plain">, </span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain">) {</span>
@ -1330,12 +1326,11 @@ insert them into the Inter stream close to the top.
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::cast</span><span class="plain">(</span><span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">F</span><span class="plain">, </span><span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">T</span><span class="plain">) {</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">from_kind</span><span class="plain"> = </span><span class="functiontext">Emit::kind_to_symbol</span><span class="plain">(</span><span class="identifier">F</span><span class="plain">);</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">to_kind</span><span class="plain"> = </span><span class="functiontext">Emit::kind_to_symbol</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">);</span>
<span class="functiontext">Emit::guard</span><span class="plain">(</span><span class="identifier">Inter::Cast::new</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">from_kind</span><span class="plain">, </span><span class="identifier">to_kind</span><span class="plain">, (</span><span class="identifier">inter_t</span><span class="plain">) </span><span class="functiontext">Emit::level</span><span class="plain">(), </span><span class="identifier">NULL</span><span class="plain">));</span>
<span class="functiontext">Emit::guard</span><span class="plain">(</span><span class="identifier">Inter::Cast::new</span><span class="plain">(</span><span class="functiontext">Emit::at</span><span class="plain">(), </span><span class="identifier">from_kind</span><span class="plain">, </span><span class="identifier">to_kind</span><span class="plain">, (</span><span class="identifier">inter_t</span><span class="plain">) </span><span class="functiontext">Emit::level</span><span class="plain">(), </span><span class="identifier">NULL</span><span class="plain">));</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::end_block</span><span class="plain">(</span><span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">rsymb</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Emit::end_block</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">current_inter_routine</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"not in an inter routine"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">current_inter_routine</span><span class="plain"> != </span><span class="identifier">rsymb</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"wrong inter routine ended"</span><span class="plain">);</span>
<span class="identifier">current_inter_routine</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="functiontext">Emit::pop_code_position</span><span class="plain">();</span>
<span class="plain">}</span>

View file

@ -215,7 +215,7 @@
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"bad label stuff"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="functiontext">Emit::place_label</span><span class="plain">(</span><span class="functiontext">Emit::reserve_label</span><span class="plain">(</span><span class="identifier">L</span><span class="plain">), </span><span class="identifier">TRUE</span><span class="plain">);</span>
<span class="functiontext">Emit::place_label</span><span class="plain">(</span><span class="functiontext">Emit::reserve_label</span><span class="plain">(</span><span class="identifier">L</span><span class="plain">));</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">L</span><span class="plain">);</span>
</pre>

View file

@ -324,7 +324,7 @@ automatically here:
<p class="inwebparagraph"></p>
<p class="endnote">The function InterNames::to_symbol is used in 15/epv (<a href="15-epv.html#SP4">&#167;4</a>), 21/rl (<a href="21-rl.html#SP11_2">&#167;11.2</a>, <a href="21-rl.html#SP22">&#167;22</a>), 26/iti (<a href="26-iti.html#SP9">&#167;9</a>), 27/eis (<a href="27-eis.html#SP4">&#167;4</a>), 27/ei (<a href="27-ei.html#SP2">&#167;2</a>, <a href="27-ei.html#SP3">&#167;3</a>, <a href="27-ei.html#SP4">&#167;4</a>, <a href="27-ei.html#SP5">&#167;5</a>).</p>
<p class="endnote">The function InterNames::to_symbol is used in 15/epv (<a href="15-epv.html#SP4">&#167;4</a>), 21/rl (<a href="21-rl.html#SP11_2">&#167;11.2</a>), 26/iti (<a href="26-iti.html#SP9">&#167;9</a>), 27/eis (<a href="27-eis.html#SP4">&#167;4</a>), 27/ei (<a href="27-ei.html#SP2">&#167;2</a>, <a href="27-ei.html#SP3">&#167;3</a>, <a href="27-ei.html#SP4">&#167;4</a>, <a href="27-ei.html#SP5">&#167;5</a>).</p>
<hr class="tocbar">
<ul class="toc"><li><a href="27-pt.html">Back to 'Package Types'</a></li><li><a href="27-eis.html">Continue with 'Emitting Inter Schemas'</a></li></ul><hr class="tocbar">

View file

@ -377,7 +377,7 @@ specification.
<span class="functiontext">Packaging::set_state</span><span class="plain">(&amp;(</span><span class="identifier">R</span><span class="plain">-</span><span class="element">&gt;parent_request</span><span class="plain">-</span><span class="element">&gt;write_position</span><span class="plain">), </span><span class="identifier">E</span><span class="plain">);</span>
<span class="identifier">inter_bookmark</span><span class="plain"> </span><span class="identifier">package_bubble</span><span class="plain"> = </span><span class="functiontext">Packaging::bubble</span><span class="plain">();</span>
<span class="functiontext">Packaging::set_state</span><span class="plain">(&amp;</span><span class="identifier">package_bubble</span><span class="plain">, </span><span class="identifier">E</span><span class="plain">);</span>
<span class="functiontext">Emit::package</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">-</span><span class="element">&gt;eventual_name</span><span class="plain">, </span><span class="identifier">R</span><span class="plain">-</span><span class="element">&gt;eventual_type</span><span class="plain">, &amp;(</span><span class="identifier">R</span><span class="plain">-</span><span class="element">&gt;actual_package</span><span class="plain">));</span>
<span class="identifier">R</span><span class="plain">-</span><span class="element">&gt;actual_package</span><span class="plain"> = </span><span class="functiontext">Emit::package</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">-</span><span class="element">&gt;eventual_name</span><span class="plain">, </span><span class="identifier">R</span><span class="plain">-</span><span class="element">&gt;eventual_type</span><span class="plain">);</span>
<span class="identifier">R</span><span class="plain">-</span><span class="element">&gt;write_position</span><span class="plain"> = </span><span class="functiontext">Packaging::bubble</span><span class="plain">();</span>
<span class="functiontext">Packaging::set_state</span><span class="plain">(</span><span class="identifier">save_IRS</span><span class="plain">, </span><span class="identifier">E</span><span class="plain">);</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
@ -385,7 +385,7 @@ specification.
<span class="identifier">package_bubble</span><span class="plain"> = </span><span class="functiontext">Packaging::bubble</span><span class="plain">();</span>
<span class="identifier">inter_bookmark</span><span class="plain"> *</span><span class="identifier">save_IRS</span><span class="plain"> = </span><span class="functiontext">Packaging::at</span><span class="plain">();</span>
<span class="functiontext">Packaging::set_state</span><span class="plain">(&amp;</span><span class="identifier">package_bubble</span><span class="plain">, </span><span class="identifier">E</span><span class="plain">);</span>
<span class="functiontext">Emit::package</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">-</span><span class="element">&gt;eventual_name</span><span class="plain">, </span><span class="identifier">R</span><span class="plain">-</span><span class="element">&gt;eventual_type</span><span class="plain">, &amp;(</span><span class="identifier">R</span><span class="plain">-</span><span class="element">&gt;actual_package</span><span class="plain">));</span>
<span class="identifier">R</span><span class="plain">-</span><span class="element">&gt;actual_package</span><span class="plain"> = </span><span class="functiontext">Emit::package</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">-</span><span class="element">&gt;eventual_name</span><span class="plain">, </span><span class="identifier">R</span><span class="plain">-</span><span class="element">&gt;eventual_type</span><span class="plain">);</span>
<span class="identifier">R</span><span class="plain">-</span><span class="element">&gt;write_position</span><span class="plain"> = </span><span class="functiontext">Packaging::bubble</span><span class="plain">();</span>
<span class="functiontext">Packaging::set_state</span><span class="plain">(</span><span class="identifier">save_IRS</span><span class="plain">, </span><span class="identifier">E</span><span class="plain">);</span>
<span class="plain">}</span>

View file

@ -1060,7 +1060,7 @@ if we fail to make a match.
<span class="plain">}</span>
<span class="plain">}</span>
<span class="functiontext">Emit::place_label</span><span class="plain">(</span><span class="identifier">succeeded_label</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">);</span>
<span class="functiontext">Emit::place_label</span><span class="plain">(</span><span class="identifier">succeeded_label</span><span class="plain">);</span>
<span class="functiontext">Emit::inv_primitive</span><span class="plain">(</span><span class="identifier">if_interp</span><span class="plain">);</span>
<span class="functiontext">Emit::down</span><span class="plain">();</span>
@ -1149,7 +1149,7 @@ if we fail to make a match.
<span class="functiontext">Emit::down</span><span class="plain">();</span>
<span class="functiontext">Emit::val_iname</span><span class="plain">(</span><span class="identifier">K_value</span><span class="plain">, </span><span class="functiontext">Hierarchy::find</span><span class="plain">(</span><span class="constant">GPR_NUMBER_HL</span><span class="plain">));</span>
<span class="functiontext">Emit::up</span><span class="plain">();</span>
<span class="functiontext">Emit::place_label</span><span class="plain">(</span><span class="identifier">failed_label</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">);</span>
<span class="functiontext">Emit::place_label</span><span class="plain">(</span><span class="identifier">failed_label</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
@ -2636,7 +2636,7 @@ the sorting measure.
<pre class="displaydefn">
<span class="functiontext">LiteralPatterns::comment_use_of_lp</span><span class="plain">(</span><span class="identifier">lp</span><span class="plain">);</span>
<span class="functiontext">Emit::place_label</span><span class="plain">(</span><span class="functiontext">LiteralPatterns::jump_label</span><span class="plain">(</span><span class="identifier">lp</span><span class="plain">), </span><span class="identifier">TRUE</span><span class="plain">);</span>
<span class="functiontext">Emit::place_label</span><span class="plain">(</span><span class="functiontext">LiteralPatterns::jump_label</span><span class="plain">(</span><span class="identifier">lp</span><span class="plain">));</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">ec</span><span class="plain">=0, </span><span class="identifier">oc</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">tc</span><span class="plain">=0; </span><span class="identifier">tc</span><span class="plain">&lt;</span><span class="identifier">lp</span><span class="plain">-</span><span class="element">&gt;no_lp_tokens</span><span class="plain">; </span><span class="identifier">tc</span><span class="plain">++) {</span>

View file

@ -905,7 +905,7 @@ whether any change in status has or has not occurred.
<span class="reserved">scene</span><span class="plain"> *</span><span class="identifier">sc</span><span class="plain">;</span>
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">sc</span><span class="plain">, </span><span class="reserved">scene</span><span class="plain">) </span>&lt;<span class="cwebmacro">Compile code detecting the ends of a specific scene</span> <span class="cwebmacronumber">25.2</span>&gt;<span class="plain">;</span>
<span class="identifier">Emit::place_label</span><span class="plain">(</span><span class="identifier">CScene_l</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">);</span>
<span class="identifier">Emit::place_label</span><span class="plain">(</span><span class="identifier">CScene_l</span><span class="plain">);</span>
&lt;<span class="cwebmacro">Add the scene-change tail</span> <span class="cwebmacronumber">25.1</span>&gt;<span class="plain">;</span>
<span class="identifier">Routines::end</span><span class="plain">(</span><span class="identifier">save</span><span class="plain">);</span>

View file

@ -1309,7 +1309,7 @@ command GVs) have not yet been type-checked, whereas all others have.
<span class="identifier">Emit::down</span><span class="plain">();</span>
<span class="identifier">Emit::val_symbol</span><span class="plain">(</span><span class="identifier">K_value</span><span class="plain">, </span><span class="identifier">gprk</span><span class="plain">-</span><span class="element">&gt;rv_s</span><span class="plain">);</span>
<span class="identifier">Emit::up</span><span class="plain">();</span>
<span class="identifier">Emit::place_label</span><span class="plain">(</span><span class="identifier">fail_label</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">);</span>
<span class="identifier">Emit::place_label</span><span class="plain">(</span><span class="identifier">fail_label</span><span class="plain">);</span>
<span class="identifier">Emit::inv_primitive</span><span class="plain">(</span><span class="identifier">store_interp</span><span class="plain">);</span>
<span class="identifier">Emit::down</span><span class="plain">();</span>
<span class="identifier">Emit::ref_symbol</span><span class="plain">(</span><span class="identifier">K_value</span><span class="plain">, </span><span class="identifier">gprk</span><span class="plain">-</span><span class="element">&gt;rv_s</span><span class="plain">);</span>
@ -1350,7 +1350,7 @@ command GVs) have not yet been type-checked, whereas all others have.
<span class="identifier">Emit::up</span><span class="plain">();</span>
<span class="identifier">Emit::up</span><span class="plain">();</span>
<span class="identifier">Emit::place_label</span><span class="plain">(</span><span class="identifier">fail_label</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">);</span>
<span class="identifier">Emit::place_label</span><span class="plain">(</span><span class="identifier">fail_label</span><span class="plain">);</span>
<span class="identifier">Emit::inv_primitive</span><span class="plain">(</span><span class="identifier">store_interp</span><span class="plain">);</span>
<span class="identifier">Emit::down</span><span class="plain">();</span>
<span class="identifier">Emit::ref_symbol</span><span class="plain">(</span><span class="identifier">K_value</span><span class="plain">, </span><span class="identifier">gprk</span><span class="plain">-</span><span class="element">&gt;rv_s</span><span class="plain">);</span>
@ -1375,7 +1375,7 @@ command GVs) have not yet been type-checked, whereas all others have.
<span class="identifier">Emit::down</span><span class="plain">();</span>
<span class="identifier">Emit::val_iname</span><span class="plain">(</span><span class="identifier">K_object</span><span class="plain">, </span><span class="identifier">Hierarchy::find</span><span class="plain">(</span><span class="identifier">GPR_NUMBER_HL</span><span class="plain">));</span>
<span class="identifier">Emit::up</span><span class="plain">();</span>
<span class="identifier">Emit::place_label</span><span class="plain">(</span><span class="identifier">fail_label</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">);</span>
<span class="identifier">Emit::place_label</span><span class="plain">(</span><span class="identifier">fail_label</span><span class="plain">);</span>
<span class="identifier">Emit::inv_primitive</span><span class="plain">(</span><span class="identifier">store_interp</span><span class="plain">);</span>
<span class="identifier">Emit::down</span><span class="plain">();</span>
<span class="identifier">Emit::ref_iname</span><span class="plain">(</span><span class="identifier">K_value</span><span class="plain">, </span><span class="identifier">Hierarchy::find</span><span class="plain">(</span><span class="identifier">WN_HL</span><span class="plain">));</span>
@ -1452,7 +1452,7 @@ command GVs) have not yet been type-checked, whereas all others have.
<span class="identifier">Emit::val_iname</span><span class="plain">(</span><span class="identifier">K_value</span><span class="plain">, </span><span class="identifier">Hierarchy::find</span><span class="plain">(</span><span class="identifier">WN_HL</span><span class="plain">));</span>
<span class="identifier">Emit::up</span><span class="plain">();</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">next_reserved_label</span><span class="plain">) </span><span class="identifier">Emit::place_label</span><span class="plain">(</span><span class="identifier">next_reserved_label</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">next_reserved_label</span><span class="plain">) </span><span class="identifier">Emit::place_label</span><span class="plain">(</span><span class="identifier">next_reserved_label</span><span class="plain">);</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">L</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">L</span><span class="plain">, </span><span class="string">".group_%d_%d_%d"</span><span class="plain">, </span><span class="identifier">current_grammar_block</span><span class="plain">, </span><span class="identifier">lexeme_equivalence_class</span><span class="plain">, </span><span class="identifier">alternative_number</span><span class="plain">+1);</span>
<span class="identifier">next_reserved_label</span><span class="plain"> = </span><span class="identifier">Emit::reserve_label</span><span class="plain">(</span><span class="identifier">L</span><span class="plain">);</span>
@ -1503,7 +1503,7 @@ command GVs) have not yet been type-checked, whereas all others have.
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">empty_text_allowed_in_lexeme</span><span class="plain">) {</span>
&lt;<span class="cwebmacro">Jump to end of group</span> <span class="cwebmacronumber">20.1</span>&gt;<span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">next_reserved_label</span><span class="plain">)</span>
<span class="identifier">Emit::place_label</span><span class="plain">(</span><span class="identifier">next_reserved_label</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">);</span>
<span class="identifier">Emit::place_label</span><span class="plain">(</span><span class="identifier">next_reserved_label</span><span class="plain">);</span>
<span class="identifier">next_reserved_label</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">Emit::inv_primitive</span><span class="plain">(</span><span class="identifier">store_interp</span><span class="plain">);</span>
<span class="identifier">Emit::down</span><span class="plain">();</span>
@ -1511,7 +1511,7 @@ command GVs) have not yet been type-checked, whereas all others have.
<span class="identifier">Emit::val_symbol</span><span class="plain">(</span><span class="identifier">K_value</span><span class="plain">, </span><span class="identifier">gprk</span><span class="plain">-</span><span class="element">&gt;group_wn_s</span><span class="plain">);</span>
<span class="identifier">Emit::up</span><span class="plain">();</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">eog_reserved_label</span><span class="plain">) </span><span class="identifier">Emit::place_label</span><span class="plain">(</span><span class="identifier">eog_reserved_label</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">eog_reserved_label</span><span class="plain">) </span><span class="identifier">Emit::place_label</span><span class="plain">(</span><span class="identifier">eog_reserved_label</span><span class="plain">);</span>
<span class="identifier">eog_reserved_label</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
&lt;<span class="cwebmacro">Jump to end of group</span> <span class="cwebmacronumber">20.1</span>&gt;<span class="plain">;</span>

View file

@ -545,7 +545,7 @@ of a GL to parse.
<span class="identifier">Emit::up</span><span class="plain">();</span>
<span class="identifier">Emit::inv_primitive</span><span class="plain">(</span><span class="identifier">continue_interp</span><span class="plain">);</span>
<span class="identifier">Emit::place_label</span><span class="plain">(</span><span class="identifier">label</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">);</span>
<span class="identifier">Emit::place_label</span><span class="plain">(</span><span class="identifier">label</span><span class="plain">);</span>
<span class="identifier">Emit::inv_primitive</span><span class="plain">(</span><span class="identifier">store_interp</span><span class="plain">);</span>
<span class="identifier">Emit::down</span><span class="plain">();</span>
<span class="identifier">Emit::ref_iname</span><span class="plain">(</span><span class="identifier">K_value</span><span class="plain">, </span><span class="identifier">Hierarchy::find</span><span class="plain">(</span><span class="identifier">WN_HL</span><span class="plain">));</span>
@ -1169,7 +1169,7 @@ alter the value of <code class="display"><span class="extract">self</span></code
<span class="functiontext">PL::Parsing::Tokens::General::parse_visible_either_or</span><span class="plain">(</span>
<span class="identifier">gprk</span><span class="plain">, </span><span class="identifier">prnbar</span><span class="plain">, </span><span class="identifier">visibility_level</span><span class="plain">, </span><span class="identifier">pass_label</span><span class="plain">);</span>
<span class="identifier">Emit::place_label</span><span class="plain">(</span><span class="identifier">pass_label</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">);</span>
<span class="identifier">Emit::place_label</span><span class="plain">(</span><span class="identifier">pass_label</span><span class="plain">);</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="identifier">Emit::inv_primitive</span><span class="plain">(</span><span class="identifier">store_interp</span><span class="plain">);</span>
<span class="identifier">Emit::down</span><span class="plain">();</span>

View file

@ -855,7 +855,7 @@ nothing else.
<span class="identifier">Emit::val</span><span class="plain">(</span><span class="identifier">K_number</span><span class="plain">, </span><span class="identifier">LITERAL_IVAL</span><span class="plain">, 0);</span>
<span class="identifier">Emit::up</span><span class="plain">();</span>
&lt;<span class="cwebmacro">Jump to our doom</span> <span class="cwebmacronumber">12.2</span>&gt;<span class="plain">;</span>
<span class="identifier">Emit::place_label</span><span class="plain">(</span><span class="identifier">exit_label</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">);</span>
<span class="identifier">Emit::place_label</span><span class="plain">(</span><span class="identifier">exit_label</span><span class="plain">);</span>
<span class="identifier">Emit::inv_primitive</span><span class="plain">(</span><span class="identifier">store_interp</span><span class="plain">);</span>
<span class="identifier">Emit::down</span><span class="plain">();</span>
<span class="identifier">Emit::ref_symbol</span><span class="plain">(</span><span class="identifier">K_value</span><span class="plain">, </span><span class="identifier">gprk</span><span class="plain">-</span><span class="element">&gt;rv_s</span><span class="plain">);</span>
@ -930,7 +930,7 @@ nothing else.
<span class="identifier">Emit::val</span><span class="plain">(</span><span class="identifier">K_number</span><span class="plain">, </span><span class="identifier">LITERAL_IVAL</span><span class="plain">, 0);</span>
<span class="identifier">Emit::up</span><span class="plain">();</span>
&lt;<span class="cwebmacro">Jump to our doom</span> <span class="cwebmacronumber">12.2</span>&gt;<span class="plain">;</span>
<span class="identifier">Emit::place_label</span><span class="plain">(</span><span class="identifier">exit_label</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">);</span>
<span class="identifier">Emit::place_label</span><span class="plain">(</span><span class="identifier">exit_label</span><span class="plain">);</span>
<span class="identifier">Emit::inv_primitive</span><span class="plain">(</span><span class="identifier">store_interp</span><span class="plain">);</span>
<span class="identifier">Emit::down</span><span class="plain">();</span>
<span class="identifier">Emit::ref_symbol</span><span class="plain">(</span><span class="identifier">K_value</span><span class="plain">, </span><span class="identifier">gprk</span><span class="plain">-</span><span class="element">&gt;rv_s</span><span class="plain">);</span>
@ -1252,7 +1252,7 @@ nothing else.
<span class="identifier">Emit::val</span><span class="plain">(</span><span class="identifier">K_number</span><span class="plain">, </span><span class="identifier">LITERAL_IVAL</span><span class="plain">, 0);</span>
<span class="identifier">Emit::up</span><span class="plain">();</span>
&lt;<span class="cwebmacro">Jump to our doom</span> <span class="cwebmacronumber">12.2</span>&gt;<span class="plain">;</span>
<span class="identifier">Emit::place_label</span><span class="plain">(</span><span class="identifier">exit_label</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">);</span>
<span class="identifier">Emit::place_label</span><span class="plain">(</span><span class="identifier">exit_label</span><span class="plain">);</span>
<span class="identifier">Emit::inv_primitive</span><span class="plain">(</span><span class="identifier">store_interp</span><span class="plain">);</span>
<span class="identifier">Emit::down</span><span class="plain">();</span>
<span class="identifier">Emit::ref_symbol</span><span class="plain">(</span><span class="identifier">K_value</span><span class="plain">, </span><span class="identifier">gprk</span><span class="plain">-</span><span class="element">&gt;rv_s</span><span class="plain">);</span>

View file

@ -313,7 +313,7 @@
<span class="identifier">Emit::up</span><span class="plain">();</span>
<span class="identifier">Emit::up</span><span class="plain">();</span>
<span class="plain">}</span>
<span class="identifier">Emit::place_label</span><span class="plain">(</span><span class="identifier">flab</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">);</span>
<span class="identifier">Emit::place_label</span><span class="plain">(</span><span class="identifier">flab</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="plain">}</span>

View file

@ -132,7 +132,7 @@
<p class="endnote">The function Inter::Node::ID_to_text is used in 3/dfn (<a href="3-dfn.html#SP3">&#167;3</a>, <a href="3-dfn.html#SP4">&#167;4</a>), 3/idt (<a href="3-idt.html#SP3">&#167;3</a>), 4/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/tic (<a href="5-tic.html#SP2">&#167;2</a>), 5/tsc (<a href="5-tsc.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Node::ID_to_package is used in 4/tpc3 (<a href="4-tpc3.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Node::ID_to_package is used in 4/tpc3 (<a href="4-tpc3.html#SP2">&#167;2</a>), 4/tcc2 (<a href="4-tcc2.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Node::ID_to_frame_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

@ -26,7 +26,7 @@
<p class="inwebparagraph"></p>
<p class="endnote">The structure inter_tree is accessed in 2/bkm and here.</p>
<p class="endnote">The structure inter_tree is accessed in 2/bkm, 2/st and here.</p>
<p class="inwebparagraph"><a id="SP2"></a><b>&#167;2. </b></p>

View file

@ -29,7 +29,7 @@
<p class="inwebparagraph"></p>
<p class="endnote">The structure inter_package is accessed in 2/it, 3/iibf, 4/tpc3 and here.</p>
<p class="endnote">The structure inter_package is accessed in 2/it, 3/iibf, 4/tpc3, 4/tcc2 and here.</p>
<p class="inwebparagraph"><a id="SP2"></a><b>&#167;2. </b></p>
@ -59,7 +59,8 @@
<span class="reserved">inter_tree_node</span><span class="plain"> *</span><span class="functiontext">Inter::Packages::definition</span><span class="plain">(</span><span class="reserved">inter_package</span><span class="plain"> *</span><span class="identifier">pack</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">pack</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">Inter::Symbols::definition</span><span class="plain">(</span><span class="identifier">pack</span><span class="plain">-</span><span class="element">&gt;package_name</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Inter::Packages::is_rootlike</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="reserved">return</span><span class="plain"> </span><span class="identifier">pack</span><span class="plain">-</span><span class="element">&gt;package_head</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">inter_tree</span><span class="plain"> *</span><span class="functiontext">Inter::Packages::tree</span><span class="plain">(</span><span class="reserved">inter_package</span><span class="plain"> *</span><span class="identifier">pack</span><span class="plain">) {</span>
@ -217,8 +218,7 @@
<span class="reserved">inter_symbol</span><span class="plain"> *</span><span class="functiontext">Inter::Packages::type</span><span class="plain">(</span><span class="reserved">inter_package</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">P</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</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">NULL</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">Inter::Package::type</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="reserved">return</span><span class="plain"> </span><span class="functiontext">Inter::Package::type</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Inter::Packages::baseline</span><span class="plain">(</span><span class="reserved">inter_package</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain">) {</span>
@ -264,6 +264,14 @@
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">P</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"no package"</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_flags</span><span class="plain"> &amp; </span><span class="identifier">f</span><span class="plain">) </span><span class="identifier">P</span><span class="plain">-</span><span class="element">&gt;package_flags</span><span class="plain"> = </span><span class="identifier">P</span><span class="plain">-</span><span class="element">&gt;package_flags</span><span class="plain"> - </span><span class="identifier">f</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">inter_package</span><span class="plain"> *</span><span class="functiontext">Inter::Packages::by_name</span><span class="plain">(</span><span class="reserved">inter_package</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">P</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">inter_symbols_table</span><span class="plain"> *</span><span class="identifier">at</span><span class="plain"> = </span><span class="functiontext">Inter::Packages::scope</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">);</span>
<span class="reserved">inter_symbol</span><span class="plain"> *</span><span class="identifier">next_sym</span><span class="plain"> = </span><span class="functiontext">Inter::SymbolsTables::symbol_from_name</span><span class="plain">(</span><span class="identifier">at</span><span class="plain">, </span><span class="identifier">name</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">next_sym</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">Inter::Package::which</span><span class="plain">(</span><span class="identifier">next_sym</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
@ -274,7 +282,7 @@
<p class="endnote">The function Inter::Packages::tree is used in 2/bkm (<a href="2-bkm.html#SP1">&#167;1</a>), 2/st (<a href="2-st.html#SP10">&#167;10</a>), 3/iibf (<a href="3-iibf.html#SP1_1_3">&#167;1.1.3</a>, <a href="3-iibf.html#SP1_1_4">&#167;1.1.4</a>).</p>
<p class="endnote">The function Inter::Packages::name is used in 2/st (<a href="2-st.html#SP11">&#167;11</a>), 3/dfn (<a href="3-dfn.html#SP4">&#167;4</a>).</p>
<p class="endnote">The function Inter::Packages::name is used in 2/st (<a href="2-st.html#SP11">&#167;11</a>), 3/dfn (<a href="3-dfn.html#SP4">&#167;4</a>), 4/tcc2 (<a href="4-tcc2.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Packages::is_codelike is used in 3/dfn (<a href="3-dfn.html#SP4">&#167;4</a>), 3/iibf (<a href="3-iibf.html#SP1_1_3_3">&#167;1.1.3.3</a>).</p>
@ -332,6 +340,8 @@
<p class="endnote">The function Inter::Packages::clear_flag appears nowhere else.</p>
<p class="endnote">The function Inter::Packages::by_name is used in 2/st (<a href="2-st.html#SP11">&#167;11</a>), 4/tcc2 (<a href="4-tcc2.html#SP2">&#167;2</a>).</p>
<hr class="tocbar">
<ul class="toc"><li><a href="2-st.html">Back to 'Symbols Tables'</a></li><li><a href="2-sym.html">Continue with 'Symbols'</a></li></ul><hr class="tocbar">
<!--End of weave-->

View file

@ -184,12 +184,6 @@
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">Inter::SymbolsTables::symbol_from_name</span><span class="plain">(</span><span class="functiontext">Inter::Packages::scope</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">), </span><span class="identifier">S</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">inter_symbol</span><span class="plain"> *</span><span class="functiontext">Inter::SymbolsTables::symbol_from_name_in_template_creating</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">text_stream</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">) {</span>
<span class="reserved">inter_package</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain"> = </span><span class="functiontext">Inter::Packages::template</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">P</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">Inter::SymbolsTables::symbol_from_name_creating</span><span class="plain">(</span><span class="functiontext">Inter::Packages::scope</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">), </span><span class="identifier">S</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">inter_symbol</span><span class="plain"> *</span><span class="functiontext">Inter::SymbolsTables::symbol_from_name_in_main_or_basics</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">text_stream</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">) {</span>
<span class="reserved">inter_symbol</span><span class="plain"> *</span><span class="identifier">symbol</span><span class="plain"> = </span><span class="functiontext">Inter::SymbolsTables::symbol_from_name_in_basics</span><span class="plain">(</span><span class="identifier">I</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">symbol</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">symbol</span><span class="plain"> = </span><span class="functiontext">Inter::SymbolsTables::symbol_from_name_in_veneer</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">);</span>
@ -204,7 +198,7 @@
<p class="endnote">The function Inter::SymbolsTables::symbol_from_name_not_equating appears nowhere else.</p>
<p class="endnote">The function Inter::SymbolsTables::symbol_from_name_creating is used in <a href="#SP5">&#167;5</a>, 3/iitf (<a href="3-iitf.html#SP1">&#167;1</a>).</p>
<p class="endnote">The function Inter::SymbolsTables::symbol_from_name_creating is used in <a href="#SP5">&#167;5</a>, 3/iitf (<a href="3-iitf.html#SP1">&#167;1</a>), 4/tpc3 (<a href="4-tpc3.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::SymbolsTables::symbol_from_name_creating_at_ID is used in 3/iibf (<a href="3-iibf.html#SP1_4_2">&#167;1.4.2</a>).</p>
@ -216,8 +210,6 @@
<p class="endnote">The function Inter::SymbolsTables::symbol_from_name_in_template appears nowhere else.</p>
<p class="endnote">The function Inter::SymbolsTables::symbol_from_name_in_template_creating appears nowhere else.</p>
<p class="endnote">The function Inter::SymbolsTables::symbol_from_name_in_main_or_basics appears nowhere else.</p>
<p class="inwebparagraph"><a id="SP5"></a><b>&#167;5. Creation by unique name. </b></p>
@ -248,7 +240,7 @@
<p class="endnote">The function Inter::SymbolsTables::render_identifier_unique is used in <a href="#SP9">&#167;9</a>.</p>
<p class="endnote">The function Inter::SymbolsTables::create_with_unique_name appears nowhere else.</p>
<p class="endnote">The function Inter::SymbolsTables::create_with_unique_name is used in 4/tpc3 (<a href="4-tpc3.html#SP2">&#167;2</a>).</p>
<p class="inwebparagraph"><a id="SP6"></a><b>&#167;6. From symbol to ID. </b>Symbols are represented in Inter bytecode by their ID numbers, but these only
make sense in the context of a symbols table: i.e., the same ID can have
@ -497,22 +489,21 @@ a global symbol in any non-global context.
<span class="reserved">inter_symbol</span><span class="plain"> *</span><span class="functiontext">Inter::SymbolsTables::url_name_to_symbol</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_symbols_table</span><span class="plain"> *</span><span class="identifier">T</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="reserved">inter_symbols_table</span><span class="plain"> *</span><span class="identifier">at</span><span class="plain"> = </span><span class="functiontext">Inter::Tree::global_scope</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">Str::get_first_char</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">) == </span><span class="character">'/'</span><span class="plain">) {</span>
<span class="reserved">inter_package</span><span class="plain"> *</span><span class="identifier">at_P</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">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">);</span>
<span class="identifier">LOOP_THROUGH_TEXT</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">) {</span>
<span class="identifier">wchar_t</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">P</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="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">) &gt; 0) {</span>
<span class="reserved">inter_symbol</span><span class="plain"> *</span><span class="identifier">next_sym</span><span class="plain"> = </span><span class="functiontext">Inter::SymbolsTables::symbol_from_name</span><span class="plain">(</span><span class="identifier">at</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">);</span>
<span class="reserved">inter_package</span><span class="plain"> *</span><span class="identifier">next_pack</span><span class="plain"> = </span><span class="functiontext">Inter::Package::which</span><span class="plain">(</span><span class="identifier">next_sym</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">next_pack</span><span class="plain">) </span><span class="identifier">at</span><span class="plain"> = </span><span class="functiontext">Inter::Packages::scope</span><span class="plain">(</span><span class="identifier">next_pack</span><span class="plain">);</span>
<span class="reserved">else</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="identifier">at_P</span><span class="plain"> = </span><span class="functiontext">Inter::Packages::by_name</span><span class="plain">(</span><span class="identifier">at_P</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">at_P</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">Str::clear</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">);</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="identifier">PUT_TO</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">, </span><span class="identifier">c</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">Inter::SymbolsTables::symbol_from_name</span><span class="plain">(</span><span class="identifier">at</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">Inter::SymbolsTables::symbol_from_name</span><span class="plain">(</span><span class="functiontext">Inter::Packages::scope</span><span class="plain">(</span><span class="identifier">at_P</span><span class="plain">), </span><span class="identifier">C</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">inter_symbol</span><span class="plain"> *</span><span class="identifier">try</span><span class="plain"> = </span><span class="functiontext">Inter::SymbolsTables::symbol_from_name</span><span class="plain">(</span><span class="identifier">at</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">try</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">try</span><span class="plain">;</span>

View file

@ -118,7 +118,7 @@
<p class="endnote">The function Inter::Textual::lint_visitor appears nowhere else.</p>
<p class="endnote">The function Inter::Textual::new_symbol is used in 4/tmc (<a href="4-tmc.html#SP2">&#167;2</a>), 4/tsc (<a href="4-tsc.html#SP1">&#167;1</a>), 4/tpc (<a href="4-tpc.html#SP2">&#167;2</a>), 4/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/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/tpc6 (<a href="4-tpc6.html#SP2">&#167;2</a>), 4/tpc7 (<a href="4-tpc7.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Textual::new_symbol is used in 4/tmc (<a href="4-tmc.html#SP2">&#167;2</a>), 4/tsc (<a href="4-tsc.html#SP1">&#167;1</a>), 4/tpc (<a href="4-tpc.html#SP2">&#167;2</a>), 4/tpc2 (<a href="4-tpc2.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/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/tpc6 (<a href="4-tpc6.html#SP2">&#167;2</a>), 4/tpc7 (<a href="4-tpc7.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Textual::find_symbol is used in 3/idt (<a href="3-idt.html#SP3">&#167;3</a>), 4/tpc3 (<a href="4-tpc3.html#SP2">&#167;2</a>), 4/tkc (<a href="4-tkc.html#SP2">&#167;2</a>), 4/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/trc (<a href="5-trc.html#SP2">&#167;2</a>), 5/tvc (<a href="5-tvc.html#SP2">&#167;2</a>), 5/tcc2 (<a href="5-tcc2.html#SP2">&#167;2</a>).</p>

View file

@ -25,6 +25,7 @@
<span class="identifier">L</span><span class="string">"constant (%C+) (%i+) = (%c+)"</span><span class="plain">,</span>
<span class="identifier">I</span><span class="string">"constant"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"constants"</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::Constant::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::Constant::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::Constant::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::Constant::write</span><span class="plain">);</span>
<span class="plain">}</span>
@ -194,9 +195,11 @@
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">idt</span><span class="plain">) &amp;&amp; (</span><span class="identifier">idt</span><span class="plain">-</span><span class="element">&gt;type_ID</span><span class="plain"> == </span><span class="constant">ROUTINE_IDT</span><span class="plain">)) {</span>
<span class="reserved">inter_symbol</span><span class="plain"> *</span><span class="identifier">block_name</span><span class="plain"> = </span><span class="functiontext">Inter::Textual::find_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">eloc</span><span class="plain">, </span><span class="functiontext">Inter::Bookmarks::scope</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">), </span><span class="identifier">S</span><span class="plain">, </span><span class="constant">PACKAGE_IST</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">E</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="functiontext">Inter::Constant::new_function</span><span class="plain">(</span><span class="identifier">IBM</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">con_name</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">con_kind</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">block_name</span><span class="plain">), (</span><span class="constant">inter_t</span><span class="plain">) </span><span class="identifier">ilp</span><span class="plain">-</span><span class="element">&gt;indent_level</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">block</span><span class="plain"> = </span><span class="functiontext">Inter::Packages::by_name</span><span class="plain">(</span><span class="functiontext">Inter::Bookmarks::package</span><span class="plain">(</span><span class="identifier">IBM</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">block</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
<span class="plain">*</span><span class="identifier">E</span><span class="plain"> = </span><span class="functiontext">Inter::Errors::quoted</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"no such code block"</span><span class="plain">, </span><span class="identifier">S</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="plain">}</span>
<span class="plain">*</span><span class="identifier">E</span><span class="plain"> = </span><span class="functiontext">Inter::Constant::new_function</span><span class="plain">(</span><span class="identifier">IBM</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">con_name</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">con_kind</span><span class="plain">), </span><span class="identifier">block</span><span class="plain">, (</span><span class="constant">inter_t</span><span class="plain">) </span><span class="identifier">ilp</span><span class="plain">-</span><span class="element">&gt;indent_level</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="plain">}</span>
@ -264,7 +267,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">inter_error_message</span><span class="plain"> *</span><span class="functiontext">Inter::Constant::new_function</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">BID</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_error_message</span><span class="plain"> *</span><span class="functiontext">Inter::Constant::new_function</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="reserved">inter_package</span><span class="plain"> *</span><span class="identifier">block</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="constant">inter_t</span><span class="plain"> </span><span class="identifier">BID</span><span class="plain"> = </span><span class="identifier">block</span><span class="plain">-</span><span class="element">&gt;index_n</span><span class="plain">;</span>
<span class="reserved">inter_tree_node</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain"> = </span><span class="functiontext">Inter::Node::fill_4</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">,</span>
<span class="constant">CONSTANT_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="constant">CONSTANT_ROUTINE</span><span class="plain">, </span><span class="identifier">BID</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>
@ -295,6 +299,11 @@
<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">void</span><span class="plain"> </span><span class="functiontext">Inter::Constant::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_tree_node</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="reserved">if</span><span class="plain"> (</span><span class="identifier">P</span><span class="plain">-</span><span class="element">&gt;W.data</span><span class="plain">[</span><span class="constant">FORMAT_CONST_IFLD</span><span class="plain">] == </span><span class="constant">CONSTANT_ROUTINE</span><span class="plain">)</span>
<span class="identifier">P</span><span class="plain">-</span><span class="element">&gt;W.data</span><span class="plain">[</span><span class="constant">DATA_CONST_IFLD</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="element">&gt;W.data</span><span class="plain">[</span><span class="constant">DATA_CONST_IFLD</span><span class="plain">]];</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Inter::Constant::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_tree_node</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="functiontext">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_CONST_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="plain">*</span><span class="identifier">E</span><span class="plain"> = </span><span class="functiontext">Inter::Verify::symbol</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">P</span><span class="plain">-</span><span class="element">&gt;W.data</span><span class="plain">[</span><span class="constant">KIND_CONST_IFLD</span><span class="plain">], </span><span class="constant">KIND_IST</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>
@ -362,7 +371,6 @@
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">CONSTANT_ROUTINE</span><span class="plain">:</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">P</span><span class="plain">-</span><span class="element">&gt;W.extent</span><span class="plain"> != </span><span class="constant">DATA_CONST_IFLD</span><span class="plain"> + 1) { *</span><span class="identifier">E</span><span class="plain"> = </span><span class="functiontext">Inter::Node::error</span><span class="plain">(</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="functiontext">Inter::Verify::symbol</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">P</span><span class="plain">-</span><span class="element">&gt;W.data</span><span class="plain">[</span><span class="constant">DATA_CONST_IFLD</span><span class="plain">], </span><span class="constant">PACKAGE_IST</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">break</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
@ -417,8 +425,8 @@
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"\</span><span class="plain">"</span><span class="string">"</span><span class="plain">);</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">CONSTANT_ROUTINE</span><span class="plain">: {</span>
<span class="reserved">inter_symbol</span><span class="plain"> *</span><span class="identifier">block</span><span class="plain"> = </span><span class="functiontext">Inter::SymbolsTables::symbol_from_frame_data</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="constant">DATA_CONST_IFLD</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%S"</span><span class="plain">, </span><span class="identifier">block</span><span class="plain">-</span><span class="element">&gt;symbol_name</span><span class="plain">);</span>
<span class="reserved">inter_package</span><span class="plain"> *</span><span class="identifier">block</span><span class="plain"> = </span><span class="functiontext">Inter::Node::ID_to_package</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">-</span><span class="element">&gt;W.data</span><span class="plain">[</span><span class="constant">DATA_CONST_IFLD</span><span class="plain">]);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%S"</span><span class="plain">, </span><span class="functiontext">Inter::Packages::name</span><span class="plain">(</span><span class="identifier">block</span><span class="plain">));</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
@ -437,13 +445,13 @@
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">Inter::SymbolsTables::symbol_from_frame_data</span><span class="plain">(</span><span class="identifier">D</span><span class="plain">, </span><span class="constant">KIND_CONST_IFLD</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">inter_symbol</span><span class="plain"> *</span><span class="functiontext">Inter::Constant::code_block</span><span class="plain">(</span><span class="reserved">inter_symbol</span><span class="plain"> *</span><span class="identifier">con_symbol</span><span class="plain">) {</span>
<span class="reserved">inter_package</span><span class="plain"> *</span><span class="functiontext">Inter::Constant::code_block</span><span class="plain">(</span><span class="reserved">inter_symbol</span><span class="plain"> *</span><span class="identifier">con_symbol</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">con_symbol</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">inter_tree_node</span><span class="plain"> *</span><span class="identifier">D</span><span class="plain"> = </span><span class="functiontext">Inter::Symbols::definition</span><span class="plain">(</span><span class="identifier">con_symbol</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">D</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="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">D</span><span class="plain">-</span><span class="element">&gt;W.data</span><span class="plain">[</span><span class="constant">ID_IFLD</span><span class="plain">] != </span><span class="constant">CONSTANT_IST</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">D</span><span class="plain">-</span><span class="element">&gt;W.data</span><span class="plain">[</span><span class="constant">FORMAT_CONST_IFLD</span><span class="plain">] != </span><span class="constant">CONSTANT_ROUTINE</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="functiontext">Inter::SymbolsTables::symbol_from_frame_data</span><span class="plain">(</span><span class="identifier">D</span><span class="plain">, </span><span class="constant">DATA_CONST_IFLD</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">Inter::Node::ID_to_package</span><span class="plain">(</span><span class="identifier">D</span><span class="plain">, </span><span class="identifier">D</span><span class="plain">-</span><span class="element">&gt;W.data</span><span class="plain">[</span><span class="constant">DATA_CONST_IFLD</span><span class="plain">]);</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Inter::Constant::is_routine</span><span class="plain">(</span><span class="reserved">inter_symbol</span><span class="plain"> *</span><span class="identifier">con_symbol</span><span class="plain">) {</span>
@ -456,9 +464,7 @@
<span class="plain">}</span>
<span class="reserved">inter_symbols_table</span><span class="plain"> *</span><span class="functiontext">Inter::Constant::local_symbols</span><span class="plain">(</span><span class="reserved">inter_symbol</span><span class="plain"> *</span><span class="identifier">con_symbol</span><span class="plain">) {</span>
<span class="reserved">inter_symbol</span><span class="plain"> *</span><span class="identifier">block</span><span class="plain"> = </span><span class="functiontext">Inter::Constant::code_block</span><span class="plain">(</span><span class="identifier">con_symbol</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">block</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">Inter::Package::local_symbols</span><span class="plain">(</span><span class="identifier">block</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">Inter::Packages::scope</span><span class="plain">(</span><span class="functiontext">Inter::Constant::code_block</span><span class="plain">(</span><span class="identifier">con_symbol</span><span class="plain">));</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Inter::Constant::char_acceptable</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">c</span><span class="plain">) {</span>
@ -483,6 +489,8 @@
<p class="endnote">The function Inter::Constant::append appears nowhere else.</p>
<p class="endnote">The function Inter::Constant::transpose is used in <a href="#SP1">&#167;1</a>.</p>
<p class="endnote">The function Inter::Constant::verify is used in <a href="#SP1">&#167;1</a>.</p>
<p class="endnote">The function Inter::Constant::write is used in <a href="#SP1">&#167;1</a>.</p>

View file

@ -52,19 +52,24 @@
<span class="plain">*</span><span class="identifier">E</span><span class="plain"> = </span><span class="functiontext">Inter::Defn::vet_level</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="identifier">ilp</span><span class="plain">-</span><span class="element">&gt;indent_level</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="reserved">inter_symbol</span><span class="plain"> *</span><span class="identifier">package_name</span><span class="plain"> = </span><span class="functiontext">Inter::Textual::new_symbol</span><span class="plain">(</span><span class="identifier">eloc</span><span class="plain">, </span><span class="functiontext">Inter::Bookmarks::scope</span><span class="plain">(</span><span class="identifier">IBM</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="identifier">E</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_symbol</span><span class="plain"> *</span><span class="identifier">ptype_name</span><span class="plain"> = </span><span class="functiontext">Inter::Textual::find_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">eloc</span><span class="plain">, </span><span class="functiontext">Inter::Tree::global_scope</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="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">PACKAGETYPE_IST</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">E</span><span class="plain">) </span><span class="reserved">return</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="identifier">NULL</span><span class="plain">;</span>
<span class="plain">*</span><span class="identifier">E</span><span class="plain"> = </span><span class="functiontext">Inter::Package::new_package</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="identifier">ptype_name</span><span class="plain">, (</span><span class="constant">inter_t</span><span class="plain">) </span><span class="identifier">ilp</span><span class="plain">-</span><span class="element">&gt;indent_level</span><span class="plain">, </span><span class="identifier">eloc</span><span class="plain">, &amp;</span><span class="identifier">pack</span><span class="plain">);</span>
<span class="plain">*</span><span class="identifier">E</span><span class="plain"> = </span><span class="functiontext">Inter::Package::new_package_named</span><span class="plain">(</span><span class="identifier">IBM</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="identifier">FALSE</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">ilp</span><span class="plain">-</span><span class="element">&gt;indent_level</span><span class="plain">, </span><span class="identifier">eloc</span><span class="plain">, &amp;</span><span class="identifier">pack</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="functiontext">Inter::Bookmarks::set_current_package</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">pack</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">inter_error_message</span><span class="plain"> *</span><span class="functiontext">Inter::Package::new_package_named</span><span class="plain">(</span><span class="reserved">inter_bookmark</span><span class="plain"> *</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">uniquely</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="reserved">inter_symbol</span><span class="plain"> *</span><span class="identifier">package_name</span><span class="plain"> =</span>
<span class="plain">(</span><span class="identifier">uniquely</span><span class="plain">) ? (</span><span class="functiontext">Inter::SymbolsTables::create_with_unique_name</span><span class="plain">(</span><span class="functiontext">Inter::Bookmarks::scope</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">), </span><span class="identifier">name</span><span class="plain">))</span>
<span class="plain">: (</span><span class="functiontext">Inter::SymbolsTables::symbol_from_name_creating</span><span class="plain">(</span><span class="functiontext">Inter::Bookmarks::scope</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">), </span><span class="identifier">name</span><span class="plain">));</span>
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">Inter::Package::new_package</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="identifier">ptype_name</span><span class="plain">, </span><span class="identifier">level</span><span class="plain">, </span><span class="identifier">eloc</span><span class="plain">, </span><span class="identifier">created</span><span class="plain">);</span>
<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::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="reserved">inter_tree_node</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain"> = </span><span class="functiontext">Inter::Node::fill_4</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">,</span>
@ -96,7 +101,10 @@
<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_tree_node</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="functiontext">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_package</span><span class="plain"> *</span><span class="identifier">pack</span><span class="plain"> = </span><span class="functiontext">Inter::Node::ID_to_package</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">-</span><span class="element">&gt;W.data</span><span class="plain">[</span><span class="constant">PID_PACKAGE_IFLD</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">pack</span><span class="plain">-</span><span class="element">&gt;package_head</span><span class="plain"> = </span><span class="identifier">P</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>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">T</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">T</span><span class="plain"> = </span><span class="functiontext">Inter::Node::globals</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">);</span>
<span class="reserved">inter_symbol</span><span class="plain"> *</span><span class="identifier">package_name</span><span class="plain"> = </span><span class="functiontext">Inter::SymbolsTables::symbol_from_id</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">-</span><span class="element">&gt;W.data</span><span class="plain">[</span><span class="constant">DEFN_PACKAGE_IFLD</span><span class="plain">]);</span>
@ -144,11 +152,9 @@
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">Inter::Node::ID_to_package</span><span class="plain">(</span><span class="identifier">D</span><span class="plain">, </span><span class="identifier">D</span><span class="plain">-</span><span class="element">&gt;W.data</span><span class="plain">[</span><span class="constant">PID_PACKAGE_IFLD</span><span class="plain">]);</span>
<span class="plain">}</span>
<span class="reserved">inter_symbol</span><span class="plain"> *</span><span class="functiontext">Inter::Package::type</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">if</span><span class="plain"> (</span><span class="identifier">package_name</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">inter_tree_node</span><span class="plain"> *</span><span class="identifier">D</span><span class="plain"> = </span><span class="functiontext">Inter::Symbols::definition</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">D</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">if</span><span class="plain"> (</span><span class="identifier">D</span><span class="plain">-</span><span class="element">&gt;W.data</span><span class="plain">[</span><span class="constant">ID_IFLD</span><span class="plain">] != </span><span class="constant">PACKAGE_IST</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">inter_symbol</span><span class="plain"> *</span><span class="functiontext">Inter::Package::type</span><span class="plain">(</span><span class="reserved">inter_package</span><span class="plain"> *</span><span class="identifier">pack</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">pack</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">inter_tree_node</span><span class="plain"> *</span><span class="identifier">D</span><span class="plain"> = </span><span class="identifier">pack</span><span class="plain">-</span><span class="element">&gt;package_head</span><span class="plain">;</span>
<span class="reserved">inter_symbol</span><span class="plain"> *</span><span class="identifier">ptype_name</span><span class="plain"> = </span><span class="functiontext">Inter::SymbolsTables::global_symbol_from_frame_data</span><span class="plain">(</span><span class="identifier">D</span><span class="plain">, </span><span class="constant">PTYPE_PACKAGE_IFLD</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">ptype_name</span><span class="plain">;</span>
<span class="plain">}</span>
@ -178,6 +184,8 @@
<p class="endnote">The function Inter::Package::read is used in <a href="#SP1">&#167;1</a>.</p>
<p class="endnote">The function Inter::Package::new_package_named appears nowhere else.</p>
<p class="endnote">The function Inter::Package::new_package appears nowhere else.</p>
<p class="endnote">The function Inter::Package::transpose is used in <a href="#SP1">&#167;1</a>.</p>
@ -190,13 +198,13 @@
<p class="endnote">The function Inter::Package::is appears nowhere else.</p>
<p class="endnote">The function Inter::Package::which is used in 2/st (<a href="2-st.html#SP11">&#167;11</a>), 2/pck (<a href="2-pck.html#SP3">&#167;3</a>).</p>
<p class="endnote">The function Inter::Package::which is used in 2/pck (<a href="2-pck.html#SP3">&#167;3</a>).</p>
<p class="endnote">The function Inter::Package::defined_by_frame is used in 2/bkm (<a href="2-bkm.html#SP1">&#167;1</a>), 2/st (<a href="2-st.html#SP10">&#167;10</a>), 2/pck (<a href="2-pck.html#SP3">&#167;3</a>).</p>
<p class="endnote">The function Inter::Package::type is used in 2/pck (<a href="2-pck.html#SP3">&#167;3</a>).</p>
<p class="endnote">The function Inter::Package::local_symbols is used in 4/tsc (<a href="4-tsc.html#SP1">&#167;1</a>), 4/tcc2 (<a href="4-tcc2.html#SP2">&#167;2</a>), 5/tlc (<a href="5-tlc.html#SP2">&#167;2</a>), 5/tlc2 (<a href="5-tlc2.html#SP2">&#167;2</a>), 5/trc (<a href="5-trc.html#SP2">&#167;2</a>), 5/tvc (<a href="5-tvc.html#SP2">&#167;2</a>), 5/tlc3 (<a href="5-tlc3.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Package::local_symbols is used in 4/tsc (<a href="4-tsc.html#SP1">&#167;1</a>), 5/tlc (<a href="5-tlc.html#SP2">&#167;2</a>), 5/tlc2 (<a href="5-tlc2.html#SP2">&#167;2</a>), 5/trc (<a href="5-trc.html#SP2">&#167;2</a>), 5/tvc (<a href="5-tvc.html#SP2">&#167;2</a>), 5/tlc3 (<a href="5-tlc3.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Inter::Package::verify_children is used in <a href="#SP1">&#167;1</a>.</p>

View file

@ -63,10 +63,10 @@
<span class="reserved">inter_symbol</span><span class="plain"> *</span><span class="identifier">to_kind</span><span class="plain"> = </span><span class="functiontext">Inter::Textual::find_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">eloc</span><span class="plain">, </span><span class="functiontext">Inter::Bookmarks::scope</span><span class="plain">(</span><span class="identifier">IBM</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="constant">KIND_IST</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">E</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="functiontext">Inter::Cast::new</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">routine</span><span class="plain">, </span><span class="identifier">from_kind</span><span class="plain">, </span><span class="identifier">to_kind</span><span class="plain">, (</span><span class="constant">inter_t</span><span class="plain">) </span><span class="identifier">ilp</span><span class="plain">-</span><span class="element">&gt;indent_level</span><span class="plain">, </span><span class="identifier">eloc</span><span class="plain">);</span>
<span class="plain">*</span><span class="identifier">E</span><span class="plain"> = </span><span class="functiontext">Inter::Cast::new</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">from_kind</span><span class="plain">, </span><span class="identifier">to_kind</span><span class="plain">, (</span><span class="constant">inter_t</span><span class="plain">) </span><span class="identifier">ilp</span><span class="plain">-</span><span class="element">&gt;indent_level</span><span class="plain">, </span><span class="identifier">eloc</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">inter_error_message</span><span class="plain"> *</span><span class="functiontext">Inter::Cast::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="reserved">inter_symbol</span><span class="plain"> *</span><span class="identifier">routine</span><span class="plain">, </span><span class="reserved">inter_symbol</span><span class="plain"> *</span><span class="identifier">from_kind</span><span class="plain">, </span><span class="reserved">inter_symbol</span><span class="plain"> *</span><span class="identifier">to_kind</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_error_message</span><span class="plain"> *</span><span class="functiontext">Inter::Cast::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="reserved">inter_symbol</span><span class="plain"> *</span><span class="identifier">from_kind</span><span class="plain">, </span><span class="reserved">inter_symbol</span><span class="plain"> *</span><span class="identifier">to_kind</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_tree_node</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain"> = </span><span class="functiontext">Inter::Node::fill_3</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="constant">CAST_IST</span><span class="plain">, 0, </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">to_kind</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">from_kind</span><span class="plain">), </span><span class="identifier">eloc</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_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::Bookmarks::insert</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">);</span>

View file

@ -56,10 +56,10 @@
<span class="reserved">inter_symbol</span><span class="plain"> *</span><span class="identifier">routine</span><span class="plain"> = </span><span class="functiontext">Inter::Defn::get_latest_block_symbol</span><span class="plain">();</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">routine</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) { *</span><span class="identifier">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">"'evaluation' used outside function"</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="plain">*</span><span class="identifier">E</span><span class="plain"> = </span><span class="functiontext">Inter::Evaluation::new</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">routine</span><span class="plain">, </span><span class="identifier">ilp</span><span class="plain">-</span><span class="element">&gt;indent_level</span><span class="plain">, </span><span class="identifier">eloc</span><span class="plain">);</span>
<span class="plain">*</span><span class="identifier">E</span><span class="plain"> = </span><span class="functiontext">Inter::Evaluation::new</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">ilp</span><span class="plain">-</span><span class="element">&gt;indent_level</span><span class="plain">, </span><span class="identifier">eloc</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">inter_error_message</span><span class="plain"> *</span><span class="functiontext">Inter::Evaluation::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="reserved">inter_symbol</span><span class="plain"> *</span><span class="identifier">routine</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">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_error_message</span><span class="plain"> *</span><span class="functiontext">Inter::Evaluation::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="reserved">int</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_tree_node</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain"> = </span><span class="functiontext">Inter::Node::fill_1</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="constant">EVALUATION_IST</span><span class="plain">, 0, </span><span class="identifier">eloc</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_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::Bookmarks::insert</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">);</span>

View file

@ -66,16 +66,16 @@
<span class="reserved">if</span><span class="plain"> ((</span><span class="functiontext">Inter::Symbols::is_extern</span><span class="plain">(</span><span class="identifier">invoked_name</span><span class="plain">)) ||</span>
<span class="plain">(</span><span class="functiontext">Inter::Symbols::is_predeclared</span><span class="plain">(</span><span class="identifier">invoked_name</span><span class="plain">))) {</span>
<span class="plain">*</span><span class="identifier">E</span><span class="plain"> = </span><span class="functiontext">Inter::Inv::new_call</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">routine</span><span class="plain">, </span><span class="identifier">invoked_name</span><span class="plain">, (</span><span class="constant">inter_t</span><span class="plain">) </span><span class="identifier">ilp</span><span class="plain">-</span><span class="element">&gt;indent_level</span><span class="plain">, </span><span class="identifier">eloc</span><span class="plain">);</span>
<span class="plain">*</span><span class="identifier">E</span><span class="plain"> = </span><span class="functiontext">Inter::Inv::new_call</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">invoked_name</span><span class="plain">, (</span><span class="constant">inter_t</span><span class="plain">) </span><span class="identifier">ilp</span><span class="plain">-</span><span class="element">&gt;indent_level</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="plain">}</span>
<span class="reserved">switch</span><span class="plain"> (</span><span class="functiontext">Inter::Symbols::definition</span><span class="plain">(</span><span class="identifier">invoked_name</span><span class="plain">)-</span><span class="element">&gt;W.data</span><span class="plain">[</span><span class="constant">ID_IFLD</span><span class="plain">]) {</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">PRIMITIVE_IST</span><span class="plain">:</span>
<span class="plain">*</span><span class="identifier">E</span><span class="plain"> = </span><span class="functiontext">Inter::Inv::new_primitive</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">routine</span><span class="plain">, </span><span class="identifier">invoked_name</span><span class="plain">, (</span><span class="constant">inter_t</span><span class="plain">) </span><span class="identifier">ilp</span><span class="plain">-</span><span class="element">&gt;indent_level</span><span class="plain">, </span><span class="identifier">eloc</span><span class="plain">);</span>
<span class="plain">*</span><span class="identifier">E</span><span class="plain"> = </span><span class="functiontext">Inter::Inv::new_primitive</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">invoked_name</span><span class="plain">, (</span><span class="constant">inter_t</span><span class="plain">) </span><span class="identifier">ilp</span><span class="plain">-</span><span class="element">&gt;indent_level</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="reserved">case</span><span class="plain"> </span><span class="constant">CONSTANT_IST</span><span class="plain">:</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Inter::Constant::is_routine</span><span class="plain">(</span><span class="identifier">invoked_name</span><span class="plain">)) {</span>
<span class="plain">*</span><span class="identifier">E</span><span class="plain"> = </span><span class="functiontext">Inter::Inv::new_call</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">routine</span><span class="plain">, </span><span class="identifier">invoked_name</span><span class="plain">, (</span><span class="constant">inter_t</span><span class="plain">) </span><span class="identifier">ilp</span><span class="plain">-</span><span class="element">&gt;indent_level</span><span class="plain">, </span><span class="identifier">eloc</span><span class="plain">);</span>
<span class="plain">*</span><span class="identifier">E</span><span class="plain"> = </span><span class="functiontext">Inter::Inv::new_call</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">invoked_name</span><span class="plain">, (</span><span class="constant">inter_t</span><span class="plain">) </span><span class="identifier">ilp</span><span class="plain">-</span><span class="element">&gt;indent_level</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="plain">}</span>
<span class="reserved">break</span><span class="plain">;</span>
@ -83,7 +83,7 @@
<span class="plain">*</span><span class="identifier">E</span><span class="plain"> = </span><span class="functiontext">Inter::Errors::quoted</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"not a function or primitive"</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="identifier">eloc</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">inter_error_message</span><span class="plain"> *</span><span class="functiontext">Inter::Inv::new_primitive</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">routine</span><span class="plain">, </span><span class="reserved">inter_symbol</span><span class="plain"> *</span><span class="identifier">invoked_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_error_message</span><span class="plain"> *</span><span class="functiontext">Inter::Inv::new_primitive</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">invoked_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_tree_node</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain"> = </span><span class="functiontext">Inter::Node::fill_3</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="constant">INV_IST</span><span class="plain">, 0, </span><span class="constant">INVOKED_PRIMITIVE</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">invoked_name</span><span class="plain">),</span>
<span class="identifier">eloc</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_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>
@ -92,7 +92,7 @@
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">inter_error_message</span><span class="plain"> *</span><span class="functiontext">Inter::Inv::new_call</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">routine</span><span class="plain">, </span><span class="reserved">inter_symbol</span><span class="plain"> *</span><span class="identifier">invoked_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_error_message</span><span class="plain"> *</span><span class="functiontext">Inter::Inv::new_call</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">invoked_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_tree_node</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain"> = </span><span class="functiontext">Inter::Node::fill_3</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="constant">INV_IST</span><span class="plain">, 0, </span><span class="constant">INVOKED_ROUTINE</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">invoked_name</span><span class="plain">), </span><span class="identifier">eloc</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_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>
@ -100,7 +100,7 @@
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">inter_error_message</span><span class="plain"> *</span><span class="functiontext">Inter::Inv::new_assembly</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">routine</span><span class="plain">, </span><span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">opcode_storage</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_error_message</span><span class="plain"> *</span><span class="functiontext">Inter::Inv::new_assembly</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">opcode_storage</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_tree_node</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain"> = </span><span class="functiontext">Inter::Node::fill_3</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="constant">INV_IST</span><span class="plain">, 0, </span><span class="constant">INVOKED_OPCODE</span><span class="plain">, </span><span class="identifier">opcode_storage</span><span class="plain">, </span><span class="identifier">eloc</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_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>

View file

@ -59,10 +59,10 @@
<span class="reserved">inter_symbol</span><span class="plain"> *</span><span class="identifier">lab_name</span><span class="plain"> = </span><span class="functiontext">Inter::SymbolsTables::symbol_from_name</span><span class="plain">(</span><span class="identifier">locals</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="functiontext">Inter::Symbols::is_label</span><span class="plain">(</span><span class="identifier">lab_name</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">) { *</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">"not a label"</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="plain">*</span><span class="identifier">E</span><span class="plain"> = </span><span class="functiontext">Inter::Label::new</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">routine</span><span class="plain">, </span><span class="identifier">lab_name</span><span class="plain">, (</span><span class="constant">inter_t</span><span class="plain">) </span><span class="identifier">ilp</span><span class="plain">-</span><span class="element">&gt;indent_level</span><span class="plain">, </span><span class="identifier">eloc</span><span class="plain">);</span>
<span class="plain">*</span><span class="identifier">E</span><span class="plain"> = </span><span class="functiontext">Inter::Label::new</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">lab_name</span><span class="plain">, (</span><span class="constant">inter_t</span><span class="plain">) </span><span class="identifier">ilp</span><span class="plain">-</span><span class="element">&gt;indent_level</span><span class="plain">, </span><span class="identifier">eloc</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">inter_error_message</span><span class="plain"> *</span><span class="functiontext">Inter::Label::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="reserved">inter_symbol</span><span class="plain"> *</span><span class="identifier">routine</span><span class="plain">, </span><span class="reserved">inter_symbol</span><span class="plain"> *</span><span class="identifier">lab_name</span><span class="plain">, </span><span class="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_error_message</span><span class="plain"> *</span><span class="functiontext">Inter::Label::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="reserved">inter_symbol</span><span class="plain"> *</span><span class="identifier">lab_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_tree_node</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain"> = </span><span class="functiontext">Inter::Node::fill_2</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="constant">LABEL_IST</span><span class="plain">, 0, </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">lab_name</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::Bookmarks::insert</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">);</span>

View file

@ -66,10 +66,10 @@
<span class="functiontext">Inter::Annotations::copy_set_to_symbol</span><span class="plain">(&amp;(</span><span class="identifier">ilp</span><span class="plain">-</span><span class="element">&gt;set</span><span class="plain">), </span><span class="identifier">var_name</span><span class="plain">);</span>
<span class="plain">*</span><span class="identifier">E</span><span class="plain"> = </span><span class="functiontext">Inter::Local::new</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">routine</span><span class="plain">, </span><span class="identifier">var_name</span><span class="plain">, </span><span class="identifier">var_kind</span><span class="plain">, </span><span class="identifier">ilp</span><span class="plain">-</span><span class="element">&gt;terminal_comment</span><span class="plain">, (</span><span class="constant">inter_t</span><span class="plain">) </span><span class="identifier">ilp</span><span class="plain">-</span><span class="element">&gt;indent_level</span><span class="plain">, </span><span class="identifier">eloc</span><span class="plain">);</span>
<span class="plain">*</span><span class="identifier">E</span><span class="plain"> = </span><span class="functiontext">Inter::Local::new</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">var_name</span><span class="plain">, </span><span class="identifier">var_kind</span><span class="plain">, </span><span class="identifier">ilp</span><span class="plain">-</span><span class="element">&gt;terminal_comment</span><span class="plain">, (</span><span class="constant">inter_t</span><span class="plain">) </span><span class="identifier">ilp</span><span class="plain">-</span><span class="element">&gt;indent_level</span><span class="plain">, </span><span class="identifier">eloc</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">inter_error_message</span><span class="plain"> *</span><span class="functiontext">Inter::Local::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="reserved">inter_symbol</span><span class="plain"> *</span><span class="identifier">routine</span><span class="plain">, </span><span class="reserved">inter_symbol</span><span class="plain"> *</span><span class="identifier">var_name</span><span class="plain">, </span><span class="reserved">inter_symbol</span><span class="plain"> *</span><span class="identifier">var_kind</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="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_error_message</span><span class="plain"> *</span><span class="functiontext">Inter::Local::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="reserved">inter_symbol</span><span class="plain"> *</span><span class="identifier">var_name</span><span class="plain">, </span><span class="reserved">inter_symbol</span><span class="plain"> *</span><span class="identifier">var_kind</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="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_tree_node</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain"> = </span><span class="functiontext">Inter::Node::fill_3</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="constant">LOCAL_IST</span><span class="plain">, 0, </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">var_name</span><span class="plain">), </span><span class="identifier">var_kind</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">var_kind</span><span class="plain">)):0, </span><span class="identifier">eloc</span><span class="plain">, </span><span class="identifier">level</span><span class="plain">);</span>
<span class="functiontext">Inter::Node::attach_comment</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">ID</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>

View file

@ -61,10 +61,10 @@
<span class="reserved">inter_symbol</span><span class="plain"> *</span><span class="identifier">label</span><span class="plain"> = </span><span class="functiontext">Inter::SymbolsTables::symbol_from_name</span><span class="plain">(</span><span class="identifier">locals</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="functiontext">Inter::Symbols::is_label</span><span class="plain">(</span><span class="identifier">label</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">) { *</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">"not a label"</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="plain">*</span><span class="identifier">E</span><span class="plain"> = </span><span class="functiontext">Inter::Lab::new</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">routine</span><span class="plain">, </span><span class="identifier">label</span><span class="plain">, (</span><span class="constant">inter_t</span><span class="plain">) </span><span class="identifier">ilp</span><span class="plain">-</span><span class="element">&gt;indent_level</span><span class="plain">, </span><span class="identifier">eloc</span><span class="plain">);</span>
<span class="plain">*</span><span class="identifier">E</span><span class="plain"> = </span><span class="functiontext">Inter::Lab::new</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">label</span><span class="plain">, (</span><span class="constant">inter_t</span><span class="plain">) </span><span class="identifier">ilp</span><span class="plain">-</span><span class="element">&gt;indent_level</span><span class="plain">, </span><span class="identifier">eloc</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">inter_error_message</span><span class="plain"> *</span><span class="functiontext">Inter::Lab::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="reserved">inter_symbol</span><span class="plain"> *</span><span class="identifier">routine</span><span class="plain">, </span><span class="reserved">inter_symbol</span><span class="plain"> *</span><span class="identifier">label</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_error_message</span><span class="plain"> *</span><span class="functiontext">Inter::Lab::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="reserved">inter_symbol</span><span class="plain"> *</span><span class="identifier">label</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_tree_node</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain"> = </span><span class="functiontext">Inter::Node::fill_2</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="constant">LAB_IST</span><span class="plain">, 0, </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">label</span><span class="plain">), </span><span class="identifier">eloc</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_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::Bookmarks::insert</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">);</span>

View file

@ -68,10 +68,10 @@
<span class="plain">*</span><span class="identifier">E</span><span class="plain"> = </span><span class="functiontext">Inter::Types::read</span><span class="plain">(</span><span class="identifier">ilp</span><span class="plain">-</span><span class="element">&gt;line</span><span class="plain">, </span><span class="identifier">eloc</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::Bookmarks::package</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">), </span><span class="identifier">ref_kind</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], &amp;</span><span class="identifier">var_val1</span><span class="plain">, &amp;</span><span class="identifier">var_val2</span><span class="plain">, </span><span class="identifier">locals</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><span class="identifier">E</span><span class="plain"> = </span><span class="functiontext">Inter::Ref::new</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">routine</span><span class="plain">, </span><span class="identifier">ref_kind</span><span class="plain">, </span><span class="identifier">ilp</span><span class="plain">-</span><span class="element">&gt;indent_level</span><span class="plain">, </span><span class="identifier">var_val1</span><span class="plain">, </span><span class="identifier">var_val2</span><span class="plain">, </span><span class="identifier">eloc</span><span class="plain">);</span>
<span class="plain">*</span><span class="identifier">E</span><span class="plain"> = </span><span class="functiontext">Inter::Ref::new</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">ref_kind</span><span class="plain">, </span><span class="identifier">ilp</span><span class="plain">-</span><span class="element">&gt;indent_level</span><span class="plain">, </span><span class="identifier">var_val1</span><span class="plain">, </span><span class="identifier">var_val2</span><span class="plain">, </span><span class="identifier">eloc</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">inter_error_message</span><span class="plain"> *</span><span class="functiontext">Inter::Ref::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="reserved">inter_symbol</span><span class="plain"> *</span><span class="identifier">routine</span><span class="plain">, </span><span class="reserved">inter_symbol</span><span class="plain"> *</span><span class="identifier">ref_kind</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">level</span><span class="plain">, </span><span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">val1</span><span class="plain">, </span><span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">val2</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_error_message</span><span class="plain"> *</span><span class="functiontext">Inter::Ref::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="reserved">inter_symbol</span><span class="plain"> *</span><span class="identifier">ref_kind</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">level</span><span class="plain">, </span><span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">val1</span><span class="plain">, </span><span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">val2</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_tree_node</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain"> = </span><span class="functiontext">Inter::Node::fill_4</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="constant">REF_IST</span><span class="plain">, 0, </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">ref_kind</span><span class="plain">), </span><span class="identifier">val1</span><span class="plain">, </span><span class="identifier">val2</span><span class="plain">, </span><span class="identifier">eloc</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_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::Bookmarks::insert</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">);</span>

View file

@ -56,10 +56,10 @@
<span class="reserved">inter_symbol</span><span class="plain"> *</span><span class="identifier">routine</span><span class="plain"> = </span><span class="functiontext">Inter::Defn::get_latest_block_symbol</span><span class="plain">();</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">routine</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) { *</span><span class="identifier">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">"'reference' used outside function"</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="plain">*</span><span class="identifier">E</span><span class="plain"> = </span><span class="functiontext">Inter::Reference::new</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">routine</span><span class="plain">, </span><span class="identifier">ilp</span><span class="plain">-</span><span class="element">&gt;indent_level</span><span class="plain">, </span><span class="identifier">eloc</span><span class="plain">);</span>
<span class="plain">*</span><span class="identifier">E</span><span class="plain"> = </span><span class="functiontext">Inter::Reference::new</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">ilp</span><span class="plain">-</span><span class="element">&gt;indent_level</span><span class="plain">, </span><span class="identifier">eloc</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">inter_error_message</span><span class="plain"> *</span><span class="functiontext">Inter::Reference::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="reserved">inter_symbol</span><span class="plain"> *</span><span class="identifier">routine</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">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_error_message</span><span class="plain"> *</span><span class="functiontext">Inter::Reference::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="reserved">int</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_tree_node</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain"> = </span><span class="functiontext">Inter::Node::fill_1</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="constant">REFERENCE_IST</span><span class="plain">, 0, </span><span class="identifier">eloc</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_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::Bookmarks::insert</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">);</span>

View file

@ -75,10 +75,10 @@
<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>
<span class="plain">*</span><span class="identifier">E</span><span class="plain"> = </span><span class="functiontext">Inter::Val::new</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">routine</span><span class="plain">, </span><span class="identifier">val_kind</span><span class="plain">, </span><span class="identifier">ilp</span><span class="plain">-</span><span class="element">&gt;indent_level</span><span class="plain">, </span><span class="identifier">val1</span><span class="plain">, </span><span class="identifier">val2</span><span class="plain">, </span><span class="identifier">eloc</span><span class="plain">);</span>
<span class="plain">*</span><span class="identifier">E</span><span class="plain"> = </span><span class="functiontext">Inter::Val::new</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">val_kind</span><span class="plain">, </span><span class="identifier">ilp</span><span class="plain">-</span><span class="element">&gt;indent_level</span><span class="plain">, </span><span class="identifier">val1</span><span class="plain">, </span><span class="identifier">val2</span><span class="plain">, </span><span class="identifier">eloc</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">inter_error_message</span><span class="plain"> *</span><span class="functiontext">Inter::Val::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="reserved">inter_symbol</span><span class="plain"> *</span><span class="identifier">routine</span><span class="plain">, </span><span class="reserved">inter_symbol</span><span class="plain"> *</span><span class="identifier">val_kind</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">level</span><span class="plain">, </span><span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">val1</span><span class="plain">, </span><span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">val2</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_error_message</span><span class="plain"> *</span><span class="functiontext">Inter::Val::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="reserved">inter_symbol</span><span class="plain"> *</span><span class="identifier">val_kind</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">level</span><span class="plain">, </span><span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">val1</span><span class="plain">, </span><span class="constant">inter_t</span><span class="plain"> </span><span class="identifier">val2</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_tree_node</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain"> = </span><span class="functiontext">Inter::Node::fill_4</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="constant">VAL_IST</span><span class="plain">, 0, </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">val_kind</span><span class="plain">), </span><span class="identifier">val1</span><span class="plain">, </span><span class="identifier">val2</span><span class="plain">, </span><span class="identifier">eloc</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_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::Bookmarks::insert</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">);</span>

View file

@ -980,7 +980,7 @@ syntax to break or continue a loop other than the innermost one.
NextOuterLoop_labels[reason] = Emit::reserve_label(L);
DISCARD_TEXT(L);
}
Emit::place_label(NextOuterLoop_labels[reason], TRUE);
Emit::place_label(NextOuterLoop_labels[reason]);
@ The continue-outer-loop labels are marked with the reason number so that
if code is compiled for each reason in turn within a single routine -- which

View file

@ -688,14 +688,9 @@ void Rules::compile_definition(rule *R, int *i, int max_i) {
void Rules::unimport(rule *R) {
if (R->defn_compiled == FALSE) { R->do_not_import = TRUE; return; }
// inter_symbol *symb = InterNames::to_symbol(Rules::iname(R));
// if (symb->importation_frame) {
// LOG("Unimport rule %n!\n", Rules::iname(R));
// Inter::Tree::remove_node(symb->importation_frame);
R->defn_compiled = FALSE;
R->do_not_import = TRUE;
R->defn_as_phrase->imported = FALSE;
// }
R->defn_compiled = FALSE;
R->do_not_import = TRUE;
R->defn_as_phrase->imported = FALSE;
}
@ This is the trickiest case: where the user has asked for something like

View file

@ -183,7 +183,7 @@ void Frames::Blocks::close_code_block(void) {
if (block_being_compiled->label_following >= 0) {
TEMPORARY_TEXT(TL);
WRITE_TO(TL, ".loop_break_%d", block_being_compiled->label_following);
Emit::place_label(Emit::reserve_label(TL), TRUE);
Emit::place_label(Emit::reserve_label(TL));
DISCARD_TEXT(TL);
}

View file

@ -543,7 +543,7 @@ inline definitions for "say if" and similar.
TEMPORARY_TEXT(SAYL);
WRITE_TO(SAYL, ".");
JumpLabels::write(SAYL, I"Say");
Emit::place_label(Emit::reserve_label(SAYL), TRUE);
Emit::place_label(Emit::reserve_label(SAYL));
DISCARD_TEXT(SAYL);
JumpLabels::read_counter(I"Say", TRUE);
@ -551,7 +551,7 @@ inline definitions for "say if" and similar.
TEMPORARY_TEXT(SAYXL);
WRITE_TO(SAYXL, ".");
JumpLabels::write(SAYXL, I"SayX");
Emit::place_label(Emit::reserve_label(SAYXL), TRUE);
Emit::place_label(Emit::reserve_label(SAYXL));
DISCARD_TEXT(SAYXL);
JumpLabels::read_counter(I"SayX", TRUE);

View file

@ -19,7 +19,7 @@ we need to keep track of:
=
ph_stack_frame *currently_compiling_in_frame = NULL; /* the stack frame for this routine */
int currently_compiling_nnp = FALSE; /* is this a nonphrasal stack frame we made ourselves? */
inter_symbol *currently_compiling_inter_block = NULL; /* where Inter is being emitted to */
inter_package *currently_compiling_inter_block = NULL; /* where Inter is being emitted to */
inter_name *currently_compiling_iname = NULL; /* routine we end up with */
@ So here is the general version, in which |phsf| may or may not be a
@ -40,10 +40,6 @@ packaging_state Routines::begin_framed(inter_name *iname, ph_stack_frame *phsf)
return save;
}
inter_symbol *Routines::self(void) {
return currently_compiling_inter_block;
}
@ If the |phsf| argument is set, then we'll use that; otherwise we will
create a new nonphrasal stack frame.
@ -78,7 +74,7 @@ void Routines::end(packaging_state save) {
@<Issue a problem for too many locals@>;
LocalVariables::declare(currently_compiling_in_frame, FALSE);
Emit::end_block(currently_compiling_inter_block);
Emit::end_block();
Emit::routine(kernel_name?kernel_name:public_name,
R_kind, currently_compiling_inter_block);
@ -95,7 +91,7 @@ void Routines::end(packaging_state save) {
int returns_block_value =
Kinds::Behaviour::uses_pointer_values(currently_compiling_in_frame->kind_returned);
inter_symbol *rsymb = Emit::block(NULL, public_name);
inter_package *block_package = Emit::block(NULL, public_name);
inter_symbol *I7RBLK_symbol = NULL;
@<Compile I6 locals for the outer shell@>;
int NBV = 0;
@ -103,8 +99,8 @@ void Routines::end(packaging_state save) {
@<Compile a call to the kernel@>;
@<Compile some teardown code now that the kernel has finished@>;
@<Compile a return from the outer shell@>;
Emit::end_block(rsymb);
Emit::routine(public_name, R_kind, rsymb);
Emit::end_block();
Emit::routine(public_name, R_kind, block_package);
@ Suppose the routine has to return a list. Then the routine is compiled
with an extra first parameter (called |I7RBLK|), which is a pointer to the

View file

@ -204,8 +204,8 @@ inter_symbol *Emit::holding_symbol(inter_symbols_table *T, text_stream *name) {
return symb;
}
inter_symbol *Emit::new_local_symbol(inter_symbol *rsymb, text_stream *name) {
return Inter::SymbolsTables::create_with_unique_name(Inter::Package::local_symbols(rsymb), name);
inter_symbol *Emit::new_local_symbol(inter_package *rpack, text_stream *name) {
return Inter::SymbolsTables::create_with_unique_name(Inter::Packages::scope(rpack), name);
}
void Emit::annotate_symbol_t(inter_symbol *symb, inter_t annot_ID, text_stream *S) {
@ -708,7 +708,7 @@ inter_name *Emit::named_numeric_constant_signed(inter_name *name, int val) {
return name;
}
inter_symbol *current_inter_routine = NULL;
inter_package *current_inter_routine = NULL;
inter_bookmark current_inter_bookmark;
inter_bookmark locals_bookmark;
inter_bookmark begin_bookmark;
@ -728,20 +728,20 @@ void Emit::code_comment(text_stream *text) {
*/
}
inter_symbol *Emit::package(inter_name *iname, inter_symbol *ptype, inter_package **P) {
inter_package *Emit::package(inter_name *iname, inter_symbol *ptype) {
if (ptype == NULL) internal_error("no package type");
inter_t B = Emit::baseline(Packaging::at());
inter_symbol *rsymb = Emit::define_symbol(iname);
// inter_symbol *rsymb = Emit::define_symbol(iname);
inter_package *IP = NULL;
Emit::guard(Inter::Package::new_package(Packaging::at(), rsymb, ptype, B, NULL, &IP));
if (IP) {
Inter::Bookmarks::set_current_package(Packaging::at(), IP);
if (P) *P = IP;
}
return rsymb;
TEMPORARY_TEXT(hmm);
WRITE_TO(hmm, "%n", iname);
Emit::guard(Inter::Package::new_package_named(Packaging::at(), hmm, TRUE, ptype, B, NULL, &IP));
DISCARD_TEXT(hmm);
if (IP) Inter::Bookmarks::set_current_package(Packaging::at(), IP);
return IP;
}
inter_symbol *Emit::block(packaging_state *save, inter_name *iname) {
inter_package *Emit::block(packaging_state *save, inter_name *iname) {
if (current_inter_routine) internal_error("nested routines");
if (Packaging::at() == NULL) internal_error("no inter repository");
if (save) {
@ -758,10 +758,10 @@ inter_symbol *Emit::block(packaging_state *save, inter_name *iname) {
block_iname = Hierarchy::make_block_iname(InterNames::location(iname));
else internal_error("routine outside function package");
inter_bookmark save_ib = Inter::Bookmarks::snapshot(Packaging::at());
inter_symbol *rsymb = Emit::package(block_iname, code_packagetype, NULL);
current_inter_routine = Emit::package(block_iname, code_packagetype);
current_inter_routine = rsymb;
current_inter_bookmark = Emit::bookmark();
Emit::guard(Inter::Code::new(Packaging::at(),
(int) Emit::baseline(Packaging::at()) + 1, NULL));
@ -774,7 +774,7 @@ inter_symbol *Emit::block(packaging_state *save, inter_name *iname) {
code_bookmark = Emit::bookmark();
code_insertion_point cip = Emit::new_cip(&code_bookmark);
Emit::push_code_position(cip, save_ib);
return rsymb;
return current_inter_routine;
}
inter_name *Emit::kernel(inter_name *public_name) {
@ -787,14 +787,14 @@ void Emit::end_main_block(packaging_state save) {
Packaging::exit(save);
}
void Emit::routine(inter_name *rname, kind *rkind, inter_symbol *block_name) {
void Emit::routine(inter_name *rname, kind *rkind, inter_package *block) {
if (Packaging::at() == NULL) internal_error("no inter repository");
inter_symbol *AB_symbol = Emit::kind_to_symbol(rkind);
inter_symbol *rsymb = Emit::define_symbol(rname);
Emit::guard(Inter::Constant::new_function(Packaging::at(),
Inter::SymbolsTables::id_from_IRS_and_symbol(Packaging::at(), rsymb),
Inter::SymbolsTables::id_from_IRS_and_symbol(Packaging::at(), AB_symbol),
Inter::SymbolsTables::id_from_IRS_and_symbol(Packaging::at(), block_name),
block,
Emit::baseline(Packaging::at()), NULL));
}
@ -814,16 +814,12 @@ inter_symbol *Emit::reserve_label(text_stream *lname) {
return lab_name;
}
void Emit::place_label(inter_symbol *lab_name, int inside) {
if (inside) {
Emit::guard(Inter::Label::new(Emit::at(), current_inter_routine, lab_name, (inter_t) Emit::level(), NULL));
} else {
Emit::guard(Inter::Label::new(Packaging::at(), current_inter_routine, lab_name, Emit::baseline(Packaging::at()) + 1, NULL));
}
void Emit::place_label(inter_symbol *lab_name) {
Emit::guard(Inter::Label::new(Emit::at(), lab_name, (inter_t) Emit::level(), NULL));
}
inter_symbol *Emit::local_exists(text_stream *lname) {
return Inter::SymbolsTables::symbol_from_name(Inter::Package::local_symbols(current_inter_routine), lname);
return Inter::SymbolsTables::symbol_from_name(Inter::Packages::scope(current_inter_routine), lname);
}
inter_symbol *Emit::local(kind *K, text_stream *lname, inter_t annot, text_stream *comm) {
@ -838,7 +834,7 @@ inter_symbol *Emit::local(kind *K, text_stream *lname, inter_t annot, text_strea
}
if (annot) Emit::annotate_symbol_i(loc_name, annot, 0);
Inter::Symbols::local(loc_name);
Emit::guard(Inter::Local::new(&locals_bookmark, current_inter_routine, loc_name, loc_kind, ID, Emit::baseline(&locals_bookmark) + 1, NULL));
Emit::guard(Inter::Local::new(&locals_bookmark, loc_name, loc_kind, ID, Emit::baseline(&locals_bookmark) + 1, NULL));
return loc_name;
}
@ -852,18 +848,18 @@ void Emit::inv_primitive(inter_symbol *prim_symb) {
(prim_symb == do_interp) ||
(prim_symb == objectloop_interp)) Emit::note_level(prim_symb);
Emit::guard(Inter::Inv::new_primitive(Emit::at(), current_inter_routine, prim_symb, (inter_t) Emit::level(), NULL));
Emit::guard(Inter::Inv::new_primitive(Emit::at(), prim_symb, (inter_t) Emit::level(), NULL));
}
void Emit::inv_call(inter_symbol *prim_symb) {
if (current_inter_routine == NULL) internal_error("not in an inter routine");
Emit::guard(Inter::Inv::new_call(Emit::at(), current_inter_routine, prim_symb, (inter_t) Emit::level(), NULL));
Emit::guard(Inter::Inv::new_call(Emit::at(), prim_symb, (inter_t) Emit::level(), NULL));
}
void Emit::inv_call_iname(inter_name *iname) {
if (current_inter_routine == NULL) internal_error("not in an inter routine");
inter_symbol *prim_symb = InterNames::to_symbol(iname);
Emit::guard(Inter::Inv::new_call(Emit::at(), current_inter_routine, prim_symb, (inter_t) Emit::level(), NULL));
Emit::guard(Inter::Inv::new_call(Emit::at(), prim_symb, (inter_t) Emit::level(), NULL));
}
void Emit::inv_indirect_call(int arity) {
@ -882,7 +878,7 @@ void Emit::inv_assembly(text_stream *opcode) {
inter_t SID = Inter::Warehouse::create_text(Inter::Tree::warehouse(Emit::tree()), Inter::Bookmarks::package(Emit::at()));
text_stream *glob_storage = Inter::Warehouse::get_text(Inter::Tree::warehouse(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));
Emit::guard(Inter::Inv::new_assembly(Emit::at(), SID, (inter_t) Emit::level(), NULL));
}
void Emit::return(kind *K, inter_name *iname) {
@ -1025,19 +1021,19 @@ void Emit::code(void) {
void Emit::evaluation(void) {
if (current_inter_routine == NULL) internal_error("not in an inter routine");
Emit::guard(Inter::Evaluation::new(Emit::at(), current_inter_routine, Emit::level(), NULL));
Emit::guard(Inter::Evaluation::new(Emit::at(), Emit::level(), NULL));
}
void Emit::reference(void) {
if (current_inter_routine == NULL) internal_error("not in an inter routine");
Emit::guard(Inter::Reference::new(Emit::at(), current_inter_routine, Emit::level(), NULL));
Emit::guard(Inter::Reference::new(Emit::at(), Emit::level(), NULL));
}
void Emit::val(kind *K, inter_t val1, inter_t val2) {
if (current_inter_routine == NULL) internal_error("not in an inter routine");
inter_symbol *val_kind = Emit::kind_to_symbol(K);
if (val_kind == NULL) internal_error("no kind for val");
Emit::guard(Inter::Val::new(Emit::at(), current_inter_routine, val_kind, Emit::level(), val1, val2, NULL));
Emit::guard(Inter::Val::new(Emit::at(), val_kind, Emit::level(), val1, val2, NULL));
}
void Emit::val_nothing(void) {
@ -1046,14 +1042,14 @@ void Emit::val_nothing(void) {
void Emit::lab(inter_symbol *L) {
if (current_inter_routine == NULL) internal_error("not in an inter routine");
Emit::guard(Inter::Lab::new(Emit::at(), current_inter_routine, L, (inter_t) Emit::level(), NULL));
Emit::guard(Inter::Lab::new(Emit::at(), L, (inter_t) Emit::level(), NULL));
}
void Emit::ref(kind *K, inter_t val1, inter_t val2) {
if (current_inter_routine == NULL) internal_error("not in an inter routine");
inter_symbol *val_kind = Emit::kind_to_symbol(K);
if (val_kind == NULL) internal_error("no kind for ref");
Emit::guard(Inter::Ref::new(Emit::at(), current_inter_routine, val_kind, Emit::level(), val1, val2, NULL));
Emit::guard(Inter::Ref::new(Emit::at(), val_kind, Emit::level(), val1, val2, NULL));
}
void Emit::val_iname(kind *K, inter_name *iname) {
@ -1114,12 +1110,11 @@ void Emit::ref_symbol(kind *K, inter_symbol *s) {
void Emit::cast(kind *F, kind *T) {
inter_symbol *from_kind = Emit::kind_to_symbol(F);
inter_symbol *to_kind = Emit::kind_to_symbol(T);
Emit::guard(Inter::Cast::new(Emit::at(), current_inter_routine, from_kind, to_kind, (inter_t) Emit::level(), NULL));
Emit::guard(Inter::Cast::new(Emit::at(), from_kind, to_kind, (inter_t) Emit::level(), NULL));
}
void Emit::end_block(inter_symbol *rsymb) {
void Emit::end_block(void) {
if (current_inter_routine == NULL) internal_error("not in an inter routine");
if (current_inter_routine != rsymb) internal_error("wrong inter routine ended");
current_inter_routine = NULL;
Emit::pop_code_position();
}

View file

@ -169,7 +169,7 @@ void EmitInterSchemas::emit_inner(inter_schema_node *isn, value_holster *VH,
} else internal_error("bad label stuff");
}
}
Emit::place_label(Emit::reserve_label(L), TRUE);
Emit::place_label(Emit::reserve_label(L));
DISCARD_TEXT(L);
@<Code block@> =

View file

@ -266,7 +266,7 @@ inter_package *Packaging::incarnate(package_request *R) {
Packaging::set_state(&(R->parent_request->write_position), E);
inter_bookmark package_bubble = Packaging::bubble();
Packaging::set_state(&package_bubble, E);
Emit::package(R->eventual_name, R->eventual_type, &(R->actual_package));
R->actual_package = Emit::package(R->eventual_name, R->eventual_type);
R->write_position = Packaging::bubble();
Packaging::set_state(save_IRS, E);
} else {
@ -274,7 +274,7 @@ inter_package *Packaging::incarnate(package_request *R) {
package_bubble = Packaging::bubble();
inter_bookmark *save_IRS = Packaging::at();
Packaging::set_state(&package_bubble, E);
Emit::package(R->eventual_name, R->eventual_type, &(R->actual_package));
R->actual_package = Emit::package(R->eventual_name, R->eventual_type);
R->write_position = Packaging::bubble();
Packaging::set_state(save_IRS, E);
}

View file

@ -750,7 +750,7 @@ void LiteralPatterns::gpr(gpr_kit *gprk, literal_pattern *lp) {
}
}
Emit::place_label(succeeded_label, TRUE);
Emit::place_label(succeeded_label);
Emit::inv_primitive(if_interp);
Emit::down();
@ -839,7 +839,7 @@ void LiteralPatterns::gpr(gpr_kit *gprk, literal_pattern *lp) {
Emit::down();
Emit::val_iname(K_value, Hierarchy::find(GPR_NUMBER_HL));
Emit::up();
Emit::place_label(failed_label, TRUE);
Emit::place_label(failed_label);
}
@<Compile I6 code to match a fixed word token within a literal pattern@> =
@ -2083,7 +2083,7 @@ the sorting measure.
@<Print according to this particular literal pattern@> =
LiteralPatterns::comment_use_of_lp(lp);
Emit::place_label(LiteralPatterns::jump_label(lp), TRUE);
Emit::place_label(LiteralPatterns::jump_label(lp));
int ec=0, oc=0;
for (int tc=0; tc<lp->no_lp_tokens; tc++) {

View file

@ -575,7 +575,7 @@ void PL::Scenes::DetectSceneChange_routine(void) {
scene *sc;
LOOP_OVER(sc, scene) @<Compile code detecting the ends of a specific scene@>;
Emit::place_label(CScene_l, TRUE);
Emit::place_label(CScene_l);
@<Add the scene-change tail@>;
Routines::end(save);

View file

@ -457,7 +457,7 @@ void PL::Parsing::Tokens::General::after_gl_failed(gpr_kit *gprk, inter_symbol *
Emit::up();
Emit::inv_primitive(continue_interp);
Emit::place_label(label, TRUE);
Emit::place_label(label);
Emit::inv_primitive(store_interp);
Emit::down();
Emit::ref_iname(K_value, Hierarchy::find(WN_HL));
@ -1022,7 +1022,7 @@ void PL::Parsing::Tokens::General::parse_visible_property(gpr_kit *gprk,
PL::Parsing::Tokens::General::parse_visible_either_or(
gprk, prnbar, visibility_level, pass_label);
Emit::place_label(pass_label, TRUE);
Emit::place_label(pass_label);
} else {
Emit::inv_primitive(store_interp);
Emit::down();

View file

@ -1101,7 +1101,7 @@ void PL::Parsing::Lines::compile_grammar_line(gpr_kit *gprk, grammar_line *gl, i
Emit::down();
Emit::val_symbol(K_value, gprk->rv_s);
Emit::up();
Emit::place_label(fail_label, TRUE);
Emit::place_label(fail_label);
Emit::inv_primitive(store_interp);
Emit::down();
Emit::ref_symbol(K_value, gprk->rv_s);
@ -1142,7 +1142,7 @@ void PL::Parsing::Lines::compile_grammar_line(gpr_kit *gprk, grammar_line *gl, i
Emit::up();
Emit::up();
Emit::place_label(fail_label, TRUE);
Emit::place_label(fail_label);
Emit::inv_primitive(store_interp);
Emit::down();
Emit::ref_symbol(K_value, gprk->rv_s);
@ -1167,7 +1167,7 @@ void PL::Parsing::Lines::compile_grammar_line(gpr_kit *gprk, grammar_line *gl, i
Emit::down();
Emit::val_iname(K_object, Hierarchy::find(GPR_NUMBER_HL));
Emit::up();
Emit::place_label(fail_label, TRUE);
Emit::place_label(fail_label);
Emit::inv_primitive(store_interp);
Emit::down();
Emit::ref_iname(K_value, Hierarchy::find(WN_HL));
@ -1244,7 +1244,7 @@ void PL::Parsing::Lines::compile_token_line(gpr_kit *gprk, int code_mode, parse_
Emit::val_iname(K_value, Hierarchy::find(WN_HL));
Emit::up();
}
if (next_reserved_label) Emit::place_label(next_reserved_label, TRUE);
if (next_reserved_label) Emit::place_label(next_reserved_label);
TEMPORARY_TEXT(L);
WRITE_TO(L, ".group_%d_%d_%d", current_grammar_block, lexeme_equivalence_class, alternative_number+1);
next_reserved_label = Emit::reserve_label(L);
@ -1295,7 +1295,7 @@ void PL::Parsing::Lines::compile_token_line(gpr_kit *gprk, int code_mode, parse_
if (empty_text_allowed_in_lexeme) {
@<Jump to end of group@>;
if (next_reserved_label)
Emit::place_label(next_reserved_label, TRUE);
Emit::place_label(next_reserved_label);
next_reserved_label = NULL;
Emit::inv_primitive(store_interp);
Emit::down();
@ -1303,7 +1303,7 @@ void PL::Parsing::Lines::compile_token_line(gpr_kit *gprk, int code_mode, parse_
Emit::val_symbol(K_value, gprk->group_wn_s);
Emit::up();
}
if (eog_reserved_label) Emit::place_label(eog_reserved_label, TRUE);
if (eog_reserved_label) Emit::place_label(eog_reserved_label);
eog_reserved_label = NULL;
} else {
@<Jump to end of group@>;

View file

@ -630,7 +630,7 @@ kind *PL::Parsing::Tokens::compile(gpr_kit *gprk, parse_node *pn, int code_mode,
Emit::val(K_number, LITERAL_IVAL, 0);
Emit::up();
@<Jump to our doom@>;
Emit::place_label(exit_label, TRUE);
Emit::place_label(exit_label);
Emit::inv_primitive(store_interp);
Emit::down();
Emit::ref_symbol(K_value, gprk->rv_s);
@ -705,7 +705,7 @@ kind *PL::Parsing::Tokens::compile(gpr_kit *gprk, parse_node *pn, int code_mode,
Emit::val(K_number, LITERAL_IVAL, 0);
Emit::up();
@<Jump to our doom@>;
Emit::place_label(exit_label, TRUE);
Emit::place_label(exit_label);
Emit::inv_primitive(store_interp);
Emit::down();
Emit::ref_symbol(K_value, gprk->rv_s);
@ -1027,7 +1027,7 @@ kind *PL::Parsing::Tokens::compile(gpr_kit *gprk, parse_node *pn, int code_mode,
Emit::val(K_number, LITERAL_IVAL, 0);
Emit::up();
@<Jump to our doom@>;
Emit::place_label(exit_label, TRUE);
Emit::place_label(exit_label);
Emit::inv_primitive(store_interp);
Emit::down();
Emit::ref_symbol(K_value, gprk->rv_s);

View file

@ -271,7 +271,7 @@ void PL::Parsing::Tokens::Values::compile_type_gprs(void) {
Emit::up();
Emit::up();
}
Emit::place_label(flab, TRUE);
Emit::place_label(flab);
}
}
}

View file

@ -33,16 +33,13 @@ int CodeGen::Assimilate::run_pipeline_stage(pipeline_step *step) {
=
inter_bookmark CodeGen::Assimilate::template_submodule(inter_tree *I, text_stream *name, inter_tree_node *P) {
if (submodule_ptype_symbol) {
inter_symbol *fns = Inter::SymbolsTables::symbol_from_name_in_template_creating(I, name);
if (Inter::Symbols::is_defined(fns) == FALSE) {
inter_package *t_p = Inter::Packages::by_name(template_package, name);
if (t_p == NULL) {
inter_bookmark IBM = Inter::Bookmarks::after_this_frame(I, P);
CodeGen::Assimilate::new_package(&IBM, fns, submodule_ptype_symbol);
t_p = CodeGen::Assimilate::new_package_named(&IBM, name, submodule_ptype_symbol);
}
if (Inter::Symbols::is_defined(fns) == FALSE) internal_error("failed to define");
inter_tree_node *D = Inter::Symbols::definition(fns);
inter_package *fns_package = Inter::Package::defined_by_frame(D);
if (fns_package == NULL) internal_error("not a package");
return Inter::Bookmarks::at_end_of_this_package(fns_package);
if (t_p == NULL) internal_error("failed to define");
return Inter::Bookmarks::at_end_of_this_package(t_p);
}
return Inter::Bookmarks::after_this_frame(I, P);
}
@ -170,11 +167,10 @@ void CodeGen::Assimilate::visitor3(inter_tree *I, inter_tree_node *P, void *stat
} else {
WRITE_TO(subpackage_name, "assim_command_%d", ++no_assimilated_commands);
}
inter_symbol *subpackage_symbol = Inter::SymbolsTables::create_with_unique_name(Inter::Bookmarks::scope(IBM), subpackage_name);
Inter::Bookmarks::set_current_package(IBM,
CodeGen::Assimilate::new_package_named(IBM, subpackage_name, subpackage_type));
DISCARD_TEXT(subpackage_name);
Inter::Bookmarks::set_current_package(IBM,
CodeGen::Assimilate::new_package(IBM, subpackage_symbol, subpackage_type));
}
inter_symbol *con_name = CodeGen::Assimilate::maybe_extern(I, identifier, Inter::Bookmarks::scope(IBM));
@ -389,26 +385,22 @@ void CodeGen::Assimilate::visitor3(inter_tree *I, inter_tree_node *P, void *stat
inter_bookmark IBM_d = CodeGen::Assimilate::template_submodule(I, I"functions", P);
inter_bookmark *IBM = &IBM_d;
TEMPORARY_TEXT(fname);
WRITE_TO(fname, "%S_fn", identifier);
inter_symbol *function_name = Inter::SymbolsTables::create_with_unique_name(Inter::Bookmarks::scope(IBM), fname);
DISCARD_TEXT(fname);
inter_symbol *fnt = function_ptype_symbol;
if (fnt == NULL) fnt = plain_packagetype;
inter_package *FP = CodeGen::Assimilate::new_package(IBM, function_name, fnt);
TEMPORARY_TEXT(fname);
WRITE_TO(fname, "%S_fn", identifier);
inter_package *FP = CodeGen::Assimilate::new_package_named(IBM, fname, fnt);
DISCARD_TEXT(fname);
inter_bookmark outer_save = Inter::Bookmarks::snapshot(IBM);
Inter::Bookmarks::set_current_package(IBM, FP);
TEMPORARY_TEXT(bname);
WRITE_TO(bname, "%S_B", identifier);
inter_symbol *block_name = Inter::SymbolsTables::create_with_unique_name(Inter::Bookmarks::scope(IBM), bname);
inter_package *IP = CodeGen::Assimilate::new_package_named(IBM, bname, code_packagetype);
DISCARD_TEXT(bname);
inter_package *IP = CodeGen::Assimilate::new_package(IBM, block_name, code_packagetype);
inter_bookmark inner_save = Inter::Bookmarks::snapshot(IBM);
Inter::Bookmarks::set_current_package(IBM, IP);
inter_bookmark block_bookmark = Inter::Bookmarks::snapshot(IBM);
@ -419,9 +411,9 @@ void CodeGen::Assimilate::visitor3(inter_tree *I, inter_tree_node *P, void *stat
TEMPORARY_TEXT(value);
@<Extract a token@>;
if (Str::len(value) == 0) break;
inter_symbol *loc_name = Inter::SymbolsTables::create_with_unique_name(Inter::Package::local_symbols(block_name), value);
inter_symbol *loc_name = Inter::SymbolsTables::create_with_unique_name(Inter::Packages::scope(IP), value);
Inter::Symbols::local(loc_name);
CodeGen::MergeTemplate::guard(Inter::Local::new(IBM, block_name, loc_name, unchecked_kind_symbol, 0, (inter_t) Inter::Bookmarks::baseline(IBM) + 1, NULL));
CodeGen::MergeTemplate::guard(Inter::Local::new(IBM, loc_name, unchecked_kind_symbol, 0, (inter_t) Inter::Bookmarks::baseline(IBM) + 1, NULL));
DISCARD_TEXT(value);
}
}
@ -432,7 +424,7 @@ void CodeGen::Assimilate::visitor3(inter_tree *I, inter_tree_node *P, void *stat
while ((L>0) && (Str::get_at(body, L) != ']')) L--;
while ((L>0) && (Characters::is_whitespace(Str::get_at(body, L-1)))) L--;
Str::truncate(body, L);
CodeGen::Assimilate::routine_body(IBM, block_name, (inter_t) Inter::Bookmarks::baseline(IBM) + 1, body, block_bookmark);
CodeGen::Assimilate::routine_body(IBM, IP, (inter_t) Inter::Bookmarks::baseline(IBM) + 1, body, block_bookmark);
}
*IBM = inner_save;
@ -442,7 +434,7 @@ void CodeGen::Assimilate::visitor3(inter_tree *I, inter_tree_node *P, void *stat
CodeGen::MergeTemplate::guard(Inter::Constant::new_function(IBM,
Inter::SymbolsTables::id_from_symbol(I, FP, rsymb),
Inter::SymbolsTables::id_from_symbol(I, FP, unchecked_function_symbol),
Inter::SymbolsTables::id_from_symbol(I, FP, block_name),
IP,
(inter_t) Inter::Bookmarks::baseline(IBM) + 1, NULL));
*IBM = outer_save;
@ -455,9 +447,9 @@ void CodeGen::Assimilate::visitor3(inter_tree *I, inter_tree_node *P, void *stat
Inter::Tree::remove_node(P);
@ =
inter_package *CodeGen::Assimilate::new_package(inter_bookmark *IBM, inter_symbol *pname, inter_symbol *ptype) {
inter_package *CodeGen::Assimilate::new_package_named(inter_bookmark *IBM, text_stream *name, inter_symbol *ptype) {
inter_package *P = NULL;
CodeGen::MergeTemplate::guard(Inter::Package::new_package(IBM, pname,
CodeGen::MergeTemplate::guard(Inter::Package::new_package_named(IBM, name, TRUE,
ptype, (inter_t) Inter::Bookmarks::baseline(IBM) + 1, NULL, &P));
return P;
}
@ -519,13 +511,12 @@ void CodeGen::Assimilate::ensure_action(inter_tree *I, inter_tree_node *P, text_
if (CodeGen::MergeTemplate::find_name(I, value, TRUE) == NULL) {
inter_bookmark IBM_d = CodeGen::Assimilate::template_submodule(I, I"actions", P);
inter_bookmark *IBM = &IBM_d;
TEMPORARY_TEXT(an);
WRITE_TO(an, "assim_action_%d", ++no_assimilated_actions);
inter_symbol *housing_symbol = Inter::SymbolsTables::create_with_unique_name(Inter::Bookmarks::scope(IBM), an);
DISCARD_TEXT(an);
inter_symbol *ptype = action_ptype_symbol;
if (ptype == NULL) ptype = plain_packagetype;
Inter::Bookmarks::set_current_package(IBM, CodeGen::Assimilate::new_package(IBM, housing_symbol, ptype));
TEMPORARY_TEXT(an);
WRITE_TO(an, "assim_action_%d", ++no_assimilated_actions);
Inter::Bookmarks::set_current_package(IBM, CodeGen::Assimilate::new_package_named(IBM, an, ptype));
DISCARD_TEXT(an);
inter_symbol *asymb = CodeGen::Assimilate::maybe_extern(I, value, Inter::Bookmarks::scope(IBM));
TEMPORARY_TEXT(unsharped);
WRITE_TO(unsharped, "%SSub", value);
@ -790,21 +781,21 @@ typedef struct routine_body_request {
#ifdef CORE_MODULE
struct package_request *enclosure;
#endif
struct inter_symbol *block_name;
struct inter_package *block_package;
int pass2_offset;
struct text_stream *body;
MEMORY_MANAGEMENT
} routine_body_request;
int rb_splat_count = 1;
int CodeGen::Assimilate::routine_body(inter_bookmark *IBM, inter_symbol *block_name, inter_t offset, text_stream *body, inter_bookmark bb) {
int CodeGen::Assimilate::routine_body(inter_bookmark *IBM, inter_package *block_package, inter_t offset, text_stream *body, inter_bookmark bb) {
if (Str::is_whitespace(body)) return FALSE;
#ifdef CORE_MODULE
routine_body_request *req = CREATE(routine_body_request);
req->block_bookmark = bb;
req->enclosure = Packaging::enclosure();
req->position = Packaging::bubble_at(IBM);
req->block_name = block_name;
req->block_package = block_package;
req->pass2_offset = (int) offset - 2;
req->body = Str::duplicate(body);
return TRUE;
@ -819,7 +810,7 @@ int CodeGen::Assimilate::routine_body(inter_bookmark *IBM, inter_symbol *block_n
void CodeGen::Assimilate::function_bodies(void) {
routine_body_request *req;
LOOP_OVER(req, routine_body_request) {
LOGIF(SCHEMA_COMPILATION, "=======\n\nRoutine (%S) len %d: '%S'\n\n", req->block_name->symbol_name, Str::len(req->body), req->body);
LOGIF(SCHEMA_COMPILATION, "=======\n\nRoutine (%S) len %d: '%S'\n\n", Inter::Packages::name(req->block_package), Str::len(req->body), req->body);
inter_schema *sch = InterSchemas::from_text(req->body, FALSE, 0, NULL);
if (Log::aspect_switched_on(SCHEMA_COMPILATION_DA)) {
@ -831,11 +822,11 @@ void CodeGen::Assimilate::function_bodies(void) {
}
#ifdef CORE_MODULE
current_inter_routine = req->block_name;
current_inter_routine = req->block_package;
Packaging::set_state(&(req->position), req->enclosure);
Emit::push_code_position(Emit::new_cip(&(req->position)), Inter::Bookmarks::snapshot(Packaging::at()));
value_holster VH = Holsters::new(INTER_VOID_VHMODE);
inter_symbols_table *scope1 = Inter::Package::local_symbols(req->block_name);
inter_symbols_table *scope1 = Inter::Packages::scope(req->block_package);
inter_symbols_table *scope2 = Inter::Packages::scope(Packaging::incarnate(Hierarchy::template()));
EmitInterSchemas::emit(&VH, sch, NULL, TRUE, FALSE, scope1, scope2, NULL, NULL);
Emit::pop_code_position();

View file

@ -163,10 +163,10 @@ void CodeGen::CL::constant(code_generation *gen, inter_tree_node *P) {
}
if (Inter::Constant::is_routine(con_name)) {
inter_symbol *code_block = Inter::Constant::code_block(con_name);
inter_package *code_block = Inter::Constant::code_block(con_name);
WRITE("[ %S", CodeGen::CL::name(con_name));
void_level = Inter::Defn::get_level(P) + 2;
inter_tree_node *D = Inter::Symbols::definition(code_block);
inter_tree_node *D = Inter::Packages::definition(code_block);
CodeGen::FC::frame(gen, D);
return;
}

View file

@ -37,7 +37,8 @@ inter_package *Inter::Packages::new(inter_tree *I, inter_t n) {
inter_tree_node *Inter::Packages::definition(inter_package *pack) {
if (pack == NULL) return NULL;
return Inter::Symbols::definition(pack->package_name);
if (Inter::Packages::is_rootlike(pack)) return NULL;
return pack->package_head;
}
inter_tree *Inter::Packages::tree(inter_package *pack) {
@ -195,8 +196,7 @@ inter_symbols_table *Inter::Packages::scope_of(inter_tree_node *P) {
inter_symbol *Inter::Packages::type(inter_package *P) {
if (P == NULL) return NULL;
if (P->package_name == NULL) return NULL;
return Inter::Package::type(P->package_name);
return Inter::Package::type(P);
}
int Inter::Packages::baseline(inter_package *P) {
@ -242,3 +242,11 @@ void Inter::Packages::clear_flag(inter_package *P, int f) {
if (P == NULL) internal_error("no package");
if (P->package_flags & f) P->package_flags = P->package_flags - f;
}
inter_package *Inter::Packages::by_name(inter_package *P, text_stream *name) {
if (P == NULL) return NULL;
inter_symbols_table *at = Inter::Packages::scope(P);
inter_symbol *next_sym = Inter::SymbolsTables::symbol_from_name(at, name);
if (next_sym == NULL) return NULL;
return Inter::Package::which(next_sym);
}

View file

@ -146,12 +146,6 @@ inter_symbol *Inter::SymbolsTables::symbol_from_name_in_template(inter_tree *I,
return Inter::SymbolsTables::symbol_from_name(Inter::Packages::scope(P), S);
}
inter_symbol *Inter::SymbolsTables::symbol_from_name_in_template_creating(inter_tree *I, text_stream *S) {
inter_package *P = Inter::Packages::template(I);
if (P == NULL) return NULL;
return Inter::SymbolsTables::symbol_from_name_creating(Inter::Packages::scope(P), S);
}
inter_symbol *Inter::SymbolsTables::symbol_from_name_in_main_or_basics(inter_tree *I, text_stream *S) {
inter_symbol *symbol = Inter::SymbolsTables::symbol_from_name_in_basics(I, S);
if (symbol == NULL) symbol = Inter::SymbolsTables::symbol_from_name_in_veneer(I, S);
@ -364,22 +358,21 @@ void Inter::SymbolsTables::rfr_visitor(inter_tree *I, inter_tree_node *P, void *
inter_symbol *Inter::SymbolsTables::url_name_to_symbol(inter_tree *I, inter_symbols_table *T, text_stream *S) {
inter_symbols_table *at = Inter::Tree::global_scope(I);
if (Str::get_first_char(S) == '/') {
inter_package *at_P = I->root_package;
TEMPORARY_TEXT(C);
LOOP_THROUGH_TEXT(P, S) {
wchar_t c = Str::get(P);
if (c == '/') {
if (Str::len(C) > 0) {
inter_symbol *next_sym = Inter::SymbolsTables::symbol_from_name(at, C);
inter_package *next_pack = Inter::Package::which(next_sym);
if (next_pack) at = Inter::Packages::scope(next_pack);
else return NULL;
at_P = Inter::Packages::by_name(at_P, C);
if (at_P == NULL) return NULL;
}
Str::clear(C);
} else {
PUT_TO(C, c);
}
}
return Inter::SymbolsTables::symbol_from_name(at, C);
return Inter::SymbolsTables::symbol_from_name(Inter::Packages::scope(at_P), C);
}
inter_symbol *try = Inter::SymbolsTables::symbol_from_name(at, S);
if (try) return try;

View file

@ -13,6 +13,7 @@ void Inter::Constant::define(void) {
L"constant (%C+) (%i+) = (%c+)",
I"constant", I"constants");
METHOD_ADD(IC, CONSTRUCT_READ_MTID, Inter::Constant::read);
METHOD_ADD(IC, CONSTRUCT_TRANSPOSE_MTID, Inter::Constant::transpose);
METHOD_ADD(IC, CONSTRUCT_VERIFY_MTID, Inter::Constant::verify);
METHOD_ADD(IC, CONSTRUCT_WRITE_MTID, Inter::Constant::write);
}
@ -175,9 +176,11 @@ void Inter::Constant::read(inter_construct *IC, inter_bookmark *IBM, inter_line_
}
if ((idt) && (idt->type_ID == ROUTINE_IDT)) {
inter_symbol *block_name = Inter::Textual::find_symbol(Inter::Bookmarks::tree(IBM), eloc, Inter::Bookmarks::scope(IBM), S, PACKAGE_IST, E);
if (*E) return;
*E = Inter::Constant::new_function(IBM, Inter::SymbolsTables::id_from_IRS_and_symbol(IBM, con_name), Inter::SymbolsTables::id_from_IRS_and_symbol(IBM, con_kind), Inter::SymbolsTables::id_from_IRS_and_symbol(IBM, block_name), (inter_t) ilp->indent_level, eloc);
inter_package *block = Inter::Packages::by_name(Inter::Bookmarks::package(IBM), S);
if (block == NULL) {
*E = Inter::Errors::quoted(I"no such code block", S, eloc); return;
}
*E = Inter::Constant::new_function(IBM, Inter::SymbolsTables::id_from_IRS_and_symbol(IBM, con_name), Inter::SymbolsTables::id_from_IRS_and_symbol(IBM, con_kind), block, (inter_t) ilp->indent_level, eloc);
return;
}
@ -245,7 +248,8 @@ inter_error_message *Inter::Constant::new_textual(inter_bookmark *IBM, inter_t S
return NULL;
}
inter_error_message *Inter::Constant::new_function(inter_bookmark *IBM, inter_t SID, inter_t KID, inter_t BID, inter_t level, inter_error_location *eloc) {
inter_error_message *Inter::Constant::new_function(inter_bookmark *IBM, inter_t SID, inter_t KID, inter_package *block, inter_t level, inter_error_location *eloc) {
inter_t BID = block->index_n;
inter_tree_node *P = Inter::Node::fill_4(IBM,
CONSTANT_IST, SID, KID, CONSTANT_ROUTINE, BID, eloc, level);
inter_error_message *E = Inter::Defn::verify_construct(Inter::Bookmarks::package(IBM), P); if (E) return E;
@ -276,6 +280,11 @@ int Inter::Constant::append(text_stream *line, inter_error_location *eloc, inter
return TRUE;
}
void Inter::Constant::transpose(inter_construct *IC, inter_tree_node *P, inter_t *grid, inter_t grid_extent, inter_error_message **E) {
if (P->W.data[FORMAT_CONST_IFLD] == CONSTANT_ROUTINE)
P->W.data[DATA_CONST_IFLD] = grid[P->W.data[DATA_CONST_IFLD]];
}
void Inter::Constant::verify(inter_construct *IC, inter_tree_node *P, inter_package *owner, inter_error_message **E) {
*E = Inter::Verify::defn(owner, P, DEFN_CONST_IFLD); if (*E) return;
*E = Inter::Verify::symbol(owner, P, P->W.data[KIND_CONST_IFLD], KIND_IST); if (*E) return;
@ -343,7 +352,6 @@ void Inter::Constant::verify(inter_construct *IC, inter_tree_node *P, inter_pack
break;
case CONSTANT_ROUTINE:
if (P->W.extent != DATA_CONST_IFLD + 1) { *E = Inter::Node::error(P, I"extent wrong", NULL); return; }
*E = Inter::Verify::symbol(owner, P, P->W.data[DATA_CONST_IFLD], PACKAGE_IST); if (*E) return;
break;
}
}
@ -398,8 +406,8 @@ void Inter::Constant::write(inter_construct *IC, OUTPUT_STREAM, inter_tree_node
WRITE("\"");
break;
case CONSTANT_ROUTINE: {
inter_symbol *block = Inter::SymbolsTables::symbol_from_frame_data(P, DATA_CONST_IFLD);
WRITE("%S", block->symbol_name);
inter_package *block = Inter::Node::ID_to_package(P, P->W.data[DATA_CONST_IFLD]);
WRITE("%S", Inter::Packages::name(block));
break;
}
}
@ -418,13 +426,13 @@ inter_symbol *Inter::Constant::kind_of(inter_symbol *con_symbol) {
return Inter::SymbolsTables::symbol_from_frame_data(D, KIND_CONST_IFLD);
}
inter_symbol *Inter::Constant::code_block(inter_symbol *con_symbol) {
inter_package *Inter::Constant::code_block(inter_symbol *con_symbol) {
if (con_symbol == NULL) return NULL;
inter_tree_node *D = Inter::Symbols::definition(con_symbol);
if (D == NULL) return NULL;
if (D->W.data[ID_IFLD] != CONSTANT_IST) return NULL;
if (D->W.data[FORMAT_CONST_IFLD] != CONSTANT_ROUTINE) return NULL;
return Inter::SymbolsTables::symbol_from_frame_data(D, DATA_CONST_IFLD);
return Inter::Node::ID_to_package(D, D->W.data[DATA_CONST_IFLD]);
}
int Inter::Constant::is_routine(inter_symbol *con_symbol) {
@ -437,9 +445,7 @@ int Inter::Constant::is_routine(inter_symbol *con_symbol) {
}
inter_symbols_table *Inter::Constant::local_symbols(inter_symbol *con_symbol) {
inter_symbol *block = Inter::Constant::code_block(con_symbol);
if (block == NULL) return NULL;
return Inter::Package::local_symbols(block);
return Inter::Packages::scope(Inter::Constant::code_block(con_symbol));
}
int Inter::Constant::char_acceptable(int c) {

View file

@ -32,19 +32,24 @@ void Inter::Package::read(inter_construct *IC, inter_bookmark *IBM, inter_line_p
*E = Inter::Defn::vet_level(IBM, PACKAGE_IST, ilp->indent_level, eloc);
if (*E) return;
inter_symbol *package_name = Inter::Textual::new_symbol(eloc, Inter::Bookmarks::scope(IBM), ilp->mr.exp[0], E);
if (*E) return;
inter_symbol *ptype_name = Inter::Textual::find_symbol(Inter::Bookmarks::tree(IBM), eloc, Inter::Tree::global_scope(Inter::Bookmarks::tree(IBM)), ilp->mr.exp[1], PACKAGETYPE_IST, E);
if (*E) return;
inter_package *pack = NULL;
*E = Inter::Package::new_package(IBM, package_name, ptype_name, (inter_t) ilp->indent_level, eloc, &pack);
*E = Inter::Package::new_package_named(IBM, ilp->mr.exp[0], FALSE, ptype_name, (inter_t) ilp->indent_level, eloc, &pack);
if (*E) return;
Inter::Bookmarks::set_current_package(IBM, pack);
}
inter_error_message *Inter::Package::new_package_named(inter_bookmark *IBM, text_stream *name, int uniquely,
inter_symbol *ptype_name, inter_t level, inter_error_location *eloc, inter_package **created) {
inter_symbol *package_name =
(uniquely) ? (Inter::SymbolsTables::create_with_unique_name(Inter::Bookmarks::scope(IBM), name))
: (Inter::SymbolsTables::symbol_from_name_creating(Inter::Bookmarks::scope(IBM), name));
return Inter::Package::new_package(IBM, package_name, ptype_name, level, eloc, created);
}
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::Warehouse::create_symbols_table(Inter::Bookmarks::warehouse(IBM));
inter_tree_node *P = Inter::Node::fill_4(IBM,
@ -76,7 +81,10 @@ void Inter::Package::transpose(inter_construct *IC, inter_tree_node *P, inter_t
}
void Inter::Package::verify(inter_construct *IC, inter_tree_node *P, inter_package *owner, inter_error_message **E) {
*E = Inter::Verify::defn(owner, P, DEFN_PACKAGE_IFLD); if (*E) return;
inter_package *pack = Inter::Node::ID_to_package(P, P->W.data[PID_PACKAGE_IFLD]);
if (pack) pack->package_head = P;
inter_symbols_table *T = Inter::Packages::scope(owner);
if (T == NULL) T = Inter::Node::globals(P);
inter_symbol *package_name = Inter::SymbolsTables::symbol_from_id(T, P->W.data[DEFN_PACKAGE_IFLD]);
@ -124,11 +132,9 @@ inter_package *Inter::Package::defined_by_frame(inter_tree_node *D) {
return Inter::Node::ID_to_package(D, D->W.data[PID_PACKAGE_IFLD]);
}
inter_symbol *Inter::Package::type(inter_symbol *package_name) {
if (package_name == NULL) return NULL;
inter_tree_node *D = Inter::Symbols::definition(package_name);
if (D == NULL) return NULL;
if (D->W.data[ID_IFLD] != PACKAGE_IST) return NULL;
inter_symbol *Inter::Package::type(inter_package *pack) {
if (pack == NULL) return NULL;
inter_tree_node *D = pack->package_head;
inter_symbol *ptype_name = Inter::SymbolsTables::global_symbol_from_frame_data(D, PTYPE_PACKAGE_IFLD);
return ptype_name;
}

View file

@ -44,10 +44,10 @@ void Inter::Cast::read(inter_construct *IC, inter_bookmark *IBM, inter_line_pars
inter_symbol *to_kind = Inter::Textual::find_symbol(Inter::Bookmarks::tree(IBM), eloc, Inter::Bookmarks::scope(IBM), ilp->mr.exp[0], KIND_IST, E);
if (*E) return;
*E = Inter::Cast::new(IBM, routine, from_kind, to_kind, (inter_t) ilp->indent_level, eloc);
*E = Inter::Cast::new(IBM, from_kind, to_kind, (inter_t) ilp->indent_level, eloc);
}
inter_error_message *Inter::Cast::new(inter_bookmark *IBM, inter_symbol *routine, inter_symbol *from_kind, inter_symbol *to_kind, inter_t level, inter_error_location *eloc) {
inter_error_message *Inter::Cast::new(inter_bookmark *IBM, inter_symbol *from_kind, inter_symbol *to_kind, inter_t level, inter_error_location *eloc) {
inter_tree_node *P = Inter::Node::fill_3(IBM, CAST_IST, 0, Inter::SymbolsTables::id_from_IRS_and_symbol(IBM, to_kind), Inter::SymbolsTables::id_from_IRS_and_symbol(IBM, from_kind), eloc, (inter_t) level);
inter_error_message *E = Inter::Defn::verify_construct(Inter::Bookmarks::package(IBM), P); if (E) return E;
Inter::Bookmarks::insert(IBM, P);

View file

@ -37,10 +37,10 @@ void Inter::Evaluation::read(inter_construct *IC, inter_bookmark *IBM, inter_lin
inter_symbol *routine = Inter::Defn::get_latest_block_symbol();
if (routine == NULL) { *E = Inter::Errors::plain(I"'evaluation' used outside function", eloc); return; }
*E = Inter::Evaluation::new(IBM, routine, ilp->indent_level, eloc);
*E = Inter::Evaluation::new(IBM, ilp->indent_level, eloc);
}
inter_error_message *Inter::Evaluation::new(inter_bookmark *IBM, inter_symbol *routine, int level, inter_error_location *eloc) {
inter_error_message *Inter::Evaluation::new(inter_bookmark *IBM, int level, inter_error_location *eloc) {
inter_tree_node *P = Inter::Node::fill_1(IBM, EVALUATION_IST, 0, eloc, (inter_t) level);
inter_error_message *E = Inter::Defn::verify_construct(Inter::Bookmarks::package(IBM), P); if (E) return E;
Inter::Bookmarks::insert(IBM, P);

View file

@ -48,16 +48,16 @@ void Inter::Inv::read(inter_construct *IC, inter_bookmark *IBM, inter_line_parse
if ((Inter::Symbols::is_extern(invoked_name)) ||
(Inter::Symbols::is_predeclared(invoked_name))) {
*E = Inter::Inv::new_call(IBM, routine, invoked_name, (inter_t) ilp->indent_level, eloc);
*E = Inter::Inv::new_call(IBM, invoked_name, (inter_t) ilp->indent_level, eloc);
return;
}
switch (Inter::Symbols::definition(invoked_name)->W.data[ID_IFLD]) {
case PRIMITIVE_IST:
*E = Inter::Inv::new_primitive(IBM, routine, invoked_name, (inter_t) ilp->indent_level, eloc);
*E = Inter::Inv::new_primitive(IBM, invoked_name, (inter_t) ilp->indent_level, eloc);
return;
case CONSTANT_IST:
if (Inter::Constant::is_routine(invoked_name)) {
*E = Inter::Inv::new_call(IBM, routine, invoked_name, (inter_t) ilp->indent_level, eloc);
*E = Inter::Inv::new_call(IBM, invoked_name, (inter_t) ilp->indent_level, eloc);
return;
}
break;
@ -65,7 +65,7 @@ void Inter::Inv::read(inter_construct *IC, inter_bookmark *IBM, inter_line_parse
*E = Inter::Errors::quoted(I"not a function or primitive", ilp->mr.exp[0], eloc);
}
inter_error_message *Inter::Inv::new_primitive(inter_bookmark *IBM, inter_symbol *routine, inter_symbol *invoked_name, inter_t level, inter_error_location *eloc) {
inter_error_message *Inter::Inv::new_primitive(inter_bookmark *IBM, inter_symbol *invoked_name, inter_t level, inter_error_location *eloc) {
inter_tree_node *P = Inter::Node::fill_3(IBM, INV_IST, 0, INVOKED_PRIMITIVE, Inter::SymbolsTables::id_from_symbol(Inter::Bookmarks::tree(IBM), NULL, invoked_name),
eloc, (inter_t) level);
inter_error_message *E = Inter::Defn::verify_construct(Inter::Bookmarks::package(IBM), P);
@ -74,7 +74,7 @@ inter_error_message *Inter::Inv::new_primitive(inter_bookmark *IBM, inter_symbol
return NULL;
}
inter_error_message *Inter::Inv::new_call(inter_bookmark *IBM, inter_symbol *routine, inter_symbol *invoked_name, inter_t level, inter_error_location *eloc) {
inter_error_message *Inter::Inv::new_call(inter_bookmark *IBM, inter_symbol *invoked_name, inter_t level, inter_error_location *eloc) {
inter_tree_node *P = Inter::Node::fill_3(IBM, INV_IST, 0, INVOKED_ROUTINE, Inter::SymbolsTables::id_from_IRS_and_symbol(IBM, invoked_name), eloc, (inter_t) level);
inter_error_message *E = Inter::Defn::verify_construct(Inter::Bookmarks::package(IBM), P);
if (E) return E;
@ -82,7 +82,7 @@ inter_error_message *Inter::Inv::new_call(inter_bookmark *IBM, inter_symbol *rou
return NULL;
}
inter_error_message *Inter::Inv::new_assembly(inter_bookmark *IBM, inter_symbol *routine, inter_t opcode_storage, inter_t level, inter_error_location *eloc) {
inter_error_message *Inter::Inv::new_assembly(inter_bookmark *IBM, inter_t opcode_storage, inter_t level, inter_error_location *eloc) {
inter_tree_node *P = Inter::Node::fill_3(IBM, INV_IST, 0, INVOKED_OPCODE, opcode_storage, eloc, (inter_t) level);
inter_error_message *E = Inter::Defn::verify_construct(Inter::Bookmarks::package(IBM), P);
if (E) return E;

View file

@ -42,10 +42,10 @@ void Inter::Lab::read(inter_construct *IC, inter_bookmark *IBM, inter_line_parse
inter_symbol *label = Inter::SymbolsTables::symbol_from_name(locals, ilp->mr.exp[0]);
if (Inter::Symbols::is_label(label) == FALSE) { *E = Inter::Errors::plain(I"not a label", eloc); return; }
*E = Inter::Lab::new(IBM, routine, label, (inter_t) ilp->indent_level, eloc);
*E = Inter::Lab::new(IBM, label, (inter_t) ilp->indent_level, eloc);
}
inter_error_message *Inter::Lab::new(inter_bookmark *IBM, inter_symbol *routine, inter_symbol *label, inter_t level, inter_error_location *eloc) {
inter_error_message *Inter::Lab::new(inter_bookmark *IBM, inter_symbol *label, inter_t level, inter_error_location *eloc) {
inter_tree_node *P = Inter::Node::fill_2(IBM, LAB_IST, 0, Inter::SymbolsTables::id_from_IRS_and_symbol(IBM, label), eloc, (inter_t) level);
inter_error_message *E = Inter::Defn::verify_construct(Inter::Bookmarks::package(IBM), P); if (E) return E;
Inter::Bookmarks::insert(IBM, P);

View file

@ -40,10 +40,10 @@ void Inter::Label::read(inter_construct *IC, inter_bookmark *IBM, inter_line_par
inter_symbol *lab_name = Inter::SymbolsTables::symbol_from_name(locals, ilp->mr.exp[0]);
if (Inter::Symbols::is_label(lab_name) == FALSE) { *E = Inter::Errors::plain(I"not a label", eloc); return; }
*E = Inter::Label::new(IBM, routine, lab_name, (inter_t) ilp->indent_level, eloc);
*E = Inter::Label::new(IBM, lab_name, (inter_t) ilp->indent_level, eloc);
}
inter_error_message *Inter::Label::new(inter_bookmark *IBM, inter_symbol *routine, inter_symbol *lab_name, inter_t level, inter_error_location *eloc) {
inter_error_message *Inter::Label::new(inter_bookmark *IBM, inter_symbol *lab_name, inter_t level, inter_error_location *eloc) {
inter_tree_node *P = Inter::Node::fill_2(IBM, LABEL_IST, 0, Inter::SymbolsTables::id_from_IRS_and_symbol(IBM, lab_name), eloc, level);
inter_error_message *E = Inter::Defn::verify_construct(Inter::Bookmarks::package(IBM), P); if (E) return E;
Inter::Bookmarks::insert(IBM, P);

View file

@ -47,10 +47,10 @@ void Inter::Local::read(inter_construct *IC, inter_bookmark *IBM, inter_line_par
Inter::Annotations::copy_set_to_symbol(&(ilp->set), var_name);
*E = Inter::Local::new(IBM, routine, var_name, var_kind, ilp->terminal_comment, (inter_t) ilp->indent_level, eloc);
*E = Inter::Local::new(IBM, var_name, var_kind, ilp->terminal_comment, (inter_t) ilp->indent_level, eloc);
}
inter_error_message *Inter::Local::new(inter_bookmark *IBM, inter_symbol *routine, inter_symbol *var_name, inter_symbol *var_kind, inter_t ID, inter_t level, inter_error_location *eloc) {
inter_error_message *Inter::Local::new(inter_bookmark *IBM, inter_symbol *var_name, inter_symbol *var_kind, inter_t ID, inter_t level, inter_error_location *eloc) {
inter_tree_node *P = Inter::Node::fill_3(IBM, LOCAL_IST, 0, Inter::SymbolsTables::id_from_IRS_and_symbol(IBM, var_name), var_kind?(Inter::SymbolsTables::id_from_IRS_and_symbol(IBM, var_kind)):0, eloc, level);
Inter::Node::attach_comment(P, ID);
inter_error_message *E = Inter::Defn::verify_construct(Inter::Bookmarks::package(IBM), P); if (E) return E;

View file

@ -49,10 +49,10 @@ void Inter::Ref::read(inter_construct *IC, inter_bookmark *IBM, inter_line_parse
*E = Inter::Types::read(ilp->line, eloc, Inter::Bookmarks::tree(IBM), Inter::Bookmarks::package(IBM), ref_kind, ilp->mr.exp[1], &var_val1, &var_val2, locals);
if (*E) return;
*E = Inter::Ref::new(IBM, routine, ref_kind, ilp->indent_level, var_val1, var_val2, eloc);
*E = Inter::Ref::new(IBM, ref_kind, ilp->indent_level, var_val1, var_val2, eloc);
}
inter_error_message *Inter::Ref::new(inter_bookmark *IBM, inter_symbol *routine, inter_symbol *ref_kind, int level, inter_t val1, inter_t val2, inter_error_location *eloc) {
inter_error_message *Inter::Ref::new(inter_bookmark *IBM, inter_symbol *ref_kind, int level, inter_t val1, inter_t val2, inter_error_location *eloc) {
inter_tree_node *P = Inter::Node::fill_4(IBM, REF_IST, 0, Inter::SymbolsTables::id_from_IRS_and_symbol(IBM, ref_kind), val1, val2, eloc, (inter_t) level);
inter_error_message *E = Inter::Defn::verify_construct(Inter::Bookmarks::package(IBM), P); if (E) return E;
Inter::Bookmarks::insert(IBM, P);

View file

@ -37,10 +37,10 @@ void Inter::Reference::read(inter_construct *IC, inter_bookmark *IBM, inter_line
inter_symbol *routine = Inter::Defn::get_latest_block_symbol();
if (routine == NULL) { *E = Inter::Errors::plain(I"'reference' used outside function", eloc); return; }
*E = Inter::Reference::new(IBM, routine, ilp->indent_level, eloc);
*E = Inter::Reference::new(IBM, ilp->indent_level, eloc);
}
inter_error_message *Inter::Reference::new(inter_bookmark *IBM, inter_symbol *routine, int level, inter_error_location *eloc) {
inter_error_message *Inter::Reference::new(inter_bookmark *IBM, int level, inter_error_location *eloc) {
inter_tree_node *P = Inter::Node::fill_1(IBM, REFERENCE_IST, 0, eloc, (inter_t) level);
inter_error_message *E = Inter::Defn::verify_construct(Inter::Bookmarks::package(IBM), P); if (E) return E;
Inter::Bookmarks::insert(IBM, P);

View file

@ -56,10 +56,10 @@ void Inter::Val::read(inter_construct *IC, inter_bookmark *IBM, inter_line_parse
if (*E) return;
}
*E = Inter::Val::new(IBM, routine, val_kind, ilp->indent_level, val1, val2, eloc);
*E = Inter::Val::new(IBM, val_kind, ilp->indent_level, val1, val2, eloc);
}
inter_error_message *Inter::Val::new(inter_bookmark *IBM, inter_symbol *routine, inter_symbol *val_kind, int level, inter_t val1, inter_t val2, inter_error_location *eloc) {
inter_error_message *Inter::Val::new(inter_bookmark *IBM, inter_symbol *val_kind, int level, inter_t val1, inter_t val2, inter_error_location *eloc) {
inter_tree_node *P = Inter::Node::fill_4(IBM, VAL_IST, 0, Inter::SymbolsTables::id_from_IRS_and_symbol(IBM, val_kind), val1, val2, eloc, (inter_t) level);
inter_error_message *E = Inter::Defn::verify_construct(Inter::Bookmarks::package(IBM), P); if (E) return E;
Inter::Bookmarks::insert(IBM, P);