1
0
Fork 0
mirror of https://github.com/ganelson/inform.git synced 2024-07-05 16:44:21 +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_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;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;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="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="reserved">return</span><span class="plain"> </span><span class="identifier">step</span><span class="plain">;</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="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="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;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">" %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="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">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;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;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;"</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="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="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="plain">}</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="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="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="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="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="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="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">[2], </span><span class="identifier">D</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="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="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="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> <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="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">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="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="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">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="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="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">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="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="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="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="reserved">return</span><span class="plain"> </span><span class="identifier">ST</span><span class="plain">;</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">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="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="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">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="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="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="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="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="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">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="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::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="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> <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">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="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="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">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> <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="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="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="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="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="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="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> <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="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="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="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">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="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="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> <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="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="identifier">STREAM_CLOSE</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">);</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>
<span class="plain">}</span> <span class="plain">}</span>
</pre> </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="identifier">internal_error</span><span class="plain">(</span><span class="string">"zap"</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::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> <span class="plain">}</span>
</pre> </pre>

View file

@ -21,6 +21,7 @@ write output to; others are not.
<pre class="definitions"> <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">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">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">TEXT_OUT_STAGE_ARG</span>
<span class="definitionkeyword">enum</span> <span class="constant">EXT_FILE_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">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">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">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="identifier">MEMORY_MANAGEMENT</span>
<span class="plain">} </span><span class="reserved">pipeline_stage</span><span class="plain">;</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="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;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;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;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="reserved">return</span><span class="plain"> </span><span class="identifier">stage</span><span class="plain">;</span>
<span class="plain">}</span> <span class="plain">}</span>
</pre> </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">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="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="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">"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="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::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::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::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::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::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::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::RCC::create_pipeline_stage</span><span class="plain">();</span>
<span class="functiontext">CodeGen::ReconcileVerbs::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="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="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="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="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="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">else</span> <span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</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="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="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="plain">}</span> <span class="plain">}</span>
</pre> </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_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"> <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"> <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--> <!--End of weave-->

View file

@ -18,7 +18,7 @@
<pre class="display"> <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="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="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">no_assimilated_actions</span><span class="plain"> = 0;</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_actions</span><span class="plain"> = 0;</span>
<span class="identifier">no_assimilated_commands</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="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::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="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> <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> &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">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="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="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="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> <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">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> <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> &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">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="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> <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="plain">}</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">GLOBAL_PLM</span><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> &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">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="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> <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">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="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">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="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> <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="reserved">break</span><span class="plain">;</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="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">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">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> <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">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="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="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="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> <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="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">value</span><span class="plain">) == 0) </span><span class="reserved">break</span><span class="plain">;</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">loc_name</span><span class="plain"> = </span><span class="identifier">Inter::SymbolsTables::create_with_unique_name</span><span class="plain">(</span><span class="identifier">Inter::Package::local_symbols</span><span class="plain">(</span><span class="identifier">block_name</span><span class="plain">), </span><span class="identifier">value</span><span class="plain">);</span> <span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">loc_name</span><span class="plain"> = </span><span class="identifier">Inter::SymbolsTables::create_with_unique_name</span><span class="plain">(</span><span class="identifier">Inter::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="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="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="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">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">int</span><span class="plain"> </span><span class="identifier">L</span><span class="plain"> = </span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">body</span><span class="plain">) - 1;</span>
<span class="reserved">while</span><span class="plain"> ((</span><span class="identifier">L</span><span class="plain">&gt;0) &amp;&amp; (</span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">body</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">) != </span><span class="character">']'</span><span class="plain">)) </span><span class="identifier">L</span><span class="plain">--;</span> <span class="reserved">while</span><span class="plain"> ((</span><span class="identifier">L</span><span class="plain">&gt;0) &amp;&amp; (</span><span class="identifier">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_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="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">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">unchecked_function_symbol</span><span class="plain">),</span>
<span class="identifier">Inter::SymbolsTables::id_from_symbol</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">FP</span><span class="plain">, </span><span class="identifier">block_name</span><span class="plain">),</span> <span class="identifier">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"> <pre class="display">
<span class="identifier">inter_package</span><span class="plain"> *</span><span class="functiontext">CodeGen::Assimilate::new_package</span><span class="plain">(</span><span class="identifier">inter_bookmark</span><span class="plain"> *</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">pname</span><span class="plain">, </span><span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">ptype</span><span class="plain">) {</span> <span class="identifier">inter_package</span><span class="plain"> *</span><span class="functiontext">CodeGen::Assimilate::new_package</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="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="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="reserved">return</span><span class="plain"> </span><span class="identifier">P</span><span class="plain">;</span>
<span class="plain">}</span> <span class="plain">}</span>
@ -650,7 +650,7 @@
<pre class="display"> <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">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_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">inter_bookmark</span><span class="plain"> *</span><span class="identifier">IBM</span><span class="plain"> = &amp;</span><span class="identifier">IBM_d</span><span class="plain">;</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">an</span><span class="plain">);</span> <span class="identifier">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">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">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="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="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="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">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">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">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="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>
<span class="plain">}</span> <span class="plain">}</span>
</pre> </pre>
@ -778,7 +778,7 @@
<span class="plain">}</span> <span class="plain">}</span>
<span class="identifier">match_results</span><span class="plain"> </span><span class="identifier">mr</span><span class="plain"> = </span><span class="identifier">Regexp::create_mr</span><span class="plain">();</span> <span class="identifier">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="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">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">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> <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="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="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">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">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> <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="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="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="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> <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">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="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">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="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> <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="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">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="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="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="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> <span class="reserved">break</span><span class="plain">;</span>
@ -880,7 +880,7 @@
<span class="plain">}</span> <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="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="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">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="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> <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">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">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="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="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="reserved">return</span><span class="plain"> </span><span class="identifier">mcc_name</span><span class="plain">;</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">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">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="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="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="reserved">return</span><span class="plain"> </span><span class="identifier">mcc_name</span><span class="plain">;</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="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">endif</span>
<span class="plain">#</span><span class="identifier">ifndef</span><span class="plain"> </span><span class="identifier">CORE_MODULE</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="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="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> <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"> <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="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="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> <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"> <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="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::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="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> <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"> <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="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">"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="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="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_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="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">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="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="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</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="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">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">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="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> <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="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="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_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="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_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="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="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="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="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">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="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="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="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="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">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> <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="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="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="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_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> <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="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="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="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>
<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="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</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_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="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::Link::build_only</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">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="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="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="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="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="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">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> <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="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="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="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="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="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">deeply</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="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="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span> <span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</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::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="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="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> <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">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="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="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">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">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="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> <span class="plain">}</span>
</pre> </pre>
<p class="inwebparagraph"></p> <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> <p class="inwebparagraph"><a id="SP2"></a><b>&#167;2. </b></p>
@ -203,7 +203,7 @@
</pre> </pre>
<pre class="display"> <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="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="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> <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="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="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="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="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="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="identifier">Str::clear</span><span class="plain">(</span><span class="identifier">S</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::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="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="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="identifier">Str::clear</span><span class="plain">(</span><span class="identifier">S</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::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="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">"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> <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="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"> <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"> <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"> <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="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="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> <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"> <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="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="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> <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"> <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="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="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> <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"> <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="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="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> <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"> <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="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="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> <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="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">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="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="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="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="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">prim_command</span><span class="plain">);</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="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="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="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">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">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> <span class="identifier">LITERAL_IVAL</span><span class="plain">, 0,</span>

