mirror of
https://github.com/ganelson/inform.git
synced 2024-07-01 06:24:58 +03:00
Decluttered inter pipeline mini-language
This commit is contained in:
parent
ab54c350d3
commit
5c27d8894c
|
@ -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">>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">>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">>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">>repository_argument</span><span class="plain"> = -1;</span>
|
||||
<span class="identifier">step</span><span class="plain">-</span><span class="element">>repository_argument</span><span class="plain"> = 0;</span>
|
||||
<span class="functiontext">CodeGen::Pipeline::clean_step</span><span class="plain">(</span><span class="identifier">step</span><span class="plain">);</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">step</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
|
@ -83,11 +83,10 @@ logging:
|
|||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::Pipeline::write_step</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">pipeline_step</span><span class="plain"> *</span><span class="identifier">step</span><span class="plain">) {</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%S"</span><span class="plain">, </span><span class="identifier">step</span><span class="plain">-</span><span class="element">>step_stage</span><span class="plain">-</span><span class="element">>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">>step_stage</span><span class="plain">-</span><span class="element">>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">>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">>package_argument</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">":"</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">step</span><span class="plain">-</span><span class="element">>repository_argument</span><span class="plain"> >= 0) </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">>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">>target_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">>target_argument</span><span class="plain">-</span><span class="element">>target_name</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" %S"</span><span class="plain">, </span><span class="identifier">step</span><span class="plain">-</span><span class="element">>step_argument</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" %d"</span><span class="plain">, </span><span class="identifier">step</span><span class="plain">-</span><span class="element">>repository_argument</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">step</span><span class="plain">-</span><span class="element">>package_argument</span><span class="plain">) > 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">>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">>step_stage</span><span class="plain">-</span><span class="element">>takes_repository</span><span class="plain"> >= 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">>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">>target_argument</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" %S -> %S"</span><span class="plain">, </span><span class="identifier">step</span><span class="plain">-</span><span class="element">>target_argument</span><span class="plain">-</span><span class="element">>target_name</span><span class="plain">, </span><span class="identifier">step</span><span class="plain">-</span><span class="element">>step_argument</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
|
@ -96,11 +95,12 @@ logging:
|
|||
<span class="functiontext">CodeGen::Targets::make_targets</span><span class="plain">();</span>
|
||||
<span class="reserved">pipeline_step</span><span class="plain"> *</span><span class="identifier">ST</span><span class="plain"> = </span><span class="functiontext">CodeGen::Pipeline::new_step</span><span class="plain">();</span>
|
||||
<span class="identifier">match_results</span><span class="plain"> </span><span class="identifier">mr</span><span class="plain"> = </span><span class="identifier">Regexp::create_mr</span><span class="plain">();</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Regexp::match</span><span class="plain">(&</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">>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">>step_argument</span><span class="plain"> = </span><span class="functiontext">CodeGen::Pipeline::read_parameter</span><span class="plain">(</span><span class="identifier">mr</span><span class="plain">.</span><span class="identifier">exp</span><span class="plain">[2], </span><span class="identifier">D</span><span class="plain">);</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">left_arrow_used</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Regexp::match</span><span class="plain">(&</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">>step_argument</span><span class="plain"> = </span><span class="functiontext">CodeGen::Pipeline::read_parameter</span><span class="plain">(</span><span class="identifier">mr</span><span class="plain">.</span><span class="identifier">exp</span><span class="plain">[1], </span><span class="identifier">D</span><span class="plain">);</span>
|
||||
<span class="identifier">Str::copy</span><span class="plain">(</span><span class="identifier">step</span><span class="plain">, </span><span class="identifier">mr</span><span class="plain">.</span><span class="identifier">exp</span><span class="plain">[0]);</span>
|
||||
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Regexp::match</span><span class="plain">(&</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*) *-> *(%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">(&</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*) *-> *(%c*)"</span><span class="plain">)) {</span>
|
||||
<span class="reserved">code_generation_target</span><span class="plain"> *</span><span class="identifier">cgt</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">cgt</span><span class="plain">, </span><span class="reserved">code_generation_target</span><span class="plain">)</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">mr</span><span class="plain">.</span><span class="identifier">exp</span><span class="plain">[1], </span><span class="identifier">cgt</span><span class="plain">-</span><span class="element">>target_name</span><span class="plain">))</span>
|
||||
|
@ -111,11 +111,15 @@ logging:
|
|||
<span class="plain">}</span>
|
||||
<span class="identifier">ST</span><span class="plain">-</span><span class="element">>step_argument</span><span class="plain"> = </span><span class="functiontext">CodeGen::Pipeline::read_parameter</span><span class="plain">(</span><span class="identifier">mr</span><span class="plain">.</span><span class="identifier">exp</span><span class="plain">[2], </span><span class="identifier">D</span><span class="plain">);</span>
|
||||
<span class="identifier">Str::copy</span><span class="plain">(</span><span class="identifier">step</span><span class="plain">, </span><span class="identifier">mr</span><span class="plain">.</span><span class="identifier">exp</span><span class="plain">[0]);</span>
|
||||
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Regexp::match</span><span class="plain">(&</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">>step_argument</span><span class="plain"> = </span><span class="functiontext">CodeGen::Pipeline::read_parameter</span><span class="plain">(</span><span class="identifier">mr</span><span class="plain">.</span><span class="identifier">exp</span><span class="plain">[1], </span><span class="identifier">D</span><span class="plain">);</span>
|
||||
<span class="identifier">Str::copy</span><span class="plain">(</span><span class="identifier">step</span><span class="plain">, </span><span class="identifier">mr</span><span class="plain">.</span><span class="identifier">exp</span><span class="plain">[0]);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Regexp::match</span><span class="plain">(&</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">(&</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">>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">(&</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">>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">>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">(&</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">>package_argument</span><span class="plain"> = </span><span class="functiontext">CodeGen::Pipeline::read_parameter</span><span class="plain">(</span><span class="identifier">mr</span><span class="plain">.</span><span class="identifier">exp</span><span class="plain">[1], </span><span class="identifier">D</span><span class="plain">);</span>
|
||||
<span class="identifier">Str::copy</span><span class="plain">(</span><span class="identifier">step</span><span class="plain">, </span><span class="identifier">mr</span><span class="plain">.</span><span class="identifier">exp</span><span class="plain">[0]);</span>
|
||||
<span class="plain">}</span>
|
||||
|
@ -128,6 +132,14 @@ logging:
|
|||
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">STDERR</span><span class="plain">, </span><span class="string">"No such step as '%S'\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">step</span><span class="plain">);</span>
|
||||
<span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"no such step code"</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ST</span><span class="plain">-</span><span class="element">>step_stage</span><span class="plain">-</span><span class="element">>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">(&</span><span class="identifier">mr</span><span class="plain">);</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">ST</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
|
@ -227,19 +239,21 @@ logging:
|
|||
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::Pipeline::run</span><span class="plain">(</span><span class="identifier">pathname</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain">, </span><span class="reserved">codegen_pipeline</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">N</span><span class="plain">, </span><span class="identifier">pathname</span><span class="plain"> **</span><span class="identifier">PP</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">S</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="reserved">return</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">S</span><span class="plain">-</span><span class="element">>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">>repositories</span><span class="plain">[0] = </span><span class="identifier">Inter::create</span><span class="plain">(1, 32);</span>
|
||||
<span class="identifier">clock_t</span><span class="plain"> </span><span class="identifier">start</span><span class="plain"> = </span><span class="identifier">clock</span><span class="plain">();</span>
|
||||
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">step_count</span><span class="plain"> = 0, </span><span class="identifier">step_total</span><span class="plain"> = 0;</span>
|
||||
<span class="reserved">pipeline_step</span><span class="plain"> *</span><span class="identifier">step</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">step</span><span class="plain">, </span><span class="reserved">pipeline_step</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">-</span><span class="element">>steps</span><span class="plain">) </span><span class="identifier">step_total</span><span class="plain">++;</span>
|
||||
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">active</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">, </span><span class="identifier">current_repo</span><span class="plain"> = 0;</span>
|
||||
<span class="functiontext">CodeGen::Pipeline::prepare_to_run</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">-</span><span class="element">>repositories</span><span class="plain">[</span><span class="identifier">current_repo</span><span class="plain">]);</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">active</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">step</span><span class="plain">, </span><span class="reserved">pipeline_step</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">-</span><span class="element">>steps</span><span class="plain">)</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">active</span><span class="plain">) {</span>
|
||||
<span class="identifier">inter_repository</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain"> = </span><span class="identifier">S</span><span class="plain">-</span><span class="element">>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">>repositories</span><span class="plain">[</span><span class="identifier">step</span><span class="plain">-</span><span class="element">>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">>repositories</span><span class="plain">[</span><span class="identifier">step</span><span class="plain">-</span><span class="element">>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">>repositories</span><span class="plain">[</span><span class="identifier">step</span><span class="plain">-</span><span class="element">>repository_argument</span><span class="plain">];</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">I</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"no repository"</span><span class="plain">);</span>
|
||||
<span class="functiontext">CodeGen::Pipeline::lint</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">);</span>
|
||||
<span class="functiontext">CodeGen::Pipeline::prepare_to_run</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">);</span>
|
||||
|
||||
<span class="functiontext">CodeGen::Pipeline::clean_step</span><span class="plain">(</span><span class="identifier">step</span><span class="plain">);</span>
|
||||
<span class="identifier">step</span><span class="plain">-</span><span class="element">>the_N</span><span class="plain"> = </span><span class="identifier">N</span><span class="plain">;</span>
|
||||
|
@ -253,6 +267,8 @@ logging:
|
|||
<span class="identifier">Log::new_stage</span><span class="plain">(</span><span class="identifier">STAGE_NAME</span><span class="plain">);</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">STAGE_NAME</span><span class="plain">);</span>
|
||||
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">skip_step</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
||||
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">step</span><span class="plain">-</span><span class="element">>step_stage</span><span class="plain">-</span><span class="element">>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">>step_stage</span><span class="plain">-</span><span class="element">>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">>step_stage</span><span class="plain">-</span><span class="element">>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">>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">>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">>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">>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">>repositories</span><span class="plain">[</span><span class="identifier">step</span><span class="plain">-</span><span class="element">>repository_argument</span><span class="plain">] = </span><span class="identifier">S</span><span class="plain">-</span><span class="element">>memory_repository</span><span class="plain">;</span>
|
||||
<span class="identifier">skip_step</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
||||
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
|
||||
<span class="identifier">step</span><span class="plain">-</span><span class="element">>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">>step_argument</span><span class="plain">);</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">slashes</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_THROUGH_TEXT</span><span class="plain">(</span><span class="identifier">pos</span><span class="plain">, </span><span class="identifier">step</span><span class="plain">-</span><span class="element">>step_argument</span><span class="plain">)</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::get</span><span class="plain">(</span><span class="identifier">pos</span><span class="plain">) == </span><span class="character">'/'</span><span class="plain">)</span>
|
||||
|
@ -291,9 +307,7 @@ logging:
|
|||
<span class="identifier">step</span><span class="plain">-</span><span class="element">>text_out_file</span><span class="plain"> = </span><span class="identifier">T</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">step</span><span class="plain">-</span><span class="element">>from_memory</span><span class="plain">) && (</span><span class="identifier">step</span><span class="plain">-</span><span class="element">>repository_argument</span><span class="plain"> >= 0))</span>
|
||||
<span class="identifier">S</span><span class="plain">-</span><span class="element">>repositories</span><span class="plain">[</span><span class="identifier">step</span><span class="plain">-</span><span class="element">>repository_argument</span><span class="plain">] = </span><span class="identifier">S</span><span class="plain">-</span><span class="element">>memory_repository</span><span class="plain">;</span>
|
||||
<span class="reserved">else</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">skip_step</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">)</span>
|
||||
<span class="identifier">active</span><span class="plain"> = (*(</span><span class="identifier">step</span><span class="plain">-</span><span class="element">>step_stage</span><span class="plain">-</span><span class="element">>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">>step_stage</span><span class="plain">-</span><span class="element">>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">>to_debugging_log</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">)) {</span>
|
||||
<span class="identifier">STREAM_CLOSE</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">step</span><span class="plain">-</span><span class="element">>repository_argument</span><span class="plain"> >= 0) {</span>
|
||||
<span class="identifier">current_repo</span><span class="plain"> = </span><span class="identifier">step</span><span class="plain">-</span><span class="element">>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">>repositories</span><span class="plain">[</span><span class="identifier">current_repo</span><span class="plain">]);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
@ -419,7 +428,7 @@ logging:
|
|||
<span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"zap"</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="functiontext">CodeGen::Link::guard</span><span class="plain">(</span><span class="identifier">Inter::Defn::verify_children_inner</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">));</span>
|
||||
<span class="functiontext">CodeGen::MergeTemplate::guard</span><span class="plain">(</span><span class="identifier">Inter::Defn::verify_children_inner</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">));</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
|
|
|
@ -21,6 +21,7 @@ write output to; others are not.
|
|||
|
||||
<pre class="definitions">
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">NO_STAGE_ARG</span><span class="definitionkeyword"> from </span><span class="constant">1</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">GENERAL_STAGE_ARG</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">FILE_STAGE_ARG</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">TEXT_OUT_STAGE_ARG</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">EXT_FILE_STAGE_ARG</span>
|
||||
|
@ -33,14 +34,16 @@ write output to; others are not.
|
|||
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">stage_name</span><span class="plain">;</span>
|
||||
<span class="reserved">int</span><span class="plain"> (*</span><span class="identifier">execute</span><span class="plain">)(</span><span class="reserved">void</span><span class="plain"> *);</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">stage_arg</span><span class="plain">; </span> <span class="comment">one of the <code class="display"><span class="extract">*_ARG</span></code> values above</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">takes_repository</span><span class="plain">;</span>
|
||||
<span class="identifier">MEMORY_MANAGEMENT</span>
|
||||
<span class="plain">} </span><span class="reserved">pipeline_stage</span><span class="plain">;</span>
|
||||
|
||||
<span class="reserved">pipeline_stage</span><span class="plain"> *</span><span class="functiontext">CodeGen::Stage::new</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> (*</span><span class="identifier">X</span><span class="plain">)(</span><span class="reserved">struct</span><span class="plain"> </span><span class="reserved">pipeline_step</span><span class="plain"> *), </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">arg</span><span class="plain">) {</span>
|
||||
<span class="reserved">pipeline_stage</span><span class="plain"> *</span><span class="functiontext">CodeGen::Stage::new</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> (*</span><span class="identifier">X</span><span class="plain">)(</span><span class="reserved">struct</span><span class="plain"> </span><span class="reserved">pipeline_step</span><span class="plain"> *), </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">arg</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">tr</span><span class="plain">) {</span>
|
||||
<span class="reserved">pipeline_stage</span><span class="plain"> *</span><span class="identifier">stage</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">pipeline_stage</span><span class="plain">);</span>
|
||||
<span class="identifier">stage</span><span class="plain">-</span><span class="element">>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">>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">>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">>takes_repository</span><span class="plain"> = </span><span class="identifier">tr</span><span class="plain">;</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">stage</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
@ -62,15 +65,17 @@ to the routine below.
|
|||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::Stage::make_stages</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">stages_made</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">) {</span>
|
||||
<span class="identifier">stages_made</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
||||
<span class="functiontext">CodeGen::Stage::new</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"stop"</span><span class="plain">, </span><span class="functiontext">CodeGen::Stage::run_stop_stage</span><span class="plain">, </span><span class="constant">NO_STAGE_ARG</span><span class="plain">);</span>
|
||||
<span class="functiontext">CodeGen::Stage::new</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"read"</span><span class="plain">, </span><span class="functiontext">CodeGen::Stage::run_read_stage</span><span class="plain">, </span><span class="constant">FILE_STAGE_ARG</span><span class="plain">);</span>
|
||||
<span class="functiontext">CodeGen::Stage::new</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"stop"</span><span class="plain">, </span><span class="functiontext">CodeGen::Stage::run_stop_stage</span><span class="plain">, </span><span class="constant">NO_STAGE_ARG</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
|
||||
|
||||
<span class="functiontext">CodeGen::Stage::new</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"read"</span><span class="plain">, </span><span class="functiontext">CodeGen::Stage::run_read_stage</span><span class="plain">, </span><span class="constant">FILE_STAGE_ARG</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">);</span>
|
||||
<span class="functiontext">CodeGen::Stage::new</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"extract"</span><span class="plain">, </span><span class="functiontext">CodeGen::Stage::run_extract_stage</span><span class="plain">, </span><span class="constant">GENERAL_STAGE_ARG</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">);</span>
|
||||
|
||||
<span class="functiontext">CodeGen::create_pipeline_stage</span><span class="plain">();</span>
|
||||
<span class="functiontext">CodeGen::Assimilate::create_pipeline_stage</span><span class="plain">();</span>
|
||||
<span class="functiontext">CodeGen::Eliminate::create_pipeline_stage</span><span class="plain">();</span>
|
||||
<span class="functiontext">CodeGen::Externals::create_pipeline_stage</span><span class="plain">();</span>
|
||||
<span class="functiontext">CodeGen::Labels::create_pipeline_stage</span><span class="plain">();</span>
|
||||
<span class="functiontext">CodeGen::Link::create_pipeline_stage</span><span class="plain">();</span>
|
||||
<span class="functiontext">CodeGen::MergeTemplate::create_pipeline_stage</span><span class="plain">();</span>
|
||||
<span class="functiontext">CodeGen::PLM::create_pipeline_stage</span><span class="plain">();</span>
|
||||
<span class="functiontext">CodeGen::RCC::create_pipeline_stage</span><span class="plain">();</span>
|
||||
<span class="functiontext">CodeGen::ReconcileVerbs::create_pipeline_stage</span><span class="plain">();</span>
|
||||
|
@ -94,11 +99,14 @@ the pipeline:
|
|||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">CodeGen::Stage::run_read_stage</span><span class="plain">(</span><span class="reserved">pipeline_step</span><span class="plain"> *</span><span class="identifier">step</span><span class="plain">) {</span>
|
||||
<span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">F</span><span class="plain"> = </span><span class="identifier">Filenames::from_text</span><span class="plain">(</span><span class="identifier">step</span><span class="plain">-</span><span class="element">>step_argument</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Inter::Binary::test_file</span><span class="plain">(</span><span class="identifier">F</span><span class="plain">))</span>
|
||||
<span class="identifier">Inter::Binary::read</span><span class="plain">(</span><span class="identifier">step</span><span class="plain">-</span><span class="element">>repository</span><span class="plain">, </span><span class="identifier">F</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span>
|
||||
<span class="identifier">Inter::Textual::read</span><span class="plain">(</span><span class="identifier">step</span><span class="plain">-</span><span class="element">>repository</span><span class="plain">, </span><span class="identifier">F</span><span class="plain">);</span>
|
||||
<span class="identifier">filename</span><span class="plain"> *</span><span class="identifier">F</span><span class="plain"> = </span><span class="identifier">step</span><span class="plain">-</span><span class="element">>parsed_filename</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Inter::Binary::test_file</span><span class="plain">(</span><span class="identifier">F</span><span class="plain">)) </span><span class="identifier">Inter::Binary::read</span><span class="plain">(</span><span class="identifier">step</span><span class="plain">-</span><span class="element">>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">>repository</span><span class="plain">, </span><span class="identifier">F</span><span class="plain">);</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">CodeGen::Stage::run_extract_stage</span><span class="plain">(</span><span class="reserved">pipeline_step</span><span class="plain"> *</span><span class="identifier">step</span><span class="plain">) {</span>
|
||||
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"Arg is %S.\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">step</span><span class="plain">-</span><span class="element">>step_argument</span><span class="plain">);</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
@ -109,6 +117,8 @@ the pipeline:
|
|||
|
||||
<p class="endnote">The function CodeGen::Stage::run_read_stage is used in <a href="#SP2">§2</a>.</p>
|
||||
|
||||
<p class="endnote">The function CodeGen::Stage::run_extract_stage is used in <a href="#SP2">§2</a>.</p>
|
||||
|
||||
<hr class="tocbar">
|
||||
<ul class="toc"><li><a href="1-cm.html">Back to 'Codegen Module'</a></li><li><a href="1-ppl.html">Continue with 'Pipelines'</a></li></ul><hr class="tocbar">
|
||||
<!--End of weave-->
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
|
||||
<pre class="display">
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::Assimilate::create_pipeline_stage</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||||
<span class="functiontext">CodeGen::Stage::new</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"assimilate"</span><span class="plain">, </span><span class="functiontext">CodeGen::Assimilate::run_pipeline_stage</span><span class="plain">, </span><span class="constant">NO_STAGE_ARG</span><span class="plain">);</span>
|
||||
<span class="functiontext">CodeGen::Stage::new</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"assimilate"</span><span class="plain">, </span><span class="functiontext">CodeGen::Assimilate::run_pipeline_stage</span><span class="plain">, </span><span class="constant">NO_STAGE_ARG</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">no_assimilated_actions</span><span class="plain"> = 0;</span>
|
||||
|
@ -32,7 +32,7 @@
|
|||
<span class="identifier">no_assimilated_actions</span><span class="plain"> = 0;</span>
|
||||
<span class="identifier">no_assimilated_commands</span><span class="plain"> = 0;</span>
|
||||
<span class="identifier">no_assimilated_arrays</span><span class="plain"> = 0;</span>
|
||||
<span class="functiontext">CodeGen::Link::ensure_search_list</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">);</span>
|
||||
<span class="functiontext">CodeGen::MergeTemplate::ensure_search_list</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">);</span>
|
||||
<span class="identifier">Inter::traverse_tree</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="functiontext">CodeGen::Assimilate::visitor1</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">SPLAT_IST</span><span class="plain">);</span>
|
||||
<span class="identifier">Inter::traverse_tree</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="functiontext">CodeGen::Assimilate::visitor2</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">SPLAT_IST</span><span class="plain">);</span>
|
||||
<span class="functiontext">CodeGen::Assimilate::function_bodies</span><span class="plain">();</span>
|
||||
|
@ -138,7 +138,7 @@
|
|||
<<span class="cwebmacro">Parse text of splat for identifier and value</span> <span class="cwebmacronumber">2.1.1</span>><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">proceed</span><span class="plain">) && (</span><span class="identifier">unchecked_kind_symbol</span><span class="plain">)) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">plm</span><span class="plain"> == </span><span class="identifier">DEFAULT_PLM</span><span class="plain">) {</span>
|
||||
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">symbol</span><span class="plain"> = </span><span class="functiontext">CodeGen::Link::find_name</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">identifier</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">);</span>
|
||||
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">symbol</span><span class="plain"> = </span><span class="functiontext">CodeGen::MergeTemplate::find_name</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">identifier</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">symbol</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">plm</span><span class="plain"> = </span><span class="identifier">CONSTANT_PLM</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">plm</span><span class="plain"> != </span><span class="identifier">DEFAULT_PLM</span><span class="plain">) </span><<span class="cwebmacro">Act on parsed constant definition</span> <span class="cwebmacronumber">2.1.2</span>><span class="plain">;</span>
|
||||
|
@ -255,7 +255,7 @@
|
|||
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">FAKEACTION_PLM</span><span class="plain">:</span>
|
||||
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">OBJECT_PLM</span><span class="plain">: {</span>
|
||||
<<span class="cwebmacro">Assimilate a value</span> <span class="cwebmacronumber">2.1.2.2</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">con_name</span><span class="plain">),</span>
|
||||
<span class="identifier">Inter::SymbolsTables::id_from_symbol</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::Bookmarks::package</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">), </span><span class="identifier">unchecked_kind_symbol</span><span class="plain">), </span><span class="identifier">v1</span><span class="plain">, </span><span class="identifier">v2</span><span class="plain">,</span>
|
||||
<span class="plain">(</span><span class="identifier">inter_t</span><span class="plain">) </span><span class="identifier">Inter::Bookmarks::baseline</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">) + 1, </span><span class="identifier">NULL</span><span class="plain">));</span>
|
||||
|
@ -264,7 +264,7 @@
|
|||
<span class="plain">}</span>
|
||||
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">GLOBAL_PLM</span><span class="plain">:</span>
|
||||
<<span class="cwebmacro">Assimilate a value</span> <span class="cwebmacronumber">2.1.2.2</span>><span class="plain">;</span>
|
||||
<span class="functiontext">CodeGen::Link::guard</span><span class="plain">(</span><span class="identifier">Inter::Variable::new</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">,</span>
|
||||
<span class="functiontext">CodeGen::MergeTemplate::guard</span><span class="plain">(</span><span class="identifier">Inter::Variable::new</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">,</span>
|
||||
<span class="identifier">Inter::SymbolsTables::id_from_symbol</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::Bookmarks::package</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">), </span><span class="identifier">con_name</span><span class="plain">),</span>
|
||||
<span class="identifier">Inter::SymbolsTables::id_from_symbol</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::Bookmarks::package</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">), </span><span class="identifier">unchecked_kind_symbol</span><span class="plain">), </span><span class="identifier">v1</span><span class="plain">, </span><span class="identifier">v2</span><span class="plain">,</span>
|
||||
<span class="plain">(</span><span class="identifier">inter_t</span><span class="plain">) </span><span class="identifier">Inter::Bookmarks::baseline</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">) + 1, </span><span class="identifier">NULL</span><span class="plain">));</span>
|
||||
|
@ -277,7 +277,7 @@
|
|||
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">attr_symbol</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) || (!</span><span class="identifier">Inter::Symbols::is_defined</span><span class="plain">(</span><span class="identifier">attr_symbol</span><span class="plain">))) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">attr_symbol</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">attr_symbol</span><span class="plain"> = </span><span class="identifier">con_name</span><span class="plain">;</span>
|
||||
<span class="functiontext">CodeGen::Link::guard</span><span class="plain">(</span><span class="identifier">Inter::Property::new</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">,</span>
|
||||
<span class="functiontext">CodeGen::MergeTemplate::guard</span><span class="plain">(</span><span class="identifier">Inter::Property::new</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">,</span>
|
||||
<span class="identifier">Inter::SymbolsTables::id_from_symbol</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::Bookmarks::package</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">), </span><span class="identifier">attr_symbol</span><span class="plain">),</span>
|
||||
<span class="identifier">Inter::SymbolsTables::id_from_symbol</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::Bookmarks::package</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">), </span><span class="identifier">truth_state_kind_symbol</span><span class="plain">),</span>
|
||||
<span class="plain">(</span><span class="identifier">inter_t</span><span class="plain">) </span><span class="identifier">Inter::Bookmarks::baseline</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">) + 1, </span><span class="identifier">NULL</span><span class="plain">));</span>
|
||||
|
@ -303,7 +303,7 @@
|
|||
<span class="reserved">break</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">PROPERTY_PLM</span><span class="plain">: {</span>
|
||||
<span class="functiontext">CodeGen::Link::guard</span><span class="plain">(</span><span class="identifier">Inter::Property::new</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">,</span>
|
||||
<span class="functiontext">CodeGen::MergeTemplate::guard</span><span class="plain">(</span><span class="identifier">Inter::Property::new</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">,</span>
|
||||
<span class="identifier">Inter::SymbolsTables::id_from_symbol</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::Bookmarks::package</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">), </span><span class="identifier">con_name</span><span class="plain">),</span>
|
||||
<span class="identifier">Inter::SymbolsTables::id_from_symbol</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::Bookmarks::package</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">), </span><span class="identifier">unchecked_kind_symbol</span><span class="plain">),</span>
|
||||
<span class="plain">(</span><span class="identifier">inter_t</span><span class="plain">) </span><span class="identifier">Inter::Bookmarks::baseline</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">) + 1, </span><span class="identifier">NULL</span><span class="plain">));</span>
|
||||
|
@ -382,7 +382,7 @@
|
|||
<span class="identifier">array_in_progress</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">pos</span><span class="plain">++] = </span><span class="identifier">v1_pile</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">];</span>
|
||||
<span class="identifier">array_in_progress</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">pos</span><span class="plain">++] = </span><span class="identifier">v2_pile</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">];</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="functiontext">CodeGen::Link::guard</span><span class="plain">(</span><span class="identifier">Inter::Defn::verify_construct</span><span class="plain">(</span><span class="identifier">Inter::Bookmarks::package</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">), </span><span class="identifier">array_in_progress</span><span class="plain">));</span>
|
||||
<span class="functiontext">CodeGen::MergeTemplate::guard</span><span class="plain">(</span><span class="identifier">Inter::Defn::verify_construct</span><span class="plain">(</span><span class="identifier">Inter::Bookmarks::package</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">), </span><span class="identifier">array_in_progress</span><span class="plain">));</span>
|
||||
<span class="identifier">Inter::Frame::insert</span><span class="plain">(</span><span class="identifier">array_in_progress</span><span class="plain">, </span><span class="identifier">IBM</span><span class="plain">);</span>
|
||||
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">plm</span><span class="plain"> == </span><span class="identifier">ARRAY_PLM</span><span class="plain">) {</span>
|
||||
|
@ -529,12 +529,12 @@
|
|||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">value</span><span class="plain">) == 0) </span><span class="reserved">break</span><span class="plain">;</span>
|
||||
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">loc_name</span><span class="plain"> = </span><span class="identifier">Inter::SymbolsTables::create_with_unique_name</span><span class="plain">(</span><span class="identifier">Inter::Package::local_symbols</span><span class="plain">(</span><span class="identifier">block_name</span><span class="plain">), </span><span class="identifier">value</span><span class="plain">);</span>
|
||||
<span class="identifier">Inter::Symbols::local</span><span class="plain">(</span><span class="identifier">loc_name</span><span class="plain">);</span>
|
||||
<span class="functiontext">CodeGen::Link::guard</span><span class="plain">(</span><span class="identifier">Inter::Local::new</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">block_name</span><span class="plain">, </span><span class="identifier">loc_name</span><span class="plain">, </span><span class="identifier">unchecked_kind_symbol</span><span class="plain">, 0, (</span><span class="identifier">inter_t</span><span class="plain">) </span><span class="identifier">Inter::Bookmarks::baseline</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">) + 1, </span><span class="identifier">NULL</span><span class="plain">));</span>
|
||||
<span class="functiontext">CodeGen::MergeTemplate::guard</span><span class="plain">(</span><span class="identifier">Inter::Local::new</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">block_name</span><span class="plain">, </span><span class="identifier">loc_name</span><span class="plain">, </span><span class="identifier">unchecked_kind_symbol</span><span class="plain">, 0, (</span><span class="identifier">inter_t</span><span class="plain">) </span><span class="identifier">Inter::Bookmarks::baseline</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">) + 1, </span><span class="identifier">NULL</span><span class="plain">));</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">value</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="functiontext">CodeGen::Link::guard</span><span class="plain">(</span><span class="identifier">Inter::Code::new</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, (</span><span class="reserved">int</span><span class="plain">) (</span><span class="identifier">inter_t</span><span class="plain">) </span><span class="identifier">Inter::Bookmarks::baseline</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">) + 1, </span><span class="identifier">NULL</span><span class="plain">));</span>
|
||||
<span class="functiontext">CodeGen::MergeTemplate::guard</span><span class="plain">(</span><span class="identifier">Inter::Code::new</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, (</span><span class="reserved">int</span><span class="plain">) (</span><span class="identifier">inter_t</span><span class="plain">) </span><span class="identifier">Inter::Bookmarks::baseline</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">) + 1, </span><span class="identifier">NULL</span><span class="plain">));</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">body</span><span class="plain">) > 0) {</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">L</span><span class="plain"> = </span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">body</span><span class="plain">) - 1;</span>
|
||||
<span class="reserved">while</span><span class="plain"> ((</span><span class="identifier">L</span><span class="plain">>0) && (</span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">body</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">) != </span><span class="character">']'</span><span class="plain">)) </span><span class="identifier">L</span><span class="plain">--;</span>
|
||||
|
@ -547,7 +547,7 @@
|
|||
|
||||
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">rsymb</span><span class="plain"> = </span><span class="functiontext">CodeGen::Assimilate::maybe_extern</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">identifier</span><span class="plain">, </span><span class="identifier">Inter::Bookmarks::scope</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">));</span>
|
||||
<span class="identifier">Inter::Symbols::annotate_i</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">rsymb</span><span class="plain">, </span><span class="identifier">ASSIMILATED_IANN</span><span class="plain">, 1);</span>
|
||||
<span class="functiontext">CodeGen::Link::guard</span><span class="plain">(</span><span class="identifier">Inter::Constant::new_function</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">,</span>
|
||||
<span class="functiontext">CodeGen::MergeTemplate::guard</span><span class="plain">(</span><span class="identifier">Inter::Constant::new_function</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">,</span>
|
||||
<span class="identifier">Inter::SymbolsTables::id_from_symbol</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">FP</span><span class="plain">, </span><span class="identifier">rsymb</span><span class="plain">),</span>
|
||||
<span class="identifier">Inter::SymbolsTables::id_from_symbol</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">FP</span><span class="plain">, </span><span class="identifier">unchecked_function_symbol</span><span class="plain">),</span>
|
||||
<span class="identifier">Inter::SymbolsTables::id_from_symbol</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">FP</span><span class="plain">, </span><span class="identifier">block_name</span><span class="plain">),</span>
|
||||
|
@ -573,7 +573,7 @@
|
|||
<pre class="display">
|
||||
<span class="identifier">inter_package</span><span class="plain"> *</span><span class="functiontext">CodeGen::Assimilate::new_package</span><span class="plain">(</span><span class="identifier">inter_bookmark</span><span class="plain"> *</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">pname</span><span class="plain">, </span><span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">ptype</span><span class="plain">) {</span>
|
||||
<span class="identifier">inter_package</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="functiontext">CodeGen::Link::guard</span><span class="plain">(</span><span class="identifier">Inter::Package::new_package</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">pname</span><span class="plain">,</span>
|
||||
<span class="functiontext">CodeGen::MergeTemplate::guard</span><span class="plain">(</span><span class="identifier">Inter::Package::new_package</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">pname</span><span class="plain">,</span>
|
||||
<span class="identifier">ptype</span><span class="plain">, (</span><span class="identifier">inter_t</span><span class="plain">) </span><span class="identifier">Inter::Bookmarks::baseline</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">) + 1, </span><span class="identifier">NULL</span><span class="plain">, &</span><span class="identifier">P</span><span class="plain">));</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">P</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
|
@ -650,7 +650,7 @@
|
|||
|
||||
<pre class="display">
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::Assimilate::ensure_action</span><span class="plain">(</span><span class="identifier">inter_repository</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">inter_frame</span><span class="plain"> </span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">value</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">CodeGen::Link::find_name</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">value</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">) == </span><span class="identifier">NULL</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">CodeGen::MergeTemplate::find_name</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">value</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">) == </span><span class="identifier">NULL</span><span class="plain">) {</span>
|
||||
<span class="identifier">inter_bookmark</span><span class="plain"> </span><span class="identifier">IBM_d</span><span class="plain"> = </span><span class="functiontext">CodeGen::Assimilate::template_submodule</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"actions"</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">);</span>
|
||||
<span class="identifier">inter_bookmark</span><span class="plain"> *</span><span class="identifier">IBM</span><span class="plain"> = &</span><span class="identifier">IBM_d</span><span class="plain">;</span>
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">an</span><span class="plain">);</span>
|
||||
|
@ -665,16 +665,16 @@
|
|||
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">unsharped</span><span class="plain">, </span><span class="string">"%SSub"</span><span class="plain">, </span><span class="identifier">value</span><span class="plain">);</span>
|
||||
<span class="identifier">Str::delete_first_character</span><span class="plain">(</span><span class="identifier">unsharped</span><span class="plain">);</span>
|
||||
<span class="identifier">Str::delete_first_character</span><span class="plain">(</span><span class="identifier">unsharped</span><span class="plain">);</span>
|
||||
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">txsymb</span><span class="plain"> = </span><span class="functiontext">CodeGen::Link::find_name</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">unsharped</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">);</span>
|
||||
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">txsymb</span><span class="plain"> = </span><span class="functiontext">CodeGen::MergeTemplate::find_name</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">unsharped</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">);</span>
|
||||
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">xsymb</span><span class="plain"> = </span><span class="identifier">Inter::SymbolsTables::create_with_unique_name</span><span class="plain">(</span><span class="identifier">Inter::Bookmarks::scope</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">), </span><span class="identifier">unsharped</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">txsymb</span><span class="plain">) </span><span class="identifier">Inter::SymbolsTables::equate</span><span class="plain">(</span><span class="identifier">xsymb</span><span class="plain">, </span><span class="identifier">txsymb</span><span class="plain">);</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">unsharped</span><span class="plain">);</span>
|
||||
<span class="functiontext">CodeGen::Link::guard</span><span class="plain">(</span><span class="identifier">Inter::Constant::new_numerical</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">,</span>
|
||||
<span class="functiontext">CodeGen::MergeTemplate::guard</span><span class="plain">(</span><span class="identifier">Inter::Constant::new_numerical</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">,</span>
|
||||
<span class="identifier">Inter::SymbolsTables::id_from_symbol</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::Bookmarks::package</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">), </span><span class="identifier">asymb</span><span class="plain">),</span>
|
||||
<span class="identifier">Inter::SymbolsTables::id_from_symbol</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::Bookmarks::package</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">), </span><span class="identifier">action_kind_symbol</span><span class="plain">),</span>
|
||||
<span class="identifier">LITERAL_IVAL</span><span class="plain">, 10000, (</span><span class="identifier">inter_t</span><span class="plain">) </span><span class="identifier">Inter::Bookmarks::baseline</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">) + 1, </span><span class="identifier">NULL</span><span class="plain">));</span>
|
||||
<span class="identifier">Inter::Symbols::annotate_i</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">asymb</span><span class="plain">, </span><span class="identifier">ACTION_IANN</span><span class="plain">, 1);</span>
|
||||
<span class="functiontext">CodeGen::Link::build_r</span><span class="plain">(</span><span class="identifier">Inter::Bookmarks::package</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">));</span>
|
||||
<span class="functiontext">CodeGen::MergeTemplate::build_r</span><span class="plain">(</span><span class="identifier">Inter::Bookmarks::package</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">));</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
@ -778,7 +778,7 @@
|
|||
<span class="plain">}</span>
|
||||
<span class="identifier">match_results</span><span class="plain"> </span><span class="identifier">mr</span><span class="plain"> = </span><span class="identifier">Regexp::create_mr</span><span class="plain">();</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Regexp::match</span><span class="plain">(&</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">) && (</span><span class="identifier">symb</span><span class="plain">-></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">-></span><span class="identifier">equated_to</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">symb</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Inter::Symbols::read_annotation</span><span class="plain">(</span><span class="identifier">symb</span><span class="plain">, </span><span class="identifier">SCOPE_FILTER_IANN</span><span class="plain">) != 1)</span>
|
||||
|
@ -787,7 +787,7 @@
|
|||
<span class="plain">}</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Regexp::match</span><span class="plain">(&</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">) && (</span><span class="identifier">symb</span><span class="plain">-></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">-></span><span class="identifier">equated_to</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">symb</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Inter::Symbols::read_annotation</span><span class="plain">(</span><span class="identifier">symb</span><span class="plain">, </span><span class="identifier">NOUN_FILTER_IANN</span><span class="plain">) != 1)</span>
|
||||
|
@ -797,7 +797,7 @@
|
|||
<span class="plain">}</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">symb</span><span class="plain"> = </span><span class="functiontext">CodeGen::Link::find_name</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">);</span>
|
||||
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">symb</span><span class="plain"> = </span><span class="functiontext">CodeGen::MergeTemplate::find_name</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">symb</span><span class="plain">) {</span>
|
||||
<span class="identifier">Inter::Symbols::to_data</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">pack</span><span class="plain">, </span><span class="identifier">symb</span><span class="plain">, </span><span class="identifier">val1</span><span class="plain">, </span><span class="identifier">val2</span><span class="plain">); </span><span class="reserved">return</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
|
@ -822,7 +822,7 @@
|
|||
<span class="identifier">Str::copy</span><span class="plain">(</span><span class="identifier">glob_storage</span><span class="plain">, </span><span class="identifier">sch</span><span class="plain">-</span><span class="element">>converted_from</span><span class="plain">);</span>
|
||||
|
||||
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">mcc_name</span><span class="plain"> = </span><span class="functiontext">CodeGen::Assimilate::computed_constant_symbol</span><span class="plain">(</span><span class="identifier">pack</span><span class="plain">);</span>
|
||||
<span class="functiontext">CodeGen::Link::guard</span><span class="plain">(</span><span class="identifier">Inter::Constant::new_numerical</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">,</span>
|
||||
<span class="functiontext">CodeGen::MergeTemplate::guard</span><span class="plain">(</span><span class="identifier">Inter::Constant::new_numerical</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">,</span>
|
||||
<span class="identifier">Inter::SymbolsTables::id_from_symbol</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">pack</span><span class="plain">, </span><span class="identifier">mcc_name</span><span class="plain">),</span>
|
||||
<span class="identifier">Inter::SymbolsTables::id_from_symbol</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">pack</span><span class="plain">, </span><span class="identifier">unchecked_kind_symbol</span><span class="plain">), </span><span class="identifier">GLOB_IVAL</span><span class="plain">, </span><span class="identifier">ID</span><span class="plain">,</span>
|
||||
<span class="plain">(</span><span class="identifier">inter_t</span><span class="plain">) </span><span class="identifier">Inter::Bookmarks::baseline</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">) + 1, </span><span class="identifier">NULL</span><span class="plain">));</span>
|
||||
|
@ -865,7 +865,7 @@
|
|||
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">v1</span><span class="plain"> = </span><span class="identifier">UNDEF_IVAL</span><span class="plain">, </span><span class="identifier">v2</span><span class="plain"> = 0;</span>
|
||||
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">t</span><span class="plain">-</span><span class="element">>ist_type</span><span class="plain">) {</span>
|
||||
<span class="reserved">case</span><span class="plain"> </span><span class="constant">IDENTIFIER_ISTT</span><span class="plain">: {</span>
|
||||
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">symb</span><span class="plain"> = </span><span class="functiontext">CodeGen::Link::find_name</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">t</span><span class="plain">-</span><span class="element">>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">>material</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">symb</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">symb</span><span class="plain">;</span>
|
||||
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"Failed to identify %S\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">t</span><span class="plain">-</span><span class="element">>material</span><span class="plain">);</span>
|
||||
<span class="reserved">break</span><span class="plain">;</span>
|
||||
|
@ -880,7 +880,7 @@
|
|||
<span class="plain">}</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">v1</span><span class="plain"> == </span><span class="identifier">UNDEF_IVAL</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">mcc_name</span><span class="plain"> = </span><span class="functiontext">CodeGen::Assimilate::computed_constant_symbol</span><span class="plain">(</span><span class="identifier">pack</span><span class="plain">);</span>
|
||||
<span class="functiontext">CodeGen::Link::guard</span><span class="plain">(</span><span class="identifier">Inter::Constant::new_numerical</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">,</span>
|
||||
<span class="functiontext">CodeGen::MergeTemplate::guard</span><span class="plain">(</span><span class="identifier">Inter::Constant::new_numerical</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">,</span>
|
||||
<span class="identifier">Inter::SymbolsTables::id_from_symbol</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">pack</span><span class="plain">, </span><span class="identifier">mcc_name</span><span class="plain">),</span>
|
||||
<span class="identifier">Inter::SymbolsTables::id_from_symbol</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">pack</span><span class="plain">, </span><span class="identifier">unchecked_kind_symbol</span><span class="plain">), </span><span class="identifier">v1</span><span class="plain">, </span><span class="identifier">v2</span><span class="plain">,</span>
|
||||
<span class="plain">(</span><span class="identifier">inter_t</span><span class="plain">) </span><span class="identifier">Inter::Bookmarks::baseline</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">) + 1, </span><span class="identifier">NULL</span><span class="plain">));</span>
|
||||
|
@ -898,7 +898,7 @@
|
|||
<span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"can't extend frame"</span><span class="plain">);</span>
|
||||
<span class="identifier">array_in_progress</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">pos</span><span class="plain">] = </span><span class="identifier">LITERAL_IVAL</span><span class="plain">; </span><span class="identifier">array_in_progress</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">pos</span><span class="plain">+1] = 0;</span>
|
||||
<span class="identifier">Inter::Symbols::to_data</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">pack</span><span class="plain">, </span><span class="identifier">i1</span><span class="plain">, &(</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]), &(</span><span class="identifier">array_in_progress</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">pos</span><span class="plain">+3]));</span>
|
||||
<span class="functiontext">CodeGen::Link::guard</span><span class="plain">(</span><span class="identifier">Inter::Defn::verify_construct</span><span class="plain">(</span><span class="identifier">Inter::Bookmarks::package</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">), </span><span class="identifier">array_in_progress</span><span class="plain">));</span>
|
||||
<span class="functiontext">CodeGen::MergeTemplate::guard</span><span class="plain">(</span><span class="identifier">Inter::Defn::verify_construct</span><span class="plain">(</span><span class="identifier">Inter::Bookmarks::package</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">), </span><span class="identifier">array_in_progress</span><span class="plain">));</span>
|
||||
<span class="identifier">Inter::Frame::insert</span><span class="plain">(</span><span class="identifier">array_in_progress</span><span class="plain">, </span><span class="identifier">IBM</span><span class="plain">);</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">mcc_name</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
|
@ -912,7 +912,7 @@
|
|||
<span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"can't extend frame"</span><span class="plain">);</span>
|
||||
<span class="identifier">Inter::Symbols::to_data</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">pack</span><span class="plain">, </span><span class="identifier">i1</span><span class="plain">, &(</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">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">, &(</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]), &(</span><span class="identifier">array_in_progress</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">pos</span><span class="plain">+3]));</span>
|
||||
<span class="functiontext">CodeGen::Link::guard</span><span class="plain">(</span><span class="identifier">Inter::Defn::verify_construct</span><span class="plain">(</span><span class="identifier">Inter::Bookmarks::package</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">), </span><span class="identifier">array_in_progress</span><span class="plain">));</span>
|
||||
<span class="functiontext">CodeGen::MergeTemplate::guard</span><span class="plain">(</span><span class="identifier">Inter::Defn::verify_construct</span><span class="plain">(</span><span class="identifier">Inter::Bookmarks::package</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">), </span><span class="identifier">array_in_progress</span><span class="plain">));</span>
|
||||
<span class="identifier">Inter::Frame::insert</span><span class="plain">(</span><span class="identifier">array_in_progress</span><span class="plain">, </span><span class="identifier">IBM</span><span class="plain">);</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">mcc_name</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
|
@ -952,7 +952,7 @@
|
|||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
||||
<span class="plain">#</span><span class="identifier">endif</span>
|
||||
<span class="plain">#</span><span class="identifier">ifndef</span><span class="plain"> </span><span class="identifier">CORE_MODULE</span>
|
||||
<span class="functiontext">CodeGen::Link::entire_splat</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">body</span><span class="plain">, </span><span class="identifier">offset</span><span class="plain">, </span><span class="identifier">block_name</span><span class="plain">);</span>
|
||||
<span class="functiontext">CodeGen::MergeTemplate::entire_splat</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">body</span><span class="plain">, </span><span class="identifier">offset</span><span class="plain">, </span><span class="identifier">block_name</span><span class="plain">);</span>
|
||||
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"Splat %d\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">rb_splat_count</span><span class="plain">++);</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
||||
<span class="plain">#</span><span class="identifier">endif</span>
|
||||
|
|
|
@ -26,7 +26,7 @@ on the Inter functions in a repository.
|
|||
|
||||
<pre class="display">
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::Labels::create_pipeline_stage</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||||
<span class="functiontext">CodeGen::Stage::new</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"eliminate-redundant-labels"</span><span class="plain">, </span><span class="functiontext">CodeGen::Labels::run_pipeline_stage</span><span class="plain">, </span><span class="constant">NO_STAGE_ARG</span><span class="plain">);</span>
|
||||
<span class="functiontext">CodeGen::Stage::new</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"eliminate-redundant-labels"</span><span class="plain">, </span><span class="functiontext">CodeGen::Labels::run_pipeline_stage</span><span class="plain">, </span><span class="constant">NO_STAGE_ARG</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">CodeGen::Labels::run_pipeline_stage</span><span class="plain">(</span><span class="reserved">pipeline_step</span><span class="plain"> *</span><span class="identifier">step</span><span class="plain">) {</span>
|
||||
|
|
|
@ -25,7 +25,7 @@ isn't used.
|
|||
<pre class="display">
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::Eliminate::create_pipeline_stage</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||||
<span class="functiontext">CodeGen::Stage::new</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"eliminate-redundant-code"</span><span class="plain">,</span>
|
||||
<span class="functiontext">CodeGen::Eliminate::run_pipeline_stage</span><span class="plain">, </span><span class="constant">NO_STAGE_ARG</span><span class="plain">);</span>
|
||||
<span class="functiontext">CodeGen::Eliminate::run_pipeline_stage</span><span class="plain">, </span><span class="constant">NO_STAGE_ARG</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">CodeGen::Eliminate::run_pipeline_stage</span><span class="plain">(</span><span class="reserved">pipeline_step</span><span class="plain"> *</span><span class="identifier">step</span><span class="plain">) {</span>
|
||||
|
|
|
@ -17,23 +17,23 @@
|
|||
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::Link::create_pipeline_stage</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||||
<span class="functiontext">CodeGen::Stage::new</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"link"</span><span class="plain">, </span><span class="functiontext">CodeGen::Link::run_pipeline_stage</span><span class="plain">, </span><span class="constant">TEMPLATE_FILE_STAGE_ARG</span><span class="plain">);</span>
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::MergeTemplate::create_pipeline_stage</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||||
<span class="functiontext">CodeGen::Stage::new</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"merge-template"</span><span class="plain">, </span><span class="functiontext">CodeGen::MergeTemplate::run_pipeline_stage</span><span class="plain">, </span><span class="constant">TEMPLATE_FILE_STAGE_ARG</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">CodeGen::Link::run_pipeline_stage</span><span class="plain">(</span><span class="reserved">pipeline_step</span><span class="plain"> *</span><span class="identifier">step</span><span class="plain">) {</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">CodeGen::MergeTemplate::run_pipeline_stage</span><span class="plain">(</span><span class="reserved">pipeline_step</span><span class="plain"> *</span><span class="identifier">step</span><span class="plain">) {</span>
|
||||
<span class="identifier">inter_package</span><span class="plain"> *</span><span class="identifier">main_package</span><span class="plain"> = </span><span class="identifier">Inter::Packages::main</span><span class="plain">(</span><span class="identifier">step</span><span class="plain">-</span><span class="element">>repository</span><span class="plain">);</span>
|
||||
<span class="identifier">inter_bookmark</span><span class="plain"> </span><span class="identifier">IBM</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">main_package</span><span class="plain">) </span><span class="identifier">IBM</span><span class="plain"> = </span><span class="identifier">Inter::Bookmarks::at_end_of_this_package</span><span class="plain">(</span><span class="identifier">main_package</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">IBM</span><span class="plain"> = </span><span class="identifier">Inter::Bookmarks::at_start_of_this_repository</span><span class="plain">(</span><span class="identifier">step</span><span class="plain">-</span><span class="element">>repository</span><span class="plain">);</span>
|
||||
<span class="functiontext">CodeGen::Link::link</span><span class="plain">(&</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">step</span><span class="plain">-</span><span class="element">>step_argument</span><span class="plain">, </span><span class="identifier">step</span><span class="plain">-</span><span class="element">>the_N</span><span class="plain">, </span><span class="identifier">step</span><span class="plain">-</span><span class="element">>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">(&</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">step</span><span class="plain">-</span><span class="element">>step_argument</span><span class="plain">, </span><span class="identifier">step</span><span class="plain">-</span><span class="element">>the_N</span><span class="plain">, </span><span class="identifier">step</span><span class="plain">-</span><span class="element">>the_PP</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="identifier">inter_symbols_table</span><span class="plain"> *</span><span class="identifier">link_search_list</span><span class="plain">[10];</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">link_search_list_len</span><span class="plain"> = 0;</span>
|
||||
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::Link::ensure_search_list</span><span class="plain">(</span><span class="identifier">inter_repository</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">) {</span>
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::MergeTemplate::ensure_search_list</span><span class="plain">(</span><span class="identifier">inter_repository</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">link_search_list_len</span><span class="plain"> == 0) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">template_package</span><span class="plain">) {</span>
|
||||
<span class="identifier">link_search_list</span><span class="plain">[1] = </span><span class="identifier">Inter::Packages::scope</span><span class="plain">(</span><span class="identifier">Inter::Packages::main</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">));</span>
|
||||
|
@ -46,29 +46,29 @@
|
|||
<span class="plain">}</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::Link::link</span><span class="plain">(</span><span class="identifier">inter_bookmark</span><span class="plain"> *</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">template_file</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">N</span><span class="plain">, </span><span class="identifier">pathname</span><span class="plain"> **</span><span class="identifier">PP</span><span class="plain">, </span><span class="identifier">inter_package</span><span class="plain"> *</span><span class="identifier">owner</span><span class="plain">) {</span>
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::MergeTemplate::link</span><span class="plain">(</span><span class="identifier">inter_bookmark</span><span class="plain"> *</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">template_file</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">N</span><span class="plain">, </span><span class="identifier">pathname</span><span class="plain"> **</span><span class="identifier">PP</span><span class="plain">, </span><span class="identifier">inter_package</span><span class="plain"> *</span><span class="identifier">owner</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">IBM</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"no inter to link with"</span><span class="plain">);</span>
|
||||
<span class="identifier">inter_repository</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain"> = </span><span class="identifier">IBM</span><span class="plain">-></span><span class="identifier">read_into</span><span class="plain">;</span>
|
||||
<span class="identifier">Inter::traverse_tree</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="functiontext">CodeGen::Link::visitor</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, 0);</span>
|
||||
<span class="identifier">Inter::traverse_tree</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="functiontext">CodeGen::MergeTemplate::visitor</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, 0);</span>
|
||||
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">template_package</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"unable to find template"</span><span class="plain">);</span>
|
||||
|
||||
<span class="functiontext">CodeGen::Link::ensure_search_list</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">);</span>
|
||||
<span class="functiontext">CodeGen::MergeTemplate::ensure_search_list</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">);</span>
|
||||
|
||||
<span class="identifier">inter_bookmark</span><span class="plain"> </span><span class="identifier">link_bookmark</span><span class="plain"> =</span>
|
||||
<span class="identifier">Inter::Bookmarks::at_end_of_this_package</span><span class="plain">(</span><span class="identifier">template_package</span><span class="plain">);</span>
|
||||
|
||||
<span class="reserved">I6T_kit</span><span class="plain"> </span><span class="identifier">kit</span><span class="plain"> = </span><span class="functiontext">TemplateReader::kit_out</span><span class="plain">(&</span><span class="identifier">link_bookmark</span><span class="plain">, &(</span><span class="functiontext">CodeGen::Link::receive_raw</span><span class="plain">), &(</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">(&</span><span class="identifier">link_bookmark</span><span class="plain">, &(</span><span class="functiontext">CodeGen::MergeTemplate::receive_raw</span><span class="plain">), &(</span><span class="functiontext">CodeGen::MergeTemplate::receive_command</span><span class="plain">), </span><span class="identifier">NULL</span><span class="plain">);</span>
|
||||
<span class="identifier">kit</span><span class="element">.no_i6t_file_areas</span><span class="plain"> = </span><span class="identifier">N</span><span class="plain">;</span>
|
||||
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">=0; </span><span class="identifier">i</span><span class="plain"><</span><span class="identifier">N</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">++) </span><span class="identifier">kit</span><span class="element">.i6t_files</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">] = </span><span class="identifier">PP</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">];</span>
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">);</span>
|
||||
<span class="functiontext">TemplateReader::I6T_file_intervene</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">EARLY_LINK_STAGE</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, &</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">, &</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">, &</span><span class="identifier">kit</span><span class="plain">);</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">);</span>
|
||||
<span class="functiontext">TemplateReader::extract</span><span class="plain">(</span><span class="identifier">template_file</span><span class="plain">, &</span><span class="identifier">kit</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::Link::visitor</span><span class="plain">(</span><span class="identifier">inter_repository</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">inter_frame</span><span class="plain"> </span><span class="identifier">P</span><span class="plain">, </span><span class="reserved">void</span><span class="plain"> *</span><span class="identifier">state</span><span class="plain">) {</span>
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::MergeTemplate::visitor</span><span class="plain">(</span><span class="identifier">inter_repository</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">inter_frame</span><span class="plain"> </span><span class="identifier">P</span><span class="plain">, </span><span class="reserved">void</span><span class="plain"> *</span><span class="identifier">state</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">P</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">ID_IFLD</span><span class="plain">] == </span><span class="identifier">LINK_IST</span><span class="plain">) {</span>
|
||||
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">S1</span><span class="plain"> = </span><span class="identifier">Inter::get_text</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">.</span><span class="identifier">repo_segment</span><span class="plain">-></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">-></span><span class="identifier">owning_repo</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">PART_LINK_IFLD</span><span class="plain">]);</span>
|
||||
|
@ -82,7 +82,7 @@
|
|||
<span class="identifier">dictionary</span><span class="plain"> *</span><span class="identifier">linkable_namespace</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">linkable_namespace_created</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
||||
|
||||
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="functiontext">CodeGen::Link::find_in_namespace</span><span class="plain">(</span><span class="identifier">inter_repository</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">) {</span>
|
||||
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="functiontext">CodeGen::MergeTemplate::find_in_namespace</span><span class="plain">(</span><span class="identifier">inter_repository</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">linkable_namespace_created</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">) {</span>
|
||||
<span class="identifier">linkable_namespace_created</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
||||
<span class="identifier">linkable_namespace</span><span class="plain"> = </span><span class="identifier">Dictionaries::new</span><span class="plain">(512, </span><span class="identifier">FALSE</span><span class="plain">);</span>
|
||||
|
@ -93,7 +93,7 @@
|
|||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">C</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">ID_IFLD</span><span class="plain">] == </span><span class="identifier">PACKAGE_IST</span><span class="plain">) {</span>
|
||||
<span class="identifier">inter_package</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain"> = </span><span class="identifier">Inter::Package::defined_by_frame</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::ne</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">-></span><span class="identifier">package_name</span><span class="plain">-></span><span class="identifier">symbol_name</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"template"</span><span class="plain">))</span>
|
||||
<span class="functiontext">CodeGen::Link::build_r</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">);</span>
|
||||
<span class="functiontext">CodeGen::MergeTemplate::build_r</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
|
@ -104,18 +104,18 @@
|
|||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::Link::build_r</span><span class="plain">(</span><span class="identifier">inter_package</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain">) {</span>
|
||||
<span class="functiontext">CodeGen::Link::build_only</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">);</span>
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::MergeTemplate::build_r</span><span class="plain">(</span><span class="identifier">inter_package</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain">) {</span>
|
||||
<span class="functiontext">CodeGen::MergeTemplate::build_only</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">);</span>
|
||||
<span class="identifier">inter_frame</span><span class="plain"> </span><span class="identifier">D</span><span class="plain"> = </span><span class="identifier">Inter::Symbols::defining_frame</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">-></span><span class="identifier">package_name</span><span class="plain">);</span>
|
||||
<span class="identifier">LOOP_THROUGH_INTER_CHILDREN</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">, </span><span class="identifier">D</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">C</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">ID_IFLD</span><span class="plain">] == </span><span class="identifier">PACKAGE_IST</span><span class="plain">) {</span>
|
||||
<span class="identifier">inter_package</span><span class="plain"> *</span><span class="identifier">Q</span><span class="plain"> = </span><span class="identifier">Inter::Package::defined_by_frame</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">);</span>
|
||||
<span class="functiontext">CodeGen::Link::build_r</span><span class="plain">(</span><span class="identifier">Q</span><span class="plain">);</span>
|
||||
<span class="functiontext">CodeGen::MergeTemplate::build_r</span><span class="plain">(</span><span class="identifier">Q</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::Link::build_only</span><span class="plain">(</span><span class="identifier">inter_package</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain">) {</span>
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::MergeTemplate::build_only</span><span class="plain">(</span><span class="identifier">inter_package</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain">) {</span>
|
||||
<span class="identifier">inter_symbols_table</span><span class="plain"> *</span><span class="identifier">T</span><span class="plain"> = </span><span class="identifier">Inter::Packages::scope</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">T</span><span class="plain">) {</span>
|
||||
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">=0; </span><span class="identifier">i</span><span class="plain"><</span><span class="identifier">T</span><span class="plain">-></span><span class="identifier">size</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">++) {</span>
|
||||
|
@ -131,19 +131,19 @@
|
|||
<span class="plain">}</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="functiontext">CodeGen::Link::find_name</span><span class="plain">(</span><span class="identifier">inter_repository</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">deeply</span><span class="plain">) {</span>
|
||||
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="functiontext">CodeGen::MergeTemplate::find_name</span><span class="plain">(</span><span class="identifier">inter_repository</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">deeply</span><span class="plain">) {</span>
|
||||
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">=0; </span><span class="identifier">i</span><span class="plain"><</span><span class="identifier">link_search_list_len</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">++) {</span>
|
||||
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">symb</span><span class="plain"> = </span><span class="identifier">Inter::SymbolsTables::symbol_from_name_not_equating</span><span class="plain">(</span><span class="identifier">link_search_list</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">], </span><span class="identifier">S</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">symb</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">symb</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">deeply</span><span class="plain">) {</span>
|
||||
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">symb</span><span class="plain"> = </span><span class="functiontext">CodeGen::Link::find_in_namespace</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">);</span>
|
||||
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">symb</span><span class="plain"> = </span><span class="functiontext">CodeGen::MergeTemplate::find_in_namespace</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">symb</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">symb</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::Link::log_search_path</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::MergeTemplate::log_search_path</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||||
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">=0; </span><span class="identifier">i</span><span class="plain"><</span><span class="identifier">link_search_list_len</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">++) {</span>
|
||||
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"Search %d: $4\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">, </span><span class="identifier">link_search_list</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">]);</span>
|
||||
<span class="plain">}</span>
|
||||
|
@ -151,43 +151,43 @@
|
|||
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">link_pie_count</span><span class="plain"> = 0;</span>
|
||||
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::Link::guard</span><span class="plain">(</span><span class="identifier">inter_error_message</span><span class="plain"> *</span><span class="identifier">ERR</span><span class="plain">) {</span>
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::MergeTemplate::guard</span><span class="plain">(</span><span class="identifier">inter_error_message</span><span class="plain"> *</span><span class="identifier">ERR</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ERR</span><span class="plain">) { </span><span class="identifier">Inter::Errors::issue</span><span class="plain">(</span><span class="identifier">ERR</span><span class="plain">); </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"inter error"</span><span class="plain">); }</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::Link::entire_splat</span><span class="plain">(</span><span class="identifier">inter_bookmark</span><span class="plain"> *</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">origin</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">content</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">level</span><span class="plain">, </span><span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">code_block</span><span class="plain">) {</span>
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::MergeTemplate::entire_splat</span><span class="plain">(</span><span class="identifier">inter_bookmark</span><span class="plain"> *</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">origin</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">content</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">level</span><span class="plain">, </span><span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">code_block</span><span class="plain">) {</span>
|
||||
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">SID</span><span class="plain"> = </span><span class="identifier">Inter::create_text</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">-></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">-></span><span class="identifier">read_into</span><span class="plain">, </span><span class="identifier">SID</span><span class="plain">);</span>
|
||||
<span class="identifier">Str::copy</span><span class="plain">(</span><span class="identifier">glob_storage</span><span class="plain">, </span><span class="identifier">content</span><span class="plain">);</span>
|
||||
<span class="functiontext">CodeGen::Link::guard</span><span class="plain">(</span><span class="identifier">Inter::Splat::new</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">code_block</span><span class="plain">, </span><span class="identifier">SID</span><span class="plain">, 0, </span><span class="identifier">level</span><span class="plain">, 0, </span><span class="identifier">NULL</span><span class="plain">));</span>
|
||||
<span class="functiontext">CodeGen::MergeTemplate::guard</span><span class="plain">(</span><span class="identifier">Inter::Splat::new</span><span class="plain">(</span><span class="identifier">IBM</span><span class="plain">, </span><span class="identifier">code_block</span><span class="plain">, </span><span class="identifier">SID</span><span class="plain">, 0, </span><span class="identifier">level</span><span class="plain">, 0, </span><span class="identifier">NULL</span><span class="plain">));</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function CodeGen::Link::create_pipeline_stage is used in 1/stg (<a href="1-stg.html#SP2">§2</a>).</p>
|
||||
<p class="endnote">The function CodeGen::MergeTemplate::create_pipeline_stage is used in 1/stg (<a href="1-stg.html#SP2">§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">§1</a>).</p>
|
||||
<p class="endnote">The function CodeGen::MergeTemplate::ensure_search_list is used in 2/alm (<a href="2-alm.html#SP1">§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">§5</a>).</p>
|
||||
<p class="endnote">The function CodeGen::MergeTemplate::build_r is used in 2/alm (<a href="2-alm.html#SP5">§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">§2.1</a>, <a href="2-alm.html#SP5">§5</a>, <a href="2-alm.html#SP6">§6</a>).</p>
|
||||
<p class="endnote">The function CodeGen::MergeTemplate::find_name is used in 2/alm (<a href="2-alm.html#SP2_1">§2.1</a>, <a href="2-alm.html#SP5">§5</a>, <a href="2-alm.html#SP6">§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">§5</a>), 2/alm (<a href="2-alm.html#SP2_1_2">§2.1.2</a>, <a href="2-alm.html#SP2_2_2">§2.2.2</a>, <a href="2-alm.html#SP3">§3</a>, <a href="2-alm.html#SP5">§5</a>, <a href="2-alm.html#SP6">§6</a>), 3/ip (<a href="3-ip.html#SP2">§2</a>), 3/tv (<a href="3-tv.html#SP1">§1</a>).</p>
|
||||
<p class="endnote">The function CodeGen::MergeTemplate::guard is used in 1/ppl (<a href="1-ppl.html#SP5">§5</a>), 2/alm (<a href="2-alm.html#SP2_1_2">§2.1.2</a>, <a href="2-alm.html#SP2_2_2">§2.2.2</a>, <a href="2-alm.html#SP3">§3</a>, <a href="2-alm.html#SP5">§5</a>, <a href="2-alm.html#SP6">§6</a>), 3/ip (<a href="3-ip.html#SP2">§2</a>), 3/tv (<a href="3-tv.html#SP1">§1</a>).</p>
|
||||
|
||||
<p class="endnote">The function CodeGen::Link::entire_splat is used in <a href="#SP2">§2</a>, 2/alm (<a href="2-alm.html#SP6">§6</a>).</p>
|
||||
<p class="endnote">The function CodeGen::MergeTemplate::entire_splat is used in <a href="#SP2">§2</a>, 2/alm (<a href="2-alm.html#SP6">§6</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP2"></a><b>§2. </b></p>
|
||||
|
||||
|
@ -203,7 +203,7 @@
|
|||
</pre>
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::Link::receive_raw</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">I6T_kit</span><span class="plain"> *</span><span class="identifier">kit</span><span class="plain">) {</span>
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::MergeTemplate::receive_raw</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">I6T_kit</span><span class="plain"> *</span><span class="identifier">kit</span><span class="plain">) {</span>
|
||||
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">R</span><span class="plain"> = </span><span class="identifier">Str::new</span><span class="plain">();</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">mode</span><span class="plain"> = </span><span class="constant">IGNORE_WS_FILTER_BIT</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_THROUGH_TEXT</span><span class="plain">(</span><span class="identifier">pos</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">) {</span>
|
||||
|
@ -245,22 +245,22 @@
|
|||
<span class="plain">}</span>
|
||||
<span class="identifier">PUT_TO</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">, </span><span class="identifier">c</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">c</span><span class="plain"> == </span><span class="character">';'</span><span class="plain">) && (!(</span><span class="identifier">mode</span><span class="plain"> & </span><span class="constant">SUBORDINATE_FILTER_BITS</span><span class="plain">))) {</span>
|
||||
<span class="functiontext">CodeGen::Link::chunked_raw</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">, </span><span class="identifier">kit</span><span class="plain">);</span>
|
||||
<span class="functiontext">CodeGen::MergeTemplate::chunked_raw</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">, </span><span class="identifier">kit</span><span class="plain">);</span>
|
||||
<span class="identifier">mode</span><span class="plain"> = </span><span class="constant">IGNORE_WS_FILTER_BIT</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="functiontext">CodeGen::Link::chunked_raw</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">, </span><span class="identifier">kit</span><span class="plain">);</span>
|
||||
<span class="functiontext">CodeGen::MergeTemplate::chunked_raw</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">, </span><span class="identifier">kit</span><span class="plain">);</span>
|
||||
<span class="identifier">Str::clear</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::Link::chunked_raw</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">I6T_kit</span><span class="plain"> *</span><span class="identifier">kit</span><span class="plain">) {</span>
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::MergeTemplate::chunked_raw</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">I6T_kit</span><span class="plain"> *</span><span class="identifier">kit</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">) == 0) </span><span class="reserved">return</span><span class="plain">;</span>
|
||||
<span class="identifier">PUT_TO</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">, </span><span class="character">'\</span><span class="plain">n</span><span class="character">'</span><span class="plain">);</span>
|
||||
<span class="functiontext">CodeGen::Link::entire_splat</span><span class="plain">(</span><span class="identifier">kit</span><span class="plain">-</span><span class="element">>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">>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">>IBM</span><span class="plain">)-></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">>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">>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">>IBM</span><span class="plain">)-></span><span class="identifier">package_name</span><span class="plain">);</span>
|
||||
<span class="identifier">Str::clear</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::Link::receive_command</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">command</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">argument</span><span class="plain">, </span><span class="reserved">I6T_kit</span><span class="plain"> *</span><span class="identifier">kit</span><span class="plain">) {</span>
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::MergeTemplate::receive_command</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">command</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">argument</span><span class="plain">, </span><span class="reserved">I6T_kit</span><span class="plain"> *</span><span class="identifier">kit</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">command</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"plugin"</span><span class="plain">)) ||</span>
|
||||
<span class="plain">(</span><span class="identifier">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">command</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"type"</span><span class="plain">)) ||</span>
|
||||
<span class="plain">(</span><span class="identifier">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">command</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"open-file"</span><span class="plain">)) ||</span>
|
||||
|
@ -295,11 +295,11 @@
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function CodeGen::Link::receive_raw is used in <a href="#SP1">§1</a>.</p>
|
||||
<p class="endnote">The function CodeGen::MergeTemplate::receive_raw is used in <a href="#SP1">§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">§1</a>.</p>
|
||||
<p class="endnote">The function CodeGen::MergeTemplate::receive_command is used in <a href="#SP1">§1</a>.</p>
|
||||
|
||||
<hr class="tocbar">
|
||||
<ul class="toc"><li><i>(This section begins Chapter 2: Miscellaneous Pipeline Stages.)</i></li><li><a href="2-itr.html">Continue with 'I6 Template Reader'</a></li></ul><hr class="tocbar">
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
|
||||
<pre class="display">
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::PLM::create_pipeline_stage</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||||
<span class="functiontext">CodeGen::Stage::new</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"parse-linked-matter"</span><span class="plain">, </span><span class="functiontext">CodeGen::PLM::run_pipeline_stage</span><span class="plain">, </span><span class="constant">NO_STAGE_ARG</span><span class="plain">);</span>
|
||||
<span class="functiontext">CodeGen::Stage::new</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"parse-linked-matter"</span><span class="plain">, </span><span class="functiontext">CodeGen::PLM::run_pipeline_stage</span><span class="plain">, </span><span class="constant">NO_STAGE_ARG</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">CodeGen::PLM::run_pipeline_stage</span><span class="plain">(</span><span class="reserved">pipeline_step</span><span class="plain"> *</span><span class="identifier">step</span><span class="plain">) {</span>
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
|
||||
<pre class="display">
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::RCC::create_pipeline_stage</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||||
<span class="functiontext">CodeGen::Stage::new</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"resolve-conditional-compilation"</span><span class="plain">, </span><span class="functiontext">CodeGen::RCC::run_pipeline_stage</span><span class="plain">, </span><span class="constant">NO_STAGE_ARG</span><span class="plain">);</span>
|
||||
<span class="functiontext">CodeGen::Stage::new</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"resolve-conditional-compilation"</span><span class="plain">, </span><span class="functiontext">CodeGen::RCC::run_pipeline_stage</span><span class="plain">, </span><span class="constant">NO_STAGE_ARG</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">CodeGen::RCC::run_pipeline_stage</span><span class="plain">(</span><span class="reserved">pipeline_step</span><span class="plain"> *</span><span class="identifier">step</span><span class="plain">) {</span>
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
|
||||
<pre class="display">
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::Externals::create_pipeline_stage</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||||
<span class="functiontext">CodeGen::Stage::new</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"resolve-external-symbols"</span><span class="plain">, </span><span class="functiontext">CodeGen::Externals::run_pipeline_stage</span><span class="plain">, </span><span class="constant">NO_STAGE_ARG</span><span class="plain">);</span>
|
||||
<span class="functiontext">CodeGen::Stage::new</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"resolve-external-symbols"</span><span class="plain">, </span><span class="functiontext">CodeGen::Externals::run_pipeline_stage</span><span class="plain">, </span><span class="constant">NO_STAGE_ARG</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">resolution_failed</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
|
||||
<pre class="display">
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::ReconcileVerbs::create_pipeline_stage</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||||
<span class="functiontext">CodeGen::Stage::new</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"reconcile-verbs"</span><span class="plain">, </span><span class="functiontext">CodeGen::ReconcileVerbs::run_pipeline_stage</span><span class="plain">, </span><span class="constant">NO_STAGE_ARG</span><span class="plain">);</span>
|
||||
<span class="functiontext">CodeGen::Stage::new</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"reconcile-verbs"</span><span class="plain">, </span><span class="functiontext">CodeGen::ReconcileVerbs::run_pipeline_stage</span><span class="plain">, </span><span class="constant">NO_STAGE_ARG</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">CodeGen::ReconcileVerbs::run_pipeline_stage</span><span class="plain">(</span><span class="reserved">pipeline_step</span><span class="plain"> *</span><span class="identifier">step</span><span class="plain">) {</span>
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
|
||||
<pre class="display">
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::Uniqueness::create_pipeline_stage</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||||
<span class="functiontext">CodeGen::Stage::new</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"make-identifiers-unique"</span><span class="plain">, </span><span class="functiontext">CodeGen::Uniqueness::run_pipeline_stage</span><span class="plain">, </span><span class="constant">NO_STAGE_ARG</span><span class="plain">);</span>
|
||||
<span class="functiontext">CodeGen::Stage::new</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"make-identifiers-unique"</span><span class="plain">, </span><span class="functiontext">CodeGen::Uniqueness::run_pipeline_stage</span><span class="plain">, </span><span class="constant">NO_STAGE_ARG</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">CodeGen::Uniqueness::run_pipeline_stage</span><span class="plain">(</span><span class="reserved">pipeline_step</span><span class="plain"> *</span><span class="identifier">step</span><span class="plain">) {</span>
|
||||
|
|
|
@ -246,10 +246,10 @@
|
|||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">to</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"no symbol"</span><span class="plain">);</span>
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">prim_command</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">prim_command</span><span class="plain">, </span><span class="string">"primitive %S %S"</span><span class="plain">, </span><span class="identifier">prim</span><span class="plain">, </span><span class="identifier">category</span><span class="plain">);</span>
|
||||
<span class="functiontext">CodeGen::Link::guard</span><span class="plain">(</span><span class="identifier">Inter::Defn::read_construct_text</span><span class="plain">(</span><span class="identifier">prim_command</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">IBM</span><span class="plain">));</span>
|
||||
<span class="functiontext">CodeGen::MergeTemplate::guard</span><span class="plain">(</span><span class="identifier">Inter::Defn::read_construct_text</span><span class="plain">(</span><span class="identifier">prim_command</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">IBM</span><span class="plain">));</span>
|
||||
<span class="identifier">inter_error_message</span><span class="plain"> *</span><span class="identifier">E</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="plain">*</span><span class="identifier">to</span><span class="plain"> = </span><span class="identifier">Inter::Textual::find_symbol</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">Inter::get_global_symbols</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">), </span><span class="identifier">prim</span><span class="plain">, </span><span class="identifier">PRIMITIVE_IST</span><span class="plain">, &</span><span class="identifier">E</span><span class="plain">);</span>
|
||||
<span class="functiontext">CodeGen::Link::guard</span><span class="plain">(</span><span class="identifier">E</span><span class="plain">);</span>
|
||||
<span class="functiontext">CodeGen::MergeTemplate::guard</span><span class="plain">(</span><span class="identifier">E</span><span class="plain">);</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">prim_command</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
|
|
|
@ -172,7 +172,7 @@
|
|||
<span class="plain">*</span><span class="identifier">slot</span><span class="plain"> = </span><span class="identifier">Inter::SymbolsTables::symbol_from_name_creating</span><span class="plain">(</span><span class="identifier">tab</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">) > 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">-></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">-></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">-></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>
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
|
||||
<pre class="display">
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::create_pipeline_stage</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
||||
<span class="functiontext">CodeGen::Stage::new</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"generate"</span><span class="plain">, </span><span class="functiontext">CodeGen::run_pipeline_stage</span><span class="plain">, </span><span class="constant">TEXT_OUT_STAGE_ARG</span><span class="plain">);</span>
|
||||
<span class="functiontext">CodeGen::Stage::new</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"generate"</span><span class="plain">, </span><span class="functiontext">CodeGen::run_pipeline_stage</span><span class="plain">, </span><span class="constant">TEXT_OUT_STAGE_ARG</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">CodeGen::run_pipeline_stage</span><span class="plain">(</span><span class="reserved">pipeline_step</span><span class="plain"> *</span><span class="identifier">step</span><span class="plain">) {</span>
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
<!--Weave of 'P/pas' generated by 7-->
|
||||
<ul class="crumbs"><li><a href="../webs.html">★</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">§1. Stages and descriptions</a></li><li><a href="#SP3">§3. Pipelines run by Inform</a></li><li><a href="#SP4">§4. Reading and generating</a></li><li><a href="#SP5">§5. The code-generation stages</a></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><a href="#SP1">§1. Stages and descriptions</a></li><li><a href="#SP3">§3. Pipelines run by Inform</a></li><li><a href="#SP4">§4. Stage descriptions</a></li><li><a href="#SP5">§5. Reading and generating</a></li><li><a href="#SP6">§6. The code-generation stages</a></li></ul><hr class="tocbar">
|
||||
|
||||
<p class="inwebparagraph"><a id="SP1"></a><b>§1. Stages and descriptions. </b>A processing stage is a step in code generation which acts on a repository
|
||||
of inter in memory. Some stages change, add to or edit down that code, while
|
||||
|
@ -54,11 +54,7 @@ each line, and the comma is not needed:
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP2"></a><b>§2. </b>A pipeline can work on up to 10 different repositories, called <code class="display"><span class="extract">0</span></code> to <code class="display"><span class="extract">9</span></code>,
|
||||
which are initially empty (but see below).
|
||||
</p>
|
||||
|
||||
<p class="inwebparagraph">A pipeline description can make use of "variables". These hold only text,
|
||||
<p class="inwebparagraph"><a id="SP2"></a><b>§2. </b>A pipeline description can make use of "variables". These hold only text,
|
||||
and generally represent filenames. Variable names begin with a star <code class="display"><span class="extract">*</span></code>.
|
||||
The pipeline cannot create variables: instead, the user of the pipeline has
|
||||
to make them before use. For example,
|
||||
|
@ -79,7 +75,7 @@ the given pipeline. Inside the pipeline, a line such as:
|
|||
|
||||
|
||||
<pre class="display">
|
||||
<span class="plain">generate: inform6 -> *X</span>
|
||||
<span class="plain">generate inform6 -> *X</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph">would then be read as:
|
||||
|
@ -89,7 +85,7 @@ the given pipeline. Inside the pipeline, a line such as:
|
|||
|
||||
|
||||
<pre class="display">
|
||||
<span class="plain">generate: inform6 -> ex/why</span>
|
||||
<span class="plain">generate inform6 -> ex/why</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph">After variable substitution like this, filenames inside the pipeline
|
||||
|
@ -114,7 +110,7 @@ For example,
|
|||
|
||||
|
||||
<pre class="display">
|
||||
<span class="plain">generate: inventory -> *log</span>
|
||||
<span class="plain">generate inventory -> *log</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph">Template filenames are a little different: those are searched for inside
|
||||
|
@ -137,9 +133,9 @@ effect is that any useful pipeline for Inform will begin and end thus:
|
|||
|
||||
|
||||
<pre class="display">
|
||||
<span class="plain">read: 0 <- *in</span>
|
||||
<span class="plain">read <- *in</span>
|
||||
<span class="plain">...</span>
|
||||
<span class="plain">generate: inform6 -> *out</span>
|
||||
<span class="plain">generate inform6 -> *out</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph">In addition, the "domain" is set to the directory containing the <code class="display"><span class="extract">*out</span></code>
|
||||
|
@ -211,7 +207,53 @@ project's Materials folder. But there are also two other ways.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP4"></a><b>§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>§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] <- SOURCE</span>
|
||||
<span class="plain">STAGENAME [LOCATION] FORMAT -> 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 <- *in</span>
|
||||
<span class="plain">generate binary -> *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>§5. Reading and generating. </b>The <code class="display"><span class="extract">read</span></code> stage reads Inter from a file into a repository in memory.
|
||||
(Its previous contents, if any, are discarded.) This then becomes the
|
||||
repository to which subsequent stages apply. The format is:
|
||||
</p>
|
||||
|
@ -223,8 +265,12 @@ repository to which subsequent stages apply. The format is:
|
|||
<span class="plain">read REPOSITORY <- FILE</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph">where <code class="display"><span class="extract">REPOSITORY</span></code> is <code class="display"><span class="extract">0</span></code> to <code class="display"><span class="extract">9</span></code>. Conventionally, we use <code class="display"><span class="extract">0</span></code> most of the time.
|
||||
The <code class="display"><span class="extract">FILE</span></code> can contain either binary or textual Inter, and this is
|
||||
<p class="inwebparagraph">where <code class="display"><span class="extract">REPOSITORY</span></code> is <code class="display"><span class="extract">0</span></code> to <code class="display"><span class="extract">9</span></code>, and is <code class="display"><span class="extract">0</span></code> if not supplied. Note that
|
||||
this fills an entire repository: it's not meaningful to specify a
|
||||
named package as the location.
|
||||
</p>
|
||||
|
||||
<p class="inwebparagraph">The <code class="display"><span class="extract">FILE</span></code> can contain either binary or textual Inter, and this is
|
||||
automatically detected.
|
||||
</p>
|
||||
|
||||
|
@ -232,13 +278,14 @@ automatically detected.
|
|||
|
||||
|
||||
<pre class="display">
|
||||
<span class="plain">generate: FORMAT -> FILE</span>
|
||||
<span class="plain">generate FORMAT -> FILE</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph">writes the contents of the current repository out into the given <code class="display"><span class="extract">FILE</span></code>.
|
||||
There are several possible formats: <code class="display"><span class="extract">binary</span></code> and <code class="display"><span class="extract">text</span></code> mean a binary or
|
||||
textual Inter file, <code class="display"><span class="extract">inventory</span></code> means a textual summary of the contents,
|
||||
and <code class="display"><span class="extract">inform6</span></code> means an Inform 6 program.
|
||||
<p class="inwebparagraph">writes the repository out into the given <code class="display"><span class="extract">FILE</span></code>. There are several possible
|
||||
formats: <code class="display"><span class="extract">binary</span></code> and <code class="display"><span class="extract">text</span></code> mean a binary or textual Inter file, <code class="display"><span class="extract">inventory</span></code>
|
||||
means a textual summary of the contents, and <code class="display"><span class="extract">inform6</span></code> means an Inform 6
|
||||
program. At present, only <code class="display"><span class="extract">inventory</span></code> can be generated on specific
|
||||
packages in a repository.
|
||||
</p>
|
||||
|
||||
<p class="inwebparagraph">The <code class="display"><span class="extract">generate</span></code> stage leaves the repository unchanged, so it's possible
|
||||
|
@ -246,7 +293,7 @@ to generate multiple representations of the same repository into different
|
|||
files.
|
||||
</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP5"></a><b>§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>§6. The code-generation stages. </b>The following are all experimental, and have probably not yet reached their
|
||||
final form or names.
|
||||
</p>
|
||||
|
||||
|
@ -260,13 +307,13 @@ therefore, are converted out of Inform 6 and then back into it again. This
|
|||
sounds inefficient but is surprisingly fast, and enables many optimisations.)
|
||||
</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP6"></a><b>§6. </b><code class="display"><span class="extract">link:T</span></code> reads in the I6T template file T, converts it to inter in a very
|
||||
basic way (creating many splats), and merges it with the repository. Splats
|
||||
are the unhappiest of inter statements, simply including verbatim snippets
|
||||
of Inform 6 code.
|
||||
<p class="inwebparagraph"><a id="SP7"></a><b>§7. </b><code class="display"><span class="extract">merge-template <- T</span></code> reads in the I6T template file <code class="display"><span class="extract">T</span></code>, converts it to
|
||||
inter in a very basic way (creating many splats), and merges it with the
|
||||
repository. Splats are the unhappiest of inter statements, simply including
|
||||
verbatim snippets of Inform 6 code.
|
||||
</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP7"></a><b>§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>§8. </b><code class="display"><span class="extract">parse-linked-matter</span></code> examines the splats produced by merging and annotates
|
||||
them by what they seem to want to do. For example,
|
||||
</p>
|
||||
|
||||
|
@ -289,7 +336,7 @@ them by what they seem to want to do. For example,
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP8"></a><b>§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>§9. </b><code class="display"><span class="extract">resolve-conditional-compilation</span></code> looks for splats arising from Inform 6
|
||||
conditional compilation directives such as <code class="display"><span class="extract">#ifdef</span></code>, <code class="display"><span class="extract">#ifndef</span></code>, <code class="display"><span class="extract">#endif</span></code>;
|
||||
it then detects whether the relevant symbols are defined, or looks at their
|
||||
values, and deletes sections of code not to be compiled. At the end of this
|
||||
|
@ -322,7 +369,7 @@ For example:
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP9"></a><b>§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>§10. </b><code class="display"><span class="extract">assimilate</span></code> aims to convert all remaining splats in the repository into
|
||||
higher-level inter statements. For example,
|
||||
</p>
|
||||
|
||||
|
@ -349,7 +396,7 @@ higher-level inter statements. For example,
|
|||
and the linking process is complete.
|
||||
</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP10"></a><b>§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>§11. </b><code class="display"><span class="extract">make-identifiers-unique</span></code> looks for symbols marked with the <code class="display"><span class="extract">MAKE_NAME_UNIQUE</span></code>
|
||||
flag (represented in textual form by an asterisk after its name), This flag
|
||||
means that Inform wants the symbol name to be globally unique in the repository.
|
||||
For example, if Inform generates the symbol name <code class="display"><span class="extract">fruit*</span></code>, it's really telling
|
||||
|
@ -371,7 +418,7 @@ same name in any I6 program, for example.
|
|||
<p class="inwebparagraph">At the end of this stage, no symbol still has the <code class="display"><span class="extract">MAKE_NAME_UNIQUE</span></code> flag.
|
||||
</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP11"></a><b>§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>§12. </b><code class="display"><span class="extract">reconcile-verbs</span></code> is a short stage looking for clashes between any verbs (in
|
||||
the parser interactive fiction sense) which have been assimilated from the
|
||||
template, and verbs which have been defined in the main source text. For
|
||||
example, suppose the source creates the command verb "abstract": this would
|
||||
|
@ -385,12 +432,12 @@ up with two command verbs: <code class="display"><span class="extract">abstract<
|
|||
<p class="inwebparagraph">At the end of this stage, all parser verbs have distinct textual forms.
|
||||
</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP12"></a><b>§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>§13. </b><code class="display"><span class="extract">eliminate-redundant-code</span></code> deletes all packages which Inter can prove
|
||||
will not be used in the final code generated from the repository. For
|
||||
example, functions never called, or arrays never referred to, are deleted.
|
||||
</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP13"></a><b>§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>§14. </b><code class="display"><span class="extract">eliminate-redundant-labels</span></code> performs peephole optimisation on all of
|
||||
the functions in the repository to remove all labels which are declared
|
||||
but can never be jumped to.
|
||||
</p>
|
||||
|
@ -399,7 +446,7 @@ but can never be jumped to.
|
|||
branch, either by <code class="display"><span class="extract">inv !jump</span></code> or in assembly language.
|
||||
</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP14"></a><b>§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>§15. </b>The special stage <code class="display"><span class="extract">stop</span></code> halts processing of the pipeline midway. At present
|
||||
this is only useful for making experimental edits to pipeline descriptions
|
||||
to see what just the first half does, without deleting the second half of
|
||||
the description.
|
||||
|
|
|
@ -88,7 +88,7 @@ one stage, can be quite elaborate (see later), but for example:
|
|||
|
||||
|
||||
<pre class="display">
|
||||
<span class="plain">read: 0 <- myfile.inter, resolve-conditional-compilation, generate: inform6 -> myfile.i6</span>
|
||||
<span class="plain">read <- myfile.inter, resolve-conditional-compilation, generate inform6 -> myfile.i6</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph">is a valid three-stage pipeline. The command to do this is then:
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
read: 0 <- *in
|
||||
link: Output.i6t
|
||||
read <- *in
|
||||
merge-template <- Output.i6t
|
||||
parse-linked-matter
|
||||
resolve-conditional-compilation
|
||||
assimilate
|
||||
make-identifiers-unique
|
||||
resolve-external-symbols
|
||||
reconcile-verbs
|
||||
generate: inform6 -> *out
|
||||
generate inform6 -> *out
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
read: 0 <- *in
|
||||
link: Output.i6t
|
||||
read <- *in
|
||||
merge-template <- Output.i6t
|
||||
parse-linked-matter
|
||||
resolve-conditional-compilation
|
||||
assimilate
|
||||
make-identifiers-unique
|
||||
resolve-external-symbols
|
||||
reconcile-verbs
|
||||
generate: inform6 -> *out
|
||||
generate inform6 -> *out
|
||||
|
|
|
@ -27,10 +27,7 @@ each line, and the comma is not needed:
|
|||
|xyzzy|
|
||||
|plover|
|
||||
|
||||
@ A pipeline can work on up to 10 different repositories, called |0| to |9|,
|
||||
which are initially empty (but see below).
|
||||
|
||||
A pipeline description can make use of "variables". These hold only text,
|
||||
@ A pipeline description can make use of "variables". These hold only text,
|
||||
and generally represent filenames. Variable names begin with a star |*|.
|
||||
The pipeline cannot create variables: instead, the user of the pipeline has
|
||||
to make them before use. For example,
|
||||
|
@ -40,11 +37,11 @@ to make them before use. For example,
|
|||
creates the variable |*X| with the textual contents |ex/why| before running
|
||||
the given pipeline. Inside the pipeline, a line such as:
|
||||
|
||||
|generate: inform6 -> *X|
|
||||
|generate inform6 -> *X|
|
||||
|
||||
would then be read as:
|
||||
|
||||
|generate: inform6 -> ex/why|
|
||||
|generate inform6 -> ex/why|
|
||||
|
||||
After variable substitution like this, filenames inside the pipeline
|
||||
description are interpreted as follows:
|
||||
|
@ -60,7 +57,7 @@ A command to write a text file to |*log| is interpreted instead to mean
|
|||
"spool the output you would otherwise write to the debugging log instead".
|
||||
For example,
|
||||
|
||||
|generate: inventory -> *log|
|
||||
|generate inventory -> *log|
|
||||
|
||||
Template filenames are a little different: those are searched for inside
|
||||
a path of possible directories. By default there's no such path, but using
|
||||
|
@ -76,9 +73,9 @@ which Inform has generated on the current run, and |*out| is set to the
|
|||
filename to which final I6 code needs to be written. The practical
|
||||
effect is that any useful pipeline for Inform will begin and end thus:
|
||||
|
||||
|read: 0 <- *in|
|
||||
|read <- *in|
|
||||
|...|
|
||||
|generate: inform6 -> *out|
|
||||
|generate inform6 -> *out|
|
||||
|
||||
In addition, the "domain" is set to the directory containing the |*out|
|
||||
file, and the template search path is set to the one used in Inform, that is,
|
||||
|
@ -116,6 +113,38 @@ Exactly as with Inter, Inform 7 also responds to |-pipeline-file|:
|
|||
|
||||
|$ inform7/Tangled/inform7 ... -pipeline-file FILE|
|
||||
|
||||
@h Stage descriptions.
|
||||
There are three sorts of stage description: those involving material coming
|
||||
in, denoted by a left arrow, those involving some external file being written
|
||||
out, denoted by a right arrow, and those which just process what we have.
|
||||
These take the following forms:
|
||||
|
||||
|STAGENAME [LOCATION] <- SOURCE|
|
||||
|STAGENAME [LOCATION] FORMAT -> DESTINATION|
|
||||
|STAGENAME [LOCATION]|
|
||||
|
||||
In each case the |LOCATION| is optional. For example:
|
||||
|
||||
|read 2 <- *in|
|
||||
|generate binary -> *out|
|
||||
|eliminate-redundant-labels /main/template|
|
||||
|
||||
In the first line the location is |2|. Pipeline descriptios allow us to manage
|
||||
up to 10 different repositories, and these are called |0| to |9|. These are
|
||||
all initially empty. Any stage which doesn't specify a repository is considered
|
||||
to apply to |0|; plenty of pipelines never mention the digits |0| to |9| at
|
||||
all because they do everything inside |0|.
|
||||
|
||||
In the second line, there's no location given, so the location is presumed
|
||||
to be |0|.
|
||||
|
||||
The third line demonstrates that a location can be more specific than just
|
||||
a repository: it can be a specific package in a repository. Here, it's
|
||||
|/main/template| in repository |0|, but we could also write |7:/main/template|
|
||||
to mean |/main/template| in |7|, for example. Not all stages allow the
|
||||
location to be narrowed down to a single package (which by definition
|
||||
includes all its subpackages): see below.
|
||||
|
||||
@h Reading and generating.
|
||||
The |read| stage reads Inter from a file into a repository in memory.
|
||||
(Its previous contents, if any, are discarded.) This then becomes the
|
||||
|
@ -123,16 +152,20 @@ repository to which subsequent stages apply. The format is:
|
|||
|
||||
|read REPOSITORY <- FILE|
|
||||
|
||||
where |REPOSITORY| is |0| to |9|. Conventionally, we use |0| most of the time.
|
||||
where |REPOSITORY| is |0| to |9|, and is |0| if not supplied. Note that
|
||||
this fills an entire repository: it's not meaningful to specify a
|
||||
named package as the location.
|
||||
|
||||
The |FILE| can contain either binary or textual Inter, and this is
|
||||
automatically detected.
|
||||
|
||||
|generate: FORMAT -> FILE|
|
||||
|generate FORMAT -> FILE|
|
||||
|
||||
writes the contents of the current repository out into the given |FILE|.
|
||||
There are several possible formats: |binary| and |text| mean a binary or
|
||||
textual Inter file, |inventory| means a textual summary of the contents,
|
||||
and |inform6| means an Inform 6 program.
|
||||
writes the repository out into the given |FILE|. There are several possible
|
||||
formats: |binary| and |text| mean a binary or textual Inter file, |inventory|
|
||||
means a textual summary of the contents, and |inform6| means an Inform 6
|
||||
program. At present, only |inventory| can be generated on specific
|
||||
packages in a repository.
|
||||
|
||||
The |generate| stage leaves the repository unchanged, so it's possible
|
||||
to generate multiple representations of the same repository into different
|
||||
|
@ -151,12 +184,12 @@ turn this merged repository into Inform 6 code. (Routines in the template,
|
|||
therefore, are converted out of Inform 6 and then back into it again. This
|
||||
sounds inefficient but is surprisingly fast, and enables many optimisations.)
|
||||
|
||||
@ |link:T| reads in the I6T template file T, converts it to inter in a very
|
||||
basic way (creating many splats), and merges it with the repository. Splats
|
||||
are the unhappiest of inter statements, simply including verbatim snippets
|
||||
of Inform 6 code.
|
||||
@ |merge-template <- T| reads in the I6T template file |T|, converts it to
|
||||
inter in a very basic way (creating many splats), and merges it with the
|
||||
repository. Splats are the unhappiest of inter statements, simply including
|
||||
verbatim snippets of Inform 6 code.
|
||||
|
||||
@ |parse-linked-matter| examines the splats produced by linking and annotates
|
||||
@ |parse-linked-matter| examines the splats produced by merging and annotates
|
||||
them by what they seem to want to do. For example,
|
||||
|
||||
|splat &"Global nitwit = 2;\n"|
|
||||
|
|
|
@ -49,7 +49,7 @@ converts |my.intert| (a textual inter file) to its binary equivalent
|
|||
a pipeline of processing stages. The pipeline, which must contain at least
|
||||
one stage, can be quite elaborate (see later), but for example:
|
||||
|
||||
|read: 0 <- myfile.inter, resolve-conditional-compilation, generate: inform6 -> myfile.i6|
|
||||
|read <- myfile.inter, resolve-conditional-compilation, generate inform6 -> myfile.i6|
|
||||
|
||||
is a valid three-stage pipeline. The command to do this is then:
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
read: 0 <- *in
|
||||
read <- *in
|
||||
parse-linked-matter
|
||||
assimilate
|
||||
resolve-external-symbols
|
||||
generate: text -> *out
|
||||
generate text -> *out
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
read: 0 <- *in
|
||||
read <- *in
|
||||
parse-linked-matter
|
||||
resolve-conditional-compilation
|
||||
assimilate
|
||||
generate: inform6 -> *out
|
||||
generate inform6 -> *out
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
read: 0 <- *in
|
||||
read <- *in
|
||||
parse-linked-matter
|
||||
resolve-conditional-compilation
|
||||
generate: text -> *out
|
||||
generate text -> *out
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
read: 0 <- *in
|
||||
read <- *in
|
||||
parse-linked-matter
|
||||
resolve-conditional-compilation
|
||||
generate: text -> *out
|
||||
generate text -> *out
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
read: 0 <- *in
|
||||
read <- *in
|
||||
parse-linked-matter
|
||||
resolve-conditional-compilation
|
||||
assimilate
|
||||
generate: inform6 -> *out
|
||||
generate inform6 -> *out
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
read: 0 <- *in
|
||||
read <- *in
|
||||
parse-linked-matter
|
||||
generate: text -> *out
|
||||
generate text -> *out
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
read: 0 <- *in
|
||||
read <- *in
|
||||
parse-linked-matter
|
||||
resolve-conditional-compilation
|
||||
assimilate
|
||||
generate: inform6 -> *out
|
||||
generate inform6 -> *out
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
read: 0 <- *in
|
||||
read <- *in
|
||||
parse-linked-matter
|
||||
resolve-conditional-compilation
|
||||
assimilate
|
||||
generate: inform6 -> *out
|
||||
generate inform6 -> *out
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
read: 0 <- *in
|
||||
read <- *in
|
||||
eliminate-redundant-labels
|
||||
generate: text -> *out
|
||||
generate text -> *out
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
read: 0 <- *in
|
||||
read <- *in
|
||||
parse-linked-matter
|
||||
resolve-conditional-compilation
|
||||
assimilate
|
||||
generate: inform6 -> *out
|
||||
generate inform6 -> *out
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
read: 0 <- *in
|
||||
read <- *in
|
||||
parse-linked-matter
|
||||
resolve-conditional-compilation
|
||||
assimilate
|
||||
generate: inform6 -> *out
|
||||
generate inform6 -> *out
|
||||
|
|
|
@ -30,7 +30,7 @@ pipeline_step *CodeGen::Pipeline::new_step(void) {
|
|||
step->step_stage = NULL;
|
||||
step->step_argument = NULL;
|
||||
step->package_argument = NULL;
|
||||
step->repository_argument = -1;
|
||||
step->repository_argument = 0;
|
||||
CodeGen::Pipeline::clean_step(step);
|
||||
return step;
|
||||
}
|
||||
|
@ -55,11 +55,10 @@ logging:
|
|||
void CodeGen::Pipeline::write_step(OUTPUT_STREAM, pipeline_step *step) {
|
||||
WRITE("%S", step->step_stage->stage_name);
|
||||
if (step->step_stage->stage_arg != NO_STAGE_ARG) {
|
||||
if (step->package_argument) WRITE(" %S", step->package_argument);
|
||||
WRITE(":");
|
||||
if (step->repository_argument >= 0) WRITE(" %d <-", step->repository_argument);
|
||||
if (step->target_argument) WRITE(" %S ->", step->target_argument->target_name);
|
||||
WRITE(" %S", step->step_argument);
|
||||
WRITE(" %d", step->repository_argument);
|
||||
if (Str::len(step->package_argument) > 0) WRITE(":%S", step->package_argument);
|
||||
if (step->step_stage->takes_repository >= 0) WRITE(" <- %S", step->step_argument);
|
||||
if (step->target_argument) WRITE(" %S -> %S", step->target_argument->target_name, step->step_argument);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -68,11 +67,12 @@ pipeline_step *CodeGen::Pipeline::read_step(text_stream *step, dictionary *D) {
|
|||
CodeGen::Targets::make_targets();
|
||||
pipeline_step *ST = CodeGen::Pipeline::new_step();
|
||||
match_results mr = Regexp::create_mr();
|
||||
if (Regexp::match(&mr, step, L"(%c+?) *: *(%d) *<- *(%c*)")) {
|
||||
ST->repository_argument = Str::atoi(mr.exp[1], 0);
|
||||
ST->step_argument = CodeGen::Pipeline::read_parameter(mr.exp[2], D);
|
||||
int left_arrow_used = FALSE;
|
||||
if (Regexp::match(&mr, step, L"(%c+?) *<- *(%c*)")) {
|
||||
ST->step_argument = CodeGen::Pipeline::read_parameter(mr.exp[1], D);
|
||||
Str::copy(step, mr.exp[0]);
|
||||
} else if (Regexp::match(&mr, step, L"(%c+?) *: *(%C*) *-> *(%c*)")) {
|
||||
left_arrow_used = TRUE;
|
||||
} else if (Regexp::match(&mr, step, L"(%c+?) *(%C*) *-> *(%c*)")) {
|
||||
code_generation_target *cgt;
|
||||
LOOP_OVER(cgt, code_generation_target)
|
||||
if (Str::eq(mr.exp[1], cgt->target_name))
|
||||
|
@ -83,11 +83,15 @@ pipeline_step *CodeGen::Pipeline::read_step(text_stream *step, dictionary *D) {
|
|||
}
|
||||
ST->step_argument = CodeGen::Pipeline::read_parameter(mr.exp[2], D);
|
||||
Str::copy(step, mr.exp[0]);
|
||||
} else if (Regexp::match(&mr, step, L"(%c+?) *: *(%c*)")) {
|
||||
ST->step_argument = CodeGen::Pipeline::read_parameter(mr.exp[1], D);
|
||||
Str::copy(step, mr.exp[0]);
|
||||
}
|
||||
if (Regexp::match(&mr, step, L"(%C+?) (%c+)")) {
|
||||
if (Regexp::match(&mr, step, L"(%C+?) (%d)")) {
|
||||
ST->repository_argument = Str::atoi(mr.exp[1], 0);
|
||||
Str::copy(step, mr.exp[0]);
|
||||
} else if (Regexp::match(&mr, step, L"(%C+?) (%d):(%c*)")) {
|
||||
ST->repository_argument = Str::atoi(mr.exp[1], 0);
|
||||
ST->package_argument = CodeGen::Pipeline::read_parameter(mr.exp[2], D);
|
||||
Str::copy(step, mr.exp[0]);
|
||||
} else if (Regexp::match(&mr, step, L"(%C+?) (%c+)")) {
|
||||
ST->package_argument = CodeGen::Pipeline::read_parameter(mr.exp[1], D);
|
||||
Str::copy(step, mr.exp[0]);
|
||||
}
|
||||
|
@ -100,6 +104,14 @@ pipeline_step *CodeGen::Pipeline::read_step(text_stream *step, dictionary *D) {
|
|||
WRITE_TO(STDERR, "No such step as '%S'\n", step);
|
||||
internal_error("no such step code");
|
||||
}
|
||||
if (ST->step_stage->takes_repository) {
|
||||
if (left_arrow_used == FALSE)
|
||||
internal_error("should use a left arrow");
|
||||
} else {
|
||||
if (left_arrow_used)
|
||||
internal_error("should not use a left arrow");
|
||||
}
|
||||
|
||||
Regexp::dispose_of(&mr);
|
||||
return ST;
|
||||
}
|
||||
|
@ -189,20 +201,22 @@ void CodeGen::Pipeline::set_repository(codegen_pipeline *S, inter_repository *I)
|
|||
|
||||
void CodeGen::Pipeline::run(pathname *P, codegen_pipeline *S, int N, pathname **PP) {
|
||||
if (S == NULL) return;
|
||||
if (S->repositories[0] == NULL) S->repositories[0] = Inter::create(1, 32);
|
||||
clock_t start = clock();
|
||||
|
||||
int step_count = 0, step_total = 0;
|
||||
pipeline_step *step;
|
||||
LOOP_OVER_LINKED_LIST(step, pipeline_step, S->steps) step_total++;
|
||||
|
||||
int active = TRUE, current_repo = 0;
|
||||
CodeGen::Pipeline::prepare_to_run(S->repositories[current_repo]);
|
||||
int active = TRUE;
|
||||
LOOP_OVER_LINKED_LIST(step, pipeline_step, S->steps)
|
||||
if (active) {
|
||||
inter_repository *I = S->repositories[current_repo];
|
||||
if (S->repositories[step->repository_argument] == NULL)
|
||||
S->repositories[step->repository_argument] = Inter::create(1, 32);
|
||||
inter_repository *I = S->repositories[step->repository_argument];
|
||||
if (I == NULL) internal_error("no repository");
|
||||
CodeGen::Pipeline::lint(I);
|
||||
|
||||
CodeGen::Pipeline::prepare_to_run(I);
|
||||
|
||||
CodeGen::Pipeline::clean_step(step);
|
||||
step->the_N = N;
|
||||
step->the_PP = PP;
|
||||
|
@ -215,6 +229,8 @@ void CodeGen::Pipeline::run(pathname *P, codegen_pipeline *S, int N, pathname **
|
|||
Log::new_stage(STAGE_NAME);
|
||||
DISCARD_TEXT(STAGE_NAME);
|
||||
|
||||
int skip_step = FALSE;
|
||||
|
||||
if ((step->step_stage->stage_arg == FILE_STAGE_ARG) ||
|
||||
(step->step_stage->stage_arg == TEXT_OUT_STAGE_ARG) ||
|
||||
(step->step_stage->stage_arg == EXT_FILE_STAGE_ARG) ||
|
||||
|
@ -222,9 +238,9 @@ void CodeGen::Pipeline::run(pathname *P, codegen_pipeline *S, int N, pathname **
|
|||
if (Str::eq(step->step_argument, I"*log")) {
|
||||
step->to_debugging_log = TRUE;
|
||||
} else if (Str::eq(step->step_argument, I"*memory")) {
|
||||
step->from_memory = TRUE;
|
||||
S->repositories[step->repository_argument] = S->memory_repository;
|
||||
skip_step = TRUE;
|
||||
} else {
|
||||
step->parsed_filename = Filenames::from_text(step->step_argument);
|
||||
int slashes = FALSE;
|
||||
LOOP_THROUGH_TEXT(pos, step->step_argument)
|
||||
if (Str::get(pos) == '/')
|
||||
|
@ -253,9 +269,7 @@ void CodeGen::Pipeline::run(pathname *P, codegen_pipeline *S, int N, pathname **
|
|||
step->text_out_file = T;
|
||||
}
|
||||
|
||||
if ((step->from_memory) && (step->repository_argument >= 0))
|
||||
S->repositories[step->repository_argument] = S->memory_repository;
|
||||
else
|
||||
if (skip_step == FALSE)
|
||||
active = (*(step->step_stage->execute))(step);
|
||||
|
||||
if (((step->step_stage->stage_arg == TEXT_OUT_STAGE_ARG) ||
|
||||
|
@ -263,11 +277,6 @@ void CodeGen::Pipeline::run(pathname *P, codegen_pipeline *S, int N, pathname **
|
|||
(step->to_debugging_log == FALSE)) {
|
||||
STREAM_CLOSE(T);
|
||||
}
|
||||
|
||||
if (step->repository_argument >= 0) {
|
||||
current_repo = step->repository_argument;
|
||||
CodeGen::Pipeline::prepare_to_run(S->repositories[current_repo]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -359,5 +368,5 @@ void CodeGen::Pipeline::visitor(inter_repository *I, inter_frame P, void *state)
|
|||
internal_error("zap");
|
||||
}
|
||||
|
||||
CodeGen::Link::guard(Inter::Defn::verify_children_inner(P));
|
||||
CodeGen::MergeTemplate::guard(Inter::Defn::verify_children_inner(P));
|
||||
}
|
||||
|
|
|
@ -8,6 +8,7 @@ following. Some stages are invoked with an argument, often the filename to
|
|||
write output to; others are not.
|
||||
|
||||
@e NO_STAGE_ARG from 1
|
||||
@e GENERAL_STAGE_ARG
|
||||
@e FILE_STAGE_ARG
|
||||
@e TEXT_OUT_STAGE_ARG
|
||||
@e EXT_FILE_STAGE_ARG
|
||||
|
@ -19,14 +20,16 @@ typedef struct pipeline_stage {
|
|||
struct text_stream *stage_name;
|
||||
int (*execute)(void *);
|
||||
int stage_arg; /* one of the |*_ARG| values above */
|
||||
int takes_repository;
|
||||
MEMORY_MANAGEMENT
|
||||
} pipeline_stage;
|
||||
|
||||
pipeline_stage *CodeGen::Stage::new(text_stream *name, int (*X)(struct pipeline_step *), int arg) {
|
||||
pipeline_stage *CodeGen::Stage::new(text_stream *name, int (*X)(struct pipeline_step *), int arg, int tr) {
|
||||
pipeline_stage *stage = CREATE(pipeline_stage);
|
||||
stage->stage_name = Str::duplicate(name);
|
||||
stage->execute = (int (*)(void *)) X;
|
||||
stage->stage_arg = arg;
|
||||
stage->takes_repository = tr;
|
||||
return stage;
|
||||
}
|
||||
|
||||
|
@ -40,15 +43,17 @@ int stages_made = FALSE;
|
|||
void CodeGen::Stage::make_stages(void) {
|
||||
if (stages_made == FALSE) {
|
||||
stages_made = TRUE;
|
||||
CodeGen::Stage::new(I"stop", CodeGen::Stage::run_stop_stage, NO_STAGE_ARG);
|
||||
CodeGen::Stage::new(I"read", CodeGen::Stage::run_read_stage, FILE_STAGE_ARG);
|
||||
CodeGen::Stage::new(I"stop", CodeGen::Stage::run_stop_stage, NO_STAGE_ARG, FALSE);
|
||||
|
||||
CodeGen::Stage::new(I"read", CodeGen::Stage::run_read_stage, FILE_STAGE_ARG, TRUE);
|
||||
CodeGen::Stage::new(I"extract", CodeGen::Stage::run_extract_stage, GENERAL_STAGE_ARG, TRUE);
|
||||
|
||||
CodeGen::create_pipeline_stage();
|
||||
CodeGen::Assimilate::create_pipeline_stage();
|
||||
CodeGen::Eliminate::create_pipeline_stage();
|
||||
CodeGen::Externals::create_pipeline_stage();
|
||||
CodeGen::Labels::create_pipeline_stage();
|
||||
CodeGen::Link::create_pipeline_stage();
|
||||
CodeGen::MergeTemplate::create_pipeline_stage();
|
||||
CodeGen::PLM::create_pipeline_stage();
|
||||
CodeGen::RCC::create_pipeline_stage();
|
||||
CodeGen::ReconcileVerbs::create_pipeline_stage();
|
||||
|
@ -65,10 +70,13 @@ int CodeGen::Stage::run_stop_stage(pipeline_step *step) {
|
|||
}
|
||||
|
||||
int CodeGen::Stage::run_read_stage(pipeline_step *step) {
|
||||
filename *F = Filenames::from_text(step->step_argument);
|
||||
if (Inter::Binary::test_file(F))
|
||||
Inter::Binary::read(step->repository, F);
|
||||
else
|
||||
Inter::Textual::read(step->repository, F);
|
||||
filename *F = step->parsed_filename;
|
||||
if (Inter::Binary::test_file(F)) Inter::Binary::read(step->repository, F);
|
||||
else Inter::Textual::read(step->repository, F);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
int CodeGen::Stage::run_extract_stage(pipeline_step *step) {
|
||||
LOG("Arg is %S.\n", step->step_argument);
|
||||
return TRUE;
|
||||
}
|
||||
|
|
|
@ -6,7 +6,7 @@ To assimilate the material in parsed non-code splats.
|
|||
|
||||
=
|
||||
void CodeGen::Assimilate::create_pipeline_stage(void) {
|
||||
CodeGen::Stage::new(I"assimilate", CodeGen::Assimilate::run_pipeline_stage, NO_STAGE_ARG);
|
||||
CodeGen::Stage::new(I"assimilate", CodeGen::Assimilate::run_pipeline_stage, NO_STAGE_ARG, FALSE);
|
||||
}
|
||||
|
||||
int no_assimilated_actions = 0;
|
||||
|
@ -20,7 +20,7 @@ int CodeGen::Assimilate::run_pipeline_stage(pipeline_step *step) {
|
|||
no_assimilated_actions = 0;
|
||||
no_assimilated_commands = 0;
|
||||
no_assimilated_arrays = 0;
|
||||
CodeGen::Link::ensure_search_list(I);
|
||||
CodeGen::MergeTemplate::ensure_search_list(I);
|
||||
Inter::traverse_tree(I, CodeGen::Assimilate::visitor1, NULL, NULL, SPLAT_IST);
|
||||
Inter::traverse_tree(I, CodeGen::Assimilate::visitor2, NULL, NULL, SPLAT_IST);
|
||||
CodeGen::Assimilate::function_bodies();
|
||||
|
@ -100,7 +100,7 @@ void CodeGen::Assimilate::visitor3(inter_repository *I, inter_frame P, void *sta
|
|||
@<Parse text of splat for identifier and value@>;
|
||||
if ((proceed) && (unchecked_kind_symbol)) {
|
||||
if (plm == DEFAULT_PLM) {
|
||||
inter_symbol *symbol = CodeGen::Link::find_name(I, identifier, TRUE);
|
||||
inter_symbol *symbol = CodeGen::MergeTemplate::find_name(I, identifier, TRUE);
|
||||
if (symbol == NULL) plm = CONSTANT_PLM;
|
||||
}
|
||||
if (plm != DEFAULT_PLM) @<Act on parsed constant definition@>;
|
||||
|
@ -197,7 +197,7 @@ void CodeGen::Assimilate::visitor3(inter_repository *I, inter_frame P, void *sta
|
|||
case FAKEACTION_PLM:
|
||||
case OBJECT_PLM: {
|
||||
@<Assimilate a value@>;
|
||||
CodeGen::Link::guard(Inter::Constant::new_numerical(IBM,
|
||||
CodeGen::MergeTemplate::guard(Inter::Constant::new_numerical(IBM,
|
||||
Inter::SymbolsTables::id_from_symbol(I, Inter::Bookmarks::package(IBM), con_name),
|
||||
Inter::SymbolsTables::id_from_symbol(I, Inter::Bookmarks::package(IBM), unchecked_kind_symbol), v1, v2,
|
||||
(inter_t) Inter::Bookmarks::baseline(IBM) + 1, NULL));
|
||||
|
@ -206,7 +206,7 @@ void CodeGen::Assimilate::visitor3(inter_repository *I, inter_frame P, void *sta
|
|||
}
|
||||
case GLOBAL_PLM:
|
||||
@<Assimilate a value@>;
|
||||
CodeGen::Link::guard(Inter::Variable::new(IBM,
|
||||
CodeGen::MergeTemplate::guard(Inter::Variable::new(IBM,
|
||||
Inter::SymbolsTables::id_from_symbol(I, Inter::Bookmarks::package(IBM), con_name),
|
||||
Inter::SymbolsTables::id_from_symbol(I, Inter::Bookmarks::package(IBM), unchecked_kind_symbol), v1, v2,
|
||||
(inter_t) Inter::Bookmarks::baseline(IBM) + 1, NULL));
|
||||
|
@ -219,7 +219,7 @@ void CodeGen::Assimilate::visitor3(inter_repository *I, inter_frame P, void *sta
|
|||
|
||||
if ((attr_symbol == NULL) || (!Inter::Symbols::is_defined(attr_symbol))) {
|
||||
if (attr_symbol == NULL) attr_symbol = con_name;
|
||||
CodeGen::Link::guard(Inter::Property::new(IBM,
|
||||
CodeGen::MergeTemplate::guard(Inter::Property::new(IBM,
|
||||
Inter::SymbolsTables::id_from_symbol(I, Inter::Bookmarks::package(IBM), attr_symbol),
|
||||
Inter::SymbolsTables::id_from_symbol(I, Inter::Bookmarks::package(IBM), truth_state_kind_symbol),
|
||||
(inter_t) Inter::Bookmarks::baseline(IBM) + 1, NULL));
|
||||
|
@ -245,7 +245,7 @@ void CodeGen::Assimilate::visitor3(inter_repository *I, inter_frame P, void *sta
|
|||
break;
|
||||
}
|
||||
case PROPERTY_PLM: {
|
||||
CodeGen::Link::guard(Inter::Property::new(IBM,
|
||||
CodeGen::MergeTemplate::guard(Inter::Property::new(IBM,
|
||||
Inter::SymbolsTables::id_from_symbol(I, Inter::Bookmarks::package(IBM), con_name),
|
||||
Inter::SymbolsTables::id_from_symbol(I, Inter::Bookmarks::package(IBM), unchecked_kind_symbol),
|
||||
(inter_t) Inter::Bookmarks::baseline(IBM) + 1, NULL));
|
||||
|
@ -324,7 +324,7 @@ void CodeGen::Assimilate::visitor3(inter_repository *I, inter_frame P, void *sta
|
|||
array_in_progress.data[pos++] = v1_pile[i];
|
||||
array_in_progress.data[pos++] = v2_pile[i];
|
||||
}
|
||||
CodeGen::Link::guard(Inter::Defn::verify_construct(Inter::Bookmarks::package(IBM), array_in_progress));
|
||||
CodeGen::MergeTemplate::guard(Inter::Defn::verify_construct(Inter::Bookmarks::package(IBM), array_in_progress));
|
||||
Inter::Frame::insert(array_in_progress, IBM);
|
||||
|
||||
if (plm == ARRAY_PLM) {
|
||||
|
@ -421,12 +421,12 @@ void CodeGen::Assimilate::visitor3(inter_repository *I, inter_frame P, void *sta
|
|||
if (Str::len(value) == 0) break;
|
||||
inter_symbol *loc_name = Inter::SymbolsTables::create_with_unique_name(Inter::Package::local_symbols(block_name), value);
|
||||
Inter::Symbols::local(loc_name);
|
||||
CodeGen::Link::guard(Inter::Local::new(IBM, block_name, loc_name, unchecked_kind_symbol, 0, (inter_t) Inter::Bookmarks::baseline(IBM) + 1, NULL));
|
||||
CodeGen::MergeTemplate::guard(Inter::Local::new(IBM, block_name, loc_name, unchecked_kind_symbol, 0, (inter_t) Inter::Bookmarks::baseline(IBM) + 1, NULL));
|
||||
DISCARD_TEXT(value);
|
||||
}
|
||||
}
|
||||
|
||||
CodeGen::Link::guard(Inter::Code::new(IBM, (int) (inter_t) Inter::Bookmarks::baseline(IBM) + 1, NULL));
|
||||
CodeGen::MergeTemplate::guard(Inter::Code::new(IBM, (int) (inter_t) Inter::Bookmarks::baseline(IBM) + 1, NULL));
|
||||
if (Str::len(body) > 0) {
|
||||
int L = Str::len(body) - 1;
|
||||
while ((L>0) && (Str::get_at(body, L) != ']')) L--;
|
||||
|
@ -439,7 +439,7 @@ void CodeGen::Assimilate::visitor3(inter_repository *I, inter_frame P, void *sta
|
|||
|
||||
inter_symbol *rsymb = CodeGen::Assimilate::maybe_extern(I, identifier, Inter::Bookmarks::scope(IBM));
|
||||
Inter::Symbols::annotate_i(I, rsymb, ASSIMILATED_IANN, 1);
|
||||
CodeGen::Link::guard(Inter::Constant::new_function(IBM,
|
||||
CodeGen::MergeTemplate::guard(Inter::Constant::new_function(IBM,
|
||||
Inter::SymbolsTables::id_from_symbol(I, FP, rsymb),
|
||||
Inter::SymbolsTables::id_from_symbol(I, FP, unchecked_function_symbol),
|
||||
Inter::SymbolsTables::id_from_symbol(I, FP, block_name),
|
||||
|
@ -457,7 +457,7 @@ void CodeGen::Assimilate::visitor3(inter_repository *I, inter_frame P, void *sta
|
|||
@ =
|
||||
inter_package *CodeGen::Assimilate::new_package(inter_bookmark *IBM, inter_symbol *pname, inter_symbol *ptype) {
|
||||
inter_package *P = NULL;
|
||||
CodeGen::Link::guard(Inter::Package::new_package(IBM, pname,
|
||||
CodeGen::MergeTemplate::guard(Inter::Package::new_package(IBM, pname,
|
||||
ptype, (inter_t) Inter::Bookmarks::baseline(IBM) + 1, NULL, &P));
|
||||
return P;
|
||||
}
|
||||
|
@ -516,7 +516,7 @@ inter_symbol *CodeGen::Assimilate::maybe_extern(inter_repository *I, text_stream
|
|||
|
||||
@ =
|
||||
void CodeGen::Assimilate::ensure_action(inter_repository *I, inter_frame P, text_stream *value) {
|
||||
if (CodeGen::Link::find_name(I, value, TRUE) == NULL) {
|
||||
if (CodeGen::MergeTemplate::find_name(I, value, TRUE) == NULL) {
|
||||
inter_bookmark IBM_d = CodeGen::Assimilate::template_submodule(I, I"actions", P);
|
||||
inter_bookmark *IBM = &IBM_d;
|
||||
TEMPORARY_TEXT(an);
|
||||
|
@ -531,16 +531,16 @@ void CodeGen::Assimilate::ensure_action(inter_repository *I, inter_frame P, text
|
|||
WRITE_TO(unsharped, "%SSub", value);
|
||||
Str::delete_first_character(unsharped);
|
||||
Str::delete_first_character(unsharped);
|
||||
inter_symbol *txsymb = CodeGen::Link::find_name(I, unsharped, TRUE);
|
||||
inter_symbol *txsymb = CodeGen::MergeTemplate::find_name(I, unsharped, TRUE);
|
||||
inter_symbol *xsymb = Inter::SymbolsTables::create_with_unique_name(Inter::Bookmarks::scope(IBM), unsharped);
|
||||
if (txsymb) Inter::SymbolsTables::equate(xsymb, txsymb);
|
||||
DISCARD_TEXT(unsharped);
|
||||
CodeGen::Link::guard(Inter::Constant::new_numerical(IBM,
|
||||
CodeGen::MergeTemplate::guard(Inter::Constant::new_numerical(IBM,
|
||||
Inter::SymbolsTables::id_from_symbol(I, Inter::Bookmarks::package(IBM), asymb),
|
||||
Inter::SymbolsTables::id_from_symbol(I, Inter::Bookmarks::package(IBM), action_kind_symbol),
|
||||
LITERAL_IVAL, 10000, (inter_t) Inter::Bookmarks::baseline(IBM) + 1, NULL));
|
||||
Inter::Symbols::annotate_i(I, asymb, ACTION_IANN, 1);
|
||||
CodeGen::Link::build_r(Inter::Bookmarks::package(IBM));
|
||||
CodeGen::MergeTemplate::build_r(Inter::Bookmarks::package(IBM));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -636,7 +636,7 @@ void CodeGen::Assimilate::value(inter_repository *I, inter_package *pack, inter_
|
|||
}
|
||||
match_results mr = Regexp::create_mr();
|
||||
if (Regexp::match(&mr, S, L"scope=(%i+)")) {
|
||||
inter_symbol *symb = CodeGen::Link::find_name(I, mr.exp[0], TRUE);
|
||||
inter_symbol *symb = CodeGen::MergeTemplate::find_name(I, mr.exp[0], TRUE);
|
||||
while ((symb) && (symb->equated_to)) symb = symb->equated_to;
|
||||
if (symb) {
|
||||
if (Inter::Symbols::read_annotation(symb, SCOPE_FILTER_IANN) != 1)
|
||||
|
@ -645,7 +645,7 @@ void CodeGen::Assimilate::value(inter_repository *I, inter_package *pack, inter_
|
|||
}
|
||||
}
|
||||
if (Regexp::match(&mr, S, L"noun=(%i+)")) {
|
||||
inter_symbol *symb = CodeGen::Link::find_name(I, mr.exp[0], TRUE);
|
||||
inter_symbol *symb = CodeGen::MergeTemplate::find_name(I, mr.exp[0], TRUE);
|
||||
while ((symb) && (symb->equated_to)) symb = symb->equated_to;
|
||||
if (symb) {
|
||||
if (Inter::Symbols::read_annotation(symb, NOUN_FILTER_IANN) != 1)
|
||||
|
@ -655,7 +655,7 @@ void CodeGen::Assimilate::value(inter_repository *I, inter_package *pack, inter_
|
|||
}
|
||||
}
|
||||
|
||||
inter_symbol *symb = CodeGen::Link::find_name(I, S, TRUE);
|
||||
inter_symbol *symb = CodeGen::MergeTemplate::find_name(I, S, TRUE);
|
||||
if (symb) {
|
||||
Inter::Symbols::to_data(I, pack, symb, val1, val2); return;
|
||||
}
|
||||
|
@ -680,7 +680,7 @@ inter_symbol *CodeGen::Assimilate::compute_constant(inter_repository *I, inter_p
|
|||
Str::copy(glob_storage, sch->converted_from);
|
||||
|
||||
inter_symbol *mcc_name = CodeGen::Assimilate::computed_constant_symbol(pack);
|
||||
CodeGen::Link::guard(Inter::Constant::new_numerical(IBM,
|
||||
CodeGen::MergeTemplate::guard(Inter::Constant::new_numerical(IBM,
|
||||
Inter::SymbolsTables::id_from_symbol(I, pack, mcc_name),
|
||||
Inter::SymbolsTables::id_from_symbol(I, pack, unchecked_kind_symbol), GLOB_IVAL, ID,
|
||||
(inter_t) Inter::Bookmarks::baseline(IBM) + 1, NULL));
|
||||
|
@ -723,7 +723,7 @@ inter_symbol *CodeGen::Assimilate::compute_constant_eval(inter_repository *I, in
|
|||
inter_t v1 = UNDEF_IVAL, v2 = 0;
|
||||
switch (t->ist_type) {
|
||||
case IDENTIFIER_ISTT: {
|
||||
inter_symbol *symb = CodeGen::Link::find_name(I, t->material, TRUE);
|
||||
inter_symbol *symb = CodeGen::MergeTemplate::find_name(I, t->material, TRUE);
|
||||
if (symb) return symb;
|
||||
LOG("Failed to identify %S\n", t->material);
|
||||
break;
|
||||
|
@ -738,7 +738,7 @@ inter_symbol *CodeGen::Assimilate::compute_constant_eval(inter_repository *I, in
|
|||
}
|
||||
if (v1 == UNDEF_IVAL) return NULL;
|
||||
inter_symbol *mcc_name = CodeGen::Assimilate::computed_constant_symbol(pack);
|
||||
CodeGen::Link::guard(Inter::Constant::new_numerical(IBM,
|
||||
CodeGen::MergeTemplate::guard(Inter::Constant::new_numerical(IBM,
|
||||
Inter::SymbolsTables::id_from_symbol(I, pack, mcc_name),
|
||||
Inter::SymbolsTables::id_from_symbol(I, pack, unchecked_kind_symbol), v1, v2,
|
||||
(inter_t) Inter::Bookmarks::baseline(IBM) + 1, NULL));
|
||||
|
@ -756,7 +756,7 @@ inter_symbol *CodeGen::Assimilate::compute_constant_unary_operation(inter_reposi
|
|||
internal_error("can't extend frame");
|
||||
array_in_progress.data[pos] = LITERAL_IVAL; array_in_progress.data[pos+1] = 0;
|
||||
Inter::Symbols::to_data(I, pack, i1, &(array_in_progress.data[pos+2]), &(array_in_progress.data[pos+3]));
|
||||
CodeGen::Link::guard(Inter::Defn::verify_construct(Inter::Bookmarks::package(IBM), array_in_progress));
|
||||
CodeGen::MergeTemplate::guard(Inter::Defn::verify_construct(Inter::Bookmarks::package(IBM), array_in_progress));
|
||||
Inter::Frame::insert(array_in_progress, IBM);
|
||||
return mcc_name;
|
||||
}
|
||||
|
@ -770,7 +770,7 @@ inter_symbol *CodeGen::Assimilate::compute_constant_binary_operation(inter_t op,
|
|||
internal_error("can't extend frame");
|
||||
Inter::Symbols::to_data(I, pack, i1, &(array_in_progress.data[pos]), &(array_in_progress.data[pos+1]));
|
||||
Inter::Symbols::to_data(I, pack, i2, &(array_in_progress.data[pos+2]), &(array_in_progress.data[pos+3]));
|
||||
CodeGen::Link::guard(Inter::Defn::verify_construct(Inter::Bookmarks::package(IBM), array_in_progress));
|
||||
CodeGen::MergeTemplate::guard(Inter::Defn::verify_construct(Inter::Bookmarks::package(IBM), array_in_progress));
|
||||
Inter::Frame::insert(array_in_progress, IBM);
|
||||
return mcc_name;
|
||||
}
|
||||
|
@ -810,7 +810,7 @@ int CodeGen::Assimilate::routine_body(inter_bookmark *IBM, inter_symbol *block_n
|
|||
return TRUE;
|
||||
#endif
|
||||
#ifndef CORE_MODULE
|
||||
CodeGen::Link::entire_splat(IBM, NULL, body, offset, block_name);
|
||||
CodeGen::MergeTemplate::entire_splat(IBM, NULL, body, offset, block_name);
|
||||
LOG("Splat %d\n", rb_splat_count++);
|
||||
return FALSE;
|
||||
#endif
|
||||
|
|
|
@ -13,7 +13,7 @@ on the Inter functions in a repository.
|
|||
|
||||
=
|
||||
void CodeGen::Labels::create_pipeline_stage(void) {
|
||||
CodeGen::Stage::new(I"eliminate-redundant-labels", CodeGen::Labels::run_pipeline_stage, NO_STAGE_ARG);
|
||||
CodeGen::Stage::new(I"eliminate-redundant-labels", CodeGen::Labels::run_pipeline_stage, NO_STAGE_ARG, FALSE);
|
||||
}
|
||||
|
||||
int CodeGen::Labels::run_pipeline_stage(pipeline_step *step) {
|
||||
|
|
|
@ -14,7 +14,7 @@ isn't used.
|
|||
=
|
||||
void CodeGen::Eliminate::create_pipeline_stage(void) {
|
||||
CodeGen::Stage::new(I"eliminate-redundant-code",
|
||||
CodeGen::Eliminate::run_pipeline_stage, NO_STAGE_ARG);
|
||||
CodeGen::Eliminate::run_pipeline_stage, NO_STAGE_ARG, FALSE);
|
||||
}
|
||||
|
||||
int CodeGen::Eliminate::run_pipeline_stage(pipeline_step *step) {
|
||||
|
|
|
@ -1,27 +1,27 @@
|
|||
[CodeGen::Link::] Linker.
|
||||
[CodeGen::MergeTemplate::] Linker.
|
||||
|
||||
To link inter from I7 with template code.
|
||||
|
||||
@h Link.
|
||||
|
||||
=
|
||||
void CodeGen::Link::create_pipeline_stage(void) {
|
||||
CodeGen::Stage::new(I"link", CodeGen::Link::run_pipeline_stage, TEMPLATE_FILE_STAGE_ARG);
|
||||
void CodeGen::MergeTemplate::create_pipeline_stage(void) {
|
||||
CodeGen::Stage::new(I"merge-template", CodeGen::MergeTemplate::run_pipeline_stage, TEMPLATE_FILE_STAGE_ARG, TRUE);
|
||||
}
|
||||
|
||||
int CodeGen::Link::run_pipeline_stage(pipeline_step *step) {
|
||||
int CodeGen::MergeTemplate::run_pipeline_stage(pipeline_step *step) {
|
||||
inter_package *main_package = Inter::Packages::main(step->repository);
|
||||
inter_bookmark IBM;
|
||||
if (main_package) IBM = Inter::Bookmarks::at_end_of_this_package(main_package);
|
||||
else IBM = Inter::Bookmarks::at_start_of_this_repository(step->repository);
|
||||
CodeGen::Link::link(&IBM, step->step_argument, step->the_N, step->the_PP, NULL);
|
||||
CodeGen::MergeTemplate::link(&IBM, step->step_argument, step->the_N, step->the_PP, NULL);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
inter_symbols_table *link_search_list[10];
|
||||
int link_search_list_len = 0;
|
||||
|
||||
void CodeGen::Link::ensure_search_list(inter_repository *I) {
|
||||
void CodeGen::MergeTemplate::ensure_search_list(inter_repository *I) {
|
||||
if (link_search_list_len == 0) {
|
||||
if (template_package) {
|
||||
link_search_list[1] = Inter::Packages::scope(Inter::Packages::main(I));
|
||||
|
@ -34,29 +34,29 @@ void CodeGen::Link::ensure_search_list(inter_repository *I) {
|
|||
}
|
||||
}
|
||||
|
||||
void CodeGen::Link::link(inter_bookmark *IBM, text_stream *template_file, int N, pathname **PP, inter_package *owner) {
|
||||
void CodeGen::MergeTemplate::link(inter_bookmark *IBM, text_stream *template_file, int N, pathname **PP, inter_package *owner) {
|
||||
if (IBM == NULL) internal_error("no inter to link with");
|
||||
inter_repository *I = IBM->read_into;
|
||||
Inter::traverse_tree(I, CodeGen::Link::visitor, NULL, NULL, 0);
|
||||
Inter::traverse_tree(I, CodeGen::MergeTemplate::visitor, NULL, NULL, 0);
|
||||
|
||||
if (template_package == NULL) internal_error("unable to find template");
|
||||
|
||||
CodeGen::Link::ensure_search_list(I);
|
||||
CodeGen::MergeTemplate::ensure_search_list(I);
|
||||
|
||||
inter_bookmark link_bookmark =
|
||||
Inter::Bookmarks::at_end_of_this_package(template_package);
|
||||
|
||||
I6T_kit kit = TemplateReader::kit_out(&link_bookmark, &(CodeGen::Link::receive_raw), &(CodeGen::Link::receive_command), NULL);
|
||||
I6T_kit kit = TemplateReader::kit_out(&link_bookmark, &(CodeGen::MergeTemplate::receive_raw), &(CodeGen::MergeTemplate::receive_command), NULL);
|
||||
kit.no_i6t_file_areas = N;
|
||||
for (int i=0; i<N; i++) kit.i6t_files[i] = PP[i];
|
||||
TEMPORARY_TEXT(T);
|
||||
TemplateReader::I6T_file_intervene(T, EARLY_LINK_STAGE, NULL, NULL, &kit);
|
||||
CodeGen::Link::receive_raw(T, &kit);
|
||||
CodeGen::MergeTemplate::receive_raw(T, &kit);
|
||||
DISCARD_TEXT(T);
|
||||
TemplateReader::extract(template_file, &kit);
|
||||
}
|
||||
|
||||
void CodeGen::Link::visitor(inter_repository *I, inter_frame P, void *state) {
|
||||
void CodeGen::MergeTemplate::visitor(inter_repository *I, inter_frame P, void *state) {
|
||||
if (P.data[ID_IFLD] == LINK_IST) {
|
||||
text_stream *S1 = Inter::get_text(P.repo_segment->owning_repo, P.data[SEGMENT_LINK_IFLD]);
|
||||
text_stream *S2 = Inter::get_text(P.repo_segment->owning_repo, P.data[PART_LINK_IFLD]);
|
||||
|
@ -70,7 +70,7 @@ void CodeGen::Link::visitor(inter_repository *I, inter_frame P, void *state) {
|
|||
dictionary *linkable_namespace = NULL;
|
||||
int linkable_namespace_created = FALSE;
|
||||
|
||||
inter_symbol *CodeGen::Link::find_in_namespace(inter_repository *I, text_stream *name) {
|
||||
inter_symbol *CodeGen::MergeTemplate::find_in_namespace(inter_repository *I, text_stream *name) {
|
||||
if (linkable_namespace_created == FALSE) {
|
||||
linkable_namespace_created = TRUE;
|
||||
linkable_namespace = Dictionaries::new(512, FALSE);
|
||||
|
@ -81,7 +81,7 @@ inter_symbol *CodeGen::Link::find_in_namespace(inter_repository *I, text_stream
|
|||
if (C.data[ID_IFLD] == PACKAGE_IST) {
|
||||
inter_package *P = Inter::Package::defined_by_frame(C);
|
||||
if (Str::ne(P->package_name->symbol_name, I"template"))
|
||||
CodeGen::Link::build_r(P);
|
||||
CodeGen::MergeTemplate::build_r(P);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -92,18 +92,18 @@ inter_symbol *CodeGen::Link::find_in_namespace(inter_repository *I, text_stream
|
|||
return NULL;
|
||||
}
|
||||
|
||||
void CodeGen::Link::build_r(inter_package *P) {
|
||||
CodeGen::Link::build_only(P);
|
||||
void CodeGen::MergeTemplate::build_r(inter_package *P) {
|
||||
CodeGen::MergeTemplate::build_only(P);
|
||||
inter_frame D = Inter::Symbols::defining_frame(P->package_name);
|
||||
LOOP_THROUGH_INTER_CHILDREN(C, D) {
|
||||
if (C.data[ID_IFLD] == PACKAGE_IST) {
|
||||
inter_package *Q = Inter::Package::defined_by_frame(C);
|
||||
CodeGen::Link::build_r(Q);
|
||||
CodeGen::MergeTemplate::build_r(Q);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CodeGen::Link::build_only(inter_package *P) {
|
||||
void CodeGen::MergeTemplate::build_only(inter_package *P) {
|
||||
inter_symbols_table *T = Inter::Packages::scope(P);
|
||||
if (T) {
|
||||
for (int i=0; i<T->size; i++) {
|
||||
|
@ -119,19 +119,19 @@ void CodeGen::Link::build_only(inter_package *P) {
|
|||
}
|
||||
}
|
||||
|
||||
inter_symbol *CodeGen::Link::find_name(inter_repository *I, text_stream *S, int deeply) {
|
||||
inter_symbol *CodeGen::MergeTemplate::find_name(inter_repository *I, text_stream *S, int deeply) {
|
||||
for (int i=0; i<link_search_list_len; i++) {
|
||||
inter_symbol *symb = Inter::SymbolsTables::symbol_from_name_not_equating(link_search_list[i], S);
|
||||
if (symb) return symb;
|
||||
}
|
||||
if (deeply) {
|
||||
inter_symbol *symb = CodeGen::Link::find_in_namespace(I, S);
|
||||
inter_symbol *symb = CodeGen::MergeTemplate::find_in_namespace(I, S);
|
||||
if (symb) return symb;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void CodeGen::Link::log_search_path(void) {
|
||||
void CodeGen::MergeTemplate::log_search_path(void) {
|
||||
for (int i=0; i<link_search_list_len; i++) {
|
||||
LOG("Search %d: $4\n", i, link_search_list[i]);
|
||||
}
|
||||
|
@ -139,15 +139,15 @@ void CodeGen::Link::log_search_path(void) {
|
|||
|
||||
int link_pie_count = 0;
|
||||
|
||||
void CodeGen::Link::guard(inter_error_message *ERR) {
|
||||
void CodeGen::MergeTemplate::guard(inter_error_message *ERR) {
|
||||
if (ERR) { Inter::Errors::issue(ERR); internal_error("inter error"); }
|
||||
}
|
||||
|
||||
void CodeGen::Link::entire_splat(inter_bookmark *IBM, text_stream *origin, text_stream *content, inter_t level, inter_symbol *code_block) {
|
||||
void CodeGen::MergeTemplate::entire_splat(inter_bookmark *IBM, text_stream *origin, text_stream *content, inter_t level, inter_symbol *code_block) {
|
||||
inter_t SID = Inter::create_text(IBM->read_into);
|
||||
text_stream *glob_storage = Inter::get_text(IBM->read_into, SID);
|
||||
Str::copy(glob_storage, content);
|
||||
CodeGen::Link::guard(Inter::Splat::new(IBM, code_block, SID, 0, level, 0, NULL));
|
||||
CodeGen::MergeTemplate::guard(Inter::Splat::new(IBM, code_block, SID, 0, level, 0, NULL));
|
||||
}
|
||||
|
||||
@
|
||||
|
@ -162,7 +162,7 @@ void CodeGen::Link::entire_splat(inter_bookmark *IBM, text_stream *origin, text_
|
|||
@d SUBORDINATE_FILTER_BITS (COMMENTED_FILTER_BIT + SQUOTED_FILTER_BIT + DQUOTED_FILTER_BIT + ROUTINED_FILTER_BIT)
|
||||
|
||||
=
|
||||
void CodeGen::Link::receive_raw(text_stream *S, I6T_kit *kit) {
|
||||
void CodeGen::MergeTemplate::receive_raw(text_stream *S, I6T_kit *kit) {
|
||||
text_stream *R = Str::new();
|
||||
int mode = IGNORE_WS_FILTER_BIT;
|
||||
LOOP_THROUGH_TEXT(pos, S) {
|
||||
|
@ -204,22 +204,22 @@ void CodeGen::Link::receive_raw(text_stream *S, I6T_kit *kit) {
|
|||
}
|
||||
PUT_TO(R, c);
|
||||
if ((c == ';') && (!(mode & SUBORDINATE_FILTER_BITS))) {
|
||||
CodeGen::Link::chunked_raw(R, kit);
|
||||
CodeGen::MergeTemplate::chunked_raw(R, kit);
|
||||
mode = IGNORE_WS_FILTER_BIT;
|
||||
}
|
||||
}
|
||||
CodeGen::Link::chunked_raw(R, kit);
|
||||
CodeGen::MergeTemplate::chunked_raw(R, kit);
|
||||
Str::clear(S);
|
||||
}
|
||||
|
||||
void CodeGen::Link::chunked_raw(text_stream *S, I6T_kit *kit) {
|
||||
void CodeGen::MergeTemplate::chunked_raw(text_stream *S, I6T_kit *kit) {
|
||||
if (Str::len(S) == 0) return;
|
||||
PUT_TO(S, '\n');
|
||||
CodeGen::Link::entire_splat(kit->IBM, I"template", S, (inter_t) (Inter::Bookmarks::baseline(kit->IBM) + 1), Inter::Bookmarks::package(kit->IBM)->package_name);
|
||||
CodeGen::MergeTemplate::entire_splat(kit->IBM, I"template", S, (inter_t) (Inter::Bookmarks::baseline(kit->IBM) + 1), Inter::Bookmarks::package(kit->IBM)->package_name);
|
||||
Str::clear(S);
|
||||
}
|
||||
|
||||
void CodeGen::Link::receive_command(OUTPUT_STREAM, text_stream *command, text_stream *argument, I6T_kit *kit) {
|
||||
void CodeGen::MergeTemplate::receive_command(OUTPUT_STREAM, text_stream *command, text_stream *argument, I6T_kit *kit) {
|
||||
if ((Str::eq_wide_string(command, L"plugin")) ||
|
||||
(Str::eq_wide_string(command, L"type")) ||
|
||||
(Str::eq_wide_string(command, L"open-file")) ||
|
|
@ -6,7 +6,7 @@ To generate the initial state of storage for variables.
|
|||
|
||||
=
|
||||
void CodeGen::PLM::create_pipeline_stage(void) {
|
||||
CodeGen::Stage::new(I"parse-linked-matter", CodeGen::PLM::run_pipeline_stage, NO_STAGE_ARG);
|
||||
CodeGen::Stage::new(I"parse-linked-matter", CodeGen::PLM::run_pipeline_stage, NO_STAGE_ARG, FALSE);
|
||||
}
|
||||
|
||||
int CodeGen::PLM::run_pipeline_stage(pipeline_step *step) {
|
||||
|
|
|
@ -6,7 +6,7 @@ To reconcile clashes between assimilated and originally generated verbs.
|
|||
|
||||
=
|
||||
void CodeGen::ReconcileVerbs::create_pipeline_stage(void) {
|
||||
CodeGen::Stage::new(I"reconcile-verbs", CodeGen::ReconcileVerbs::run_pipeline_stage, NO_STAGE_ARG);
|
||||
CodeGen::Stage::new(I"reconcile-verbs", CodeGen::ReconcileVerbs::run_pipeline_stage, NO_STAGE_ARG, FALSE);
|
||||
}
|
||||
|
||||
int CodeGen::ReconcileVerbs::run_pipeline_stage(pipeline_step *step) {
|
||||
|
|
|
@ -6,7 +6,7 @@ To make sure certain symbol names translate into globally unique target symbols.
|
|||
|
||||
=
|
||||
void CodeGen::Externals::create_pipeline_stage(void) {
|
||||
CodeGen::Stage::new(I"resolve-external-symbols", CodeGen::Externals::run_pipeline_stage, NO_STAGE_ARG);
|
||||
CodeGen::Stage::new(I"resolve-external-symbols", CodeGen::Externals::run_pipeline_stage, NO_STAGE_ARG, FALSE);
|
||||
}
|
||||
|
||||
int resolution_failed = FALSE;
|
||||
|
|
|
@ -6,7 +6,7 @@ To generate the initial state of storage for variables.
|
|||
|
||||
=
|
||||
void CodeGen::RCC::create_pipeline_stage(void) {
|
||||
CodeGen::Stage::new(I"resolve-conditional-compilation", CodeGen::RCC::run_pipeline_stage, NO_STAGE_ARG);
|
||||
CodeGen::Stage::new(I"resolve-conditional-compilation", CodeGen::RCC::run_pipeline_stage, NO_STAGE_ARG, FALSE);
|
||||
}
|
||||
|
||||
int CodeGen::RCC::run_pipeline_stage(pipeline_step *step) {
|
||||
|
|
|
@ -6,7 +6,7 @@ To make sure certain symbol names translate into globally unique target symbols.
|
|||
|
||||
=
|
||||
void CodeGen::Uniqueness::create_pipeline_stage(void) {
|
||||
CodeGen::Stage::new(I"make-identifiers-unique", CodeGen::Uniqueness::run_pipeline_stage, NO_STAGE_ARG);
|
||||
CodeGen::Stage::new(I"make-identifiers-unique", CodeGen::Uniqueness::run_pipeline_stage, NO_STAGE_ARG, FALSE);
|
||||
}
|
||||
|
||||
int CodeGen::Uniqueness::run_pipeline_stage(pipeline_step *step) {
|
||||
|
|
|
@ -230,10 +230,10 @@ void Primitives::emit_one(inter_repository *I, inter_bookmark *IBM, text_stream
|
|||
if (to == NULL) internal_error("no symbol");
|
||||
TEMPORARY_TEXT(prim_command);
|
||||
WRITE_TO(prim_command, "primitive %S %S", prim, category);
|
||||
CodeGen::Link::guard(Inter::Defn::read_construct_text(prim_command, NULL, IBM));
|
||||
CodeGen::MergeTemplate::guard(Inter::Defn::read_construct_text(prim_command, NULL, IBM));
|
||||
inter_error_message *E = NULL;
|
||||
*to = Inter::Textual::find_symbol(I, NULL, Inter::get_global_symbols(I), prim, PRIMITIVE_IST, &E);
|
||||
CodeGen::Link::guard(E);
|
||||
CodeGen::MergeTemplate::guard(E);
|
||||
DISCARD_TEXT(prim_command);
|
||||
}
|
||||
|
||||
|
|
|
@ -168,7 +168,7 @@ inter_symbol *Veneer::make(inter_package *veneer_package, inter_bookmark *IBM, i
|
|||
*slot = Inter::SymbolsTables::symbol_from_name_creating(tab, S);
|
||||
if (Str::len(T) > 0) Inter::Symbols::set_translate(*slot, T);
|
||||
Inter::Symbols::annotate_i(IBM->read_into, *slot, VENEER_IANN, 1);
|
||||
CodeGen::Link::guard(Inter::Constant::new_numerical(IBM,
|
||||
CodeGen::MergeTemplate::guard(Inter::Constant::new_numerical(IBM,
|
||||
Inter::SymbolsTables::id_from_symbol(IBM->read_into, veneer_package, *slot),
|
||||
Inter::SymbolsTables::id_from_symbol(IBM->read_into, veneer_package, unchecked_kind_symbol),
|
||||
LITERAL_IVAL, 0,
|
||||
|
|
|
@ -6,7 +6,7 @@ To generate final code from intermediate code.
|
|||
|
||||
=
|
||||
void CodeGen::create_pipeline_stage(void) {
|
||||
CodeGen::Stage::new(I"generate", CodeGen::run_pipeline_stage, TEXT_OUT_STAGE_ARG);
|
||||
CodeGen::Stage::new(I"generate", CodeGen::run_pipeline_stage, TEXT_OUT_STAGE_ARG, FALSE);
|
||||
}
|
||||
|
||||
int CodeGen::run_pipeline_stage(pipeline_step *step) {
|
||||
|
|
|
@ -11,7 +11,7 @@ Chapter 1: Setting Up
|
|||
Pipelines
|
||||
|
||||
Chapter 2: Miscellaneous Pipeline Stages
|
||||
Linker
|
||||
Merge Template
|
||||
Template Reader
|
||||
Parse Linked Matter
|
||||
Resolving Conditional Compilation
|
||||
|
|
Loading…
Reference in a new issue