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

Decluttered inter pipeline mini-language

This commit is contained in:
Graham Nelson 2019-07-20 23:29:50 +01:00
parent ab54c350d3
commit 5c27d8894c
46 changed files with 422 additions and 306 deletions

View file

@ -42,7 +42,7 @@ have no meaningful contents when the step is not running.
<span class="identifier">step</span><span class="plain">-</span><span class="element">&gt;step_stage</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">step</span><span class="plain">-</span><span class="element">&gt;step_argument</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">step</span><span class="plain">-</span><span class="element">&gt;package_argument</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">step</span><span class="plain">-</span><span class="element">&gt;repository_argument</span><span class="plain"> = -1;</span>
<span class="identifier">step</span><span class="plain">-</span><span class="element">&gt;repository_argument</span><span class="plain"> = 0;</span>
<span class="functiontext">CodeGen::Pipeline::clean_step</span><span class="plain">(</span><span class="identifier">step</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">step</span><span class="plain">;</span>
<span class="plain">}</span>
@ -83,11 +83,10 @@ logging:
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::Pipeline::write_step</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">pipeline_step</span><span class="plain"> *</span><span class="identifier">step</span><span class="plain">) {</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%S"</span><span class="plain">, </span><span class="identifier">step</span><span class="plain">-</span><span class="element">&gt;step_stage</span><span class="plain">-</span><span class="element">&gt;stage_name</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">step</span><span class="plain">-</span><span class="element">&gt;step_stage</span><span class="plain">-</span><span class="element">&gt;stage_arg</span><span class="plain"> != </span><span class="constant">NO_STAGE_ARG</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">step</span><span class="plain">-</span><span class="element">&gt;package_argument</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">step</span><span class="plain">-</span><span class="element">&gt;package_argument</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">":"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">step</span><span class="plain">-</span><span class="element">&gt;repository_argument</span><span class="plain"> &gt;= 0) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" %d &lt;-"</span><span class="plain">, </span><span class="identifier">step</span><span class="plain">-</span><span class="element">&gt;repository_argument</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">step</span><span class="plain">-</span><span class="element">&gt;target_argument</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" %S -&gt;"</span><span class="plain">, </span><span class="identifier">step</span><span class="plain">-</span><span class="element">&gt;target_argument</span><span class="plain">-</span><span class="element">&gt;target_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="identifier">step</span><span class="plain">-</span><span class="element">&gt;step_argument</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" %d"</span><span class="plain">, </span><span class="identifier">step</span><span class="plain">-</span><span class="element">&gt;repository_argument</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">step</span><span class="plain">-</span><span class="element">&gt;package_argument</span><span class="plain">) &gt; 0) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">":%S"</span><span class="plain">, </span><span class="identifier">step</span><span class="plain">-</span><span class="element">&gt;package_argument</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">step</span><span class="plain">-</span><span class="element">&gt;step_stage</span><span class="plain">-</span><span class="element">&gt;takes_repository</span><span class="plain"> &gt;= 0) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" &lt;- %S"</span><span class="plain">, </span><span class="identifier">step</span><span class="plain">-</span><span class="element">&gt;step_argument</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">step</span><span class="plain">-</span><span class="element">&gt;target_argument</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" %S -&gt; %S"</span><span class="plain">, </span><span class="identifier">step</span><span class="plain">-</span><span class="element">&gt;target_argument</span><span class="plain">-</span><span class="element">&gt;target_name</span><span class="plain">, </span><span class="identifier">step</span><span class="plain">-</span><span class="element">&gt;step_argument</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">}</span>
@ -96,11 +95,12 @@ logging:
<span class="functiontext">CodeGen::Targets::make_targets</span><span class="plain">();</span>
<span class="reserved">pipeline_step</span><span class="plain"> *</span><span class="identifier">ST</span><span class="plain"> = </span><span class="functiontext">CodeGen::Pipeline::new_step</span><span class="plain">();</span>
<span class="identifier">match_results</span><span class="plain"> </span><span class="identifier">mr</span><span class="plain"> = </span><span class="identifier">Regexp::create_mr</span><span class="plain">();</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Regexp::match</span><span class="plain">(&amp;</span><span class="identifier">mr</span><span class="plain">, </span><span class="identifier">step</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"(%c+?) *: *(%d) *&lt;- *(%c*)"</span><span class="plain">)) {</span>
<span class="identifier">ST</span><span class="plain">-</span><span class="element">&gt;repository_argument</span><span class="plain"> = </span><span class="identifier">Str::atoi</span><span class="plain">(</span><span class="identifier">mr</span><span class="plain">.</span><span class="identifier">exp</span><span class="plain">[1], 0);</span>
<span class="identifier">ST</span><span class="plain">-</span><span class="element">&gt;step_argument</span><span class="plain"> = </span><span class="functiontext">CodeGen::Pipeline::read_parameter</span><span class="plain">(</span><span class="identifier">mr</span><span class="plain">.</span><span class="identifier">exp</span><span class="plain">[2], </span><span class="identifier">D</span><span class="plain">);</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">left_arrow_used</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Regexp::match</span><span class="plain">(&amp;</span><span class="identifier">mr</span><span class="plain">, </span><span class="identifier">step</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"(%c+?) *&lt;- *(%c*)"</span><span class="plain">)) {</span>
<span class="identifier">ST</span><span class="plain">-</span><span class="element">&gt;step_argument</span><span class="plain"> = </span><span class="functiontext">CodeGen::Pipeline::read_parameter</span><span class="plain">(</span><span class="identifier">mr</span><span class="plain">.</span><span class="identifier">exp</span><span class="plain">[1], </span><span class="identifier">D</span><span class="plain">);</span>
<span class="identifier">Str::copy</span><span class="plain">(</span><span class="identifier">step</span><span class="plain">, </span><span class="identifier">mr</span><span class="plain">.</span><span class="identifier">exp</span><span class="plain">[0]);</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Regexp::match</span><span class="plain">(&amp;</span><span class="identifier">mr</span><span class="plain">, </span><span class="identifier">step</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"(%c+?) *: *(%C*) *-&gt; *(%c*)"</span><span class="plain">)) {</span>
<span class="identifier">left_arrow_used</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Regexp::match</span><span class="plain">(&amp;</span><span class="identifier">mr</span><span class="plain">, </span><span class="identifier">step</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"(%c+?) *(%C*) *-&gt; *(%c*)"</span><span class="plain">)) {</span>
<span class="reserved">code_generation_target</span><span class="plain"> *</span><span class="identifier">cgt</span><span class="plain">;</span>
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">cgt</span><span class="plain">, </span><span class="reserved">code_generation_target</span><span class="plain">)</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">mr</span><span class="plain">.</span><span class="identifier">exp</span><span class="plain">[1], </span><span class="identifier">cgt</span><span class="plain">-</span><span class="element">&gt;target_name</span><span class="plain">))</span>
@ -111,11 +111,15 @@ logging:
<span class="plain">}</span>
<span class="identifier">ST</span><span class="plain">-</span><span class="element">&gt;step_argument</span><span class="plain"> = </span><span class="functiontext">CodeGen::Pipeline::read_parameter</span><span class="plain">(</span><span class="identifier">mr</span><span class="plain">.</span><span class="identifier">exp</span><span class="plain">[2], </span><span class="identifier">D</span><span class="plain">);</span>
<span class="identifier">Str::copy</span><span class="plain">(</span><span class="identifier">step</span><span class="plain">, </span><span class="identifier">mr</span><span class="plain">.</span><span class="identifier">exp</span><span class="plain">[0]);</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Regexp::match</span><span class="plain">(&amp;</span><span class="identifier">mr</span><span class="plain">, </span><span class="identifier">step</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"(%c+?) *: *(%c*)"</span><span class="plain">)) {</span>
<span class="identifier">ST</span><span class="plain">-</span><span class="element">&gt;step_argument</span><span class="plain"> = </span><span class="functiontext">CodeGen::Pipeline::read_parameter</span><span class="plain">(</span><span class="identifier">mr</span><span class="plain">.</span><span class="identifier">exp</span><span class="plain">[1], </span><span class="identifier">D</span><span class="plain">);</span>
<span class="identifier">Str::copy</span><span class="plain">(</span><span class="identifier">step</span><span class="plain">, </span><span class="identifier">mr</span><span class="plain">.</span><span class="identifier">exp</span><span class="plain">[0]);</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Regexp::match</span><span class="plain">(&amp;</span><span class="identifier">mr</span><span class="plain">, </span><span class="identifier">step</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"(%C+?) (%c+)"</span><span class="plain">)) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Regexp::match</span><span class="plain">(&amp;</span><span class="identifier">mr</span><span class="plain">, </span><span class="identifier">step</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"(%C+?) (%d)"</span><span class="plain">)) {</span>
<span class="identifier">ST</span><span class="plain">-</span><span class="element">&gt;repository_argument</span><span class="plain"> = </span><span class="identifier">Str::atoi</span><span class="plain">(</span><span class="identifier">mr</span><span class="plain">.</span><span class="identifier">exp</span><span class="plain">[1], 0);</span>
<span class="identifier">Str::copy</span><span class="plain">(</span><span class="identifier">step</span><span class="plain">, </span><span class="identifier">mr</span><span class="plain">.</span><span class="identifier">exp</span><span class="plain">[0]);</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Regexp::match</span><span class="plain">(&amp;</span><span class="identifier">mr</span><span class="plain">, </span><span class="identifier">step</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"(%C+?) (%d):(%c*)"</span><span class="plain">)) {</span>
<span class="identifier">ST</span><span class="plain">-</span><span class="element">&gt;repository_argument</span><span class="plain"> = </span><span class="identifier">Str::atoi</span><span class="plain">(</span><span class="identifier">mr</span><span class="plain">.</span><span class="identifier">exp</span><span class="plain">[1], 0);</span>
<span class="identifier">ST</span><span class="plain">-</span><span class="element">&gt;package_argument</span><span class="plain"> = </span><span class="functiontext">CodeGen::Pipeline::read_parameter</span><span class="plain">(</span><span class="identifier">mr</span><span class="plain">.</span><span class="identifier">exp</span><span class="plain">[2], </span><span class="identifier">D</span><span class="plain">);</span>
<span class="identifier">Str::copy</span><span class="plain">(</span><span class="identifier">step</span><span class="plain">, </span><span class="identifier">mr</span><span class="plain">.</span><span class="identifier">exp</span><span class="plain">[0]);</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Regexp::match</span><span class="plain">(&amp;</span><span class="identifier">mr</span><span class="plain">, </span><span class="identifier">step</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"(%C+?) (%c+)"</span><span class="plain">)) {</span>
<span class="identifier">ST</span><span class="plain">-</span><span class="element">&gt;package_argument</span><span class="plain"> = </span><span class="functiontext">CodeGen::Pipeline::read_parameter</span><span class="plain">(</span><span class="identifier">mr</span><span class="plain">.</span><span class="identifier">exp</span><span class="plain">[1], </span><span class="identifier">D</span><span class="plain">);</span>
<span class="identifier">Str::copy</span><span class="plain">(</span><span class="identifier">step</span><span class="plain">, </span><span class="identifier">mr</span><span class="plain">.</span><span class="identifier">exp</span><span class="plain">[0]);</span>
<span class="plain">}</span>
@ -128,6 +132,14 @@ logging:
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">STDERR</span><span class="plain">, </span><span class="string">"No such step as '%S'\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">step</span><span class="plain">);</span>
<span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"no such step code"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ST</span><span class="plain">-</span><span class="element">&gt;step_stage</span><span class="plain">-</span><span class="element">&gt;takes_repository</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">left_arrow_used</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">"should use a left arrow"</span><span class="plain">);</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">left_arrow_used</span><span class="plain">)</span>
<span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"should not use a left arrow"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="identifier">Regexp::dispose_of</span><span class="plain">(&amp;</span><span class="identifier">mr</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">ST</span><span class="plain">;</span>
<span class="plain">}</span>
@ -227,19 +239,21 @@ logging:
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::Pipeline::run</span><span class="plain">(</span><span class="identifier">pathname</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain">, </span><span class="reserved">codegen_pipeline</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">N</span><span class="plain">, </span><span class="identifier">pathname</span><span class="plain"> **</span><span class="identifier">PP</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">S</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="reserved">return</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">S</span><span class="plain">-</span><span class="element">&gt;repositories</span><span class="plain">[0] == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">S</span><span class="plain">-</span><span class="element">&gt;repositories</span><span class="plain">[0] = </span><span class="identifier">Inter::create</span><span class="plain">(1, 32);</span>
<span class="identifier">clock_t</span><span class="plain"> </span><span class="identifier">start</span><span class="plain"> = </span><span class="identifier">clock</span><span class="plain">();</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">step_count</span><span class="plain"> = 0, </span><span class="identifier">step_total</span><span class="plain"> = 0;</span>
<span class="reserved">pipeline_step</span><span class="plain"> *</span><span class="identifier">step</span><span class="plain">;</span>
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">step</span><span class="plain">, </span><span class="reserved">pipeline_step</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">-</span><span class="element">&gt;steps</span><span class="plain">) </span><span class="identifier">step_total</span><span class="plain">++;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">active</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">, </span><span class="identifier">current_repo</span><span class="plain"> = 0;</span>
<span class="functiontext">CodeGen::Pipeline::prepare_to_run</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">-</span><span class="element">&gt;repositories</span><span class="plain">[</span><span class="identifier">current_repo</span><span class="plain">]);</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">active</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">step</span><span class="plain">, </span><span class="reserved">pipeline_step</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">-</span><span class="element">&gt;steps</span><span class="plain">)</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">active</span><span class="plain">) {</span>
<span class="identifier">inter_repository</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain"> = </span><span class="identifier">S</span><span class="plain">-</span><span class="element">&gt;repositories</span><span class="plain">[</span><span class="identifier">current_repo</span><span class="plain">];</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">S</span><span class="plain">-</span><span class="element">&gt;repositories</span><span class="plain">[</span><span class="identifier">step</span><span class="plain">-</span><span class="element">&gt;repository_argument</span><span class="plain">] == </span><span class="identifier">NULL</span><span class="plain">)</span>
<span class="identifier">S</span><span class="plain">-</span><span class="element">&gt;repositories</span><span class="plain">[</span><span class="identifier">step</span><span class="plain">-</span><span class="element">&gt;repository_argument</span><span class="plain">] = </span><span class="identifier">Inter::create</span><span class="plain">(1, 32);</span>
<span class="identifier">inter_repository</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="element">&gt;repositories</span><span class="plain">[</span><span class="identifier">step</span><span class="plain">-</span><span class="element">&gt;repository_argument</span><span class="plain">];</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">I</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"no repository"</span><span class="plain">);</span>
<span class="functiontext">CodeGen::Pipeline::lint</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">);</span>
<span class="functiontext">CodeGen::Pipeline::prepare_to_run</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">);</span>
<span class="functiontext">CodeGen::Pipeline::clean_step</span><span class="plain">(</span><span class="identifier">step</span><span class="plain">);</span>
<span class="identifier">step</span><span class="plain">-</span><span class="element">&gt;the_N</span><span class="plain"> = </span><span class="identifier">N</span><span class="plain">;</span>
@ -253,6 +267,8 @@ logging:
<span class="identifier">Log::new_stage</span><span class="plain">(</span><span class="identifier">STAGE_NAME</span><span class="plain">);</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">STAGE_NAME</span><span class="plain">);</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">skip_step</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">step</span><span class="plain">-</span><span class="element">&gt;step_stage</span><span class="plain">-</span><span class="element">&gt;stage_arg</span><span class="plain"> == </span><span class="constant">FILE_STAGE_ARG</span><span class="plain">) ||</span>
<span class="plain">(</span><span class="identifier">step</span><span class="plain">-</span><span class="element">&gt;step_stage</span><span class="plain">-</span><span class="element">&gt;stage_arg</span><span class="plain"> == </span><span class="constant">TEXT_OUT_STAGE_ARG</span><span class="plain">) ||</span>
<span class="plain">(</span><span class="identifier">step</span><span class="plain">-</span><span class="element">&gt;step_stage</span><span class="plain">-</span><span class="element">&gt;stage_arg</span><span class="plain"> == </span><span class="constant">EXT_FILE_STAGE_ARG</span><span class="plain">) ||</span>
@ -260,9 +276,9 @@ logging:
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">step</span><span class="plain">-</span><span class="element">&gt;step_argument</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"*log"</span><span class="plain">)) {</span>
<span class="identifier">step</span><span class="plain">-</span><span class="element">&gt;to_debugging_log</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">step</span><span class="plain">-</span><span class="element">&gt;step_argument</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"*memory"</span><span class="plain">)) {</span>
<span class="identifier">step</span><span class="plain">-</span><span class="element">&gt;from_memory</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="identifier">S</span><span class="plain">-</span><span class="element">&gt;repositories</span><span class="plain">[</span><span class="identifier">step</span><span class="plain">-</span><span class="element">&gt;repository_argument</span><span class="plain">] = </span><span class="identifier">S</span><span class="plain">-</span><span class="element">&gt;memory_repository</span><span class="plain">;</span>
<span class="identifier">skip_step</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="identifier">step</span><span class="plain">-</span><span class="element">&gt;parsed_filename</span><span class="plain"> = </span><span class="identifier">Filenames::from_text</span><span class="plain">(</span><span class="identifier">step</span><span class="plain">-</span><span class="element">&gt;step_argument</span><span class="plain">);</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">slashes</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="identifier">LOOP_THROUGH_TEXT</span><span class="plain">(</span><span class="identifier">pos</span><span class="plain">, </span><span class="identifier">step</span><span class="plain">-</span><span class="element">&gt;step_argument</span><span class="plain">)</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::get</span><span class="plain">(</span><span class="identifier">pos</span><span class="plain">) == </span><span class="character">'/'</span><span class="plain">)</span>
@ -291,9 +307,7 @@ logging:
<span class="identifier">step</span><span class="plain">-</span><span class="element">&gt;text_out_file</span><span class="plain"> = </span><span class="identifier">T</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">step</span><span class="plain">-</span><span class="element">&gt;from_memory</span><span class="plain">) &amp;&amp; (</span><span class="identifier">step</span><span class="plain">-</span><span class="element">&gt;repository_argument</span><span class="plain"> &gt;= 0))</span>
<span class="identifier">S</span><span class="plain">-</span><span class="element">&gt;repositories</span><span class="plain">[</span><span class="identifier">step</span><span class="plain">-</span><span class="element">&gt;repository_argument</span><span class="plain">] = </span><span class="identifier">S</span><span class="plain">-</span><span class="element">&gt;memory_repository</span><span class="plain">;</span>
<span class="reserved">else</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">skip_step</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">)</span>
<span class="identifier">active</span><span class="plain"> = (*(</span><span class="identifier">step</span><span class="plain">-</span><span class="element">&gt;step_stage</span><span class="plain">-</span><span class="element">&gt;execute</span><span class="plain">))(</span><span class="identifier">step</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (((</span><span class="identifier">step</span><span class="plain">-</span><span class="element">&gt;step_stage</span><span class="plain">-</span><span class="element">&gt;stage_arg</span><span class="plain"> == </span><span class="constant">TEXT_OUT_STAGE_ARG</span><span class="plain">) ||</span>
@ -301,11 +315,6 @@ logging:
<span class="plain">(</span><span class="identifier">step</span><span class="plain">-</span><span class="element">&gt;to_debugging_log</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">)) {</span>
<span class="identifier">STREAM_CLOSE</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">step</span><span class="plain">-</span><span class="element">&gt;repository_argument</span><span class="plain"> &gt;= 0) {</span>
<span class="identifier">current_repo</span><span class="plain"> = </span><span class="identifier">step</span><span class="plain">-</span><span class="element">&gt;repository_argument</span><span class="plain">;</span>
<span class="functiontext">CodeGen::Pipeline::prepare_to_run</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">-</span><span class="element">&gt;repositories</span><span class="plain">[</span><span class="identifier">current_repo</span><span class="plain">]);</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="plain">}</span>
</pre>
@ -419,7 +428,7 @@ logging:
<span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"zap"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="functiontext">CodeGen::Link::guard</span><span class="plain">(</span><span class="identifier">Inter::Defn::verify_children_inner</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">));</span>
<span class="functiontext">CodeGen::MergeTemplate::guard</span><span class="plain">(</span><span class="identifier">Inter::Defn::verify_children_inner</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">));</span>
<span class="plain">}</span>
</pre>

View file

@ -21,6 +21,7 @@ write output to; others are not.
<pre class="definitions">
<span class="definitionkeyword">enum</span> <span class="constant">NO_STAGE_ARG</span><span class="definitionkeyword"> from </span><span class="constant">1</span>
<span class="definitionkeyword">enum</span> <span class="constant">GENERAL_STAGE_ARG</span>
<span class="definitionkeyword">enum</span> <span class="constant">FILE_STAGE_ARG</span>
<span class="definitionkeyword">enum</span> <span class="constant">TEXT_OUT_STAGE_ARG</span>
<span class="definitionkeyword">enum</span> <span class="constant">EXT_FILE_STAGE_ARG</span>
@ -33,14 +34,16 @@ write output to; others are not.
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">stage_name</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> (*</span><span class="identifier">execute</span><span class="plain">)(</span><span class="reserved">void</span><span class="plain"> *);</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">stage_arg</span><span class="plain">; </span> <span class="comment">one of the <code class="display"><span class="extract">*_ARG</span></code> values above</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">takes_repository</span><span class="plain">;</span>
<span class="identifier">MEMORY_MANAGEMENT</span>
<span class="plain">} </span><span class="reserved">pipeline_stage</span><span class="plain">;</span>
<span class="reserved">pipeline_stage</span><span class="plain"> *</span><span class="functiontext">CodeGen::Stage::new</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">X</span><span class="plain">)(</span><span class="reserved">struct</span><span class="plain"> </span><span class="reserved">pipeline_step</span><span class="plain"> *), </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">arg</span><span class="plain">) {</span>
<span class="reserved">pipeline_stage</span><span class="plain"> *</span><span class="functiontext">CodeGen::Stage::new</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">X</span><span class="plain">)(</span><span class="reserved">struct</span><span class="plain"> </span><span class="reserved">pipeline_step</span><span class="plain"> *), </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">arg</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">tr</span><span class="plain">) {</span>
<span class="reserved">pipeline_stage</span><span class="plain"> *</span><span class="identifier">stage</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">pipeline_stage</span><span class="plain">);</span>
<span class="identifier">stage</span><span class="plain">-</span><span class="element">&gt;stage_name</span><span class="plain"> = </span><span class="identifier">Str::duplicate</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">);</span>
<span class="identifier">stage</span><span class="plain">-</span><span class="element">&gt;execute</span><span class="plain"> = (</span><span class="reserved">int</span><span class="plain"> (*)(</span><span class="reserved">void</span><span class="plain"> *)) </span><span class="identifier">X</span><span class="plain">;</span>
<span class="identifier">stage</span><span class="plain">-</span><span class="element">&gt;stage_arg</span><span class="plain"> = </span><span class="identifier">arg</span><span class="plain">;</span>
<span class="identifier">stage</span><span class="plain">-</span><span class="element">&gt;takes_repository</span><span class="plain"> = </span><span class="identifier">tr</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">stage</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
@ -62,15 +65,17 @@ to the routine below.
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::Stage::make_stages</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">stages_made</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">) {</span>
<span class="identifier">stages_made</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="functiontext">CodeGen::Stage::new</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"stop"</span><span class="plain">, </span><span class="functiontext">CodeGen::Stage::run_stop_stage</span><span class="plain">, </span><span class="constant">NO_STAGE_ARG</span><span class="plain">);</span>
<span class="functiontext">CodeGen::Stage::new</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"read"</span><span class="plain">, </span><span class="functiontext">CodeGen::Stage::run_read_stage</span><span class="plain">, </span><span class="constant">FILE_STAGE_ARG</span><span class="plain">);</span>
<span class="functiontext">CodeGen::Stage::new</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"stop"</span><span class="plain">, </span><span class="functiontext">CodeGen::Stage::run_stop_stage</span><span class="plain">, </span><span class="constant">NO_STAGE_ARG</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
<span class="functiontext">CodeGen::Stage::new</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"read"</span><span class="plain">, </span><span class="functiontext">CodeGen::Stage::run_read_stage</span><span class="plain">, </span><span class="constant">FILE_STAGE_ARG</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">);</span>
<span class="functiontext">CodeGen::Stage::new</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"extract"</span><span class="plain">, </span><span class="functiontext">CodeGen::Stage::run_extract_stage</span><span class="plain">, </span><span class="constant">GENERAL_STAGE_ARG</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">);</span>
<span class="functiontext">CodeGen::create_pipeline_stage</span><span class="plain">();</span>
<span class="functiontext">CodeGen::Assimilate::create_pipeline_stage</span><span class="plain">();</span>
<span class="functiontext">CodeGen::Eliminate::create_pipeline_stage</span><span class="plain">();</span>
<span class="functiontext">CodeGen::Externals::create_pipeline_stage</span><span class="plain">();</span>
<span class="functiontext">CodeGen::Labels::create_pipeline_stage</span><span class="plain">();</span>
<span class="functiontext">CodeGen::Link::create_pipeline_stage</span><span class="plain">();</span>
<span class="functiontext">CodeGen::MergeTemplate::create_pipeline_stage</span><span class="plain">();</span>
<span class="functiontext">CodeGen::PLM::create_pipeline_stage</span><span class="plain">();</span>
<span class="functiontext">CodeGen::RCC::create_pipeline_stage</span><span class="plain">();</span>
<span class="functiontext">CodeGen::ReconcileVerbs::create_pipeline_stage</span><span class="plain">();</span>
@ -94,11 +99,14 @@ the pipeline:
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">CodeGen::Stage::run_read_stage</span><span class="plain">(</span><span class="reserved">pipeline_step</span><span class="plain"> *</span><span class="identifier">step</span><span class="plain">) {</span>
<span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">F</span><span class="plain"> = </span><span class="identifier">Filenames::from_text</span><span class="plain">(</span><span class="identifier">step</span><span class="plain">-</span><span class="element">&gt;step_argument</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Inter::Binary::test_file</span><span class="plain">(</span><span class="identifier">F</span><span class="plain">))</span>
<span class="identifier">Inter::Binary::read</span><span class="plain">(</span><span class="identifier">step</span><span class="plain">-</span><span class="element">&gt;repository</span><span class="plain">, </span><span class="identifier">F</span><span class="plain">);</span>
<span class="reserved">else</span>
<span class="identifier">Inter::Textual::read</span><span class="plain">(</span><span class="identifier">step</span><span class="plain">-</span><span class="element">&gt;repository</span><span class="plain">, </span><span class="identifier">F</span><span class="plain">);</span>
<span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">F</span><span class="plain"> = </span><span class="identifier">step</span><span class="plain">-</span><span class="element">&gt;parsed_filename</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Inter::Binary::test_file</span><span class="plain">(</span><span class="identifier">F</span><span class="plain">)) </span><span class="identifier">Inter::Binary::read</span><span class="plain">(</span><span class="identifier">step</span><span class="plain">-</span><span class="element">&gt;repository</span><span class="plain">, </span><span class="identifier">F</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">Inter::Textual::read</span><span class="plain">(</span><span class="identifier">step</span><span class="plain">-</span><span class="element">&gt;repository</span><span class="plain">, </span><span class="identifier">F</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">CodeGen::Stage::run_extract_stage</span><span class="plain">(</span><span class="reserved">pipeline_step</span><span class="plain"> *</span><span class="identifier">step</span><span class="plain">) {</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"Arg is %S.\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">step</span><span class="plain">-</span><span class="element">&gt;step_argument</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
@ -109,6 +117,8 @@ the pipeline:
<p class="endnote">The function CodeGen::Stage::run_read_stage is used in <a href="#SP2">&#167;2</a>.</p>
<p class="endnote">The function CodeGen::Stage::run_extract_stage is used in <a href="#SP2">&#167;2</a>.</p>
<hr class="tocbar">
<ul class="toc"><li><a href="1-cm.html">Back to 'Codegen Module'</a></li><li><a href="1-ppl.html">Continue with 'Pipelines'</a></li></ul><hr class="tocbar">
<!--End of weave-->

View file

@ -18,7 +18,7 @@
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::Assimilate::create_pipeline_stage</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="functiontext">CodeGen::Stage::new</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"assimilate"</span><span class="plain">, </span><span class="functiontext">CodeGen::Assimilate::run_pipeline_stage</span><span class="plain">, </span><span class="constant">NO_STAGE_ARG</span><span class="plain">);</span>
<span class="functiontext">CodeGen::Stage::new</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"assimilate"</span><span class="plain">, </span><span class="functiontext">CodeGen::Assimilate::run_pipeline_stage</span><span class="plain">, </span><span class="constant">NO_STAGE_ARG</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">no_assimilated_actions</span><span class="plain"> = 0;</span>
@ -32,7 +32,7 @@
<span class="identifier">no_assimilated_actions</span><span class="plain"> = 0;</span>
<span class="identifier">no_assimilated_commands</span><span class="plain"> = 0;</span>
<span class="identifier">no_assimilated_arrays</span><span class="plain"> = 0;</span>
<span class="functiontext">CodeGen::Link::ensure_search_list</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">);</span>
<span class="functiontext">CodeGen::MergeTemplate::ensure_search_list</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">);</span>
<span class="identifier">Inter::traverse_tree</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="functiontext">CodeGen::Assimilate::visitor1</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">SPLAT_IST</span><span class="plain">);</span>
<span class="identifier">Inter::traverse_tree</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="functiontext">CodeGen::Assimilate::visitor2</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">SPLAT_IST</span><span class="plain">);</span>
<span class="functiontext">CodeGen::Assimilate::function_bodies</span><span class="plain">();</span>
@ -138,7 +138,7 @@
&lt;<span class="cwebmacro">Parse text of splat for identifier and value</span> <span class="cwebmacronumber">2.1.1</span>&gt;<span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">proceed</span><span class="plain">) &amp;&amp; (</span><span class="identifier">unchecked_kind_symbol</span><span class="plain">)) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">plm</span><span class="plain"> == </span><span class="identifier">DEFAULT_PLM</span><span class="plain">) {</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">symbol</span><span class="plain"> = </span><span class="functiontext">CodeGen::Link::find_name</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">TRUE</span><span class="plain">);</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">symbol</span><span class="plain"> = </span><span class="functiontext">CodeGen::MergeTemplate::find_name</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">TRUE</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">plm</span><span class="plain"> = </span><span class="identifier">CONSTANT_PLM</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">plm</span><span class="plain"> != </span><span class="identifier">DEFAULT_PLM</span><span class="plain">) </span>&lt;<span class="cwebmacro">Act on parsed constant definition</span> <span class="cwebmacronumber">2.1.2</span>&gt;<span class="plain">;</span>
@ -255,7 +255,7 @@
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">FAKEACTION_PLM</span><span class="plain">:</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">OBJECT_PLM</span><span class="plain">: {</span>
&lt;<span class="cwebmacro">Assimilate a value</span> <span class="cwebmacronumber">2.1.2.2</span>&gt;<span class="plain">;</span>
<span class="functiontext">CodeGen::Link::guard</span><span class="plain">(</span><span class="identifier">Inter::Constant::new_numerical</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">,</span>
<span class="functiontext">CodeGen::MergeTemplate::guard</span><span class="plain">(</span><span class="identifier">Inter::Constant::new_numerical</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">Inter::Bookmarks::package</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="identifier">Inter::SymbolsTables::id_from_symbol</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::Bookmarks::package</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">), </span><span class="identifier">unchecked_kind_symbol</span><span class="plain">), </span><span class="identifier">v1</span><span class="plain">, </span><span class="identifier">v2</span><span class="plain">,</span>
<span class="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>
@ -264,7 +264,7 @@
<span class="plain">}</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">GLOBAL_PLM</span><span class="plain">:</span>
&lt;<span class="cwebmacro">Assimilate a value</span> <span class="cwebmacronumber">2.1.2.2</span>&gt;<span class="plain">;</span>
<span class="functiontext">CodeGen::Link::guard</span><span class="plain">(</span><span class="identifier">Inter::Variable::new</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">,</span>
<span class="functiontext">CodeGen::MergeTemplate::guard</span><span class="plain">(</span><span class="identifier">Inter::Variable::new</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">Inter::Bookmarks::package</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="identifier">Inter::SymbolsTables::id_from_symbol</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::Bookmarks::package</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">), </span><span class="identifier">unchecked_kind_symbol</span><span class="plain">), </span><span class="identifier">v1</span><span class="plain">, </span><span class="identifier">v2</span><span class="plain">,</span>
<span class="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>
@ -277,7 +277,7 @@
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">attr_symbol</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) || (!</span><span class="identifier">Inter::Symbols::is_defined</span><span class="plain">(</span><span class="identifier">attr_symbol</span><span class="plain">))) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">attr_symbol</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">attr_symbol</span><span class="plain"> = </span><span class="identifier">con_name</span><span class="plain">;</span>
<span class="functiontext">CodeGen::Link::guard</span><span class="plain">(</span><span class="identifier">Inter::Property::new</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">,</span>
<span class="functiontext">CodeGen::MergeTemplate::guard</span><span class="plain">(</span><span class="identifier">Inter::Property::new</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">Inter::Bookmarks::package</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">), </span><span class="identifier">attr_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">Inter::Bookmarks::package</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">), </span><span class="identifier">truth_state_kind_symbol</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>
@ -303,7 +303,7 @@
<span class="reserved">break</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">PROPERTY_PLM</span><span class="plain">: {</span>
<span class="functiontext">CodeGen::Link::guard</span><span class="plain">(</span><span class="identifier">Inter::Property::new</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">,</span>
<span class="functiontext">CodeGen::MergeTemplate::guard</span><span class="plain">(</span><span class="identifier">Inter::Property::new</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">Inter::Bookmarks::package</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="identifier">Inter::SymbolsTables::id_from_symbol</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::Bookmarks::package</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">), </span><span class="identifier">unchecked_kind_symbol</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>
@ -382,7 +382,7 @@
<span class="identifier">array_in_progress</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">pos</span><span class="plain">++] = </span><span class="identifier">v1_pile</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">];</span>
<span class="identifier">array_in_progress</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">pos</span><span class="plain">++] = </span><span class="identifier">v2_pile</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">];</span>
<span class="plain">}</span>
<span class="functiontext">CodeGen::Link::guard</span><span class="plain">(</span><span class="identifier">Inter::Defn::verify_construct</span><span class="plain">(</span><span class="identifier">Inter::Bookmarks::package</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">), </span><span class="identifier">array_in_progress</span><span class="plain">));</span>
<span class="functiontext">CodeGen::MergeTemplate::guard</span><span class="plain">(</span><span class="identifier">Inter::Defn::verify_construct</span><span class="plain">(</span><span class="identifier">Inter::Bookmarks::package</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">), </span><span class="identifier">array_in_progress</span><span class="plain">));</span>
<span class="identifier">Inter::Frame::insert</span><span class="plain">(</span><span class="identifier">array_in_progress</span><span class="plain">, </span><span class="identifier">IBM</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">plm</span><span class="plain"> == </span><span class="identifier">ARRAY_PLM</span><span class="plain">) {</span>
@ -529,12 +529,12 @@
<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::Symbols::local</span><span class="plain">(</span><span class="identifier">loc_name</span><span class="plain">);</span>
<span class="functiontext">CodeGen::Link::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">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="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>
<span class="functiontext">CodeGen::Link::guard</span><span class="plain">(</span><span class="identifier">Inter::Code::new</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">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::Code::new</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">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="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">body</span><span class="plain">) &gt; 0) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">L</span><span class="plain"> = </span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">body</span><span class="plain">) - 1;</span>
<span class="reserved">while</span><span class="plain"> ((</span><span class="identifier">L</span><span class="plain">&gt;0) &amp;&amp; (</span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">body</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">) != </span><span class="character">']'</span><span class="plain">)) </span><span class="identifier">L</span><span class="plain">--;</span>
@ -547,7 +547,7 @@
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">rsymb</span><span class="plain"> = </span><span class="functiontext">CodeGen::Assimilate::maybe_extern</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">identifier</span><span class="plain">, </span><span class="identifier">Inter::Bookmarks::scope</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">));</span>
<span class="identifier">Inter::Symbols::annotate_i</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">rsymb</span><span class="plain">, </span><span class="identifier">ASSIMILATED_IANN</span><span class="plain">, 1);</span>
<span class="functiontext">CodeGen::Link::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="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>
@ -573,7 +573,7 @@
<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="identifier">P</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="functiontext">CodeGen::Link::guard</span><span class="plain">(</span><span class="identifier">Inter::Package::new_package</span><span class="plain">(</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</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="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>
@ -650,7 +650,7 @@
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::Assimilate::ensure_action</span><span class="plain">(</span><span class="identifier">inter_repository</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">inter_frame</span><span class="plain"> </span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">value</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">CodeGen::Link::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="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>
@ -665,16 +665,16 @@
<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>
<span class="identifier">Str::delete_first_character</span><span class="plain">(</span><span class="identifier">unsharped</span><span class="plain">);</span>
<span class="identifier">Str::delete_first_character</span><span class="plain">(</span><span class="identifier">unsharped</span><span class="plain">);</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">txsymb</span><span class="plain"> = </span><span class="functiontext">CodeGen::Link::find_name</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">unsharped</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">);</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">txsymb</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">unsharped</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">);</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">xsymb</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">unsharped</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">txsymb</span><span class="plain">) </span><span class="identifier">Inter::SymbolsTables::equate</span><span class="plain">(</span><span class="identifier">xsymb</span><span class="plain">, </span><span class="identifier">txsymb</span><span class="plain">);</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">unsharped</span><span class="plain">);</span>
<span class="functiontext">CodeGen::Link::guard</span><span class="plain">(</span><span class="identifier">Inter::Constant::new_numerical</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">,</span>
<span class="functiontext">CodeGen::MergeTemplate::guard</span><span class="plain">(</span><span class="identifier">Inter::Constant::new_numerical</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">Inter::Bookmarks::package</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">), </span><span class="identifier">asymb</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">Inter::Bookmarks::package</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">), </span><span class="identifier">action_kind_symbol</span><span class="plain">),</span>
<span class="identifier">LITERAL_IVAL</span><span class="plain">, 10000, (</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">Inter::Symbols::annotate_i</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">asymb</span><span class="plain">, </span><span class="identifier">ACTION_IANN</span><span class="plain">, 1);</span>
<span class="functiontext">CodeGen::Link::build_r</span><span class="plain">(</span><span class="identifier">Inter::Bookmarks::package</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">));</span>
<span class="functiontext">CodeGen::MergeTemplate::build_r</span><span class="plain">(</span><span class="identifier">Inter::Bookmarks::package</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">));</span>
<span class="plain">}</span>
<span class="plain">}</span>
</pre>
@ -778,7 +778,7 @@
<span class="plain">}</span>
<span class="identifier">match_results</span><span class="plain"> </span><span class="identifier">mr</span><span class="plain"> = </span><span class="identifier">Regexp::create_mr</span><span class="plain">();</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Regexp::match</span><span class="plain">(&amp;</span><span class="identifier">mr</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"scope=(%i+)"</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="functiontext">CodeGen::Link::find_name</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">mr</span><span class="plain">.</span><span class="identifier">exp</span><span class="plain">[0], </span><span class="identifier">TRUE</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="functiontext">CodeGen::MergeTemplate::find_name</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">mr</span><span class="plain">.</span><span class="identifier">exp</span><span class="plain">[0], </span><span class="identifier">TRUE</span><span class="plain">);</span>
<span class="reserved">while</span><span class="plain"> ((</span><span class="identifier">symb</span><span class="plain">) &amp;&amp; (</span><span class="identifier">symb</span><span class="plain">-&gt;</span><span class="identifier">equated_to</span><span class="plain">)) </span><span class="identifier">symb</span><span class="plain"> = </span><span class="identifier">symb</span><span class="plain">-&gt;</span><span class="identifier">equated_to</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">symb</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Inter::Symbols::read_annotation</span><span class="plain">(</span><span class="identifier">symb</span><span class="plain">, </span><span class="identifier">SCOPE_FILTER_IANN</span><span class="plain">) != 1)</span>
@ -787,7 +787,7 @@
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Regexp::match</span><span class="plain">(&amp;</span><span class="identifier">mr</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"noun=(%i+)"</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="functiontext">CodeGen::Link::find_name</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">mr</span><span class="plain">.</span><span class="identifier">exp</span><span class="plain">[0], </span><span class="identifier">TRUE</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="functiontext">CodeGen::MergeTemplate::find_name</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">mr</span><span class="plain">.</span><span class="identifier">exp</span><span class="plain">[0], </span><span class="identifier">TRUE</span><span class="plain">);</span>
<span class="reserved">while</span><span class="plain"> ((</span><span class="identifier">symb</span><span class="plain">) &amp;&amp; (</span><span class="identifier">symb</span><span class="plain">-&gt;</span><span class="identifier">equated_to</span><span class="plain">)) </span><span class="identifier">symb</span><span class="plain"> = </span><span class="identifier">symb</span><span class="plain">-&gt;</span><span class="identifier">equated_to</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">symb</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Inter::Symbols::read_annotation</span><span class="plain">(</span><span class="identifier">symb</span><span class="plain">, </span><span class="identifier">NOUN_FILTER_IANN</span><span class="plain">) != 1)</span>
@ -797,7 +797,7 @@
<span class="plain">}</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="functiontext">CodeGen::Link::find_name</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="identifier">TRUE</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="functiontext">CodeGen::MergeTemplate::find_name</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="identifier">TRUE</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">symb</span><span class="plain">) {</span>
<span class="identifier">Inter::Symbols::to_data</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">pack</span><span class="plain">, </span><span class="identifier">symb</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="reserved">return</span><span class="plain">;</span>
<span class="plain">}</span>
@ -822,7 +822,7 @@
<span class="identifier">Str::copy</span><span class="plain">(</span><span class="identifier">glob_storage</span><span class="plain">, </span><span class="identifier">sch</span><span class="plain">-</span><span class="element">&gt;converted_from</span><span class="plain">);</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">mcc_name</span><span class="plain"> = </span><span class="functiontext">CodeGen::Assimilate::computed_constant_symbol</span><span class="plain">(</span><span class="identifier">pack</span><span class="plain">);</span>
<span class="functiontext">CodeGen::Link::guard</span><span class="plain">(</span><span class="identifier">Inter::Constant::new_numerical</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">,</span>
<span class="functiontext">CodeGen::MergeTemplate::guard</span><span class="plain">(</span><span class="identifier">Inter::Constant::new_numerical</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">pack</span><span class="plain">, </span><span class="identifier">mcc_name</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">pack</span><span class="plain">, </span><span class="identifier">unchecked_kind_symbol</span><span class="plain">), </span><span class="identifier">GLOB_IVAL</span><span class="plain">, </span><span class="identifier">ID</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>
@ -865,7 +865,7 @@
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">v1</span><span class="plain"> = </span><span class="identifier">UNDEF_IVAL</span><span class="plain">, </span><span class="identifier">v2</span><span class="plain"> = 0;</span>
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">t</span><span class="plain">-</span><span class="element">&gt;ist_type</span><span class="plain">) {</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">IDENTIFIER_ISTT</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="functiontext">CodeGen::Link::find_name</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">t</span><span class="plain">-</span><span class="element">&gt;material</span><span class="plain">, </span><span class="identifier">TRUE</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="functiontext">CodeGen::MergeTemplate::find_name</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">t</span><span class="plain">-</span><span class="element">&gt;material</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">symb</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">symb</span><span class="plain">;</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"Failed to identify %S\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">t</span><span class="plain">-</span><span class="element">&gt;material</span><span class="plain">);</span>
<span class="reserved">break</span><span class="plain">;</span>
@ -880,7 +880,7 @@
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">v1</span><span class="plain"> == </span><span class="identifier">UNDEF_IVAL</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">inter_symbol</span><span class="plain"> *</span><span class="identifier">mcc_name</span><span class="plain"> = </span><span class="functiontext">CodeGen::Assimilate::computed_constant_symbol</span><span class="plain">(</span><span class="identifier">pack</span><span class="plain">);</span>
<span class="functiontext">CodeGen::Link::guard</span><span class="plain">(</span><span class="identifier">Inter::Constant::new_numerical</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">,</span>
<span class="functiontext">CodeGen::MergeTemplate::guard</span><span class="plain">(</span><span class="identifier">Inter::Constant::new_numerical</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">pack</span><span class="plain">, </span><span class="identifier">mcc_name</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">pack</span><span class="plain">, </span><span class="identifier">unchecked_kind_symbol</span><span class="plain">), </span><span class="identifier">v1</span><span class="plain">, </span><span class="identifier">v2</span><span class="plain">,</span>
<span class="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>
@ -898,7 +898,7 @@
<span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"can't extend frame"</span><span class="plain">);</span>
<span class="identifier">array_in_progress</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">pos</span><span class="plain">] = </span><span class="identifier">LITERAL_IVAL</span><span class="plain">; </span><span class="identifier">array_in_progress</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">pos</span><span class="plain">+1] = 0;</span>
<span class="identifier">Inter::Symbols::to_data</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">pack</span><span class="plain">, </span><span class="identifier">i1</span><span class="plain">, &amp;(</span><span class="identifier">array_in_progress</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">pos</span><span class="plain">+2]), &amp;(</span><span class="identifier">array_in_progress</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">pos</span><span class="plain">+3]));</span>
<span class="functiontext">CodeGen::Link::guard</span><span class="plain">(</span><span class="identifier">Inter::Defn::verify_construct</span><span class="plain">(</span><span class="identifier">Inter::Bookmarks::package</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">), </span><span class="identifier">array_in_progress</span><span class="plain">));</span>
<span class="functiontext">CodeGen::MergeTemplate::guard</span><span class="plain">(</span><span class="identifier">Inter::Defn::verify_construct</span><span class="plain">(</span><span class="identifier">Inter::Bookmarks::package</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">), </span><span class="identifier">array_in_progress</span><span class="plain">));</span>
<span class="identifier">Inter::Frame::insert</span><span class="plain">(</span><span class="identifier">array_in_progress</span><span class="plain">, </span><span class="identifier">IBM</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">mcc_name</span><span class="plain">;</span>
<span class="plain">}</span>
@ -912,7 +912,7 @@
<span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"can't extend frame"</span><span class="plain">);</span>
<span class="identifier">Inter::Symbols::to_data</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">pack</span><span class="plain">, </span><span class="identifier">i1</span><span class="plain">, &amp;(</span><span class="identifier">array_in_progress</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">pos</span><span class="plain">]), &amp;(</span><span class="identifier">array_in_progress</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">pos</span><span class="plain">+1]));</span>
<span class="identifier">Inter::Symbols::to_data</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">pack</span><span class="plain">, </span><span class="identifier">i2</span><span class="plain">, &amp;(</span><span class="identifier">array_in_progress</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">pos</span><span class="plain">+2]), &amp;(</span><span class="identifier">array_in_progress</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">pos</span><span class="plain">+3]));</span>
<span class="functiontext">CodeGen::Link::guard</span><span class="plain">(</span><span class="identifier">Inter::Defn::verify_construct</span><span class="plain">(</span><span class="identifier">Inter::Bookmarks::package</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">), </span><span class="identifier">array_in_progress</span><span class="plain">));</span>
<span class="functiontext">CodeGen::MergeTemplate::guard</span><span class="plain">(</span><span class="identifier">Inter::Defn::verify_construct</span><span class="plain">(</span><span class="identifier">Inter::Bookmarks::package</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">), </span><span class="identifier">array_in_progress</span><span class="plain">));</span>
<span class="identifier">Inter::Frame::insert</span><span class="plain">(</span><span class="identifier">array_in_progress</span><span class="plain">, </span><span class="identifier">IBM</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">mcc_name</span><span class="plain">;</span>
<span class="plain">}</span>
@ -952,7 +952,7 @@
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="plain">#</span><span class="identifier">endif</span>
<span class="plain">#</span><span class="identifier">ifndef</span><span class="plain"> </span><span class="identifier">CORE_MODULE</span>
<span class="functiontext">CodeGen::Link::entire_splat</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">body</span><span class="plain">, </span><span class="identifier">offset</span><span class="plain">, </span><span class="identifier">block_name</span><span class="plain">);</span>
<span class="functiontext">CodeGen::MergeTemplate::entire_splat</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">body</span><span class="plain">, </span><span class="identifier">offset</span><span class="plain">, </span><span class="identifier">block_name</span><span class="plain">);</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"Splat %d\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">rb_splat_count</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">endif</span>

View file

@ -26,7 +26,7 @@ on the Inter functions in a repository.
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::Labels::create_pipeline_stage</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="functiontext">CodeGen::Stage::new</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"eliminate-redundant-labels"</span><span class="plain">, </span><span class="functiontext">CodeGen::Labels::run_pipeline_stage</span><span class="plain">, </span><span class="constant">NO_STAGE_ARG</span><span class="plain">);</span>
<span class="functiontext">CodeGen::Stage::new</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"eliminate-redundant-labels"</span><span class="plain">, </span><span class="functiontext">CodeGen::Labels::run_pipeline_stage</span><span class="plain">, </span><span class="constant">NO_STAGE_ARG</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">CodeGen::Labels::run_pipeline_stage</span><span class="plain">(</span><span class="reserved">pipeline_step</span><span class="plain"> *</span><span class="identifier">step</span><span class="plain">) {</span>

View file

@ -25,7 +25,7 @@ isn't used.
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::Eliminate::create_pipeline_stage</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="functiontext">CodeGen::Stage::new</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"eliminate-redundant-code"</span><span class="plain">,</span>
<span class="functiontext">CodeGen::Eliminate::run_pipeline_stage</span><span class="plain">, </span><span class="constant">NO_STAGE_ARG</span><span class="plain">);</span>
<span class="functiontext">CodeGen::Eliminate::run_pipeline_stage</span><span class="plain">, </span><span class="constant">NO_STAGE_ARG</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">CodeGen::Eliminate::run_pipeline_stage</span><span class="plain">(</span><span class="reserved">pipeline_step</span><span class="plain"> *</span><span class="identifier">step</span><span class="plain">) {</span>

View file

@ -17,23 +17,23 @@
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::Link::create_pipeline_stage</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="functiontext">CodeGen::Stage::new</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"link"</span><span class="plain">, </span><span class="functiontext">CodeGen::Link::run_pipeline_stage</span><span class="plain">, </span><span class="constant">TEMPLATE_FILE_STAGE_ARG</span><span class="plain">);</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::MergeTemplate::create_pipeline_stage</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="functiontext">CodeGen::Stage::new</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"merge-template"</span><span class="plain">, </span><span class="functiontext">CodeGen::MergeTemplate::run_pipeline_stage</span><span class="plain">, </span><span class="constant">TEMPLATE_FILE_STAGE_ARG</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">CodeGen::Link::run_pipeline_stage</span><span class="plain">(</span><span class="reserved">pipeline_step</span><span class="plain"> *</span><span class="identifier">step</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">CodeGen::MergeTemplate::run_pipeline_stage</span><span class="plain">(</span><span class="reserved">pipeline_step</span><span class="plain"> *</span><span class="identifier">step</span><span class="plain">) {</span>
<span class="identifier">inter_package</span><span class="plain"> *</span><span class="identifier">main_package</span><span class="plain"> = </span><span class="identifier">Inter::Packages::main</span><span class="plain">(</span><span class="identifier">step</span><span class="plain">-</span><span class="element">&gt;repository</span><span class="plain">);</span>
<span class="identifier">inter_bookmark</span><span class="plain"> </span><span class="identifier">IBM</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">main_package</span><span class="plain">) </span><span class="identifier">IBM</span><span class="plain"> = </span><span class="identifier">Inter::Bookmarks::at_end_of_this_package</span><span class="plain">(</span><span class="identifier">main_package</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">IBM</span><span class="plain"> = </span><span class="identifier">Inter::Bookmarks::at_start_of_this_repository</span><span class="plain">(</span><span class="identifier">step</span><span class="plain">-</span><span class="element">&gt;repository</span><span class="plain">);</span>
<span class="functiontext">CodeGen::Link::link</span><span class="plain">(&amp;</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">step</span><span class="plain">-</span><span class="element">&gt;step_argument</span><span class="plain">, </span><span class="identifier">step</span><span class="plain">-</span><span class="element">&gt;the_N</span><span class="plain">, </span><span class="identifier">step</span><span class="plain">-</span><span class="element">&gt;the_PP</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="functiontext">CodeGen::MergeTemplate::link</span><span class="plain">(&amp;</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">step</span><span class="plain">-</span><span class="element">&gt;step_argument</span><span class="plain">, </span><span class="identifier">step</span><span class="plain">-</span><span class="element">&gt;the_N</span><span class="plain">, </span><span class="identifier">step</span><span class="plain">-</span><span class="element">&gt;the_PP</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">inter_symbols_table</span><span class="plain"> *</span><span class="identifier">link_search_list</span><span class="plain">[10];</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">link_search_list_len</span><span class="plain"> = 0;</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::Link::ensure_search_list</span><span class="plain">(</span><span class="identifier">inter_repository</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::MergeTemplate::ensure_search_list</span><span class="plain">(</span><span class="identifier">inter_repository</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">link_search_list_len</span><span class="plain"> == 0) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">template_package</span><span class="plain">) {</span>
<span class="identifier">link_search_list</span><span class="plain">[1] = </span><span class="identifier">Inter::Packages::scope</span><span class="plain">(</span><span class="identifier">Inter::Packages::main</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">));</span>
@ -46,29 +46,29 @@
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::Link::link</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">template_file</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">N</span><span class="plain">, </span><span class="identifier">pathname</span><span class="plain"> **</span><span class="identifier">PP</span><span class="plain">, </span><span class="identifier">inter_package</span><span class="plain"> *</span><span class="identifier">owner</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::MergeTemplate::link</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">template_file</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">N</span><span class="plain">, </span><span class="identifier">pathname</span><span class="plain"> **</span><span class="identifier">PP</span><span class="plain">, </span><span class="identifier">inter_package</span><span class="plain"> *</span><span class="identifier">owner</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">IBM</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 to link with"</span><span class="plain">);</span>
<span class="identifier">inter_repository</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain"> = </span><span class="identifier">IBM</span><span class="plain">-&gt;</span><span class="identifier">read_into</span><span class="plain">;</span>
<span class="identifier">Inter::traverse_tree</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="functiontext">CodeGen::Link::visitor</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, 0);</span>
<span class="identifier">Inter::traverse_tree</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="functiontext">CodeGen::MergeTemplate::visitor</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, 0);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">template_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">"unable to find template"</span><span class="plain">);</span>
<span class="functiontext">CodeGen::Link::ensure_search_list</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">);</span>
<span class="functiontext">CodeGen::MergeTemplate::ensure_search_list</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">);</span>
<span class="identifier">inter_bookmark</span><span class="plain"> </span><span class="identifier">link_bookmark</span><span class="plain"> =</span>
<span class="identifier">Inter::Bookmarks::at_end_of_this_package</span><span class="plain">(</span><span class="identifier">template_package</span><span class="plain">);</span>
<span class="reserved">I6T_kit</span><span class="plain"> </span><span class="identifier">kit</span><span class="plain"> = </span><span class="functiontext">TemplateReader::kit_out</span><span class="plain">(&amp;</span><span class="identifier">link_bookmark</span><span class="plain">, &amp;(</span><span class="functiontext">CodeGen::Link::receive_raw</span><span class="plain">), &amp;(</span><span class="functiontext">CodeGen::Link::receive_command</span><span class="plain">), </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="reserved">I6T_kit</span><span class="plain"> </span><span class="identifier">kit</span><span class="plain"> = </span><span class="functiontext">TemplateReader::kit_out</span><span class="plain">(&amp;</span><span class="identifier">link_bookmark</span><span class="plain">, &amp;(</span><span class="functiontext">CodeGen::MergeTemplate::receive_raw</span><span class="plain">), &amp;(</span><span class="functiontext">CodeGen::MergeTemplate::receive_command</span><span class="plain">), </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="identifier">kit</span><span class="element">.no_i6t_file_areas</span><span class="plain"> = </span><span class="identifier">N</span><span class="plain">;</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">=0; </span><span class="identifier">i</span><span class="plain">&lt;</span><span class="identifier">N</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">++) </span><span class="identifier">kit</span><span class="element">.i6t_files</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">] = </span><span class="identifier">PP</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">];</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">);</span>
<span class="functiontext">TemplateReader::I6T_file_intervene</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">EARLY_LINK_STAGE</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, &amp;</span><span class="identifier">kit</span><span class="plain">);</span>
<span class="functiontext">CodeGen::Link::receive_raw</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, &amp;</span><span class="identifier">kit</span><span class="plain">);</span>
<span class="functiontext">CodeGen::MergeTemplate::receive_raw</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, &amp;</span><span class="identifier">kit</span><span class="plain">);</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">);</span>
<span class="functiontext">TemplateReader::extract</span><span class="plain">(</span><span class="identifier">template_file</span><span class="plain">, &amp;</span><span class="identifier">kit</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::Link::visitor</span><span class="plain">(</span><span class="identifier">inter_repository</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">inter_frame</span><span class="plain"> </span><span class="identifier">P</span><span class="plain">, </span><span class="reserved">void</span><span class="plain"> *</span><span class="identifier">state</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::MergeTemplate::visitor</span><span class="plain">(</span><span class="identifier">inter_repository</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">inter_frame</span><span class="plain"> </span><span class="identifier">P</span><span class="plain">, </span><span class="reserved">void</span><span class="plain"> *</span><span class="identifier">state</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">P</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">ID_IFLD</span><span class="plain">] == </span><span class="identifier">LINK_IST</span><span class="plain">) {</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">S1</span><span class="plain"> = </span><span class="identifier">Inter::get_text</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">.</span><span class="identifier">repo_segment</span><span class="plain">-&gt;</span><span class="identifier">owning_repo</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">SEGMENT_LINK_IFLD</span><span class="plain">]);</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">S2</span><span class="plain"> = </span><span class="identifier">Inter::get_text</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">.</span><span class="identifier">repo_segment</span><span class="plain">-&gt;</span><span class="identifier">owning_repo</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">PART_LINK_IFLD</span><span class="plain">]);</span>
@ -82,7 +82,7 @@
<span class="identifier">dictionary</span><span class="plain"> *</span><span class="identifier">linkable_namespace</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">linkable_namespace_created</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="functiontext">CodeGen::Link::find_in_namespace</span><span class="plain">(</span><span class="identifier">inter_repository</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">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="functiontext">CodeGen::MergeTemplate::find_in_namespace</span><span class="plain">(</span><span class="identifier">inter_repository</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">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">linkable_namespace_created</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">) {</span>
<span class="identifier">linkable_namespace_created</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="identifier">linkable_namespace</span><span class="plain"> = </span><span class="identifier">Dictionaries::new</span><span class="plain">(512, </span><span class="identifier">FALSE</span><span class="plain">);</span>
@ -93,7 +93,7 @@
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">C</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">ID_IFLD</span><span class="plain">] == </span><span class="identifier">PACKAGE_IST</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::defined_by_frame</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">Str::ne</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">-&gt;</span><span class="identifier">package_name</span><span class="plain">-&gt;</span><span class="identifier">symbol_name</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"template"</span><span class="plain">))</span>
<span class="functiontext">CodeGen::Link::build_r</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">);</span>
<span class="functiontext">CodeGen::MergeTemplate::build_r</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">}</span>
@ -104,18 +104,18 @@
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::Link::build_r</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="functiontext">CodeGen::Link::build_only</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">);</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::MergeTemplate::build_r</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="functiontext">CodeGen::MergeTemplate::build_only</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">);</span>
<span class="identifier">inter_frame</span><span class="plain"> </span><span class="identifier">D</span><span class="plain"> = </span><span class="identifier">Inter::Symbols::defining_frame</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">-&gt;</span><span class="identifier">package_name</span><span class="plain">);</span>
<span class="identifier">LOOP_THROUGH_INTER_CHILDREN</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">, </span><span class="identifier">D</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="identifier">data</span><span class="plain">[</span><span class="identifier">ID_IFLD</span><span class="plain">] == </span><span class="identifier">PACKAGE_IST</span><span class="plain">) {</span>
<span class="identifier">inter_package</span><span class="plain"> *</span><span class="identifier">Q</span><span class="plain"> = </span><span class="identifier">Inter::Package::defined_by_frame</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">);</span>
<span class="functiontext">CodeGen::Link::build_r</span><span class="plain">(</span><span class="identifier">Q</span><span class="plain">);</span>
<span class="functiontext">CodeGen::MergeTemplate::build_r</span><span class="plain">(</span><span class="identifier">Q</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::Link::build_only</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="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::MergeTemplate::build_only</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_symbols_table</span><span class="plain"> *</span><span class="identifier">T</span><span class="plain"> = </span><span class="identifier">Inter::Packages::scope</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">T</span><span class="plain">) {</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">=0; </span><span class="identifier">i</span><span class="plain">&lt;</span><span class="identifier">T</span><span class="plain">-&gt;</span><span class="identifier">size</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">++) {</span>
@ -131,19 +131,19 @@
<span class="plain">}</span>
<span class="plain">}</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="functiontext">CodeGen::Link::find_name</span><span class="plain">(</span><span class="identifier">inter_repository</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">deeply</span><span class="plain">) {</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="functiontext">CodeGen::MergeTemplate::find_name</span><span class="plain">(</span><span class="identifier">inter_repository</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">deeply</span><span class="plain">) {</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">=0; </span><span class="identifier">i</span><span class="plain">&lt;</span><span class="identifier">link_search_list_len</span><span class="plain">; </span><span class="identifier">i</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::SymbolsTables::symbol_from_name_not_equating</span><span class="plain">(</span><span class="identifier">link_search_list</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">symb</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">symb</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">deeply</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="functiontext">CodeGen::Link::find_in_namespace</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="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">symb</span><span class="plain"> = </span><span class="functiontext">CodeGen::MergeTemplate::find_in_namespace</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">symb</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">symb</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::Link::log_search_path</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::MergeTemplate::log_search_path</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">=0; </span><span class="identifier">i</span><span class="plain">&lt;</span><span class="identifier">link_search_list_len</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">++) {</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"Search %d: $4\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">, </span><span class="identifier">link_search_list</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">]);</span>
<span class="plain">}</span>
@ -151,43 +151,43 @@
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">link_pie_count</span><span class="plain"> = 0;</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::Link::guard</span><span class="plain">(</span><span class="identifier">inter_error_message</span><span class="plain"> *</span><span class="identifier">ERR</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::MergeTemplate::guard</span><span class="plain">(</span><span class="identifier">inter_error_message</span><span class="plain"> *</span><span class="identifier">ERR</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ERR</span><span class="plain">) { </span><span class="identifier">Inter::Errors::issue</span><span class="plain">(</span><span class="identifier">ERR</span><span class="plain">); </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"inter error"</span><span class="plain">); }</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::Link::entire_splat</span><span class="plain">(</span><span class="identifier">inter_bookmark</span><span class="plain"> *</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">origin</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">content</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">level</span><span class="plain">, </span><span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">code_block</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::MergeTemplate::entire_splat</span><span class="plain">(</span><span class="identifier">inter_bookmark</span><span class="plain"> *</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">origin</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">content</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">level</span><span class="plain">, </span><span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">code_block</span><span class="plain">) {</span>
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">SID</span><span class="plain"> = </span><span class="identifier">Inter::create_text</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">-&gt;</span><span class="identifier">read_into</span><span class="plain">);</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">glob_storage</span><span class="plain"> = </span><span class="identifier">Inter::get_text</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">-&gt;</span><span class="identifier">read_into</span><span class="plain">, </span><span class="identifier">SID</span><span class="plain">);</span>
<span class="identifier">Str::copy</span><span class="plain">(</span><span class="identifier">glob_storage</span><span class="plain">, </span><span class="identifier">content</span><span class="plain">);</span>
<span class="functiontext">CodeGen::Link::guard</span><span class="plain">(</span><span class="identifier">Inter::Splat::new</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">code_block</span><span class="plain">, </span><span class="identifier">SID</span><span class="plain">, 0, </span><span class="identifier">level</span><span class="plain">, 0, </span><span class="identifier">NULL</span><span class="plain">));</span>
<span class="functiontext">CodeGen::MergeTemplate::guard</span><span class="plain">(</span><span class="identifier">Inter::Splat::new</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">code_block</span><span class="plain">, </span><span class="identifier">SID</span><span class="plain">, 0, </span><span class="identifier">level</span><span class="plain">, 0, </span><span class="identifier">NULL</span><span class="plain">));</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function CodeGen::Link::create_pipeline_stage is used in 1/stg (<a href="1-stg.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function CodeGen::MergeTemplate::create_pipeline_stage is used in 1/stg (<a href="1-stg.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function CodeGen::Link::run_pipeline_stage appears nowhere else.</p>
<p class="endnote">The function CodeGen::MergeTemplate::run_pipeline_stage appears nowhere else.</p>
<p class="endnote">The function CodeGen::Link::ensure_search_list is used in 2/alm (<a href="2-alm.html#SP1">&#167;1</a>).</p>
<p class="endnote">The function CodeGen::MergeTemplate::ensure_search_list is used in 2/alm (<a href="2-alm.html#SP1">&#167;1</a>).</p>
<p class="endnote">The function CodeGen::Link::link appears nowhere else.</p>
<p class="endnote">The function CodeGen::MergeTemplate::link appears nowhere else.</p>
<p class="endnote">The function CodeGen::Link::visitor appears nowhere else.</p>
<p class="endnote">The function CodeGen::MergeTemplate::visitor appears nowhere else.</p>
<p class="endnote">The function CodeGen::Link::find_in_namespace appears nowhere else.</p>
<p class="endnote">The function CodeGen::MergeTemplate::find_in_namespace appears nowhere else.</p>
<p class="endnote">The function CodeGen::Link::build_r is used in 2/alm (<a href="2-alm.html#SP5">&#167;5</a>).</p>
<p class="endnote">The function CodeGen::MergeTemplate::build_r is used in 2/alm (<a href="2-alm.html#SP5">&#167;5</a>).</p>
<p class="endnote">The function CodeGen::Link::build_only appears nowhere else.</p>
<p class="endnote">The function CodeGen::MergeTemplate::build_only appears nowhere else.</p>
<p class="endnote">The function CodeGen::Link::find_name is used in 2/alm (<a href="2-alm.html#SP2_1">&#167;2.1</a>, <a href="2-alm.html#SP5">&#167;5</a>, <a href="2-alm.html#SP6">&#167;6</a>).</p>
<p class="endnote">The function CodeGen::MergeTemplate::find_name is used in 2/alm (<a href="2-alm.html#SP2_1">&#167;2.1</a>, <a href="2-alm.html#SP5">&#167;5</a>, <a href="2-alm.html#SP6">&#167;6</a>).</p>
<p class="endnote">The function CodeGen::Link::log_search_path appears nowhere else.</p>
<p class="endnote">The function CodeGen::MergeTemplate::log_search_path appears nowhere else.</p>
<p class="endnote">The function CodeGen::Link::guard is used in 1/ppl (<a href="1-ppl.html#SP5">&#167;5</a>), 2/alm (<a href="2-alm.html#SP2_1_2">&#167;2.1.2</a>, <a href="2-alm.html#SP2_2_2">&#167;2.2.2</a>, <a href="2-alm.html#SP3">&#167;3</a>, <a href="2-alm.html#SP5">&#167;5</a>, <a href="2-alm.html#SP6">&#167;6</a>), 3/ip (<a href="3-ip.html#SP2">&#167;2</a>), 3/tv (<a href="3-tv.html#SP1">&#167;1</a>).</p>
<p class="endnote">The function CodeGen::MergeTemplate::guard is used in 1/ppl (<a href="1-ppl.html#SP5">&#167;5</a>), 2/alm (<a href="2-alm.html#SP2_1_2">&#167;2.1.2</a>, <a href="2-alm.html#SP2_2_2">&#167;2.2.2</a>, <a href="2-alm.html#SP3">&#167;3</a>, <a href="2-alm.html#SP5">&#167;5</a>, <a href="2-alm.html#SP6">&#167;6</a>), 3/ip (<a href="3-ip.html#SP2">&#167;2</a>), 3/tv (<a href="3-tv.html#SP1">&#167;1</a>).</p>
<p class="endnote">The function CodeGen::Link::entire_splat is used in <a href="#SP2">&#167;2</a>, 2/alm (<a href="2-alm.html#SP6">&#167;6</a>).</p>
<p class="endnote">The function CodeGen::MergeTemplate::entire_splat is used in <a href="#SP2">&#167;2</a>, 2/alm (<a href="2-alm.html#SP6">&#167;6</a>).</p>
<p class="inwebparagraph"><a id="SP2"></a><b>&#167;2. </b></p>
@ -203,7 +203,7 @@
</pre>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::Link::receive_raw</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">I6T_kit</span><span class="plain"> *</span><span class="identifier">kit</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::MergeTemplate::receive_raw</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">I6T_kit</span><span class="plain"> *</span><span class="identifier">kit</span><span class="plain">) {</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">R</span><span class="plain"> = </span><span class="identifier">Str::new</span><span class="plain">();</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">mode</span><span class="plain"> = </span><span class="constant">IGNORE_WS_FILTER_BIT</span><span class="plain">;</span>
<span class="identifier">LOOP_THROUGH_TEXT</span><span class="plain">(</span><span class="identifier">pos</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">) {</span>
@ -245,22 +245,22 @@
<span class="plain">}</span>
<span class="identifier">PUT_TO</span><span class="plain">(</span><span class="identifier">R</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">c</span><span class="plain"> == </span><span class="character">';'</span><span class="plain">) &amp;&amp; (!(</span><span class="identifier">mode</span><span class="plain"> &amp; </span><span class="constant">SUBORDINATE_FILTER_BITS</span><span class="plain">))) {</span>
<span class="functiontext">CodeGen::Link::chunked_raw</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">, </span><span class="identifier">kit</span><span class="plain">);</span>
<span class="functiontext">CodeGen::MergeTemplate::chunked_raw</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">, </span><span class="identifier">kit</span><span class="plain">);</span>
<span class="identifier">mode</span><span class="plain"> = </span><span class="constant">IGNORE_WS_FILTER_BIT</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="functiontext">CodeGen::Link::chunked_raw</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">, </span><span class="identifier">kit</span><span class="plain">);</span>
<span class="functiontext">CodeGen::MergeTemplate::chunked_raw</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">, </span><span class="identifier">kit</span><span class="plain">);</span>
<span class="identifier">Str::clear</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::Link::chunked_raw</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">I6T_kit</span><span class="plain"> *</span><span class="identifier">kit</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::MergeTemplate::chunked_raw</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">I6T_kit</span><span class="plain"> *</span><span class="identifier">kit</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">S</span><span class="plain">) == 0) </span><span class="reserved">return</span><span class="plain">;</span>
<span class="identifier">PUT_TO</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">, </span><span class="character">'\</span><span class="plain">n</span><span class="character">'</span><span class="plain">);</span>
<span class="functiontext">CodeGen::Link::entire_splat</span><span class="plain">(</span><span class="identifier">kit</span><span class="plain">-</span><span class="element">&gt;IBM</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"template"</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">, (</span><span class="identifier">inter_t</span><span class="plain">) (</span><span class="identifier">Inter::Bookmarks::baseline</span><span class="plain">(</span><span class="identifier">kit</span><span class="plain">-</span><span class="element">&gt;IBM</span><span class="plain">) + 1), </span><span class="identifier">Inter::Bookmarks::package</span><span class="plain">(</span><span class="identifier">kit</span><span class="plain">-</span><span class="element">&gt;IBM</span><span class="plain">)-&gt;</span><span class="identifier">package_name</span><span class="plain">);</span>
<span class="functiontext">CodeGen::MergeTemplate::entire_splat</span><span class="plain">(</span><span class="identifier">kit</span><span class="plain">-</span><span class="element">&gt;IBM</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"template"</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">, (</span><span class="identifier">inter_t</span><span class="plain">) (</span><span class="identifier">Inter::Bookmarks::baseline</span><span class="plain">(</span><span class="identifier">kit</span><span class="plain">-</span><span class="element">&gt;IBM</span><span class="plain">) + 1), </span><span class="identifier">Inter::Bookmarks::package</span><span class="plain">(</span><span class="identifier">kit</span><span class="plain">-</span><span class="element">&gt;IBM</span><span class="plain">)-&gt;</span><span class="identifier">package_name</span><span class="plain">);</span>
<span class="identifier">Str::clear</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::Link::receive_command</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">command</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">argument</span><span class="plain">, </span><span class="reserved">I6T_kit</span><span class="plain"> *</span><span class="identifier">kit</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::MergeTemplate::receive_command</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">command</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">argument</span><span class="plain">, </span><span class="reserved">I6T_kit</span><span class="plain"> *</span><span class="identifier">kit</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">command</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"plugin"</span><span class="plain">)) ||</span>
<span class="plain">(</span><span class="identifier">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">command</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"type"</span><span class="plain">)) ||</span>
<span class="plain">(</span><span class="identifier">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">command</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"open-file"</span><span class="plain">)) ||</span>
@ -295,11 +295,11 @@
<p class="inwebparagraph"></p>
<p class="endnote">The function CodeGen::Link::receive_raw is used in <a href="#SP1">&#167;1</a>.</p>
<p class="endnote">The function CodeGen::MergeTemplate::receive_raw is used in <a href="#SP1">&#167;1</a>.</p>
<p class="endnote">The function CodeGen::Link::chunked_raw appears nowhere else.</p>
<p class="endnote">The function CodeGen::MergeTemplate::chunked_raw appears nowhere else.</p>
<p class="endnote">The function CodeGen::Link::receive_command is used in <a href="#SP1">&#167;1</a>.</p>
<p class="endnote">The function CodeGen::MergeTemplate::receive_command is used in <a href="#SP1">&#167;1</a>.</p>
<hr class="tocbar">
<ul class="toc"><li><i>(This section begins Chapter 2: Miscellaneous Pipeline Stages.)</i></li><li><a href="2-itr.html">Continue with 'I6 Template Reader'</a></li></ul><hr class="tocbar">

View file

@ -18,7 +18,7 @@
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::PLM::create_pipeline_stage</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="functiontext">CodeGen::Stage::new</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"parse-linked-matter"</span><span class="plain">, </span><span class="functiontext">CodeGen::PLM::run_pipeline_stage</span><span class="plain">, </span><span class="constant">NO_STAGE_ARG</span><span class="plain">);</span>
<span class="functiontext">CodeGen::Stage::new</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"parse-linked-matter"</span><span class="plain">, </span><span class="functiontext">CodeGen::PLM::run_pipeline_stage</span><span class="plain">, </span><span class="constant">NO_STAGE_ARG</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">CodeGen::PLM::run_pipeline_stage</span><span class="plain">(</span><span class="reserved">pipeline_step</span><span class="plain"> *</span><span class="identifier">step</span><span class="plain">) {</span>

View file

@ -18,7 +18,7 @@
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::RCC::create_pipeline_stage</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="functiontext">CodeGen::Stage::new</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"resolve-conditional-compilation"</span><span class="plain">, </span><span class="functiontext">CodeGen::RCC::run_pipeline_stage</span><span class="plain">, </span><span class="constant">NO_STAGE_ARG</span><span class="plain">);</span>
<span class="functiontext">CodeGen::Stage::new</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"resolve-conditional-compilation"</span><span class="plain">, </span><span class="functiontext">CodeGen::RCC::run_pipeline_stage</span><span class="plain">, </span><span class="constant">NO_STAGE_ARG</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">CodeGen::RCC::run_pipeline_stage</span><span class="plain">(</span><span class="reserved">pipeline_step</span><span class="plain"> *</span><span class="identifier">step</span><span class="plain">) {</span>

View file

@ -18,7 +18,7 @@
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::Externals::create_pipeline_stage</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="functiontext">CodeGen::Stage::new</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"resolve-external-symbols"</span><span class="plain">, </span><span class="functiontext">CodeGen::Externals::run_pipeline_stage</span><span class="plain">, </span><span class="constant">NO_STAGE_ARG</span><span class="plain">);</span>
<span class="functiontext">CodeGen::Stage::new</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"resolve-external-symbols"</span><span class="plain">, </span><span class="functiontext">CodeGen::Externals::run_pipeline_stage</span><span class="plain">, </span><span class="constant">NO_STAGE_ARG</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">resolution_failed</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>

View file

@ -18,7 +18,7 @@
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::ReconcileVerbs::create_pipeline_stage</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="functiontext">CodeGen::Stage::new</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"reconcile-verbs"</span><span class="plain">, </span><span class="functiontext">CodeGen::ReconcileVerbs::run_pipeline_stage</span><span class="plain">, </span><span class="constant">NO_STAGE_ARG</span><span class="plain">);</span>
<span class="functiontext">CodeGen::Stage::new</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"reconcile-verbs"</span><span class="plain">, </span><span class="functiontext">CodeGen::ReconcileVerbs::run_pipeline_stage</span><span class="plain">, </span><span class="constant">NO_STAGE_ARG</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">CodeGen::ReconcileVerbs::run_pipeline_stage</span><span class="plain">(</span><span class="reserved">pipeline_step</span><span class="plain"> *</span><span class="identifier">step</span><span class="plain">) {</span>

View file

@ -18,7 +18,7 @@
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::Uniqueness::create_pipeline_stage</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="functiontext">CodeGen::Stage::new</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"make-identifiers-unique"</span><span class="plain">, </span><span class="functiontext">CodeGen::Uniqueness::run_pipeline_stage</span><span class="plain">, </span><span class="constant">NO_STAGE_ARG</span><span class="plain">);</span>
<span class="functiontext">CodeGen::Stage::new</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"make-identifiers-unique"</span><span class="plain">, </span><span class="functiontext">CodeGen::Uniqueness::run_pipeline_stage</span><span class="plain">, </span><span class="constant">NO_STAGE_ARG</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">CodeGen::Uniqueness::run_pipeline_stage</span><span class="plain">(</span><span class="reserved">pipeline_step</span><span class="plain"> *</span><span class="identifier">step</span><span class="plain">) {</span>

View file

@ -246,10 +246,10 @@
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">to</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 symbol"</span><span class="plain">);</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">prim_command</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">prim_command</span><span class="plain">, </span><span class="string">"primitive %S %S"</span><span class="plain">, </span><span class="identifier">prim</span><span class="plain">, </span><span class="identifier">category</span><span class="plain">);</span>
<span class="functiontext">CodeGen::Link::guard</span><span class="plain">(</span><span class="identifier">Inter::Defn::read_construct_text</span><span class="plain">(</span><span class="identifier">prim_command</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">IBM</span><span class="plain">));</span>
<span class="functiontext">CodeGen::MergeTemplate::guard</span><span class="plain">(</span><span class="identifier">Inter::Defn::read_construct_text</span><span class="plain">(</span><span class="identifier">prim_command</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">IBM</span><span class="plain">));</span>
<span class="identifier">inter_error_message</span><span class="plain"> *</span><span class="identifier">E</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="plain">*</span><span class="identifier">to</span><span class="plain"> = </span><span class="identifier">Inter::Textual::find_symbol</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">Inter::get_global_symbols</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">), </span><span class="identifier">prim</span><span class="plain">, </span><span class="identifier">PRIMITIVE_IST</span><span class="plain">, &amp;</span><span class="identifier">E</span><span class="plain">);</span>
<span class="functiontext">CodeGen::Link::guard</span><span class="plain">(</span><span class="identifier">E</span><span class="plain">);</span>
<span class="functiontext">CodeGen::MergeTemplate::guard</span><span class="plain">(</span><span class="identifier">E</span><span class="plain">);</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">prim_command</span><span class="plain">);</span>
<span class="plain">}</span>

View file

@ -172,7 +172,7 @@
<span class="plain">*</span><span class="identifier">slot</span><span class="plain"> = </span><span class="identifier">Inter::SymbolsTables::symbol_from_name_creating</span><span class="plain">(</span><span class="identifier">tab</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">) &gt; 0) </span><span class="identifier">Inter::Symbols::set_translate</span><span class="plain">(*</span><span class="identifier">slot</span><span class="plain">, </span><span class="identifier">T</span><span class="plain">);</span>
<span class="identifier">Inter::Symbols::annotate_i</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">-&gt;</span><span class="identifier">read_into</span><span class="plain">, *</span><span class="identifier">slot</span><span class="plain">, </span><span class="identifier">VENEER_IANN</span><span class="plain">, 1);</span>
<span class="functiontext">CodeGen::Link::guard</span><span class="plain">(</span><span class="identifier">Inter::Constant::new_numerical</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">,</span>
<span class="functiontext">CodeGen::MergeTemplate::guard</span><span class="plain">(</span><span class="identifier">Inter::Constant::new_numerical</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">IBM</span><span class="plain">-&gt;</span><span class="identifier">read_into</span><span class="plain">, </span><span class="identifier">veneer_package</span><span class="plain">, *</span><span class="identifier">slot</span><span class="plain">),</span>
<span class="identifier">Inter::SymbolsTables::id_from_symbol</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">-&gt;</span><span class="identifier">read_into</span><span class="plain">, </span><span class="identifier">veneer_package</span><span class="plain">, </span><span class="identifier">unchecked_kind_symbol</span><span class="plain">),</span>
<span class="identifier">LITERAL_IVAL</span><span class="plain">, 0,</span>

View file

@ -18,7 +18,7 @@
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::create_pipeline_stage</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="functiontext">CodeGen::Stage::new</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"generate"</span><span class="plain">, </span><span class="functiontext">CodeGen::run_pipeline_stage</span><span class="plain">, </span><span class="constant">TEXT_OUT_STAGE_ARG</span><span class="plain">);</span>
<span class="functiontext">CodeGen::Stage::new</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"generate"</span><span class="plain">, </span><span class="functiontext">CodeGen::run_pipeline_stage</span><span class="plain">, </span><span class="constant">TEXT_OUT_STAGE_ARG</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">CodeGen::run_pipeline_stage</span><span class="plain">(</span><span class="reserved">pipeline_step</span><span class="plain"> *</span><span class="identifier">step</span><span class="plain">) {</span>

View file

@ -11,7 +11,7 @@
<!--Weave of 'P/pas' generated by 7-->
<ul class="crumbs"><li><a href="../webs.html">&#9733;</a></li><li><a href="index.html">inter 1</a></li><li><a href="index.html#P">Preliminaries</a></li><li><b>Pipelines and Stages</b></li></ul><p class="purpose">Sequences of named code-generation stages are called pipelines.</p>
<ul class="toc"><li><a href="#SP1">&#167;1. Stages and descriptions</a></li><li><a href="#SP3">&#167;3. Pipelines run by Inform</a></li><li><a href="#SP4">&#167;4. Reading and generating</a></li><li><a href="#SP5">&#167;5. The code-generation stages</a></li></ul><hr class="tocbar">
<ul class="toc"><li><a href="#SP1">&#167;1. Stages and descriptions</a></li><li><a href="#SP3">&#167;3. Pipelines run by Inform</a></li><li><a href="#SP4">&#167;4. Stage descriptions</a></li><li><a href="#SP5">&#167;5. Reading and generating</a></li><li><a href="#SP6">&#167;6. The code-generation stages</a></li></ul><hr class="tocbar">
<p class="inwebparagraph"><a id="SP1"></a><b>&#167;1. Stages and descriptions. </b>A processing stage is a step in code generation which acts on a repository
of inter in memory. Some stages change, add to or edit down that code, while
@ -54,11 +54,7 @@ each line, and the comma is not needed:
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP2"></a><b>&#167;2. </b>A pipeline can work on up to 10 different repositories, called <code class="display"><span class="extract">0</span></code> to <code class="display"><span class="extract">9</span></code>,
which are initially empty (but see below).
</p>
<p class="inwebparagraph">A pipeline description can make use of "variables". These hold only text,
<p class="inwebparagraph"><a id="SP2"></a><b>&#167;2. </b>A pipeline description can make use of "variables". These hold only text,
and generally represent filenames. Variable names begin with a star <code class="display"><span class="extract">*</span></code>.
The pipeline cannot create variables: instead, the user of the pipeline has
to make them before use. For example,
@ -79,7 +75,7 @@ the given pipeline. Inside the pipeline, a line such as:
<pre class="display">
<span class="plain">generate: inform6 -&gt; *X</span>
<span class="plain">generate inform6 -&gt; *X</span>
</pre>
<p class="inwebparagraph">would then be read as:
@ -89,7 +85,7 @@ the given pipeline. Inside the pipeline, a line such as:
<pre class="display">
<span class="plain">generate: inform6 -&gt; ex/why</span>
<span class="plain">generate inform6 -&gt; ex/why</span>
</pre>
<p class="inwebparagraph">After variable substitution like this, filenames inside the pipeline
@ -114,7 +110,7 @@ For example,
<pre class="display">
<span class="plain">generate: inventory -&gt; *log</span>
<span class="plain">generate inventory -&gt; *log</span>
</pre>
<p class="inwebparagraph">Template filenames are a little different: those are searched for inside
@ -137,9 +133,9 @@ effect is that any useful pipeline for Inform will begin and end thus:
<pre class="display">
<span class="plain">read: 0 &lt;- *in</span>
<span class="plain">read &lt;- *in</span>
<span class="plain">...</span>
<span class="plain">generate: inform6 -&gt; *out</span>
<span class="plain">generate inform6 -&gt; *out</span>
</pre>
<p class="inwebparagraph">In addition, the "domain" is set to the directory containing the <code class="display"><span class="extract">*out</span></code>
@ -211,7 +207,53 @@ project's Materials folder. But there are also two other ways.
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP4"></a><b>&#167;4. Reading and generating. </b>The <code class="display"><span class="extract">read</span></code> stage reads Inter from a file into a repository in memory.
<p class="inwebparagraph"><a id="SP4"></a><b>&#167;4. Stage descriptions. </b>There are three sorts of stage description: those involving material coming
in, denoted by a left arrow, those involving some external file being written
out, denoted by a right arrow, and those which just process what we have.
These take the following forms:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">STAGENAME [LOCATION] &lt;- SOURCE</span>
<span class="plain">STAGENAME [LOCATION] FORMAT -&gt; DESTINATION</span>
<span class="plain">STAGENAME [LOCATION]</span>
</pre>
<p class="inwebparagraph">In each case the <code class="display"><span class="extract">LOCATION</span></code> is optional. For example:
</p>
<p class="inwebparagraph"></p>
<pre class="display">
<span class="plain">read 2 &lt;- *in</span>
<span class="plain">generate binary -&gt; *out</span>
<span class="plain">eliminate-redundant-labels /main/template</span>
</pre>
<p class="inwebparagraph">In the first line the location is <code class="display"><span class="extract">2</span></code>. Pipeline descriptios allow us to manage
up to 10 different repositories, and these are called <code class="display"><span class="extract">0</span></code> to <code class="display"><span class="extract">9</span></code>. These are
all initially empty. Any stage which doesn't specify a repository is considered
to apply to <code class="display"><span class="extract">0</span></code>; plenty of pipelines never mention the digits <code class="display"><span class="extract">0</span></code> to <code class="display"><span class="extract">9</span></code> at
all because they do everything inside <code class="display"><span class="extract">0</span></code>.
</p>
<p class="inwebparagraph">In the second line, there's no location given, so the location is presumed
to be <code class="display"><span class="extract">0</span></code>.
</p>
<p class="inwebparagraph">The third line demonstrates that a location can be more specific than just
a repository: it can be a specific package in a repository. Here, it's
<code class="display"><span class="extract">/main/template</span></code> in repository <code class="display"><span class="extract">0</span></code>, but we could also write <code class="display"><span class="extract">7:/main/template</span></code>
to mean <code class="display"><span class="extract">/main/template</span></code> in <code class="display"><span class="extract">7</span></code>, for example. Not all stages allow the
location to be narrowed down to a single package (which by definition
includes all its subpackages): see below.
</p>
<p class="inwebparagraph"><a id="SP5"></a><b>&#167;5. Reading and generating. </b>The <code class="display"><span class="extract">read</span></code> stage reads Inter from a file into a repository in memory.
(Its previous contents, if any, are discarded.) This then becomes the
repository to which subsequent stages apply. The format is:
</p>
@ -223,8 +265,12 @@ repository to which subsequent stages apply. The format is:
<span class="plain">read REPOSITORY &lt;- FILE</span>
</pre>
<p class="inwebparagraph">where <code class="display"><span class="extract">REPOSITORY</span></code> is <code class="display"><span class="extract">0</span></code> to <code class="display"><span class="extract">9</span></code>. Conventionally, we use <code class="display"><span class="extract">0</span></code> most of the time.
The <code class="display"><span class="extract">FILE</span></code> can contain either binary or textual Inter, and this is
<p class="inwebparagraph">where <code class="display"><span class="extract">REPOSITORY</span></code> is <code class="display"><span class="extract">0</span></code> to <code class="display"><span class="extract">9</span></code>, and is <code class="display"><span class="extract">0</span></code> if not supplied. Note that
this fills an entire repository: it's not meaningful to specify a
named package as the location.
</p>
<p class="inwebparagraph">The <code class="display"><span class="extract">FILE</span></code> can contain either binary or textual Inter, and this is
automatically detected.
</p>
@ -232,13 +278,14 @@ automatically detected.
<pre class="display">
<span class="plain">generate: FORMAT -&gt; FILE</span>
<span class="plain">generate FORMAT -&gt; FILE</span>
</pre>
<p class="inwebparagraph">writes the contents of the current repository out into the given <code class="display"><span class="extract">FILE</span></code>.
There are several possible formats: <code class="display"><span class="extract">binary</span></code> and <code class="display"><span class="extract">text</span></code> mean a binary or
textual Inter file, <code class="display"><span class="extract">inventory</span></code> means a textual summary of the contents,
and <code class="display"><span class="extract">inform6</span></code> means an Inform 6 program.
<p class="inwebparagraph">writes the repository out into the given <code class="display"><span class="extract">FILE</span></code>. There are several possible
formats: <code class="display"><span class="extract">binary</span></code> and <code class="display"><span class="extract">text</span></code> mean a binary or textual Inter file, <code class="display"><span class="extract">inventory</span></code>
means a textual summary of the contents, and <code class="display"><span class="extract">inform6</span></code> means an Inform 6
program. At present, only <code class="display"><span class="extract">inventory</span></code> can be generated on specific
packages in a repository.
</p>
<p class="inwebparagraph">The <code class="display"><span class="extract">generate</span></code> stage leaves the repository unchanged, so it's possible
@ -246,7 +293,7 @@ to generate multiple representations of the same repository into different
files.
</p>
<p class="inwebparagraph"><a id="SP5"></a><b>&#167;5. The code-generation stages. </b>The following are all experimental, and have probably not yet reached their
<p class="inwebparagraph"><a id="SP6"></a><b>&#167;6. The code-generation stages. </b>The following are all experimental, and have probably not yet reached their
final form or names.
</p>
@ -260,13 +307,13 @@ therefore, are converted out of Inform 6 and then back into it again. This
sounds inefficient but is surprisingly fast, and enables many optimisations.)
</p>
<p class="inwebparagraph"><a id="SP6"></a><b>&#167;6. </b><code class="display"><span class="extract">link:T</span></code> reads in the I6T template file T, converts it to inter in a very
basic way (creating many splats), and merges it with the repository. Splats
are the unhappiest of inter statements, simply including verbatim snippets
of Inform 6 code.
<p class="inwebparagraph"><a id="SP7"></a><b>&#167;7. </b><code class="display"><span class="extract">merge-template &lt;- T</span></code> reads in the I6T template file <code class="display"><span class="extract">T</span></code>, converts it to
inter in a very basic way (creating many splats), and merges it with the
repository. Splats are the unhappiest of inter statements, simply including
verbatim snippets of Inform 6 code.
</p>
<p class="inwebparagraph"><a id="SP7"></a><b>&#167;7. </b><code class="display"><span class="extract">parse-linked-matter</span></code> examines the splats produced by linking and annotates
<p class="inwebparagraph"><a id="SP8"></a><b>&#167;8. </b><code class="display"><span class="extract">parse-linked-matter</span></code> examines the splats produced by merging and annotates
them by what they seem to want to do. For example,
</p>
@ -289,7 +336,7 @@ them by what they seem to want to do. For example,
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP8"></a><b>&#167;8. </b><code class="display"><span class="extract">resolve-conditional-compilation</span></code> looks for splats arising from Inform 6
<p class="inwebparagraph"><a id="SP9"></a><b>&#167;9. </b><code class="display"><span class="extract">resolve-conditional-compilation</span></code> looks for splats arising from Inform 6
conditional compilation directives such as <code class="display"><span class="extract">#ifdef</span></code>, <code class="display"><span class="extract">#ifndef</span></code>, <code class="display"><span class="extract">#endif</span></code>;
it then detects whether the relevant symbols are defined, or looks at their
values, and deletes sections of code not to be compiled. At the end of this
@ -322,7 +369,7 @@ For example:
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP9"></a><b>&#167;9. </b><code class="display"><span class="extract">assimilate</span></code> aims to convert all remaining splats in the repository into
<p class="inwebparagraph"><a id="SP10"></a><b>&#167;10. </b><code class="display"><span class="extract">assimilate</span></code> aims to convert all remaining splats in the repository into
higher-level inter statements. For example,
</p>
@ -349,7 +396,7 @@ higher-level inter statements. For example,
and the linking process is complete.
</p>
<p class="inwebparagraph"><a id="SP10"></a><b>&#167;10. </b><code class="display"><span class="extract">make-identifiers-unique</span></code> looks for symbols marked with the <code class="display"><span class="extract">MAKE_NAME_UNIQUE</span></code>
<p class="inwebparagraph"><a id="SP11"></a><b>&#167;11. </b><code class="display"><span class="extract">make-identifiers-unique</span></code> looks for symbols marked with the <code class="display"><span class="extract">MAKE_NAME_UNIQUE</span></code>
flag (represented in textual form by an asterisk after its name), This flag
means that Inform wants the symbol name to be globally unique in the repository.
For example, if Inform generates the symbol name <code class="display"><span class="extract">fruit*</span></code>, it's really telling
@ -371,7 +418,7 @@ same name in any I6 program, for example.
<p class="inwebparagraph">At the end of this stage, no symbol still has the <code class="display"><span class="extract">MAKE_NAME_UNIQUE</span></code> flag.
</p>
<p class="inwebparagraph"><a id="SP11"></a><b>&#167;11. </b><code class="display"><span class="extract">reconcile-verbs</span></code> is a short stage looking for clashes between any verbs (in
<p class="inwebparagraph"><a id="SP12"></a><b>&#167;12. </b><code class="display"><span class="extract">reconcile-verbs</span></code> is a short stage looking for clashes between any verbs (in
the parser interactive fiction sense) which have been assimilated from the
template, and verbs which have been defined in the main source text. For
example, suppose the source creates the command verb "abstract": this would
@ -385,12 +432,12 @@ up with two command verbs: <code class="display"><span class="extract">abstract<
<p class="inwebparagraph">At the end of this stage, all parser verbs have distinct textual forms.
</p>
<p class="inwebparagraph"><a id="SP12"></a><b>&#167;12. </b><code class="display"><span class="extract">eliminate-redundant-code</span></code> deletes all packages which Inter can prove
<p class="inwebparagraph"><a id="SP13"></a><b>&#167;13. </b><code class="display"><span class="extract">eliminate-redundant-code</span></code> deletes all packages which Inter can prove
will not be used in the final code generated from the repository. For
example, functions never called, or arrays never referred to, are deleted.
</p>
<p class="inwebparagraph"><a id="SP13"></a><b>&#167;13. </b><code class="display"><span class="extract">eliminate-redundant-labels</span></code> performs peephole optimisation on all of
<p class="inwebparagraph"><a id="SP14"></a><b>&#167;14. </b><code class="display"><span class="extract">eliminate-redundant-labels</span></code> performs peephole optimisation on all of
the functions in the repository to remove all labels which are declared
but can never be jumped to.
</p>
@ -399,7 +446,7 @@ but can never be jumped to.
branch, either by <code class="display"><span class="extract">inv !jump</span></code> or in assembly language.
</p>
<p class="inwebparagraph"><a id="SP14"></a><b>&#167;14. </b>The special stage <code class="display"><span class="extract">stop</span></code> halts processing of the pipeline midway. At present
<p class="inwebparagraph"><a id="SP15"></a><b>&#167;15. </b>The special stage <code class="display"><span class="extract">stop</span></code> halts processing of the pipeline midway. At present
this is only useful for making experimental edits to pipeline descriptions
to see what just the first half does, without deleting the second half of
the description.

View file

@ -88,7 +88,7 @@ one stage, can be quite elaborate (see later), but for example:
<pre class="display">
<span class="plain">read: 0 &lt;- myfile.inter, resolve-conditional-compilation, generate: inform6 -&gt; myfile.i6</span>
<span class="plain">read &lt;- myfile.inter, resolve-conditional-compilation, generate inform6 -&gt; myfile.i6</span>
</pre>
<p class="inwebparagraph">is a valid three-stage pipeline. The command to do this is then:

View file

@ -1,9 +1,9 @@
read: 0 <- *in
link: Output.i6t
read <- *in
merge-template <- Output.i6t
parse-linked-matter
resolve-conditional-compilation
assimilate
make-identifiers-unique
resolve-external-symbols
reconcile-verbs
generate: inform6 -> *out
generate inform6 -> *out

View file

@ -1,9 +1,9 @@
read: 0 <- *in
link: Output.i6t
read <- *in
merge-template <- Output.i6t
parse-linked-matter
resolve-conditional-compilation
assimilate
make-identifiers-unique
resolve-external-symbols
reconcile-verbs
generate: inform6 -> *out
generate inform6 -> *out

View file

@ -27,10 +27,7 @@ each line, and the comma is not needed:
|xyzzy|
|plover|
@ A pipeline can work on up to 10 different repositories, called |0| to |9|,
which are initially empty (but see below).
A pipeline description can make use of "variables". These hold only text,
@ A pipeline description can make use of "variables". These hold only text,
and generally represent filenames. Variable names begin with a star |*|.
The pipeline cannot create variables: instead, the user of the pipeline has
to make them before use. For example,
@ -40,11 +37,11 @@ to make them before use. For example,
creates the variable |*X| with the textual contents |ex/why| before running
the given pipeline. Inside the pipeline, a line such as:
|generate: inform6 -> *X|
|generate inform6 -> *X|
would then be read as:
|generate: inform6 -> ex/why|
|generate inform6 -> ex/why|
After variable substitution like this, filenames inside the pipeline
description are interpreted as follows:
@ -60,7 +57,7 @@ A command to write a text file to |*log| is interpreted instead to mean
"spool the output you would otherwise write to the debugging log instead".
For example,
|generate: inventory -> *log|
|generate inventory -> *log|
Template filenames are a little different: those are searched for inside
a path of possible directories. By default there's no such path, but using
@ -76,9 +73,9 @@ which Inform has generated on the current run, and |*out| is set to the
filename to which final I6 code needs to be written. The practical
effect is that any useful pipeline for Inform will begin and end thus:
|read: 0 <- *in|
|read <- *in|
|...|
|generate: inform6 -> *out|
|generate inform6 -> *out|
In addition, the "domain" is set to the directory containing the |*out|
file, and the template search path is set to the one used in Inform, that is,
@ -116,6 +113,38 @@ Exactly as with Inter, Inform 7 also responds to |-pipeline-file|:
|$ inform7/Tangled/inform7 ... -pipeline-file FILE|
@h Stage descriptions.
There are three sorts of stage description: those involving material coming
in, denoted by a left arrow, those involving some external file being written
out, denoted by a right arrow, and those which just process what we have.
These take the following forms:
|STAGENAME [LOCATION] <- SOURCE|
|STAGENAME [LOCATION] FORMAT -> DESTINATION|
|STAGENAME [LOCATION]|
In each case the |LOCATION| is optional. For example:
|read 2 <- *in|
|generate binary -> *out|
|eliminate-redundant-labels /main/template|
In the first line the location is |2|. Pipeline descriptios allow us to manage
up to 10 different repositories, and these are called |0| to |9|. These are
all initially empty. Any stage which doesn't specify a repository is considered
to apply to |0|; plenty of pipelines never mention the digits |0| to |9| at
all because they do everything inside |0|.
In the second line, there's no location given, so the location is presumed
to be |0|.
The third line demonstrates that a location can be more specific than just
a repository: it can be a specific package in a repository. Here, it's
|/main/template| in repository |0|, but we could also write |7:/main/template|
to mean |/main/template| in |7|, for example. Not all stages allow the
location to be narrowed down to a single package (which by definition
includes all its subpackages): see below.
@h Reading and generating.
The |read| stage reads Inter from a file into a repository in memory.
(Its previous contents, if any, are discarded.) This then becomes the
@ -123,16 +152,20 @@ repository to which subsequent stages apply. The format is:
|read REPOSITORY <- FILE|
where |REPOSITORY| is |0| to |9|. Conventionally, we use |0| most of the time.
where |REPOSITORY| is |0| to |9|, and is |0| if not supplied. Note that
this fills an entire repository: it's not meaningful to specify a
named package as the location.
The |FILE| can contain either binary or textual Inter, and this is
automatically detected.
|generate: FORMAT -> FILE|
|generate FORMAT -> FILE|
writes the contents of the current repository out into the given |FILE|.
There are several possible formats: |binary| and |text| mean a binary or
textual Inter file, |inventory| means a textual summary of the contents,
and |inform6| means an Inform 6 program.
writes the repository out into the given |FILE|. There are several possible
formats: |binary| and |text| mean a binary or textual Inter file, |inventory|
means a textual summary of the contents, and |inform6| means an Inform 6
program. At present, only |inventory| can be generated on specific
packages in a repository.
The |generate| stage leaves the repository unchanged, so it's possible
to generate multiple representations of the same repository into different
@ -151,12 +184,12 @@ turn this merged repository into Inform 6 code. (Routines in the template,
therefore, are converted out of Inform 6 and then back into it again. This
sounds inefficient but is surprisingly fast, and enables many optimisations.)
@ |link:T| reads in the I6T template file T, converts it to inter in a very
basic way (creating many splats), and merges it with the repository. Splats
are the unhappiest of inter statements, simply including verbatim snippets
of Inform 6 code.
@ |merge-template <- T| reads in the I6T template file |T|, converts it to
inter in a very basic way (creating many splats), and merges it with the
repository. Splats are the unhappiest of inter statements, simply including
verbatim snippets of Inform 6 code.
@ |parse-linked-matter| examines the splats produced by linking and annotates
@ |parse-linked-matter| examines the splats produced by merging and annotates
them by what they seem to want to do. For example,
|splat &"Global nitwit = 2;\n"|

View file

@ -49,7 +49,7 @@ converts |my.intert| (a textual inter file) to its binary equivalent
a pipeline of processing stages. The pipeline, which must contain at least
one stage, can be quite elaborate (see later), but for example:
|read: 0 <- myfile.inter, resolve-conditional-compilation, generate: inform6 -> myfile.i6|
|read <- myfile.inter, resolve-conditional-compilation, generate inform6 -> myfile.i6|
is a valid three-stage pipeline. The command to do this is then:

View file

@ -1,5 +1,5 @@
read: 0 <- *in
read <- *in
parse-linked-matter
assimilate
resolve-external-symbols
generate: text -> *out
generate text -> *out

View file

@ -1,5 +1,5 @@
read: 0 <- *in
read <- *in
parse-linked-matter
resolve-conditional-compilation
assimilate
generate: inform6 -> *out
generate inform6 -> *out

View file

@ -1,4 +1,4 @@
read: 0 <- *in
read <- *in
parse-linked-matter
resolve-conditional-compilation
generate: text -> *out
generate text -> *out

View file

@ -1,4 +1,4 @@
read: 0 <- *in
read <- *in
parse-linked-matter
resolve-conditional-compilation
generate: text -> *out
generate text -> *out

View file

@ -1,5 +1,5 @@
read: 0 <- *in
read <- *in
parse-linked-matter
resolve-conditional-compilation
assimilate
generate: inform6 -> *out
generate inform6 -> *out

View file

@ -1,3 +1,3 @@
read: 0 <- *in
read <- *in
parse-linked-matter
generate: text -> *out
generate text -> *out

View file

@ -1,5 +1,5 @@
read: 0 <- *in
read <- *in
parse-linked-matter
resolve-conditional-compilation
assimilate
generate: inform6 -> *out
generate inform6 -> *out

View file

@ -1,5 +1,5 @@
read: 0 <- *in
read <- *in
parse-linked-matter
resolve-conditional-compilation
assimilate
generate: inform6 -> *out
generate inform6 -> *out

View file

@ -1,3 +1,3 @@
read: 0 <- *in
read <- *in
eliminate-redundant-labels
generate: text -> *out
generate text -> *out

View file

@ -1,5 +1,5 @@
read: 0 <- *in
read <- *in
parse-linked-matter
resolve-conditional-compilation
assimilate
generate: inform6 -> *out
generate inform6 -> *out

View file

@ -1,5 +1,5 @@
read: 0 <- *in
read <- *in
parse-linked-matter
resolve-conditional-compilation
assimilate
generate: inform6 -> *out
generate inform6 -> *out

View file

@ -30,7 +30,7 @@ pipeline_step *CodeGen::Pipeline::new_step(void) {
step->step_stage = NULL;
step->step_argument = NULL;
step->package_argument = NULL;
step->repository_argument = -1;
step->repository_argument = 0;
CodeGen::Pipeline::clean_step(step);
return step;
}
@ -55,11 +55,10 @@ logging:
void CodeGen::Pipeline::write_step(OUTPUT_STREAM, pipeline_step *step) {
WRITE("%S", step->step_stage->stage_name);
if (step->step_stage->stage_arg != NO_STAGE_ARG) {
if (step->package_argument) WRITE(" %S", step->package_argument);
WRITE(":");
if (step->repository_argument >= 0) WRITE(" %d <-", step->repository_argument);
if (step->target_argument) WRITE(" %S ->", step->target_argument->target_name);
WRITE(" %S", step->step_argument);
WRITE(" %d", step->repository_argument);
if (Str::len(step->package_argument) > 0) WRITE(":%S", step->package_argument);
if (step->step_stage->takes_repository >= 0) WRITE(" <- %S", step->step_argument);
if (step->target_argument) WRITE(" %S -> %S", step->target_argument->target_name, step->step_argument);
}
}
@ -68,11 +67,12 @@ pipeline_step *CodeGen::Pipeline::read_step(text_stream *step, dictionary *D) {
CodeGen::Targets::make_targets();
pipeline_step *ST = CodeGen::Pipeline::new_step();
match_results mr = Regexp::create_mr();
if (Regexp::match(&mr, step, L"(%c+?) *: *(%d) *<- *(%c*)")) {
ST->repository_argument = Str::atoi(mr.exp[1], 0);
ST->step_argument = CodeGen::Pipeline::read_parameter(mr.exp[2], D);
int left_arrow_used = FALSE;
if (Regexp::match(&mr, step, L"(%c+?) *<- *(%c*)")) {
ST->step_argument = CodeGen::Pipeline::read_parameter(mr.exp[1], D);
Str::copy(step, mr.exp[0]);
} else if (Regexp::match(&mr, step, L"(%c+?) *: *(%C*) *-> *(%c*)")) {
left_arrow_used = TRUE;
} else if (Regexp::match(&mr, step, L"(%c+?) *(%C*) *-> *(%c*)")) {
code_generation_target *cgt;
LOOP_OVER(cgt, code_generation_target)
if (Str::eq(mr.exp[1], cgt->target_name))
@ -83,11 +83,15 @@ pipeline_step *CodeGen::Pipeline::read_step(text_stream *step, dictionary *D) {
}
ST->step_argument = CodeGen::Pipeline::read_parameter(mr.exp[2], D);
Str::copy(step, mr.exp[0]);
} else if (Regexp::match(&mr, step, L"(%c+?) *: *(%c*)")) {
ST->step_argument = CodeGen::Pipeline::read_parameter(mr.exp[1], D);
Str::copy(step, mr.exp[0]);
}
if (Regexp::match(&mr, step, L"(%C+?) (%c+)")) {
if (Regexp::match(&mr, step, L"(%C+?) (%d)")) {
ST->repository_argument = Str::atoi(mr.exp[1], 0);
Str::copy(step, mr.exp[0]);
} else if (Regexp::match(&mr, step, L"(%C+?) (%d):(%c*)")) {
ST->repository_argument = Str::atoi(mr.exp[1], 0);
ST->package_argument = CodeGen::Pipeline::read_parameter(mr.exp[2], D);
Str::copy(step, mr.exp[0]);
} else if (Regexp::match(&mr, step, L"(%C+?) (%c+)")) {
ST->package_argument = CodeGen::Pipeline::read_parameter(mr.exp[1], D);
Str::copy(step, mr.exp[0]);
}
@ -100,6 +104,14 @@ pipeline_step *CodeGen::Pipeline::read_step(text_stream *step, dictionary *D) {
WRITE_TO(STDERR, "No such step as '%S'\n", step);
internal_error("no such step code");
}
if (ST->step_stage->takes_repository) {
if (left_arrow_used == FALSE)
internal_error("should use a left arrow");
} else {
if (left_arrow_used)
internal_error("should not use a left arrow");
}
Regexp::dispose_of(&mr);
return ST;
}
@ -189,20 +201,22 @@ void CodeGen::Pipeline::set_repository(codegen_pipeline *S, inter_repository *I)
void CodeGen::Pipeline::run(pathname *P, codegen_pipeline *S, int N, pathname **PP) {
if (S == NULL) return;
if (S->repositories[0] == NULL) S->repositories[0] = Inter::create(1, 32);
clock_t start = clock();
int step_count = 0, step_total = 0;
pipeline_step *step;
LOOP_OVER_LINKED_LIST(step, pipeline_step, S->steps) step_total++;
int active = TRUE, current_repo = 0;
CodeGen::Pipeline::prepare_to_run(S->repositories[current_repo]);
int active = TRUE;
LOOP_OVER_LINKED_LIST(step, pipeline_step, S->steps)
if (active) {
inter_repository *I = S->repositories[current_repo];
if (S->repositories[step->repository_argument] == NULL)
S->repositories[step->repository_argument] = Inter::create(1, 32);
inter_repository *I = S->repositories[step->repository_argument];
if (I == NULL) internal_error("no repository");
CodeGen::Pipeline::lint(I);
CodeGen::Pipeline::prepare_to_run(I);
CodeGen::Pipeline::clean_step(step);
step->the_N = N;
step->the_PP = PP;
@ -215,6 +229,8 @@ void CodeGen::Pipeline::run(pathname *P, codegen_pipeline *S, int N, pathname **
Log::new_stage(STAGE_NAME);
DISCARD_TEXT(STAGE_NAME);
int skip_step = FALSE;
if ((step->step_stage->stage_arg == FILE_STAGE_ARG) ||
(step->step_stage->stage_arg == TEXT_OUT_STAGE_ARG) ||
(step->step_stage->stage_arg == EXT_FILE_STAGE_ARG) ||
@ -222,9 +238,9 @@ void CodeGen::Pipeline::run(pathname *P, codegen_pipeline *S, int N, pathname **
if (Str::eq(step->step_argument, I"*log")) {
step->to_debugging_log = TRUE;
} else if (Str::eq(step->step_argument, I"*memory")) {
step->from_memory = TRUE;
S->repositories[step->repository_argument] = S->memory_repository;
skip_step = TRUE;
} else {
step->parsed_filename = Filenames::from_text(step->step_argument);
int slashes = FALSE;
LOOP_THROUGH_TEXT(pos, step->step_argument)
if (Str::get(pos) == '/')
@ -253,9 +269,7 @@ void CodeGen::Pipeline::run(pathname *P, codegen_pipeline *S, int N, pathname **
step->text_out_file = T;
}
if ((step->from_memory) && (step->repository_argument >= 0))
S->repositories[step->repository_argument] = S->memory_repository;
else
if (skip_step == FALSE)
active = (*(step->step_stage->execute))(step);
if (((step->step_stage->stage_arg == TEXT_OUT_STAGE_ARG) ||
@ -263,11 +277,6 @@ void CodeGen::Pipeline::run(pathname *P, codegen_pipeline *S, int N, pathname **
(step->to_debugging_log == FALSE)) {
STREAM_CLOSE(T);
}
if (step->repository_argument >= 0) {
current_repo = step->repository_argument;
CodeGen::Pipeline::prepare_to_run(S->repositories[current_repo]);
}
}
}
@ -359,5 +368,5 @@ void CodeGen::Pipeline::visitor(inter_repository *I, inter_frame P, void *state)
internal_error("zap");
}
CodeGen::Link::guard(Inter::Defn::verify_children_inner(P));
CodeGen::MergeTemplate::guard(Inter::Defn::verify_children_inner(P));
}

View file

@ -8,6 +8,7 @@ following. Some stages are invoked with an argument, often the filename to
write output to; others are not.
@e NO_STAGE_ARG from 1
@e GENERAL_STAGE_ARG
@e FILE_STAGE_ARG
@e TEXT_OUT_STAGE_ARG
@e EXT_FILE_STAGE_ARG
@ -19,14 +20,16 @@ typedef struct pipeline_stage {
struct text_stream *stage_name;
int (*execute)(void *);
int stage_arg; /* one of the |*_ARG| values above */
int takes_repository;
MEMORY_MANAGEMENT
} pipeline_stage;
pipeline_stage *CodeGen::Stage::new(text_stream *name, int (*X)(struct pipeline_step *), int arg) {
pipeline_stage *CodeGen::Stage::new(text_stream *name, int (*X)(struct pipeline_step *), int arg, int tr) {
pipeline_stage *stage = CREATE(pipeline_stage);
stage->stage_name = Str::duplicate(name);
stage->execute = (int (*)(void *)) X;
stage->stage_arg = arg;
stage->takes_repository = tr;
return stage;
}
@ -40,15 +43,17 @@ int stages_made = FALSE;
void CodeGen::Stage::make_stages(void) {
if (stages_made == FALSE) {
stages_made = TRUE;
CodeGen::Stage::new(I"stop", CodeGen::Stage::run_stop_stage, NO_STAGE_ARG);
CodeGen::Stage::new(I"read", CodeGen::Stage::run_read_stage, FILE_STAGE_ARG);
CodeGen::Stage::new(I"stop", CodeGen::Stage::run_stop_stage, NO_STAGE_ARG, FALSE);
CodeGen::Stage::new(I"read", CodeGen::Stage::run_read_stage, FILE_STAGE_ARG, TRUE);
CodeGen::Stage::new(I"extract", CodeGen::Stage::run_extract_stage, GENERAL_STAGE_ARG, TRUE);
CodeGen::create_pipeline_stage();
CodeGen::Assimilate::create_pipeline_stage();
CodeGen::Eliminate::create_pipeline_stage();
CodeGen::Externals::create_pipeline_stage();
CodeGen::Labels::create_pipeline_stage();
CodeGen::Link::create_pipeline_stage();
CodeGen::MergeTemplate::create_pipeline_stage();
CodeGen::PLM::create_pipeline_stage();
CodeGen::RCC::create_pipeline_stage();
CodeGen::ReconcileVerbs::create_pipeline_stage();
@ -65,10 +70,13 @@ int CodeGen::Stage::run_stop_stage(pipeline_step *step) {
}
int CodeGen::Stage::run_read_stage(pipeline_step *step) {
filename *F = Filenames::from_text(step->step_argument);
if (Inter::Binary::test_file(F))
Inter::Binary::read(step->repository, F);
else
Inter::Textual::read(step->repository, F);
filename *F = step->parsed_filename;
if (Inter::Binary::test_file(F)) Inter::Binary::read(step->repository, F);
else Inter::Textual::read(step->repository, F);
return TRUE;
}
int CodeGen::Stage::run_extract_stage(pipeline_step *step) {
LOG("Arg is %S.\n", step->step_argument);
return TRUE;
}

View file

@ -6,7 +6,7 @@ To assimilate the material in parsed non-code splats.
=
void CodeGen::Assimilate::create_pipeline_stage(void) {
CodeGen::Stage::new(I"assimilate", CodeGen::Assimilate::run_pipeline_stage, NO_STAGE_ARG);
CodeGen::Stage::new(I"assimilate", CodeGen::Assimilate::run_pipeline_stage, NO_STAGE_ARG, FALSE);
}
int no_assimilated_actions = 0;
@ -20,7 +20,7 @@ int CodeGen::Assimilate::run_pipeline_stage(pipeline_step *step) {
no_assimilated_actions = 0;
no_assimilated_commands = 0;
no_assimilated_arrays = 0;
CodeGen::Link::ensure_search_list(I);
CodeGen::MergeTemplate::ensure_search_list(I);
Inter::traverse_tree(I, CodeGen::Assimilate::visitor1, NULL, NULL, SPLAT_IST);
Inter::traverse_tree(I, CodeGen::Assimilate::visitor2, NULL, NULL, SPLAT_IST);
CodeGen::Assimilate::function_bodies();
@ -100,7 +100,7 @@ void CodeGen::Assimilate::visitor3(inter_repository *I, inter_frame P, void *sta
@<Parse text of splat for identifier and value@>;
if ((proceed) && (unchecked_kind_symbol)) {
if (plm == DEFAULT_PLM) {
inter_symbol *symbol = CodeGen::Link::find_name(I, identifier, TRUE);
inter_symbol *symbol = CodeGen::MergeTemplate::find_name(I, identifier, TRUE);
if (symbol == NULL) plm = CONSTANT_PLM;
}
if (plm != DEFAULT_PLM) @<Act on parsed constant definition@>;
@ -197,7 +197,7 @@ void CodeGen::Assimilate::visitor3(inter_repository *I, inter_frame P, void *sta
case FAKEACTION_PLM:
case OBJECT_PLM: {
@<Assimilate a value@>;
CodeGen::Link::guard(Inter::Constant::new_numerical(IBM,
CodeGen::MergeTemplate::guard(Inter::Constant::new_numerical(IBM,
Inter::SymbolsTables::id_from_symbol(I, Inter::Bookmarks::package(IBM), con_name),
Inter::SymbolsTables::id_from_symbol(I, Inter::Bookmarks::package(IBM), unchecked_kind_symbol), v1, v2,
(inter_t) Inter::Bookmarks::baseline(IBM) + 1, NULL));
@ -206,7 +206,7 @@ void CodeGen::Assimilate::visitor3(inter_repository *I, inter_frame P, void *sta
}
case GLOBAL_PLM:
@<Assimilate a value@>;
CodeGen::Link::guard(Inter::Variable::new(IBM,
CodeGen::MergeTemplate::guard(Inter::Variable::new(IBM,
Inter::SymbolsTables::id_from_symbol(I, Inter::Bookmarks::package(IBM), con_name),
Inter::SymbolsTables::id_from_symbol(I, Inter::Bookmarks::package(IBM), unchecked_kind_symbol), v1, v2,
(inter_t) Inter::Bookmarks::baseline(IBM) + 1, NULL));
@ -219,7 +219,7 @@ void CodeGen::Assimilate::visitor3(inter_repository *I, inter_frame P, void *sta
if ((attr_symbol == NULL) || (!Inter::Symbols::is_defined(attr_symbol))) {
if (attr_symbol == NULL) attr_symbol = con_name;
CodeGen::Link::guard(Inter::Property::new(IBM,
CodeGen::MergeTemplate::guard(Inter::Property::new(IBM,
Inter::SymbolsTables::id_from_symbol(I, Inter::Bookmarks::package(IBM), attr_symbol),
Inter::SymbolsTables::id_from_symbol(I, Inter::Bookmarks::package(IBM), truth_state_kind_symbol),
(inter_t) Inter::Bookmarks::baseline(IBM) + 1, NULL));
@ -245,7 +245,7 @@ void CodeGen::Assimilate::visitor3(inter_repository *I, inter_frame P, void *sta
break;
}
case PROPERTY_PLM: {
CodeGen::Link::guard(Inter::Property::new(IBM,
CodeGen::MergeTemplate::guard(Inter::Property::new(IBM,
Inter::SymbolsTables::id_from_symbol(I, Inter::Bookmarks::package(IBM), con_name),
Inter::SymbolsTables::id_from_symbol(I, Inter::Bookmarks::package(IBM), unchecked_kind_symbol),
(inter_t) Inter::Bookmarks::baseline(IBM) + 1, NULL));
@ -324,7 +324,7 @@ void CodeGen::Assimilate::visitor3(inter_repository *I, inter_frame P, void *sta
array_in_progress.data[pos++] = v1_pile[i];
array_in_progress.data[pos++] = v2_pile[i];
}
CodeGen::Link::guard(Inter::Defn::verify_construct(Inter::Bookmarks::package(IBM), array_in_progress));
CodeGen::MergeTemplate::guard(Inter::Defn::verify_construct(Inter::Bookmarks::package(IBM), array_in_progress));
Inter::Frame::insert(array_in_progress, IBM);
if (plm == ARRAY_PLM) {
@ -421,12 +421,12 @@ void CodeGen::Assimilate::visitor3(inter_repository *I, inter_frame P, void *sta
if (Str::len(value) == 0) break;
inter_symbol *loc_name = Inter::SymbolsTables::create_with_unique_name(Inter::Package::local_symbols(block_name), value);
Inter::Symbols::local(loc_name);
CodeGen::Link::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, block_name, loc_name, unchecked_kind_symbol, 0, (inter_t) Inter::Bookmarks::baseline(IBM) + 1, NULL));
DISCARD_TEXT(value);
}
}
CodeGen::Link::guard(Inter::Code::new(IBM, (int) (inter_t) Inter::Bookmarks::baseline(IBM) + 1, NULL));
CodeGen::MergeTemplate::guard(Inter::Code::new(IBM, (int) (inter_t) Inter::Bookmarks::baseline(IBM) + 1, NULL));
if (Str::len(body) > 0) {
int L = Str::len(body) - 1;
while ((L>0) && (Str::get_at(body, L) != ']')) L--;
@ -439,7 +439,7 @@ void CodeGen::Assimilate::visitor3(inter_repository *I, inter_frame P, void *sta
inter_symbol *rsymb = CodeGen::Assimilate::maybe_extern(I, identifier, Inter::Bookmarks::scope(IBM));
Inter::Symbols::annotate_i(I, rsymb, ASSIMILATED_IANN, 1);
CodeGen::Link::guard(Inter::Constant::new_function(IBM,
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),
@ -457,7 +457,7 @@ void CodeGen::Assimilate::visitor3(inter_repository *I, inter_frame P, void *sta
@ =
inter_package *CodeGen::Assimilate::new_package(inter_bookmark *IBM, inter_symbol *pname, inter_symbol *ptype) {
inter_package *P = NULL;
CodeGen::Link::guard(Inter::Package::new_package(IBM, pname,
CodeGen::MergeTemplate::guard(Inter::Package::new_package(IBM, pname,
ptype, (inter_t) Inter::Bookmarks::baseline(IBM) + 1, NULL, &P));
return P;
}
@ -516,7 +516,7 @@ inter_symbol *CodeGen::Assimilate::maybe_extern(inter_repository *I, text_stream
@ =
void CodeGen::Assimilate::ensure_action(inter_repository *I, inter_frame P, text_stream *value) {
if (CodeGen::Link::find_name(I, value, TRUE) == NULL) {
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);
@ -531,16 +531,16 @@ void CodeGen::Assimilate::ensure_action(inter_repository *I, inter_frame P, text
WRITE_TO(unsharped, "%SSub", value);
Str::delete_first_character(unsharped);
Str::delete_first_character(unsharped);
inter_symbol *txsymb = CodeGen::Link::find_name(I, unsharped, TRUE);
inter_symbol *txsymb = CodeGen::MergeTemplate::find_name(I, unsharped, TRUE);
inter_symbol *xsymb = Inter::SymbolsTables::create_with_unique_name(Inter::Bookmarks::scope(IBM), unsharped);
if (txsymb) Inter::SymbolsTables::equate(xsymb, txsymb);
DISCARD_TEXT(unsharped);
CodeGen::Link::guard(Inter::Constant::new_numerical(IBM,
CodeGen::MergeTemplate::guard(Inter::Constant::new_numerical(IBM,
Inter::SymbolsTables::id_from_symbol(I, Inter::Bookmarks::package(IBM), asymb),
Inter::SymbolsTables::id_from_symbol(I, Inter::Bookmarks::package(IBM), action_kind_symbol),
LITERAL_IVAL, 10000, (inter_t) Inter::Bookmarks::baseline(IBM) + 1, NULL));
Inter::Symbols::annotate_i(I, asymb, ACTION_IANN, 1);
CodeGen::Link::build_r(Inter::Bookmarks::package(IBM));
CodeGen::MergeTemplate::build_r(Inter::Bookmarks::package(IBM));
}
}
@ -636,7 +636,7 @@ void CodeGen::Assimilate::value(inter_repository *I, inter_package *pack, inter_
}
match_results mr = Regexp::create_mr();
if (Regexp::match(&mr, S, L"scope=(%i+)")) {
inter_symbol *symb = CodeGen::Link::find_name(I, mr.exp[0], TRUE);
inter_symbol *symb = CodeGen::MergeTemplate::find_name(I, mr.exp[0], TRUE);
while ((symb) && (symb->equated_to)) symb = symb->equated_to;
if (symb) {
if (Inter::Symbols::read_annotation(symb, SCOPE_FILTER_IANN) != 1)
@ -645,7 +645,7 @@ void CodeGen::Assimilate::value(inter_repository *I, inter_package *pack, inter_
}
}
if (Regexp::match(&mr, S, L"noun=(%i+)")) {
inter_symbol *symb = CodeGen::Link::find_name(I, mr.exp[0], TRUE);
inter_symbol *symb = CodeGen::MergeTemplate::find_name(I, mr.exp[0], TRUE);
while ((symb) && (symb->equated_to)) symb = symb->equated_to;
if (symb) {
if (Inter::Symbols::read_annotation(symb, NOUN_FILTER_IANN) != 1)
@ -655,7 +655,7 @@ void CodeGen::Assimilate::value(inter_repository *I, inter_package *pack, inter_
}
}
inter_symbol *symb = CodeGen::Link::find_name(I, S, TRUE);
inter_symbol *symb = CodeGen::MergeTemplate::find_name(I, S, TRUE);
if (symb) {
Inter::Symbols::to_data(I, pack, symb, val1, val2); return;
}
@ -680,7 +680,7 @@ inter_symbol *CodeGen::Assimilate::compute_constant(inter_repository *I, inter_p
Str::copy(glob_storage, sch->converted_from);
inter_symbol *mcc_name = CodeGen::Assimilate::computed_constant_symbol(pack);
CodeGen::Link::guard(Inter::Constant::new_numerical(IBM,
CodeGen::MergeTemplate::guard(Inter::Constant::new_numerical(IBM,
Inter::SymbolsTables::id_from_symbol(I, pack, mcc_name),
Inter::SymbolsTables::id_from_symbol(I, pack, unchecked_kind_symbol), GLOB_IVAL, ID,
(inter_t) Inter::Bookmarks::baseline(IBM) + 1, NULL));
@ -723,7 +723,7 @@ inter_symbol *CodeGen::Assimilate::compute_constant_eval(inter_repository *I, in
inter_t v1 = UNDEF_IVAL, v2 = 0;
switch (t->ist_type) {
case IDENTIFIER_ISTT: {
inter_symbol *symb = CodeGen::Link::find_name(I, t->material, TRUE);
inter_symbol *symb = CodeGen::MergeTemplate::find_name(I, t->material, TRUE);
if (symb) return symb;
LOG("Failed to identify %S\n", t->material);
break;
@ -738,7 +738,7 @@ inter_symbol *CodeGen::Assimilate::compute_constant_eval(inter_repository *I, in
}
if (v1 == UNDEF_IVAL) return NULL;
inter_symbol *mcc_name = CodeGen::Assimilate::computed_constant_symbol(pack);
CodeGen::Link::guard(Inter::Constant::new_numerical(IBM,
CodeGen::MergeTemplate::guard(Inter::Constant::new_numerical(IBM,
Inter::SymbolsTables::id_from_symbol(I, pack, mcc_name),
Inter::SymbolsTables::id_from_symbol(I, pack, unchecked_kind_symbol), v1, v2,
(inter_t) Inter::Bookmarks::baseline(IBM) + 1, NULL));
@ -756,7 +756,7 @@ inter_symbol *CodeGen::Assimilate::compute_constant_unary_operation(inter_reposi
internal_error("can't extend frame");
array_in_progress.data[pos] = LITERAL_IVAL; array_in_progress.data[pos+1] = 0;
Inter::Symbols::to_data(I, pack, i1, &(array_in_progress.data[pos+2]), &(array_in_progress.data[pos+3]));
CodeGen::Link::guard(Inter::Defn::verify_construct(Inter::Bookmarks::package(IBM), array_in_progress));
CodeGen::MergeTemplate::guard(Inter::Defn::verify_construct(Inter::Bookmarks::package(IBM), array_in_progress));
Inter::Frame::insert(array_in_progress, IBM);
return mcc_name;
}
@ -770,7 +770,7 @@ inter_symbol *CodeGen::Assimilate::compute_constant_binary_operation(inter_t op,
internal_error("can't extend frame");
Inter::Symbols::to_data(I, pack, i1, &(array_in_progress.data[pos]), &(array_in_progress.data[pos+1]));
Inter::Symbols::to_data(I, pack, i2, &(array_in_progress.data[pos+2]), &(array_in_progress.data[pos+3]));
CodeGen::Link::guard(Inter::Defn::verify_construct(Inter::Bookmarks::package(IBM), array_in_progress));
CodeGen::MergeTemplate::guard(Inter::Defn::verify_construct(Inter::Bookmarks::package(IBM), array_in_progress));
Inter::Frame::insert(array_in_progress, IBM);
return mcc_name;
}
@ -810,7 +810,7 @@ int CodeGen::Assimilate::routine_body(inter_bookmark *IBM, inter_symbol *block_n
return TRUE;
#endif
#ifndef CORE_MODULE
CodeGen::Link::entire_splat(IBM, NULL, body, offset, block_name);
CodeGen::MergeTemplate::entire_splat(IBM, NULL, body, offset, block_name);
LOG("Splat %d\n", rb_splat_count++);
return FALSE;
#endif

View file

@ -13,7 +13,7 @@ on the Inter functions in a repository.
=
void CodeGen::Labels::create_pipeline_stage(void) {
CodeGen::Stage::new(I"eliminate-redundant-labels", CodeGen::Labels::run_pipeline_stage, NO_STAGE_ARG);
CodeGen::Stage::new(I"eliminate-redundant-labels", CodeGen::Labels::run_pipeline_stage, NO_STAGE_ARG, FALSE);
}
int CodeGen::Labels::run_pipeline_stage(pipeline_step *step) {

View file

@ -14,7 +14,7 @@ isn't used.
=
void CodeGen::Eliminate::create_pipeline_stage(void) {
CodeGen::Stage::new(I"eliminate-redundant-code",
CodeGen::Eliminate::run_pipeline_stage, NO_STAGE_ARG);
CodeGen::Eliminate::run_pipeline_stage, NO_STAGE_ARG, FALSE);
}
int CodeGen::Eliminate::run_pipeline_stage(pipeline_step *step) {

View file

@ -1,27 +1,27 @@
[CodeGen::Link::] Linker.
[CodeGen::MergeTemplate::] Linker.
To link inter from I7 with template code.
@h Link.
=
void CodeGen::Link::create_pipeline_stage(void) {
CodeGen::Stage::new(I"link", CodeGen::Link::run_pipeline_stage, TEMPLATE_FILE_STAGE_ARG);
void CodeGen::MergeTemplate::create_pipeline_stage(void) {
CodeGen::Stage::new(I"merge-template", CodeGen::MergeTemplate::run_pipeline_stage, TEMPLATE_FILE_STAGE_ARG, TRUE);
}
int CodeGen::Link::run_pipeline_stage(pipeline_step *step) {
int CodeGen::MergeTemplate::run_pipeline_stage(pipeline_step *step) {
inter_package *main_package = Inter::Packages::main(step->repository);
inter_bookmark IBM;
if (main_package) IBM = Inter::Bookmarks::at_end_of_this_package(main_package);
else IBM = Inter::Bookmarks::at_start_of_this_repository(step->repository);
CodeGen::Link::link(&IBM, step->step_argument, step->the_N, step->the_PP, NULL);
CodeGen::MergeTemplate::link(&IBM, step->step_argument, step->the_N, step->the_PP, NULL);
return TRUE;
}
inter_symbols_table *link_search_list[10];
int link_search_list_len = 0;
void CodeGen::Link::ensure_search_list(inter_repository *I) {
void CodeGen::MergeTemplate::ensure_search_list(inter_repository *I) {
if (link_search_list_len == 0) {
if (template_package) {
link_search_list[1] = Inter::Packages::scope(Inter::Packages::main(I));
@ -34,29 +34,29 @@ void CodeGen::Link::ensure_search_list(inter_repository *I) {
}
}
void CodeGen::Link::link(inter_bookmark *IBM, text_stream *template_file, int N, pathname **PP, inter_package *owner) {
void CodeGen::MergeTemplate::link(inter_bookmark *IBM, text_stream *template_file, int N, pathname **PP, inter_package *owner) {
if (IBM == NULL) internal_error("no inter to link with");
inter_repository *I = IBM->read_into;
Inter::traverse_tree(I, CodeGen::Link::visitor, NULL, NULL, 0);
Inter::traverse_tree(I, CodeGen::MergeTemplate::visitor, NULL, NULL, 0);
if (template_package == NULL) internal_error("unable to find template");
CodeGen::Link::ensure_search_list(I);
CodeGen::MergeTemplate::ensure_search_list(I);
inter_bookmark link_bookmark =
Inter::Bookmarks::at_end_of_this_package(template_package);
I6T_kit kit = TemplateReader::kit_out(&link_bookmark, &(CodeGen::Link::receive_raw), &(CodeGen::Link::receive_command), NULL);
I6T_kit kit = TemplateReader::kit_out(&link_bookmark, &(CodeGen::MergeTemplate::receive_raw), &(CodeGen::MergeTemplate::receive_command), NULL);
kit.no_i6t_file_areas = N;
for (int i=0; i<N; i++) kit.i6t_files[i] = PP[i];
TEMPORARY_TEXT(T);
TemplateReader::I6T_file_intervene(T, EARLY_LINK_STAGE, NULL, NULL, &kit);
CodeGen::Link::receive_raw(T, &kit);
CodeGen::MergeTemplate::receive_raw(T, &kit);
DISCARD_TEXT(T);
TemplateReader::extract(template_file, &kit);
}
void CodeGen::Link::visitor(inter_repository *I, inter_frame P, void *state) {
void CodeGen::MergeTemplate::visitor(inter_repository *I, inter_frame P, void *state) {
if (P.data[ID_IFLD] == LINK_IST) {
text_stream *S1 = Inter::get_text(P.repo_segment->owning_repo, P.data[SEGMENT_LINK_IFLD]);
text_stream *S2 = Inter::get_text(P.repo_segment->owning_repo, P.data[PART_LINK_IFLD]);
@ -70,7 +70,7 @@ void CodeGen::Link::visitor(inter_repository *I, inter_frame P, void *state) {
dictionary *linkable_namespace = NULL;
int linkable_namespace_created = FALSE;
inter_symbol *CodeGen::Link::find_in_namespace(inter_repository *I, text_stream *name) {
inter_symbol *CodeGen::MergeTemplate::find_in_namespace(inter_repository *I, text_stream *name) {
if (linkable_namespace_created == FALSE) {
linkable_namespace_created = TRUE;
linkable_namespace = Dictionaries::new(512, FALSE);
@ -81,7 +81,7 @@ inter_symbol *CodeGen::Link::find_in_namespace(inter_repository *I, text_stream
if (C.data[ID_IFLD] == PACKAGE_IST) {
inter_package *P = Inter::Package::defined_by_frame(C);
if (Str::ne(P->package_name->symbol_name, I"template"))
CodeGen::Link::build_r(P);
CodeGen::MergeTemplate::build_r(P);
}
}
@ -92,18 +92,18 @@ inter_symbol *CodeGen::Link::find_in_namespace(inter_repository *I, text_stream
return NULL;
}
void CodeGen::Link::build_r(inter_package *P) {
CodeGen::Link::build_only(P);
void CodeGen::MergeTemplate::build_r(inter_package *P) {
CodeGen::MergeTemplate::build_only(P);
inter_frame D = Inter::Symbols::defining_frame(P->package_name);
LOOP_THROUGH_INTER_CHILDREN(C, D) {
if (C.data[ID_IFLD] == PACKAGE_IST) {
inter_package *Q = Inter::Package::defined_by_frame(C);
CodeGen::Link::build_r(Q);
CodeGen::MergeTemplate::build_r(Q);
}
}
}
void CodeGen::Link::build_only(inter_package *P) {
void CodeGen::MergeTemplate::build_only(inter_package *P) {
inter_symbols_table *T = Inter::Packages::scope(P);
if (T) {
for (int i=0; i<T->size; i++) {
@ -119,19 +119,19 @@ void CodeGen::Link::build_only(inter_package *P) {
}
}
inter_symbol *CodeGen::Link::find_name(inter_repository *I, text_stream *S, int deeply) {
inter_symbol *CodeGen::MergeTemplate::find_name(inter_repository *I, text_stream *S, int deeply) {
for (int i=0; i<link_search_list_len; i++) {
inter_symbol *symb = Inter::SymbolsTables::symbol_from_name_not_equating(link_search_list[i], S);
if (symb) return symb;
}
if (deeply) {
inter_symbol *symb = CodeGen::Link::find_in_namespace(I, S);
inter_symbol *symb = CodeGen::MergeTemplate::find_in_namespace(I, S);
if (symb) return symb;
}
return NULL;
}
void CodeGen::Link::log_search_path(void) {
void CodeGen::MergeTemplate::log_search_path(void) {
for (int i=0; i<link_search_list_len; i++) {
LOG("Search %d: $4\n", i, link_search_list[i]);
}
@ -139,15 +139,15 @@ void CodeGen::Link::log_search_path(void) {
int link_pie_count = 0;
void CodeGen::Link::guard(inter_error_message *ERR) {
void CodeGen::MergeTemplate::guard(inter_error_message *ERR) {
if (ERR) { Inter::Errors::issue(ERR); internal_error("inter error"); }
}
void CodeGen::Link::entire_splat(inter_bookmark *IBM, text_stream *origin, text_stream *content, inter_t level, inter_symbol *code_block) {
void CodeGen::MergeTemplate::entire_splat(inter_bookmark *IBM, text_stream *origin, text_stream *content, inter_t level, inter_symbol *code_block) {
inter_t SID = Inter::create_text(IBM->read_into);
text_stream *glob_storage = Inter::get_text(IBM->read_into, SID);
Str::copy(glob_storage, content);
CodeGen::Link::guard(Inter::Splat::new(IBM, code_block, SID, 0, level, 0, NULL));
CodeGen::MergeTemplate::guard(Inter::Splat::new(IBM, code_block, SID, 0, level, 0, NULL));
}
@
@ -162,7 +162,7 @@ void CodeGen::Link::entire_splat(inter_bookmark *IBM, text_stream *origin, text_
@d SUBORDINATE_FILTER_BITS (COMMENTED_FILTER_BIT + SQUOTED_FILTER_BIT + DQUOTED_FILTER_BIT + ROUTINED_FILTER_BIT)
=
void CodeGen::Link::receive_raw(text_stream *S, I6T_kit *kit) {
void CodeGen::MergeTemplate::receive_raw(text_stream *S, I6T_kit *kit) {
text_stream *R = Str::new();
int mode = IGNORE_WS_FILTER_BIT;
LOOP_THROUGH_TEXT(pos, S) {
@ -204,22 +204,22 @@ void CodeGen::Link::receive_raw(text_stream *S, I6T_kit *kit) {
}
PUT_TO(R, c);
if ((c == ';') && (!(mode & SUBORDINATE_FILTER_BITS))) {
CodeGen::Link::chunked_raw(R, kit);
CodeGen::MergeTemplate::chunked_raw(R, kit);
mode = IGNORE_WS_FILTER_BIT;
}
}
CodeGen::Link::chunked_raw(R, kit);
CodeGen::MergeTemplate::chunked_raw(R, kit);
Str::clear(S);
}
void CodeGen::Link::chunked_raw(text_stream *S, I6T_kit *kit) {
void CodeGen::MergeTemplate::chunked_raw(text_stream *S, I6T_kit *kit) {
if (Str::len(S) == 0) return;
PUT_TO(S, '\n');
CodeGen::Link::entire_splat(kit->IBM, I"template", S, (inter_t) (Inter::Bookmarks::baseline(kit->IBM) + 1), Inter::Bookmarks::package(kit->IBM)->package_name);
CodeGen::MergeTemplate::entire_splat(kit->IBM, I"template", S, (inter_t) (Inter::Bookmarks::baseline(kit->IBM) + 1), Inter::Bookmarks::package(kit->IBM)->package_name);
Str::clear(S);
}
void CodeGen::Link::receive_command(OUTPUT_STREAM, text_stream *command, text_stream *argument, I6T_kit *kit) {
void CodeGen::MergeTemplate::receive_command(OUTPUT_STREAM, text_stream *command, text_stream *argument, I6T_kit *kit) {
if ((Str::eq_wide_string(command, L"plugin")) ||
(Str::eq_wide_string(command, L"type")) ||
(Str::eq_wide_string(command, L"open-file")) ||

View file

@ -6,7 +6,7 @@ To generate the initial state of storage for variables.
=
void CodeGen::PLM::create_pipeline_stage(void) {
CodeGen::Stage::new(I"parse-linked-matter", CodeGen::PLM::run_pipeline_stage, NO_STAGE_ARG);
CodeGen::Stage::new(I"parse-linked-matter", CodeGen::PLM::run_pipeline_stage, NO_STAGE_ARG, FALSE);
}
int CodeGen::PLM::run_pipeline_stage(pipeline_step *step) {

View file

@ -6,7 +6,7 @@ To reconcile clashes between assimilated and originally generated verbs.
=
void CodeGen::ReconcileVerbs::create_pipeline_stage(void) {
CodeGen::Stage::new(I"reconcile-verbs", CodeGen::ReconcileVerbs::run_pipeline_stage, NO_STAGE_ARG);
CodeGen::Stage::new(I"reconcile-verbs", CodeGen::ReconcileVerbs::run_pipeline_stage, NO_STAGE_ARG, FALSE);
}
int CodeGen::ReconcileVerbs::run_pipeline_stage(pipeline_step *step) {

View file

@ -6,7 +6,7 @@ To make sure certain symbol names translate into globally unique target symbols.
=
void CodeGen::Externals::create_pipeline_stage(void) {
CodeGen::Stage::new(I"resolve-external-symbols", CodeGen::Externals::run_pipeline_stage, NO_STAGE_ARG);
CodeGen::Stage::new(I"resolve-external-symbols", CodeGen::Externals::run_pipeline_stage, NO_STAGE_ARG, FALSE);
}
int resolution_failed = FALSE;

View file

@ -6,7 +6,7 @@ To generate the initial state of storage for variables.
=
void CodeGen::RCC::create_pipeline_stage(void) {
CodeGen::Stage::new(I"resolve-conditional-compilation", CodeGen::RCC::run_pipeline_stage, NO_STAGE_ARG);
CodeGen::Stage::new(I"resolve-conditional-compilation", CodeGen::RCC::run_pipeline_stage, NO_STAGE_ARG, FALSE);
}
int CodeGen::RCC::run_pipeline_stage(pipeline_step *step) {

View file

@ -6,7 +6,7 @@ To make sure certain symbol names translate into globally unique target symbols.
=
void CodeGen::Uniqueness::create_pipeline_stage(void) {
CodeGen::Stage::new(I"make-identifiers-unique", CodeGen::Uniqueness::run_pipeline_stage, NO_STAGE_ARG);
CodeGen::Stage::new(I"make-identifiers-unique", CodeGen::Uniqueness::run_pipeline_stage, NO_STAGE_ARG, FALSE);
}
int CodeGen::Uniqueness::run_pipeline_stage(pipeline_step *step) {

View file

@ -230,10 +230,10 @@ void Primitives::emit_one(inter_repository *I, inter_bookmark *IBM, text_stream
if (to == NULL) internal_error("no symbol");
TEMPORARY_TEXT(prim_command);
WRITE_TO(prim_command, "primitive %S %S", prim, category);
CodeGen::Link::guard(Inter::Defn::read_construct_text(prim_command, NULL, IBM));
CodeGen::MergeTemplate::guard(Inter::Defn::read_construct_text(prim_command, NULL, IBM));
inter_error_message *E = NULL;
*to = Inter::Textual::find_symbol(I, NULL, Inter::get_global_symbols(I), prim, PRIMITIVE_IST, &E);
CodeGen::Link::guard(E);
CodeGen::MergeTemplate::guard(E);
DISCARD_TEXT(prim_command);
}

View file

@ -168,7 +168,7 @@ inter_symbol *Veneer::make(inter_package *veneer_package, inter_bookmark *IBM, i
*slot = Inter::SymbolsTables::symbol_from_name_creating(tab, S);
if (Str::len(T) > 0) Inter::Symbols::set_translate(*slot, T);
Inter::Symbols::annotate_i(IBM->read_into, *slot, VENEER_IANN, 1);
CodeGen::Link::guard(Inter::Constant::new_numerical(IBM,
CodeGen::MergeTemplate::guard(Inter::Constant::new_numerical(IBM,
Inter::SymbolsTables::id_from_symbol(IBM->read_into, veneer_package, *slot),
Inter::SymbolsTables::id_from_symbol(IBM->read_into, veneer_package, unchecked_kind_symbol),
LITERAL_IVAL, 0,

View file

@ -6,7 +6,7 @@ To generate final code from intermediate code.
=
void CodeGen::create_pipeline_stage(void) {
CodeGen::Stage::new(I"generate", CodeGen::run_pipeline_stage, TEXT_OUT_STAGE_ARG);
CodeGen::Stage::new(I"generate", CodeGen::run_pipeline_stage, TEXT_OUT_STAGE_ARG, FALSE);
}
int CodeGen::run_pipeline_stage(pipeline_step *step) {

View file

@ -11,7 +11,7 @@ Chapter 1: Setting Up
Pipelines
Chapter 2: Miscellaneous Pipeline Stages
Linker
Merge Template
Template Reader
Parse Linked Matter
Resolving Conditional Compilation