View file

@ -18,7 +18,7 @@
<pre class="display"> <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="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="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> <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--> <!--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="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 <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 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"></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>, <p class="inwebparagraph"><a id="SP2"></a><b>&#167;2. </b>A pipeline description can make use of "variables". These hold only text,
which are initially empty (but see below).
</p>
<p class="inwebparagraph">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>. 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 The pipeline cannot create variables: instead, the user of the pipeline has
to make them before use. For example, to make them before use. For example,
@ -79,7 +75,7 @@ the given pipeline. Inside the pipeline, a line such as:
<pre class="display"> <pre class="display">
<span class="plain">generate: inform6 -&gt; *X</span> <span class="plain">generate inform6 -&gt; *X</span>
</pre> </pre>
<p class="inwebparagraph">would then be read as: <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"> <pre class="display">
<span class="plain">generate: inform6 -&gt; ex/why</span> <span class="plain">generate inform6 -&gt; ex/why</span>
</pre> </pre>
<p class="inwebparagraph">After variable substitution like this, filenames inside the pipeline <p class="inwebparagraph">After variable substitution like this, filenames inside the pipeline
@ -114,7 +110,7 @@ For example,
<pre class="display"> <pre class="display">
<span class="plain">generate: inventory -&gt; *log</span> <span class="plain">generate inventory -&gt; *log</span>
</pre> </pre>
<p class="inwebparagraph">Template filenames are a little different: those are searched for inside <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"> <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">...</span>
<span class="plain">generate: inform6 -&gt; *out</span> <span class="plain">generate inform6 -&gt; *out</span>
</pre> </pre>
<p class="inwebparagraph">In addition, the "domain" is set to the directory containing the <code class="display"><span class="extract">*out</span></code> <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"></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 (Its previous contents, if any, are discarded.) This then becomes the
repository to which subsequent stages apply. The format is: repository to which subsequent stages apply. The format is:
</p> </p>
@ -223,8 +265,12 @@ repository to which subsequent stages apply. The format is:
<span class="plain">read REPOSITORY &lt;- FILE</span> <span class="plain">read REPOSITORY &lt;- FILE</span>
</pre> </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. <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
The <code class="display"><span class="extract">FILE</span></code> can contain either binary or textual Inter, and this is 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. automatically detected.
</p> </p>
@ -232,13 +278,14 @@ automatically detected.
<pre class="display"> <pre class="display">
<span class="plain">generate: FORMAT -&gt; FILE</span> <span class="plain">generate FORMAT -&gt; FILE</span>
</pre> </pre>
<p class="inwebparagraph">writes the contents of the current repository out into the given <code class="display"><span class="extract">FILE</span></code>. <p class="inwebparagraph">writes the repository out into the given <code class="display"><span class="extract">FILE</span></code>. There are several possible
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 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>
textual Inter file, <code class="display"><span class="extract">inventory</span></code> means a textual summary of the contents, means a textual summary of the contents, and <code class="display"><span class="extract">inform6</span></code> means an Inform 6
and <code class="display"><span class="extract">inform6</span></code> means an Inform 6 program. program. At present, only <code class="display"><span class="extract">inventory</span></code> can be generated on specific
packages in a repository.
</p> </p>
<p class="inwebparagraph">The <code class="display"><span class="extract">generate</span></code> stage leaves the repository unchanged, so it's possible <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. files.
</p> </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. final form or names.
</p> </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.) sounds inefficient but is surprisingly fast, and enables many optimisations.)
</p> </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 <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
basic way (creating many splats), and merges it with the repository. Splats inter in a very basic way (creating many splats), and merges it with the
are the unhappiest of inter statements, simply including verbatim snippets repository. Splats are the unhappiest of inter statements, simply including
of Inform 6 code. verbatim snippets of Inform 6 code.
</p> </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, them by what they seem to want to do. For example,
</p> </p>
@ -289,7 +336,7 @@ them by what they seem to want to do. For example,
<p class="inwebparagraph"></p> <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>; 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 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 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"></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, higher-level inter statements. For example,
</p> </p>
@ -349,7 +396,7 @@ higher-level inter statements. For example,
and the linking process is complete. and the linking process is complete.
</p> </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 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. 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 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 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>
<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 the parser interactive fiction sense) which have been assimilated from the
template, and verbs which have been defined in the main source text. For template, and verbs which have been defined in the main source text. For
example, suppose the source creates the command verb "abstract": this would 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 class="inwebparagraph">At the end of this stage, all parser verbs have distinct textual forms.
</p> </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 will not be used in the final code generated from the repository. For
example, functions never called, or arrays never referred to, are deleted. example, functions never called, or arrays never referred to, are deleted.
</p> </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 the functions in the repository to remove all labels which are declared
but can never be jumped to. but can never be jumped to.
</p> </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. branch, either by <code class="display"><span class="extract">inv !jump</span></code> or in assembly language.
</p> </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 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 to see what just the first half does, without deleting the second half of
the description. the description.

View file

@ -88,7 +88,7 @@ one stage, can be quite elaborate (see later), but for example:
<pre class="display"> <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> </pre>
<p class="inwebparagraph">is a valid three-stage pipeline. The command to do this is then: <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 read <- *in
link: Output.i6t merge-template <- Output.i6t
parse-linked-matter parse-linked-matter
resolve-conditional-compilation resolve-conditional-compilation
assimilate assimilate
make-identifiers-unique make-identifiers-unique
resolve-external-symbols resolve-external-symbols
reconcile-verbs reconcile-verbs
generate: inform6 -> *out generate inform6 -> *out

View file

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

View file

@ -27,10 +27,7 @@ each line, and the comma is not needed:
|xyzzy| |xyzzy|
|plover| |plover|
@ A pipeline can work on up to 10 different repositories, called |0| to |9|, @ A pipeline description can make use of "variables". These hold only text,
which are initially empty (but see below).
A pipeline description can make use of "variables". These hold only text,
and generally represent filenames. Variable names begin with a star |*|. and generally represent filenames. Variable names begin with a star |*|.
The pipeline cannot create variables: instead, the user of the pipeline has The pipeline cannot create variables: instead, the user of the pipeline has
to make them before use. For example, 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 creates the variable |*X| with the textual contents |ex/why| before running
the given pipeline. Inside the pipeline, a line such as: the given pipeline. Inside the pipeline, a line such as:
|generate: inform6 -> *X| |generate inform6 -> *X|
would then be read as: would then be read as:
|generate: inform6 -> ex/why| |generate inform6 -> ex/why|
After variable substitution like this, filenames inside the pipeline After variable substitution like this, filenames inside the pipeline
description are interpreted as follows: 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". "spool the output you would otherwise write to the debugging log instead".
For example, For example,
|generate: inventory -> *log| |generate inventory -> *log|
Template filenames are a little different: those are searched for inside 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 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 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: 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| 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, 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| |$ 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. @h Reading and generating.
The |read| stage reads Inter from a file into a repository in memory. The |read| stage reads Inter from a file into a repository in memory.
(Its previous contents, if any, are discarded.) This then becomes the (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| |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 The |FILE| can contain either binary or textual Inter, and this is
automatically detected. automatically detected.
|generate: FORMAT -> FILE| |generate FORMAT -> FILE|
writes the contents of the current repository out into the given |FILE|. writes the repository out into the given |FILE|. There are several possible
There are several possible formats: |binary| and |text| mean a binary or formats: |binary| and |text| mean a binary or textual Inter file, |inventory|
textual Inter file, |inventory| means a textual summary of the contents, means a textual summary of the contents, and |inform6| means an Inform 6
and |inform6| means an Inform 6 program. 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 The |generate| stage leaves the repository unchanged, so it's possible
to generate multiple representations of the same repository into different 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 therefore, are converted out of Inform 6 and then back into it again. This
sounds inefficient but is surprisingly fast, and enables many optimisations.) 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 @ |merge-template <- T| reads in the I6T template file |T|, converts it to
basic way (creating many splats), and merges it with the repository. Splats inter in a very basic way (creating many splats), and merges it with the
are the unhappiest of inter statements, simply including verbatim snippets repository. Splats are the unhappiest of inter statements, simply including
of Inform 6 code. 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, them by what they seem to want to do. For example,
|splat &"Global nitwit = 2;\n"| |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 a pipeline of processing stages. The pipeline, which must contain at least
one stage, can be quite elaborate (see later), but for example: 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: 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 parse-linked-matter
assimilate assimilate
resolve-external-symbols resolve-external-symbols
generate: text -> *out generate text -> *out

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -1,5 +1,5 @@
read: 0 <- *in read <- *in
parse-linked-matter parse-linked-matter
resolve-conditional-compilation resolve-conditional-compilation
assimilate 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_stage = NULL;
step->step_argument = NULL; step->step_argument = NULL;
step->package_argument = NULL; step->package_argument = NULL;
step->repository_argument = -1; step->repository_argument = 0;
CodeGen::Pipeline::clean_step(step); CodeGen::Pipeline::clean_step(step);
return step; return step;
} }
@ -55,11 +55,10 @@ logging:
void CodeGen::Pipeline::write_step(OUTPUT_STREAM, pipeline_step *step) { void CodeGen::Pipeline::write_step(OUTPUT_STREAM, pipeline_step *step) {
WRITE("%S", step->step_stage->stage_name); WRITE("%S", step->step_stage->stage_name);
if (step->step_stage->stage_arg != NO_STAGE_ARG) { if (step->step_stage->stage_arg != NO_STAGE_ARG) {
if (step->package_argument) WRITE(" %S", step->package_argument); WRITE(" %d", step->repository_argument);
WRITE(":"); if (Str::len(step->package_argument) > 0) WRITE(":%S", step->package_argument);
if (step->repository_argument >= 0) WRITE(" %d <-", step->repository_argument); if (step->step_stage->takes_repository >= 0) WRITE(" <- %S", step->step_argument);
if (step->target_argument) WRITE(" %S ->", step->target_argument->target_name); if (step->target_argument) WRITE(" %S -> %S", step->target_argument->target_name, step->step_argument);
WRITE(" %S", step->step_argument);
} }
} }
@ -68,11 +67,12 @@ pipeline_step *CodeGen::Pipeline::read_step(text_stream *step, dictionary *D) {
CodeGen::Targets::make_targets(); CodeGen::Targets::make_targets();
pipeline_step *ST = CodeGen::Pipeline::new_step(); pipeline_step *ST = CodeGen::Pipeline::new_step();
match_results mr = Regexp::create_mr(); match_results mr = Regexp::create_mr();
if (Regexp::match(&mr, step, L"(%c+?) *: *(%d) *<- *(%c*)")) { int left_arrow_used = FALSE;
ST->repository_argument = Str::atoi(mr.exp[1], 0); if (Regexp::match(&mr, step, L"(%c+?) *<- *(%c*)")) {
ST->step_argument = CodeGen::Pipeline::read_parameter(mr.exp[2], D); ST->step_argument = CodeGen::Pipeline::read_parameter(mr.exp[1], D);
Str::copy(step, mr.exp[0]); 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; code_generation_target *cgt;
LOOP_OVER(cgt, code_generation_target) LOOP_OVER(cgt, code_generation_target)
if (Str::eq(mr.exp[1], cgt->target_name)) 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); ST->step_argument = CodeGen::Pipeline::read_parameter(mr.exp[2], D);
Str::copy(step, mr.exp[0]); 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); ST->package_argument = CodeGen::Pipeline::read_parameter(mr.exp[1], D);
Str::copy(step, mr.exp[0]); 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); WRITE_TO(STDERR, "No such step as '%S'\n", step);
internal_error("no such step code"); 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); Regexp::dispose_of(&mr);
return ST; return ST;
} }
@ -189,19 +201,21 @@ void CodeGen::Pipeline::set_repository(codegen_pipeline *S, inter_repository *I)
void CodeGen::Pipeline::run(pathname *P, codegen_pipeline *S, int N, pathname **PP) { void CodeGen::Pipeline::run(pathname *P, codegen_pipeline *S, int N, pathname **PP) {
if (S == NULL) return; if (S == NULL) return;
if (S->repositories[0] == NULL) S->repositories[0] = Inter::create(1, 32);
clock_t start = clock(); clock_t start = clock();
int step_count = 0, step_total = 0; int step_count = 0, step_total = 0;
pipeline_step *step; pipeline_step *step;
LOOP_OVER_LINKED_LIST(step, pipeline_step, S->steps) step_total++; LOOP_OVER_LINKED_LIST(step, pipeline_step, S->steps) step_total++;
int active = TRUE, current_repo = 0; int active = TRUE;
CodeGen::Pipeline::prepare_to_run(S->repositories[current_repo]);
LOOP_OVER_LINKED_LIST(step, pipeline_step, S->steps) LOOP_OVER_LINKED_LIST(step, pipeline_step, S->steps)
if (active) { 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::lint(I);
CodeGen::Pipeline::prepare_to_run(I);
CodeGen::Pipeline::clean_step(step); CodeGen::Pipeline::clean_step(step);
step->the_N = N; step->the_N = N;
@ -215,6 +229,8 @@ void CodeGen::Pipeline::run(pathname *P, codegen_pipeline *S, int N, pathname **
Log::new_stage(STAGE_NAME); Log::new_stage(STAGE_NAME);
DISCARD_TEXT(STAGE_NAME); DISCARD_TEXT(STAGE_NAME);
int skip_step = FALSE;
if ((step->step_stage->stage_arg == FILE_STAGE_ARG) || if ((step->step_stage->stage_arg == FILE_STAGE_ARG) ||
(step->step_stage->stage_arg == TEXT_OUT_STAGE_ARG) || (step->step_stage->stage_arg == TEXT_OUT_STAGE_ARG) ||
(step->step_stage->stage_arg == EXT_FILE_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")) { if (Str::eq(step->step_argument, I"*log")) {
step->to_debugging_log = TRUE; step->to_debugging_log = TRUE;
} else if (Str::eq(step->step_argument, I"*memory")) { } 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 { } else {
step->parsed_filename = Filenames::from_text(step->step_argument);
int slashes = FALSE; int slashes = FALSE;
LOOP_THROUGH_TEXT(pos, step->step_argument) LOOP_THROUGH_TEXT(pos, step->step_argument)
if (Str::get(pos) == '/') 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; step->text_out_file = T;
} }
if ((step->from_memory) && (step->repository_argument >= 0)) if (skip_step == FALSE)
S->repositories[step->repository_argument] = S->memory_repository;
else
active = (*(step->step_stage->execute))(step); active = (*(step->step_stage->execute))(step);
if (((step->step_stage->stage_arg == TEXT_OUT_STAGE_ARG) || 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)) { (step->to_debugging_log == FALSE)) {
STREAM_CLOSE(T); 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"); 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. write output to; others are not.
@e NO_STAGE_ARG from 1 @e NO_STAGE_ARG from 1
@e GENERAL_STAGE_ARG
@e FILE_STAGE_ARG @e FILE_STAGE_ARG
@e TEXT_OUT_STAGE_ARG @e TEXT_OUT_STAGE_ARG
@e EXT_FILE_STAGE_ARG @e EXT_FILE_STAGE_ARG
@ -19,14 +20,16 @@ typedef struct pipeline_stage {
struct text_stream *stage_name; struct text_stream *stage_name;
int (*execute)(void *); int (*execute)(void *);
int stage_arg; /* one of the |*_ARG| values above */ int stage_arg; /* one of the |*_ARG| values above */
int takes_repository;
MEMORY_MANAGEMENT MEMORY_MANAGEMENT
} pipeline_stage; } 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); pipeline_stage *stage = CREATE(pipeline_stage);
stage->stage_name = Str::duplicate(name); stage->stage_name = Str::duplicate(name);
stage->execute = (int (*)(void *)) X; stage->execute = (int (*)(void *)) X;
stage->stage_arg = arg; stage->stage_arg = arg;
stage->takes_repository = tr;
return stage; return stage;
} }
@ -40,15 +43,17 @@ int stages_made = FALSE;
void CodeGen::Stage::make_stages(void) { void CodeGen::Stage::make_stages(void) {
if (stages_made == FALSE) { if (stages_made == FALSE) {
stages_made = TRUE; stages_made = TRUE;
CodeGen::Stage::new(I"stop", CodeGen::Stage::run_stop_stage, NO_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);
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::create_pipeline_stage();
CodeGen::Assimilate::create_pipeline_stage(); CodeGen::Assimilate::create_pipeline_stage();
CodeGen::Eliminate::create_pipeline_stage(); CodeGen::Eliminate::create_pipeline_stage();
CodeGen::Externals::create_pipeline_stage(); CodeGen::Externals::create_pipeline_stage();
CodeGen::Labels::create_pipeline_stage(); CodeGen::Labels::create_pipeline_stage();
CodeGen::Link::create_pipeline_stage(); CodeGen::MergeTemplate::create_pipeline_stage();
CodeGen::PLM::create_pipeline_stage(); CodeGen::PLM::create_pipeline_stage();
CodeGen::RCC::create_pipeline_stage(); CodeGen::RCC::create_pipeline_stage();
CodeGen::ReconcileVerbs::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) { int CodeGen::Stage::run_read_stage(pipeline_step *step) {
filename *F = Filenames::from_text(step->step_argument); filename *F = step->parsed_filename;
if (Inter::Binary::test_file(F)) if (Inter::Binary::test_file(F)) Inter::Binary::read(step->repository, F);
Inter::Binary::read(step->repository, F); else Inter::Textual::read(step->repository, F);
else return TRUE;
Inter::Textual::read(step->repository, F); }
int CodeGen::Stage::run_extract_stage(pipeline_step *step) {
LOG("Arg is %S.\n", step->step_argument);
return TRUE; return TRUE;
} }

View file

@ -6,7 +6,7 @@ To assimilate the material in parsed non-code splats.
= =
void CodeGen::Assimilate::create_pipeline_stage(void) { 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; int no_assimilated_actions = 0;
@ -20,7 +20,7 @@ int CodeGen::Assimilate::run_pipeline_stage(pipeline_step *step) {
no_assimilated_actions = 0; no_assimilated_actions = 0;
no_assimilated_commands = 0; no_assimilated_commands = 0;
no_assimilated_arrays = 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::visitor1, NULL, NULL, SPLAT_IST);
Inter::traverse_tree(I, CodeGen::Assimilate::visitor2, NULL, NULL, SPLAT_IST); Inter::traverse_tree(I, CodeGen::Assimilate::visitor2, NULL, NULL, SPLAT_IST);
CodeGen::Assimilate::function_bodies(); 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@>; @<Parse text of splat for identifier and value@>;
if ((proceed) && (unchecked_kind_symbol)) { if ((proceed) && (unchecked_kind_symbol)) {
if (plm == DEFAULT_PLM) { 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 (symbol == NULL) plm = CONSTANT_PLM;
} }
if (plm != DEFAULT_PLM) @<Act on parsed constant definition@>; 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 FAKEACTION_PLM:
case OBJECT_PLM: { case OBJECT_PLM: {
@<Assimilate a value@>; @<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), con_name),
Inter::SymbolsTables::id_from_symbol(I, Inter::Bookmarks::package(IBM), unchecked_kind_symbol), v1, v2, Inter::SymbolsTables::id_from_symbol(I, Inter::Bookmarks::package(IBM), unchecked_kind_symbol), v1, v2,
(inter_t) Inter::Bookmarks::baseline(IBM) + 1, NULL)); (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: case GLOBAL_PLM:
@<Assimilate a value@>; @<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), con_name),
Inter::SymbolsTables::id_from_symbol(I, Inter::Bookmarks::package(IBM), unchecked_kind_symbol), v1, v2, Inter::SymbolsTables::id_from_symbol(I, Inter::Bookmarks::package(IBM), unchecked_kind_symbol), v1, v2,
(inter_t) Inter::Bookmarks::baseline(IBM) + 1, NULL)); (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) || (!Inter::Symbols::is_defined(attr_symbol))) {
if (attr_symbol == NULL) attr_symbol = con_name; 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), attr_symbol),
Inter::SymbolsTables::id_from_symbol(I, Inter::Bookmarks::package(IBM), truth_state_kind_symbol), Inter::SymbolsTables::id_from_symbol(I, Inter::Bookmarks::package(IBM), truth_state_kind_symbol),
(inter_t) Inter::Bookmarks::baseline(IBM) + 1, NULL)); (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; break;
} }
case PROPERTY_PLM: { 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), con_name),
Inter::SymbolsTables::id_from_symbol(I, Inter::Bookmarks::package(IBM), unchecked_kind_symbol), Inter::SymbolsTables::id_from_symbol(I, Inter::Bookmarks::package(IBM), unchecked_kind_symbol),
(inter_t) Inter::Bookmarks::baseline(IBM) + 1, NULL)); (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++] = v1_pile[i];
array_in_progress.data[pos++] = v2_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); Inter::Frame::insert(array_in_progress, IBM);
if (plm == ARRAY_PLM) { 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; if (Str::len(value) == 0) break;
inter_symbol *loc_name = Inter::SymbolsTables::create_with_unique_name(Inter::Package::local_symbols(block_name), value); inter_symbol *loc_name = Inter::SymbolsTables::create_with_unique_name(Inter::Package::local_symbols(block_name), value);
Inter::Symbols::local(loc_name); 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); 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) { if (Str::len(body) > 0) {
int L = Str::len(body) - 1; int L = Str::len(body) - 1;
while ((L>0) && (Str::get_at(body, L) != ']')) L--; 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_symbol *rsymb = CodeGen::Assimilate::maybe_extern(I, identifier, Inter::Bookmarks::scope(IBM));
Inter::Symbols::annotate_i(I, rsymb, ASSIMILATED_IANN, 1); 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, rsymb),
Inter::SymbolsTables::id_from_symbol(I, FP, unchecked_function_symbol), Inter::SymbolsTables::id_from_symbol(I, FP, unchecked_function_symbol),
Inter::SymbolsTables::id_from_symbol(I, FP, block_name), 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 *CodeGen::Assimilate::new_package(inter_bookmark *IBM, inter_symbol *pname, inter_symbol *ptype) {
inter_package *P = NULL; 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)); ptype, (inter_t) Inter::Bookmarks::baseline(IBM) + 1, NULL, &P));
return 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) { 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_d = CodeGen::Assimilate::template_submodule(I, I"actions", P);
inter_bookmark *IBM = &IBM_d; inter_bookmark *IBM = &IBM_d;
TEMPORARY_TEXT(an); TEMPORARY_TEXT(an);
@ -531,16 +531,16 @@ void CodeGen::Assimilate::ensure_action(inter_repository *I, inter_frame P, text
WRITE_TO(unsharped, "%SSub", value); WRITE_TO(unsharped, "%SSub", value);
Str::delete_first_character(unsharped); Str::delete_first_character(unsharped);
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); inter_symbol *xsymb = Inter::SymbolsTables::create_with_unique_name(Inter::Bookmarks::scope(IBM), unsharped);
if (txsymb) Inter::SymbolsTables::equate(xsymb, txsymb); if (txsymb) Inter::SymbolsTables::equate(xsymb, txsymb);
DISCARD_TEXT(unsharped); 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), asymb),
Inter::SymbolsTables::id_from_symbol(I, Inter::Bookmarks::package(IBM), action_kind_symbol), Inter::SymbolsTables::id_from_symbol(I, Inter::Bookmarks::package(IBM), action_kind_symbol),
LITERAL_IVAL, 10000, (inter_t) Inter::Bookmarks::baseline(IBM) + 1, NULL)); LITERAL_IVAL, 10000, (inter_t) Inter::Bookmarks::baseline(IBM) + 1, NULL));
Inter::Symbols::annotate_i(I, asymb, ACTION_IANN, 1); 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(); match_results mr = Regexp::create_mr();
if (Regexp::match(&mr, S, L"scope=(%i+)")) { 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; while ((symb) && (symb->equated_to)) symb = symb->equated_to;
if (symb) { if (symb) {
if (Inter::Symbols::read_annotation(symb, SCOPE_FILTER_IANN) != 1) 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+)")) { 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; while ((symb) && (symb->equated_to)) symb = symb->equated_to;
if (symb) { if (symb) {
if (Inter::Symbols::read_annotation(symb, NOUN_FILTER_IANN) != 1) 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) { if (symb) {
Inter::Symbols::to_data(I, pack, symb, val1, val2); return; 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); Str::copy(glob_storage, sch->converted_from);
inter_symbol *mcc_name = CodeGen::Assimilate::computed_constant_symbol(pack); 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, mcc_name),
Inter::SymbolsTables::id_from_symbol(I, pack, unchecked_kind_symbol), GLOB_IVAL, ID, Inter::SymbolsTables::id_from_symbol(I, pack, unchecked_kind_symbol), GLOB_IVAL, ID,
(inter_t) Inter::Bookmarks::baseline(IBM) + 1, NULL)); (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; inter_t v1 = UNDEF_IVAL, v2 = 0;
switch (t->ist_type) { switch (t->ist_type) {
case IDENTIFIER_ISTT: { 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; if (symb) return symb;
LOG("Failed to identify %S\n", t->material); LOG("Failed to identify %S\n", t->material);
break; break;
@ -738,7 +738,7 @@ inter_symbol *CodeGen::Assimilate::compute_constant_eval(inter_repository *I, in
} }
if (v1 == UNDEF_IVAL) return NULL; if (v1 == UNDEF_IVAL) return NULL;
inter_symbol *mcc_name = CodeGen::Assimilate::computed_constant_symbol(pack); 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, mcc_name),
Inter::SymbolsTables::id_from_symbol(I, pack, unchecked_kind_symbol), v1, v2, Inter::SymbolsTables::id_from_symbol(I, pack, unchecked_kind_symbol), v1, v2,
(inter_t) Inter::Bookmarks::baseline(IBM) + 1, NULL)); (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"); internal_error("can't extend frame");
array_in_progress.data[pos] = LITERAL_IVAL; array_in_progress.data[pos+1] = 0; 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])); 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); Inter::Frame::insert(array_in_progress, IBM);
return mcc_name; return mcc_name;
} }
@ -770,7 +770,7 @@ inter_symbol *CodeGen::Assimilate::compute_constant_binary_operation(inter_t op,
internal_error("can't extend frame"); 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, 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])); 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); Inter::Frame::insert(array_in_progress, IBM);
return mcc_name; return mcc_name;
} }
@ -810,7 +810,7 @@ int CodeGen::Assimilate::routine_body(inter_bookmark *IBM, inter_symbol *block_n
return TRUE; return TRUE;
#endif #endif
#ifndef CORE_MODULE #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++); LOG("Splat %d\n", rb_splat_count++);
return FALSE; return FALSE;
#endif #endif

View file

@ -13,7 +13,7 @@ on the Inter functions in a repository.
= =
void CodeGen::Labels::create_pipeline_stage(void) { 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) { 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) { void CodeGen::Eliminate::create_pipeline_stage(void) {
CodeGen::Stage::new(I"eliminate-redundant-code", 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) { 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. To link inter from I7 with template code.
@h Link. @h Link.
= =
void CodeGen::Link::create_pipeline_stage(void) { void CodeGen::MergeTemplate::create_pipeline_stage(void) {
CodeGen::Stage::new(I"link", CodeGen::Link::run_pipeline_stage, TEMPLATE_FILE_STAGE_ARG); 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_package *main_package = Inter::Packages::main(step->repository);
inter_bookmark IBM; inter_bookmark IBM;
if (main_package) IBM = Inter::Bookmarks::at_end_of_this_package(main_package); if (main_package) IBM = Inter::Bookmarks::at_end_of_this_package(main_package);
else IBM = Inter::Bookmarks::at_start_of_this_repository(step->repository); 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; return TRUE;
} }
inter_symbols_table *link_search_list[10]; inter_symbols_table *link_search_list[10];
int link_search_list_len = 0; 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 (link_search_list_len == 0) {
if (template_package) { if (template_package) {
link_search_list[1] = Inter::Packages::scope(Inter::Packages::main(I)); 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"); if (IBM == NULL) internal_error("no inter to link with");
inter_repository *I = IBM->read_into; 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"); 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_bookmark link_bookmark =
Inter::Bookmarks::at_end_of_this_package(template_package); 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; kit.no_i6t_file_areas = N;
for (int i=0; i<N; i++) kit.i6t_files[i] = PP[i]; for (int i=0; i<N; i++) kit.i6t_files[i] = PP[i];
TEMPORARY_TEXT(T); TEMPORARY_TEXT(T);
TemplateReader::I6T_file_intervene(T, EARLY_LINK_STAGE, NULL, NULL, &kit); 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); DISCARD_TEXT(T);
TemplateReader::extract(template_file, &kit); 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) { 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 *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]); 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; dictionary *linkable_namespace = NULL;
int linkable_namespace_created = FALSE; 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) { if (linkable_namespace_created == FALSE) {
linkable_namespace_created = TRUE; linkable_namespace_created = TRUE;
linkable_namespace = Dictionaries::new(512, FALSE); 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) { if (C.data[ID_IFLD] == PACKAGE_IST) {
inter_package *P = Inter::Package::defined_by_frame(C); inter_package *P = Inter::Package::defined_by_frame(C);
if (Str::ne(P->package_name->symbol_name, I"template")) 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; return NULL;
} }
void CodeGen::Link::build_r(inter_package *P) { void CodeGen::MergeTemplate::build_r(inter_package *P) {
CodeGen::Link::build_only(P); CodeGen::MergeTemplate::build_only(P);
inter_frame D = Inter::Symbols::defining_frame(P->package_name); inter_frame D = Inter::Symbols::defining_frame(P->package_name);
LOOP_THROUGH_INTER_CHILDREN(C, D) { LOOP_THROUGH_INTER_CHILDREN(C, D) {
if (C.data[ID_IFLD] == PACKAGE_IST) { if (C.data[ID_IFLD] == PACKAGE_IST) {
inter_package *Q = Inter::Package::defined_by_frame(C); 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); inter_symbols_table *T = Inter::Packages::scope(P);
if (T) { if (T) {
for (int i=0; i<T->size; i++) { 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++) { 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); inter_symbol *symb = Inter::SymbolsTables::symbol_from_name_not_equating(link_search_list[i], S);
if (symb) return symb; if (symb) return symb;
} }
if (deeply) { 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; if (symb) return symb;
} }
return NULL; 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++) { for (int i=0; i<link_search_list_len; i++) {
LOG("Search %d: $4\n", i, link_search_list[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; 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"); } 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); inter_t SID = Inter::create_text(IBM->read_into);
text_stream *glob_storage = Inter::get_text(IBM->read_into, SID); text_stream *glob_storage = Inter::get_text(IBM->read_into, SID);
Str::copy(glob_storage, content); 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) @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(); text_stream *R = Str::new();
int mode = IGNORE_WS_FILTER_BIT; int mode = IGNORE_WS_FILTER_BIT;
LOOP_THROUGH_TEXT(pos, S) { LOOP_THROUGH_TEXT(pos, S) {
@ -204,22 +204,22 @@ void CodeGen::Link::receive_raw(text_stream *S, I6T_kit *kit) {
} }
PUT_TO(R, c); PUT_TO(R, c);
if ((c == ';') && (!(mode & SUBORDINATE_FILTER_BITS))) { if ((c == ';') && (!(mode & SUBORDINATE_FILTER_BITS))) {
CodeGen::Link::chunked_raw(R, kit); CodeGen::MergeTemplate::chunked_raw(R, kit);
mode = IGNORE_WS_FILTER_BIT; mode = IGNORE_WS_FILTER_BIT;
} }
} }
CodeGen::Link::chunked_raw(R, kit); CodeGen::MergeTemplate::chunked_raw(R, kit);
Str::clear(S); 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; if (Str::len(S) == 0) return;
PUT_TO(S, '\n'); 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); 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")) || if ((Str::eq_wide_string(command, L"plugin")) ||
(Str::eq_wide_string(command, L"type")) || (Str::eq_wide_string(command, L"type")) ||
(Str::eq_wide_string(command, L"open-file")) || (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) { 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) { 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) { 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) { 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) { 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; 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) { 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) { 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) { 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) { 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"); if (to == NULL) internal_error("no symbol");
TEMPORARY_TEXT(prim_command); TEMPORARY_TEXT(prim_command);
WRITE_TO(prim_command, "primitive %S %S", prim, category); 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; inter_error_message *E = NULL;
*to = Inter::Textual::find_symbol(I, NULL, Inter::get_global_symbols(I), prim, PRIMITIVE_IST, &E); *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); 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); *slot = Inter::SymbolsTables::symbol_from_name_creating(tab, S);
if (Str::len(T) > 0) Inter::Symbols::set_translate(*slot, T); if (Str::len(T) > 0) Inter::Symbols::set_translate(*slot, T);
Inter::Symbols::annotate_i(IBM->read_into, *slot, VENEER_IANN, 1); 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, *slot),
Inter::SymbolsTables::id_from_symbol(IBM->read_into, veneer_package, unchecked_kind_symbol), Inter::SymbolsTables::id_from_symbol(IBM->read_into, veneer_package, unchecked_kind_symbol),
LITERAL_IVAL, 0, LITERAL_IVAL, 0,

View file

@ -6,7 +6,7 @@ To generate final code from intermediate code.
= =
void CodeGen::create_pipeline_stage(void) { 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) { int CodeGen::run_pipeline_stage(pipeline_step *step) {

View file

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