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

Limited progress towards a basic_inform library

This commit is contained in:
Graham Nelson 2019-09-22 16:43:06 +01:00
parent 334464356f
commit 9f70fcd796
55 changed files with 406 additions and 89750 deletions

View file

@ -24,6 +24,7 @@ itself during compilation.
<span class="reserved">typedef</span><span class="plain"> </span><span class="reserved">struct</span><span class="plain"> </span><span class="reserved">building_site</span><span class="plain"> {</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">inter_package</span><span class="plain"> *</span><span class="identifier">main_package</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">inter_package</span><span class="plain"> *</span><span class="identifier">connectors_package</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">inter_package</span><span class="plain"> *</span><span class="identifier">assimilation_package</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">opcodes_set</span><span class="plain">[</span><span class="constant">MAX_BIPS</span><span class="plain">];</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">inter_bookmark</span><span class="plain"> </span><span class="identifier">pragmas_bookmark</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">inter_bookmark</span><span class="plain"> </span><span class="identifier">package_types_bookmark</span><span class="plain">;</span>
@ -74,6 +75,7 @@ itself during compilation.
<span class="reserved">building_site</span><span class="plain"> *</span><span class="identifier">B</span><span class="plain"> = &amp;(</span><span class="identifier">I</span><span class="plain">-&gt;</span><span class="identifier">site</span><span class="plain">);</span>
<span class="identifier">B</span><span class="plain">-</span><span class="element">&gt;main_package</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">B</span><span class="plain">-</span><span class="element">&gt;connectors_package</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">B</span><span class="plain">-</span><span class="element">&gt;assimilation_package</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">=0; </span><span class="identifier">i</span><span class="plain">&lt;</span><span class="constant">MAX_BIPS</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">++) </span><span class="identifier">B</span><span class="plain">-</span><span class="element">&gt;opcodes_set</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">B</span><span class="plain">-</span><span class="element">&gt;pragmas_bookmark</span><span class="plain"> = </span><span class="identifier">Inter::Bookmarks::at_start_of_this_repository</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">);</span>
<span class="identifier">B</span><span class="plain">-</span><span class="element">&gt;package_types_bookmark</span><span class="plain"> = </span><span class="identifier">Inter::Bookmarks::at_start_of_this_repository</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">);</span>
@ -182,6 +184,30 @@ itself during compilation.
<span class="identifier">I</span><span class="plain">-&gt;</span><span class="identifier">site</span><span class="element">.connectors_package</span><span class="plain"> = </span><span class="identifier">M</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">inter_package</span><span class="plain"> *</span><span class="functiontext">Site::assimilation_package</span><span class="plain">(</span><span class="identifier">inter_tree</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">) {</span>
<span class="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 tree"</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="plain">-&gt;</span><span class="identifier">site</span><span class="element">.assimilation_package</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">inter_package</span><span class="plain"> *</span><span class="functiontext">Site::ensure_assimilation_package</span><span class="plain">(</span><span class="identifier">inter_tree</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">plain_ptype_symbol</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 tree"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">I</span><span class="plain">-&gt;</span><span class="identifier">site</span><span class="element">.assimilation_package</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
<span class="identifier">inter_package</span><span class="plain"> *</span><span class="identifier">main_package</span><span class="plain"> = </span><span class="functiontext">Site::main_package</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">);</span>
<span class="identifier">inter_package</span><span class="plain"> *</span><span class="identifier">t_p</span><span class="plain"> = </span><span class="identifier">Inter::Packages::by_name</span><span class="plain">(</span><span class="identifier">main_package</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"template"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">t_p</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
<span class="identifier">inter_bookmark</span><span class="plain"> </span><span class="identifier">in_main</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="identifier">t_p</span><span class="plain"> = </span><span class="identifier">CodeGen::Assimilate::new_package_named</span><span class="plain">(&amp;</span><span class="identifier">in_main</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"template"</span><span class="plain">, </span><span class="identifier">plain_ptype_symbol</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="identifier">I</span><span class="plain">-&gt;</span><span class="identifier">site</span><span class="element">.assimilation_package</span><span class="plain"> = </span><span class="identifier">t_p</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="plain">-&gt;</span><span class="identifier">site</span><span class="element">.assimilation_package</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Site::set_assimilation_package</span><span class="plain">(</span><span class="identifier">inter_tree</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">inter_package</span><span class="plain"> *</span><span class="identifier">M</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 tree"</span><span class="plain">);</span>
<span class="identifier">I</span><span class="plain">-&gt;</span><span class="identifier">site</span><span class="element">.assimilation_package</span><span class="plain"> = </span><span class="identifier">M</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">dictionary</span><span class="plain"> *</span><span class="functiontext">Site::modules_dictionary</span><span class="plain">(</span><span class="identifier">inter_tree</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">I</span><span class="plain">-&gt;</span><span class="identifier">site</span><span class="element">.modules_indexed_by_name</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
<span class="identifier">I</span><span class="plain">-&gt;</span><span class="identifier">site</span><span class="element">.modules_indexed_by_name</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>
@ -275,6 +301,12 @@ itself during compilation.
<p class="endnote">The function Site::set_connectors_package appears nowhere else.</p>
<p class="endnote">The function Site::assimilation_package appears nowhere else.</p>
<p class="endnote">The function Site::ensure_assimilation_package appears nowhere else.</p>
<p class="endnote">The function Site::set_assimilation_package appears nowhere else.</p>
<p class="endnote">The function Site::modules_dictionary is used in 1/pck (<a href="1-pck.html#SP15">&#167;15</a>).</p>
<p class="endnote">The function Site::main_request is used in 1/pck (<a href="1-pck.html#SP11">&#167;11</a>, <a href="1-pck.html#SP15">&#167;15</a>), 3/pi (<a href="3-pi.html#SP3">&#167;3</a>).</p>

View file

@ -60,7 +60,7 @@
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::Architecture::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">"prepare"</span><span class="plain">, </span><span class="functiontext">CodeGen::Architecture::run_prepare_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">"prepare"</span><span class="plain">, </span><span class="functiontext">CodeGen::Architecture::run_prepare_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="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">CodeGen::Architecture::run_prepare_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>
@ -139,8 +139,11 @@
<span class="identifier">LIST_ICON</span><span class="plain">, 1, </span><span class="identifier">operands</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">(&amp;</span><span class="identifier">in_generic</span><span class="plain">) + 1, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="identifier">inter_package</span><span class="plain"> *</span><span class="identifier">template_p</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">Inter::Package::new_package_named</span><span class="plain">(&amp;</span><span class="identifier">in_main</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"template"</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">, </span><span class="identifier">module_name</span><span class="plain">, 1, </span><span class="identifier">NULL</span><span class="plain">, &amp;</span><span class="identifier">template_p</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">step</span><span class="plain">-</span><span class="element">&gt;step_argument</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"none"</span><span class="plain">)) {</span>
<span class="identifier">inter_package</span><span class="plain"> *</span><span class="identifier">template_p</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">Inter::Package::new_package_named</span><span class="plain">(&amp;</span><span class="identifier">in_main</span><span class="plain">, </span><span class="identifier">step</span><span class="plain">-</span><span class="element">&gt;step_argument</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">, </span><span class="identifier">module_name</span><span class="plain">, 1, </span><span class="identifier">NULL</span><span class="plain">, &amp;</span><span class="identifier">template_p</span><span class="plain">);</span>
<span class="identifier">Site::set_assimilation_package</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">template_p</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="identifier">inter_bookmark</span><span class="plain"> *</span><span class="identifier">in_veneer</span><span class="plain"> = </span><span class="identifier">Site::veneer_booknark</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">);</span>
<span class="identifier">inter_package</span><span class="plain"> *</span><span class="identifier">veneer_p</span><span class="plain"> = </span><span class="identifier">Inter::Packages::veneer</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">);</span>

View file

@ -35,6 +35,11 @@
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">lib</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="functiontext">CodeGen::Libraries::URL</span><span class="plain">(</span><span class="reserved">inter_library</span><span class="plain"> *</span><span class="identifier">lib</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">lib</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">lib</span><span class="plain">-</span><span class="element">&gt;attachment_point</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::Libraries::read_metadata</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">text</span><span class="plain">,</span>
<span class="identifier">text_file_position</span><span class="plain"> *</span><span class="identifier">tfp</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">inter_library</span><span class="plain"> *</span><span class="identifier">lib</span><span class="plain"> = (</span><span class="reserved">inter_library</span><span class="plain"> *) </span><span class="identifier">state</span><span class="plain">;</span>
@ -63,6 +68,8 @@
<p class="endnote">The function CodeGen::Libraries::new appears nowhere else.</p>
<p class="endnote">The function CodeGen::Libraries::URL appears nowhere else.</p>
<p class="endnote">The function CodeGen::Libraries::read_metadata appears nowhere else.</p>
<p class="endnote">The function CodeGen::Libraries::find appears nowhere else.</p>
@ -91,6 +98,10 @@
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">Inter::Textual::read</span><span class="plain">(</span><span class="identifier">sidecar</span><span class="plain">, </span><span class="identifier">arch_file</span><span class="plain">);</span>
<span class="identifier">inter_package</span><span class="plain"> *</span><span class="identifier">pack</span><span class="plain"> = </span><span class="identifier">Inter::Packages::by_url</span><span class="plain">(</span><span class="identifier">sidecar</span><span class="plain">, </span><span class="identifier">req</span><span class="plain">-</span><span class="element">&gt;attachment_point</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">pack</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">STDERR</span><span class="plain">, </span><span class="string">"sought attachment material at: %S in %f\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">req</span><span class="plain">-</span><span class="element">&gt;attachment_point</span><span class="plain">, </span><span class="identifier">arch_file</span><span class="plain">);</span>
<span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"unable to find attachment point package"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="identifier">Inter::Transmigration::move</span><span class="plain">(</span><span class="identifier">pack</span><span class="plain">, </span><span class="identifier">Site::main_package</span><span class="plain">(</span><span class="identifier">step</span><span class="plain">-</span><span class="element">&gt;repository</span><span class="plain">), </span><span class="identifier">FALSE</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>

View file

@ -143,7 +143,7 @@ logging:
<span class="identifier">Str::copy</span><span class="plain">(</span><span class="identifier">step</span><span class="plain">, </span><span class="identifier">mr</span><span class="plain">.</span><span class="identifier">exp</span><span class="plain">[0]);</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Regexp::match</span><span class="plain">(&amp;</span><span class="identifier">mr</span><span class="plain">, </span><span class="identifier">step</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"(%C+?) (%c+)"</span><span class="plain">)) {</span>
<span class="identifier">ST</span><span class="plain">-</span><span class="element">&gt;package_argument</span><span class="plain"> = </span><span class="functiontext">CodeGen::Pipeline::read_parameter</span><span class="plain">(</span><span class="identifier">mr</span><span class="plain">.</span><span class="identifier">exp</span><span class="plain">[1], </span><span class="identifier">D</span><span class="plain">, </span><span class="identifier">tfp</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ST</span><span class="plain">-</span><span class="element">&gt;step_argument</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ST</span><span class="plain">-</span><span class="element">&gt;package_argument</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</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>
@ -416,8 +416,6 @@ logging:
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">property_ptype_symbol</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">to_phrase_ptype_symbol</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">inter_package</span><span class="plain"> *</span><span class="identifier">template_package</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::Pipeline::prepare_to_run</span><span class="plain">(</span><span class="identifier">inter_tree</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">) {</span>
<span class="identifier">code_ptype_symbol</span><span class="plain"> = </span><span class="identifier">Inter::SymbolsTables::url_name_to_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">I</span><span class="string">"/_code"</span><span class="plain">);</span>
@ -429,8 +427,6 @@ logging:
<span class="identifier">property_ptype_symbol</span><span class="plain"> = </span><span class="identifier">Inter::SymbolsTables::url_name_to_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">I</span><span class="string">"/_property"</span><span class="plain">);</span>
<span class="identifier">to_phrase_ptype_symbol</span><span class="plain"> = </span><span class="identifier">Inter::SymbolsTables::url_name_to_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">I</span><span class="string">"/_to_phrase"</span><span class="plain">);</span>
<span class="identifier">template_package</span><span class="plain"> = </span><span class="identifier">Inter::Packages::by_url</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"/main/template"</span><span class="plain">);</span>
<span class="identifier">unchecked_kind_symbol</span><span class="plain"> = </span><span class="identifier">Inter::Packages::search_resources_exhaustively</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"K_unchecked"</span><span class="plain">);</span>
<span class="identifier">unchecked_function_symbol</span><span class="plain"> = </span><span class="identifier">Inter::Packages::search_resources_exhaustively</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"K_unchecked_function"</span><span class="plain">);</span>
<span class="identifier">typeless_int_symbol</span><span class="plain"> = </span><span class="identifier">Inter::Packages::search_resources_exhaustively</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"K_typeless_int"</span><span class="plain">);</span>

View file

@ -35,6 +35,8 @@
<span class="identifier">no_assimilated_commands</span><span class="plain"> = 0;</span>
<span class="identifier">no_assimilated_arrays</span><span class="plain"> = 0;</span>
<span class="identifier">Site::ensure_assimilation_package</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">plain_ptype_symbol</span><span class="plain">);</span>
<span class="functiontext">CodeGen::Assimilate::ensure</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, &amp;</span><span class="identifier">verb_directive_reverse_symbol</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"VERB_DIRECTIVE_REVERSE"</span><span class="plain">);</span>
<span class="functiontext">CodeGen::Assimilate::ensure</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, &amp;</span><span class="identifier">verb_directive_slash_symbol</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"VERB_DIRECTIVE_SLASH"</span><span class="plain">);</span>
<span class="functiontext">CodeGen::Assimilate::ensure</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, &amp;</span><span class="identifier">verb_directive_divider_symbol</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"VERB_DIRECTIVE_DIVIDER"</span><span class="plain">);</span>
@ -82,6 +84,7 @@
<pre class="display">
<span class="identifier">inter_bookmark</span><span class="plain"> </span><span class="functiontext">CodeGen::Assimilate::template_submodule</span><span class="plain">(</span><span class="identifier">inter_tree</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">inter_tree_node</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">submodule_ptype_symbol</span><span class="plain">) {</span>
<span class="identifier">inter_package</span><span class="plain"> *</span><span class="identifier">template_package</span><span class="plain"> = </span><span class="identifier">Site::ensure_assimilation_package</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">plain_ptype_symbol</span><span class="plain">);</span>
<span class="identifier">inter_package</span><span class="plain"> *</span><span class="identifier">t_p</span><span class="plain"> = </span><span class="identifier">Inter::Packages::by_name</span><span class="plain">(</span><span class="identifier">template_package</span><span class="plain">, </span><span class="identifier">name</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">t_p</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
<span class="identifier">inter_bookmark</span><span class="plain"> </span><span class="identifier">IBM</span><span class="plain"> = </span><span class="identifier">Inter::Bookmarks::after_this_node</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">);</span>
@ -609,7 +612,7 @@
<p class="inwebparagraph"></p>
<p class="endnote">The function CodeGen::Assimilate::new_package_named is used in <a href="#SP2">&#167;2</a>, <a href="#SP2_1_2">&#167;2.1.2</a>, <a href="#SP2_2_2">&#167;2.2.2</a>, <a href="#SP4">&#167;4</a>, 2/lnk (<a href="2-lnk.html#SP1">&#167;1</a>).</p>
<p class="endnote">The function CodeGen::Assimilate::new_package_named is used in <a href="#SP2">&#167;2</a>, <a href="#SP2_1_2">&#167;2.1.2</a>, <a href="#SP2_2_2">&#167;2.2.2</a>, <a href="#SP4">&#167;4</a>.</p>
<p class="endnote">The function CodeGen::Assimilate::install_socket is used in <a href="#SP2_1_2">&#167;2.1.2</a>, <a href="#SP2_2_2">&#167;2.2.2</a>.</p>
@ -939,6 +942,7 @@
<span class="identifier">Produce::push_code_position</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Produce::new_cip</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, &amp;(</span><span class="identifier">req</span><span class="plain">-</span><span class="element">&gt;position</span><span class="plain">)), </span><span class="identifier">Inter::Bookmarks::snapshot</span><span class="plain">(</span><span class="identifier">Packaging::at</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">)));</span>
<span class="identifier">value_holster</span><span class="plain"> </span><span class="identifier">VH</span><span class="plain"> = </span><span class="identifier">Holsters::new</span><span class="plain">(</span><span class="identifier">INTER_VOID_VHMODE</span><span class="plain">);</span>
<span class="identifier">inter_symbols_table</span><span class="plain"> *</span><span class="identifier">scope1</span><span class="plain"> = </span><span class="identifier">Inter::Packages::scope</span><span class="plain">(</span><span class="identifier">req</span><span class="plain">-</span><span class="element">&gt;block_package</span><span class="plain">);</span>
<span class="identifier">inter_package</span><span class="plain"> *</span><span class="identifier">template_package</span><span class="plain"> = </span><span class="identifier">Site::assimilation_package</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">);</span>
<span class="identifier">inter_symbols_table</span><span class="plain"> *</span><span class="identifier">scope2</span><span class="plain"> = </span><span class="identifier">Inter::Packages::scope</span><span class="plain">(</span><span class="identifier">template_package</span><span class="plain">);</span>
<span class="identifier">EmitInterSchemas::emit</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, &amp;</span><span class="identifier">VH</span><span class="plain">, </span><span class="identifier">sch</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">, </span><span class="identifier">scope1</span><span class="plain">, </span><span class="identifier">scope2</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="identifier">Produce::pop_code_position</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">);</span>

View file

@ -38,12 +38,7 @@
<span class="reserved">else</span>
<span class="identifier">Inter::Tree::traverse</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="identifier">inter_package</span><span class="plain"> *</span><span class="identifier">template_package</span><span class="plain"> = </span><span class="identifier">Inter::Packages::by_url</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"/main/template"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">template_package</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
<span class="identifier">inter_package</span><span class="plain"> *</span><span class="identifier">main_package</span><span class="plain"> = </span><span class="identifier">Site::main_package</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">in_main</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="identifier">template_package</span><span class="plain"> = </span><span class="functiontext">CodeGen::Assimilate::new_package_named</span><span class="plain">(&amp;</span><span class="identifier">in_main</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"template"</span><span class="plain">, </span><span class="identifier">plain_ptype_symbol</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="identifier">inter_package</span><span class="plain"> *</span><span class="identifier">template_package</span><span class="plain"> = </span><span class="identifier">Site::ensure_assimilation_package</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">plain_ptype_symbol</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>

View file

@ -43,7 +43,6 @@
<span class="reserved">if</span><span class="plain"> (!</span><span class="identifier">Inter::Symbols::is_defined</span><span class="plain">(</span><span class="identifier">D</span><span class="plain">)) {</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">socket</span><span class="plain"> = </span><span class="identifier">Inter::Connectors::find_socket</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">D</span><span class="plain">-&gt;</span><span class="identifier">symbol_name</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">socket</span><span class="plain">) {</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"Finding socket %S\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">D</span><span class="plain">-&gt;</span><span class="identifier">symbol_name</span><span class="plain">);</span>
<span class="identifier">D</span><span class="plain"> = </span><span class="identifier">socket</span><span class="plain">-&gt;</span><span class="identifier">equated_to</span><span class="plain">;</span>
<span class="identifier">S</span><span class="plain">-&gt;</span><span class="identifier">equated_to</span><span class="plain"> = </span><span class="identifier">D</span><span class="plain">;</span>
<span class="plain">}</span>

View file

@ -248,7 +248,14 @@ is 20. We instead compile this as
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">CONSTANT_SUM_LIST</span><span class="plain">:</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">CONSTANT_PRODUCT_LIST</span><span class="plain">:</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">CONSTANT_DIFFERENCE_LIST</span><span class="plain">:</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">CONSTANT_QUOTIENT_LIST</span><span class="plain">:</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">CONSTANT_QUOTIENT_LIST</span><span class="plain">: {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">depth</span><span class="plain"> = </span><span class="functiontext">CodeGen::CL::constant_depth</span><span class="plain">(</span><span class="identifier">con_name</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">depth</span><span class="plain"> &gt; 1) {</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"Con %S has depth %d\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">con_name</span><span class="plain">-&gt;</span><span class="identifier">symbol_name</span><span class="plain">, </span><span class="identifier">depth</span><span class="plain">);</span>
<span class="functiontext">CodeGen::CL::constant_depth</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">generated_segment</span><span class="plain"> *</span><span class="identifier">saved</span><span class="plain"> = </span><span class="functiontext">CodeGen::select</span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">, </span><span class="functiontext">CodeGen::Targets::basic_constant_segment</span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">, </span><span class="identifier">depth</span><span class="plain">));</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain"> = </span><span class="functiontext">CodeGen::current</span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">);</span>
<span class="functiontext">CodeGen::Targets::begin_constant</span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">, </span><span class="functiontext">CodeGen::CL::name</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">), </span><span class="identifier">TRUE</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">=</span><span class="identifier">DATA_CONST_IFLD</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">&lt;</span><span class="identifier">P</span><span class="plain">-&gt;</span><span class="identifier">W</span><span class="plain">.</span><span class="identifier">extent</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">=</span><span class="identifier">i</span><span class="plain">+2) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">i</span><span class="plain">&gt;</span><span class="identifier">DATA_CONST_IFLD</span><span class="plain">) {</span>
@ -264,21 +271,70 @@ is 20. We instead compile this as
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">bracket</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">")"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="functiontext">CodeGen::Targets::end_constant</span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">, </span><span class="functiontext">CodeGen::CL::name</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">));</span>
<span class="functiontext">CodeGen::deselect</span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">, </span><span class="identifier">saved</span><span class="plain">);</span>
<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">CONSTANT_DIRECT</span><span class="plain">: {</span>
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">val1</span><span class="plain"> = </span><span class="identifier">P</span><span class="plain">-&gt;</span><span class="identifier">W</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">DATA_CONST_IFLD</span><span class="plain">];</span>
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">val2</span><span class="plain"> = </span><span class="identifier">P</span><span class="plain">-&gt;</span><span class="identifier">W</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">DATA_CONST_IFLD</span><span class="plain"> + 1];</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">depth</span><span class="plain"> = </span><span class="functiontext">CodeGen::CL::constant_depth</span><span class="plain">(</span><span class="identifier">con_name</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">depth</span><span class="plain"> &gt; 1) </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">"Con %S has depth %d\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">con_name</span><span class="plain">-&gt;</span><span class="identifier">symbol_name</span><span class="plain">, </span><span class="identifier">depth</span><span class="plain">);</span>
<span class="reserved">generated_segment</span><span class="plain"> *</span><span class="identifier">saved</span><span class="plain"> = </span><span class="functiontext">CodeGen::select</span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">, </span><span class="functiontext">CodeGen::Targets::basic_constant_segment</span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">, </span><span class="identifier">depth</span><span class="plain">));</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain"> = </span><span class="functiontext">CodeGen::current</span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ifndef_me</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"#ifndef %S;\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="functiontext">CodeGen::CL::name</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">));</span>
<span class="functiontext">CodeGen::Targets::begin_constant</span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">, </span><span class="functiontext">CodeGen::CL::name</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">), </span><span class="identifier">TRUE</span><span class="plain">);</span>
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">val1</span><span class="plain"> = </span><span class="identifier">P</span><span class="plain">-&gt;</span><span class="identifier">W</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">DATA_CONST_IFLD</span><span class="plain">];</span>
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">val2</span><span class="plain"> = </span><span class="identifier">P</span><span class="plain">-&gt;</span><span class="identifier">W</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">DATA_CONST_IFLD</span><span class="plain"> + 1];</span>
<span class="functiontext">CodeGen::CL::literal</span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">, </span><span class="identifier">con_name</span><span class="plain">, </span><span class="identifier">Inter::Packages::scope_of</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">), </span><span class="identifier">val1</span><span class="plain">, </span><span class="identifier">val2</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
<span class="functiontext">CodeGen::Targets::end_constant</span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">, </span><span class="functiontext">CodeGen::CL::name</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">));</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ifndef_me</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" #endif;\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
<span class="functiontext">CodeGen::deselect</span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">, </span><span class="identifier">saved</span><span class="plain">);</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">default</span><span class="plain">: </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"ungenerated constant format"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">CodeGen::CL::constant_depth</span><span class="plain">(</span><span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">con</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">trace</span><span class="plain">) {</span>
<span class="identifier">LOG_INDENT</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">d</span><span class="plain"> = </span><span class="functiontext">CodeGen::CL::constant_depth_inner</span><span class="plain">(</span><span class="identifier">con</span><span class="plain">, </span><span class="identifier">trace</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">trace</span><span class="plain">) </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">"%S has depth %d\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">con</span><span class="plain">-&gt;</span><span class="identifier">symbol_name</span><span class="plain">, </span><span class="identifier">d</span><span class="plain">);</span>
<span class="identifier">LOG_OUTDENT</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">d</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">CodeGen::CL::constant_depth_inner</span><span class="plain">(</span><span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">con</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">trace</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">con</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> 1;</span>
<span class="identifier">inter_tree_node</span><span class="plain"> *</span><span class="identifier">D</span><span class="plain"> = </span><span class="identifier">Inter::Symbols::definition</span><span class="plain">(</span><span class="identifier">con</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">D</span><span class="plain">-&gt;</span><span class="identifier">W</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">CONSTANT_IST</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> 1;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">D</span><span class="plain">-&gt;</span><span class="identifier">W</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">FORMAT_CONST_IFLD</span><span class="plain">] == </span><span class="identifier">CONSTANT_DIRECT</span><span class="plain">) {</span>
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">val1</span><span class="plain"> = </span><span class="identifier">D</span><span class="plain">-&gt;</span><span class="identifier">W</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">DATA_CONST_IFLD</span><span class="plain">];</span>
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">val2</span><span class="plain"> = </span><span class="identifier">D</span><span class="plain">-&gt;</span><span class="identifier">W</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">DATA_CONST_IFLD</span><span class="plain"> + 1];</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">val1</span><span class="plain"> == </span><span class="identifier">ALIAS_IVAL</span><span class="plain">) {</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">alias</span><span class="plain"> =</span>
<span class="identifier">Inter::SymbolsTables::symbol_from_data_pair_and_table</span><span class="plain">(</span>
<span class="identifier">val1</span><span class="plain">, </span><span class="identifier">val2</span><span class="plain">, </span><span class="identifier">Inter::Packages::scope</span><span class="plain">(</span><span class="identifier">D</span><span class="plain">-&gt;</span><span class="identifier">package</span><span class="plain">));</span>
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">CodeGen::CL::constant_depth</span><span class="plain">(</span><span class="identifier">alias</span><span class="plain">, </span><span class="identifier">trace</span><span class="plain">) + 1;</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> 1;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">D</span><span class="plain">-&gt;</span><span class="identifier">W</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">FORMAT_CONST_IFLD</span><span class="plain">] == </span><span class="identifier">CONSTANT_SUM_LIST</span><span class="plain">) ||</span>
<span class="plain">(</span><span class="identifier">D</span><span class="plain">-&gt;</span><span class="identifier">W</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">FORMAT_CONST_IFLD</span><span class="plain">] == </span><span class="identifier">CONSTANT_PRODUCT_LIST</span><span class="plain">) ||</span>
<span class="plain">(</span><span class="identifier">D</span><span class="plain">-&gt;</span><span class="identifier">W</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">FORMAT_CONST_IFLD</span><span class="plain">] == </span><span class="identifier">CONSTANT_DIFFERENCE_LIST</span><span class="plain">) ||</span>
<span class="plain">(</span><span class="identifier">D</span><span class="plain">-&gt;</span><span class="identifier">W</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">FORMAT_CONST_IFLD</span><span class="plain">] == </span><span class="identifier">CONSTANT_QUOTIENT_LIST</span><span class="plain">)) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">total</span><span class="plain"> = 0;</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">=</span><span class="identifier">DATA_CONST_IFLD</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">&lt;</span><span class="identifier">D</span><span class="plain">-&gt;</span><span class="identifier">W</span><span class="plain">.</span><span class="identifier">extent</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">=</span><span class="identifier">i</span><span class="plain">+2) {</span>
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">val1</span><span class="plain"> = </span><span class="identifier">D</span><span class="plain">-&gt;</span><span class="identifier">W</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">];</span>
<span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">val2</span><span class="plain"> = </span><span class="identifier">D</span><span class="plain">-&gt;</span><span class="identifier">W</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">i</span><span class="plain"> + 1];</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">val1</span><span class="plain"> == </span><span class="identifier">ALIAS_IVAL</span><span class="plain">) {</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">alias</span><span class="plain"> =</span>
<span class="identifier">Inter::SymbolsTables::symbol_from_data_pair_and_table</span><span class="plain">(</span>
<span class="identifier">val1</span><span class="plain">, </span><span class="identifier">val2</span><span class="plain">, </span><span class="identifier">Inter::Packages::scope</span><span class="plain">(</span><span class="identifier">D</span><span class="plain">-&gt;</span><span class="identifier">package</span><span class="plain">));</span>
<span class="identifier">total</span><span class="plain"> += </span><span class="functiontext">CodeGen::CL::constant_depth</span><span class="plain">(</span><span class="identifier">alias</span><span class="plain">, </span><span class="identifier">trace</span><span class="plain">);</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="identifier">total</span><span class="plain">++;</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> 1 + </span><span class="identifier">total</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> 1;</span>
<span class="plain">}</span>
<span class="reserved">typedef</span><span class="plain"> </span><span class="reserved">struct</span><span class="plain"> </span><span class="reserved">text_literal_holder</span><span class="plain"> {</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">definition_code</span><span class="plain">;</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">literal_content</span><span class="plain">;</span>
@ -410,6 +466,10 @@ is 20. We instead compile this as
<p class="endnote">The function CodeGen::CL::constant is used in 3/fc (<a href="3-fc.html#SP1">&#167;1</a>).</p>
<p class="endnote">The function CodeGen::CL::constant_depth appears nowhere else.</p>
<p class="endnote">The function CodeGen::CL::constant_depth_inner appears nowhere else.</p>
<p class="endnote">The function CodeGen::CL::literal_text_at is used in 3/fc (<a href="3-fc.html#SP1">&#167;1</a>).</p>
<p class="endnote">The function CodeGen::CL::compare_tlh appears nowhere else.</p>

View file

@ -339,7 +339,7 @@ in the I6 template, or some extension), and we therefore do nothing.
<pre class="displaydefn">
<span class="reserved">generated_segment</span><span class="plain"> *</span><span class="identifier">saved</span><span class="plain"> = </span><span class="functiontext">CodeGen::select</span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">, </span><span class="functiontext">CodeGen::Targets::constant_segment</span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">));</span>
<span class="reserved">generated_segment</span><span class="plain"> *</span><span class="identifier">saved</span><span class="plain"> = </span><span class="functiontext">CodeGen::select</span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">, </span><span class="functiontext">CodeGen::Targets::basic_constant_segment</span><span class="plain">(</span><span class="identifier">gen</span><span class="plain">, 1));</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Inter::Symbols::read_annotation</span><span class="plain">(</span><span class="identifier">prop_name</span><span class="plain">, </span><span class="identifier">ASSIMILATED_IANN</span><span class="plain">) &gt;= 0) {</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">A</span><span class="plain"> = </span><span class="identifier">Inter::Symbols::get_translate</span><span class="plain">(</span><span class="identifier">prop_name</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">A</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">A</span><span class="plain"> = </span><span class="functiontext">CodeGen::CL::name</span><span class="plain">(</span><span class="identifier">prop_name</span><span class="plain">);</span>

View file

@ -86,6 +86,7 @@
<pre class="definitions">
<span class="definitionkeyword">enum</span> <span class="constant">GENERAL_SEGMENT_MTID</span>
<span class="definitionkeyword">enum</span> <span class="constant">DEFAULT_SEGMENT_MTID</span>
<span class="definitionkeyword">enum</span> <span class="constant">BASIC_CONSTANT_SEGMENT_MTID</span>
<span class="definitionkeyword">enum</span> <span class="constant">CONSTANT_SEGMENT_MTID</span>
<span class="definitionkeyword">enum</span> <span class="constant">PROPERTY_SEGMENT_MTID</span>
<span class="definitionkeyword">enum</span> <span class="constant">TL_SEGMENT_MTID</span>
@ -94,6 +95,7 @@
<pre class="display">
<span class="identifier">IMETHOD_TYPE</span><span class="plain">(</span><span class="constant">GENERAL_SEGMENT_MTID</span><span class="plain">, </span><span class="reserved">code_generation_target</span><span class="plain"> *</span><span class="identifier">cgt</span><span class="plain">, </span><span class="reserved">code_generation</span><span class="plain"> *</span><span class="identifier">gen</span><span class="plain">, </span><span class="identifier">inter_tree_node</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain">)</span>
<span class="identifier">IMETHOD_TYPE</span><span class="plain">(</span><span class="constant">DEFAULT_SEGMENT_MTID</span><span class="plain">, </span><span class="reserved">code_generation_target</span><span class="plain"> *</span><span class="identifier">cgt</span><span class="plain">, </span><span class="reserved">code_generation</span><span class="plain"> *</span><span class="identifier">gen</span><span class="plain">)</span>
<span class="identifier">IMETHOD_TYPE</span><span class="plain">(</span><span class="constant">BASIC_CONSTANT_SEGMENT_MTID</span><span class="plain">, </span><span class="reserved">code_generation_target</span><span class="plain"> *</span><span class="identifier">cgt</span><span class="plain">, </span><span class="reserved">code_generation</span><span class="plain"> *</span><span class="identifier">gen</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">depth</span><span class="plain">)</span>
<span class="identifier">IMETHOD_TYPE</span><span class="plain">(</span><span class="constant">CONSTANT_SEGMENT_MTID</span><span class="plain">, </span><span class="reserved">code_generation_target</span><span class="plain"> *</span><span class="identifier">cgt</span><span class="plain">, </span><span class="reserved">code_generation</span><span class="plain"> *</span><span class="identifier">gen</span><span class="plain">)</span>
<span class="identifier">IMETHOD_TYPE</span><span class="plain">(</span><span class="constant">PROPERTY_SEGMENT_MTID</span><span class="plain">, </span><span class="reserved">code_generation_target</span><span class="plain"> *</span><span class="identifier">cgt</span><span class="plain">, </span><span class="reserved">code_generation</span><span class="plain"> *</span><span class="identifier">gen</span><span class="plain">)</span>
<span class="identifier">IMETHOD_TYPE</span><span class="plain">(</span><span class="constant">TL_SEGMENT_MTID</span><span class="plain">, </span><span class="reserved">code_generation_target</span><span class="plain"> *</span><span class="identifier">cgt</span><span class="plain">, </span><span class="reserved">code_generation</span><span class="plain"> *</span><span class="identifier">gen</span><span class="plain">)</span>
@ -116,6 +118,12 @@
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">rv</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">CodeGen::Targets::basic_constant_segment</span><span class="plain">(</span><span class="reserved">code_generation</span><span class="plain"> *</span><span class="identifier">gen</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">depth</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">rv</span><span class="plain"> = 0;</span>
<span class="identifier">IMETHOD_CALL</span><span class="plain">(</span><span class="identifier">rv</span><span class="plain">, </span><span class="identifier">gen</span><span class="plain">-</span><span class="element">&gt;target</span><span class="plain">, </span><span class="constant">BASIC_CONSTANT_SEGMENT_MTID</span><span class="plain">, </span><span class="identifier">gen</span><span class="plain">, </span><span class="identifier">depth</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">rv</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">CodeGen::Targets::property_segment</span><span class="plain">(</span><span class="reserved">code_generation</span><span class="plain"> *</span><span class="identifier">gen</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">rv</span><span class="plain"> = 0;</span>
<span class="identifier">IMETHOD_CALL</span><span class="plain">(</span><span class="identifier">rv</span><span class="plain">, </span><span class="identifier">gen</span><span class="plain">-</span><span class="element">&gt;target</span><span class="plain">, </span><span class="constant">PROPERTY_SEGMENT_MTID</span><span class="plain">, </span><span class="identifier">gen</span><span class="plain">);</span>
@ -135,7 +143,9 @@
<p class="endnote">The function CodeGen::Targets::default_segment is used in 3/cal (<a href="3-cal.html#SP2">&#167;2</a>), 3/iap (<a href="3-iap.html#SP1">&#167;1</a>).</p>
<p class="endnote">The function CodeGen::Targets::constant_segment is used in 3/cal (<a href="3-cal.html#SP2">&#167;2</a>), 3/iap (<a href="3-iap.html#SP4_5">&#167;4.5</a>, <a href="3-iap.html#SP4_6">&#167;4.6</a>, <a href="3-iap.html#SP5">&#167;5</a>).</p>
<p class="endnote">The function CodeGen::Targets::constant_segment is used in 3/cal (<a href="3-cal.html#SP2">&#167;2</a>), 3/iap (<a href="3-iap.html#SP4_6">&#167;4.6</a>, <a href="3-iap.html#SP5">&#167;5</a>).</p>
<p class="endnote">The function CodeGen::Targets::basic_constant_segment is used in 3/cal (<a href="3-cal.html#SP4">&#167;4</a>), 3/iap (<a href="3-iap.html#SP4_5">&#167;4.5</a>).</p>
<p class="endnote">The function CodeGen::Targets::property_segment appears nowhere else.</p>

View file

@ -24,6 +24,7 @@
<span class="identifier">METHOD_ADD</span><span class="plain">(</span><span class="identifier">cgt</span><span class="plain">, </span><span class="constant">GENERAL_SEGMENT_MTID</span><span class="plain">, </span><span class="functiontext">CodeGen::I6::general_segment</span><span class="plain">);</span>
<span class="identifier">METHOD_ADD</span><span class="plain">(</span><span class="identifier">cgt</span><span class="plain">, </span><span class="constant">TL_SEGMENT_MTID</span><span class="plain">, </span><span class="functiontext">CodeGen::I6::tl_segment</span><span class="plain">);</span>
<span class="identifier">METHOD_ADD</span><span class="plain">(</span><span class="identifier">cgt</span><span class="plain">, </span><span class="constant">DEFAULT_SEGMENT_MTID</span><span class="plain">, </span><span class="functiontext">CodeGen::I6::default_segment</span><span class="plain">);</span>
<span class="identifier">METHOD_ADD</span><span class="plain">(</span><span class="identifier">cgt</span><span class="plain">, </span><span class="constant">BASIC_CONSTANT_SEGMENT_MTID</span><span class="plain">, </span><span class="functiontext">CodeGen::I6::basic_constant_segment</span><span class="plain">);</span>
<span class="identifier">METHOD_ADD</span><span class="plain">(</span><span class="identifier">cgt</span><span class="plain">, </span><span class="constant">CONSTANT_SEGMENT_MTID</span><span class="plain">, </span><span class="functiontext">CodeGen::I6::constant_segment</span><span class="plain">);</span>
<span class="identifier">METHOD_ADD</span><span class="plain">(</span><span class="identifier">cgt</span><span class="plain">, </span><span class="constant">PROPERTY_SEGMENT_MTID</span><span class="plain">, </span><span class="functiontext">CodeGen::I6::property_segment</span><span class="plain">);</span>
<span class="identifier">METHOD_ADD</span><span class="plain">(</span><span class="identifier">cgt</span><span class="plain">, </span><span class="constant">COMPILE_PRIMITIVE_MTID</span><span class="plain">, </span><span class="functiontext">CodeGen::I6::compile_primitive</span><span class="plain">);</span>
@ -69,6 +70,16 @@ now a bitmap of flags for tracing actions, calls to object routines, and so on.
<span class="definitionkeyword">enum</span> <span class="constant">compiler_versioning_matter_I7CGS</span>
<span class="definitionkeyword">enum</span> <span class="constant">attributes_at_eof_I7CGS</span>
<span class="definitionkeyword">enum</span> <span class="constant">very_early_matter_I7CGS</span>
<span class="definitionkeyword">enum</span> <span class="constant">constants_1_I7CGS</span>
<span class="definitionkeyword">enum</span> <span class="constant">constants_2_I7CGS</span>
<span class="definitionkeyword">enum</span> <span class="constant">constants_3_I7CGS</span>
<span class="definitionkeyword">enum</span> <span class="constant">constants_4_I7CGS</span>
<span class="definitionkeyword">enum</span> <span class="constant">constants_5_I7CGS</span>
<span class="definitionkeyword">enum</span> <span class="constant">constants_6_I7CGS</span>
<span class="definitionkeyword">enum</span> <span class="constant">constants_7_I7CGS</span>
<span class="definitionkeyword">enum</span> <span class="constant">constants_8_I7CGS</span>
<span class="definitionkeyword">enum</span> <span class="constant">constants_9_I7CGS</span>
<span class="definitionkeyword">enum</span> <span class="constant">constants_10_I7CGS</span>
<span class="definitionkeyword">enum</span> <span class="constant">early_matter_I7CGS</span>
<span class="definitionkeyword">enum</span> <span class="constant">text_literals_code_I7CGS</span>
<span class="definitionkeyword">enum</span> <span class="constant">summations_at_eof_I7CGS</span>
@ -87,6 +98,16 @@ now a bitmap of flags for tracing actions, calls to object routines, and so on.
<span class="identifier">gen</span><span class="plain">-</span><span class="element">&gt;segments</span><span class="plain">[</span><span class="constant">compiler_versioning_matter_I7CGS</span><span class="plain">] = </span><span class="functiontext">CodeGen::new_segment</span><span class="plain">();</span>
<span class="identifier">gen</span><span class="plain">-</span><span class="element">&gt;segments</span><span class="plain">[</span><span class="constant">attributes_at_eof_I7CGS</span><span class="plain">] = </span><span class="functiontext">CodeGen::new_segment</span><span class="plain">();</span>
<span class="identifier">gen</span><span class="plain">-</span><span class="element">&gt;segments</span><span class="plain">[</span><span class="constant">very_early_matter_I7CGS</span><span class="plain">] = </span><span class="functiontext">CodeGen::new_segment</span><span class="plain">();</span>
<span class="identifier">gen</span><span class="plain">-</span><span class="element">&gt;segments</span><span class="plain">[</span><span class="constant">constants_1_I7CGS</span><span class="plain">] = </span><span class="functiontext">CodeGen::new_segment</span><span class="plain">();</span>
<span class="identifier">gen</span><span class="plain">-</span><span class="element">&gt;segments</span><span class="plain">[</span><span class="constant">constants_2_I7CGS</span><span class="plain">] = </span><span class="functiontext">CodeGen::new_segment</span><span class="plain">();</span>
<span class="identifier">gen</span><span class="plain">-</span><span class="element">&gt;segments</span><span class="plain">[</span><span class="constant">constants_3_I7CGS</span><span class="plain">] = </span><span class="functiontext">CodeGen::new_segment</span><span class="plain">();</span>
<span class="identifier">gen</span><span class="plain">-</span><span class="element">&gt;segments</span><span class="plain">[</span><span class="constant">constants_4_I7CGS</span><span class="plain">] = </span><span class="functiontext">CodeGen::new_segment</span><span class="plain">();</span>
<span class="identifier">gen</span><span class="plain">-</span><span class="element">&gt;segments</span><span class="plain">[</span><span class="constant">constants_5_I7CGS</span><span class="plain">] = </span><span class="functiontext">CodeGen::new_segment</span><span class="plain">();</span>
<span class="identifier">gen</span><span class="plain">-</span><span class="element">&gt;segments</span><span class="plain">[</span><span class="constant">constants_6_I7CGS</span><span class="plain">] = </span><span class="functiontext">CodeGen::new_segment</span><span class="plain">();</span>
<span class="identifier">gen</span><span class="plain">-</span><span class="element">&gt;segments</span><span class="plain">[</span><span class="constant">constants_7_I7CGS</span><span class="plain">] = </span><span class="functiontext">CodeGen::new_segment</span><span class="plain">();</span>
<span class="identifier">gen</span><span class="plain">-</span><span class="element">&gt;segments</span><span class="plain">[</span><span class="constant">constants_8_I7CGS</span><span class="plain">] = </span><span class="functiontext">CodeGen::new_segment</span><span class="plain">();</span>
<span class="identifier">gen</span><span class="plain">-</span><span class="element">&gt;segments</span><span class="plain">[</span><span class="constant">constants_9_I7CGS</span><span class="plain">] = </span><span class="functiontext">CodeGen::new_segment</span><span class="plain">();</span>
<span class="identifier">gen</span><span class="plain">-</span><span class="element">&gt;segments</span><span class="plain">[</span><span class="constant">constants_10_I7CGS</span><span class="plain">] = </span><span class="functiontext">CodeGen::new_segment</span><span class="plain">();</span>
<span class="identifier">gen</span><span class="plain">-</span><span class="element">&gt;segments</span><span class="plain">[</span><span class="constant">early_matter_I7CGS</span><span class="plain">] = </span><span class="functiontext">CodeGen::new_segment</span><span class="plain">();</span>
<span class="identifier">gen</span><span class="plain">-</span><span class="element">&gt;segments</span><span class="plain">[</span><span class="constant">text_literals_code_I7CGS</span><span class="plain">] = </span><span class="functiontext">CodeGen::new_segment</span><span class="plain">();</span>
<span class="identifier">gen</span><span class="plain">-</span><span class="element">&gt;segments</span><span class="plain">[</span><span class="constant">summations_at_eof_I7CGS</span><span class="plain">] = </span><span class="functiontext">CodeGen::new_segment</span><span class="plain">();</span>
@ -135,9 +156,13 @@ now a bitmap of flags for tracing actions, calls to object routines, and so on.
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">CodeGen::I6::default_segment</span><span class="plain">(</span><span class="reserved">code_generation_target</span><span class="plain"> *</span><span class="identifier">cgt</span><span class="plain">) {</span>
<span class="reserved">return</span><span class="plain"> </span><span class="constant">main_matter_I7CGS</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">CodeGen::I6::constant_segment</span><span class="plain">(</span><span class="reserved">code_generation_target</span><span class="plain"> *</span><span class="identifier">cgt</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">CodeGen::I6::constant_segment</span><span class="plain">(</span><span class="reserved">code_generation_target</span><span class="plain"> *</span><span class="identifier">cgt</span><span class="plain">, </span><span class="reserved">code_generation</span><span class="plain"> *</span><span class="identifier">gen</span><span class="plain">) {</span>
<span class="reserved">return</span><span class="plain"> </span><span class="constant">early_matter_I7CGS</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">CodeGen::I6::basic_constant_segment</span><span class="plain">(</span><span class="reserved">code_generation_target</span><span class="plain"> *</span><span class="identifier">cgt</span><span class="plain">, </span><span class="reserved">code_generation</span><span class="plain"> *</span><span class="identifier">gen</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">depth</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">depth</span><span class="plain"> &gt;= 10) </span><span class="identifier">depth</span><span class="plain"> = 10;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="constant">constants_1_I7CGS</span><span class="plain"> + </span><span class="identifier">depth</span><span class="plain"> - 1;</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">CodeGen::I6::property_segment</span><span class="plain">(</span><span class="reserved">code_generation_target</span><span class="plain"> *</span><span class="identifier">cgt</span><span class="plain">) {</span>
<span class="reserved">return</span><span class="plain"> </span><span class="constant">attributes_at_eof_I7CGS</span><span class="plain">;</span>
<span class="plain">}</span>
@ -317,6 +342,8 @@ now a bitmap of flags for tracing actions, calls to object routines, and so on.
<p class="endnote">The function CodeGen::I6::constant_segment is used in <a href="#SP1">&#167;1</a>.</p>
<p class="endnote">The function CodeGen::I6::basic_constant_segment is used in <a href="#SP1">&#167;1</a>.</p>
<p class="endnote">The function CodeGen::I6::property_segment is used in <a href="#SP1">&#167;1</a>.</p>
<p class="endnote">The function CodeGen::I6::tl_segment is used in <a href="#SP1">&#167;1</a>.</p>

View file

@ -610,6 +610,11 @@ list is not exhaustive.
<span class="identifier">Problems::Fatal::issue</span><span class="plain">(</span><span class="string">"The Inter pipeline description contained errors"</span><span class="plain">);</span>
<span class="identifier">CodeGen::Pipeline::set_repository</span><span class="plain">(</span><span class="identifier">SS</span><span class="plain">, </span><span class="functiontext">Emit::tree</span><span class="plain">());</span>
<span class="identifier">linked_list</span><span class="plain"> *</span><span class="identifier">requirements_list</span><span class="plain"> = </span><span class="identifier">NEW_LINKED_LIST</span><span class="plain">(</span><span class="identifier">inter_library</span><span class="plain">);</span>
<span class="identifier">inter_library</span><span class="plain"> *</span><span class="identifier">bi</span><span class="plain"> =</span>
<span class="identifier">CodeGen::Libraries::find</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"basic_inform"</span><span class="plain">, </span><span class="constant">NO_FS_AREAS</span><span class="plain">, </span><span class="identifier">pathname_of_i6t_files</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">bi</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">)</span>
<span class="identifier">Problems::Fatal::issue</span><span class="plain">(</span><span class="string">"The Basic Inform inter library cannot be found"</span><span class="plain">);</span>
<span class="identifier">ADD_TO_LINKED_LIST</span><span class="plain">(</span><span class="identifier">bi</span><span class="plain">, </span><span class="identifier">inter_library</span><span class="plain">, </span><span class="identifier">requirements_list</span><span class="plain">);</span>
<span class="identifier">inter_library</span><span class="plain"> *</span><span class="identifier">stdr</span><span class="plain"> =</span>
<span class="identifier">CodeGen::Libraries::find</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"standard_rules"</span><span class="plain">, </span><span class="constant">NO_FS_AREAS</span><span class="plain">, </span><span class="identifier">pathname_of_i6t_files</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">stdr</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">)</span>

View file

@ -36,7 +36,7 @@ but on others it's compiled into the body of an application. So:
<p class="inwebparagraph"></p>
<p class="endnote">The function main is used in 2/pt (<a href="2-pt.html#SP52">&#167;52</a>), 2/pl2 (<a href="2-pl2.html#SP3_1">&#167;3.1</a>), 2/pck (<a href="2-pck.html#SP3">&#167;3</a>), 2/cnn (<a href="2-cnn.html#SP1">&#167;1</a>), 3/rst (<a href="3-rst.html#SP6">&#167;6</a>), 4/am (<a href="4-am.html#SP26_1">&#167;26.1</a>), 8/ef (<a href="8-ef.html#SP26">&#167;26</a>), 8/ed2 (<a href="8-ed2.html#SP3_2">&#167;3.2</a>), 10/varc (<a href="10-varc.html#SP14">&#167;14</a>), 19/tb (<a href="19-tb.html#SP27">&#167;27</a>, <a href="19-tb.html#SP27_1">&#167;27.1</a>, <a href="19-tb.html#SP27_1_3">&#167;27.1.3</a>, <a href="19-tb.html#SP29">&#167;29</a>), 21/rl2 (<a href="21-rl2.html#SP23">&#167;23</a>), 26/uo (<a href="26-uo.html#SP11_1">&#167;11.1</a>), 27/cm (<a href="27-cm.html#SP1">&#167;1</a>), 1/ppl (<a href="1-ppl.html#SP5">&#167;5</a>), 2/lnk (<a href="2-lnk.html#SP1">&#167;1</a>), 3/fc (<a href="3-fc.html#SP1">&#167;1</a>), 2/hf (<a href="2-hf.html#SP6">&#167;6</a>).</p>
<p class="endnote">The function main is used in 2/pt (<a href="2-pt.html#SP52">&#167;52</a>), 2/pl2 (<a href="2-pl2.html#SP3_1">&#167;3.1</a>), 2/pck (<a href="2-pck.html#SP3">&#167;3</a>), 2/cnn (<a href="2-cnn.html#SP1">&#167;1</a>), 3/rst (<a href="3-rst.html#SP6">&#167;6</a>), 4/am (<a href="4-am.html#SP26_1">&#167;26.1</a>), 8/ef (<a href="8-ef.html#SP26">&#167;26</a>), 8/ed2 (<a href="8-ed2.html#SP3_2">&#167;3.2</a>), 10/varc (<a href="10-varc.html#SP14">&#167;14</a>), 19/tb (<a href="19-tb.html#SP27">&#167;27</a>, <a href="19-tb.html#SP27_1">&#167;27.1</a>, <a href="19-tb.html#SP27_1_3">&#167;27.1.3</a>, <a href="19-tb.html#SP29">&#167;29</a>), 21/rl2 (<a href="21-rl2.html#SP23">&#167;23</a>), 26/uo (<a href="26-uo.html#SP11_1">&#167;11.1</a>), 27/cm (<a href="27-cm.html#SP1">&#167;1</a>), 3/fc (<a href="3-fc.html#SP1">&#167;1</a>), 2/hf (<a href="2-hf.html#SP6">&#167;6</a>).</p>
<p class="inwebparagraph"><a id="SP3"></a><b>&#167;3. </b>As a matter of policy, no module is allowed to start or stop the foundation
module, not even the mighty core; so we take care of that with one more

View file

@ -43,7 +43,7 @@ when they want I7 to run.
<p class="inwebparagraph"></p>
<p class="endnote">The function main is used in 2/pt (<a href="2-pt.html#SP52">&#167;52</a>), 2/pl2 (<a href="2-pl2.html#SP3_1">&#167;3.1</a>), 2/pck (<a href="2-pck.html#SP3">&#167;3</a>), 2/cnn (<a href="2-cnn.html#SP1">&#167;1</a>), 3/rst (<a href="3-rst.html#SP6">&#167;6</a>), 4/am (<a href="4-am.html#SP26_1">&#167;26.1</a>), 8/ef (<a href="8-ef.html#SP26">&#167;26</a>), 8/ed2 (<a href="8-ed2.html#SP3_2">&#167;3.2</a>), 10/varc (<a href="10-varc.html#SP14">&#167;14</a>), 19/tb (<a href="19-tb.html#SP27">&#167;27</a>, <a href="19-tb.html#SP27_1">&#167;27.1</a>, <a href="19-tb.html#SP27_1_3">&#167;27.1.3</a>, <a href="19-tb.html#SP29">&#167;29</a>), 21/rl2 (<a href="21-rl2.html#SP23">&#167;23</a>), 26/uo (<a href="26-uo.html#SP11_1">&#167;11.1</a>), 27/cm (<a href="27-cm.html#SP1">&#167;1</a>), 1/bs (<a href="1-bs.html#SP2">&#167;2</a>), 1/ppl (<a href="1-ppl.html#SP5">&#167;5</a>), 2/lnk (<a href="2-lnk.html#SP1">&#167;1</a>), 3/fc (<a href="3-fc.html#SP1">&#167;1</a>), 3/sm (<a href="3-sm.html#SP36">&#167;36</a>, <a href="3-sm.html#SP36_1">&#167;36.1</a>, <a href="3-sm.html#SP38">&#167;38</a>), 3/em2 (<a href="3-em2.html#SP24">&#167;24</a>), 4/ap (<a href="4-ap.html#SP2">&#167;2</a>), 2/hf (<a href="2-hf.html#SP6">&#167;6</a>).</p>
<p class="endnote">The function main is used in 2/pt (<a href="2-pt.html#SP52">&#167;52</a>), 2/pl2 (<a href="2-pl2.html#SP3_1">&#167;3.1</a>), 2/pck (<a href="2-pck.html#SP3">&#167;3</a>), 2/cnn (<a href="2-cnn.html#SP1">&#167;1</a>), 3/rst (<a href="3-rst.html#SP6">&#167;6</a>), 4/am (<a href="4-am.html#SP26_1">&#167;26.1</a>), 8/ef (<a href="8-ef.html#SP26">&#167;26</a>), 8/ed2 (<a href="8-ed2.html#SP3_2">&#167;3.2</a>), 10/varc (<a href="10-varc.html#SP14">&#167;14</a>), 19/tb (<a href="19-tb.html#SP27">&#167;27</a>, <a href="19-tb.html#SP27_1">&#167;27.1</a>, <a href="19-tb.html#SP27_1_3">&#167;27.1.3</a>, <a href="19-tb.html#SP29">&#167;29</a>), 21/rl2 (<a href="21-rl2.html#SP23">&#167;23</a>), 26/uo (<a href="26-uo.html#SP11_1">&#167;11.1</a>), 27/cm (<a href="27-cm.html#SP1">&#167;1</a>), 1/bs (<a href="1-bs.html#SP2">&#167;2</a>), 3/fc (<a href="3-fc.html#SP1">&#167;1</a>), 3/sm (<a href="3-sm.html#SP36">&#167;36</a>, <a href="3-sm.html#SP36_1">&#167;36.1</a>, <a href="3-sm.html#SP38">&#167;38</a>), 3/em2 (<a href="3-em2.html#SP24">&#167;24</a>), 4/ap (<a href="4-ap.html#SP2">&#167;2</a>), 2/hf (<a href="2-hf.html#SP6">&#167;6</a>).</p>
<p class="inwebparagraph"><a id="SP3"></a><b>&#167;3. </b>Either way, that brings us here. All our modules have to be started up and
shut down, so we take care of that with one more intermediary. These modules

View file

@ -308,7 +308,9 @@
<span class="identifier">PUT_TO</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">, </span><span class="identifier">c</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">Inter::Packages::by_name</span><span class="plain">(</span><span class="identifier">at_P</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">);</span>
<span class="reserved">inter_package</span><span class="plain"> *</span><span class="identifier">pack</span><span class="plain"> = </span><span class="functiontext">Inter::Packages::by_name</span><span class="plain">(</span><span class="identifier">at_P</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">);</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">pack</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">Inter::Packages::by_name</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">-</span><span class="element">&gt;root_package</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">);</span>
<span class="plain">}</span>

View file

@ -309,9 +309,9 @@
<p class="endnote">The function Inter::Symbols::clear_transient_flags appears nowhere else.</p>
<p class="endnote">The function Inter::Symbols::get_flag appears nowhere else.</p>
<p class="endnote">The function Inter::Symbols::get_flag is used in 3/iibf (<a href="3-iibf.html#SP1_1_3_2">&#167;1.1.3.2</a>).</p>
<p class="endnote">The function Inter::Symbols::set_flag is used in 4/tsc (<a href="4-tsc.html#SP1">&#167;1</a>).</p>
<p class="endnote">The function Inter::Symbols::set_flag is used in 3/iibf (<a href="3-iibf.html#SP1_4_2">&#167;1.4.2</a>), 4/tsc (<a href="4-tsc.html#SP1">&#167;1</a>).</p>
<p class="endnote">The function Inter::Symbols::clear_flag appears nowhere else.</p>

View file

@ -346,6 +346,8 @@ that's the end of the list and therefore the block. (There is no resource 0.)
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">BinaryFiles::read_int32</span><span class="plain">(</span><span class="identifier">fh</span><span class="plain">, &amp;</span><span class="identifier">st</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">) </span><span class="functiontext">Inter::Binary::read_error</span><span class="plain">(&amp;</span><span class="identifier">eloc</span><span class="plain">, </span><span class="identifier">ftell</span><span class="plain">(</span><span class="identifier">fh</span><span class="plain">), </span><span class="identifier">I</span><span class="string">"bytecode incomplete"</span><span class="plain">);</span>
<span class="reserved">unsigned</span><span class="plain"> </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">sc</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">BinaryFiles::read_int32</span><span class="plain">(</span><span class="identifier">fh</span><span class="plain">, &amp;</span><span class="identifier">sc</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">) </span><span class="functiontext">Inter::Binary::read_error</span><span class="plain">(&amp;</span><span class="identifier">eloc</span><span class="plain">, </span><span class="identifier">ftell</span><span class="plain">(</span><span class="identifier">fh</span><span class="plain">), </span><span class="identifier">I</span><span class="string">"bytecode incomplete"</span><span class="plain">);</span>
<span class="reserved">unsigned</span><span class="plain"> </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">uniq</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">BinaryFiles::read_int32</span><span class="plain">(</span><span class="identifier">fh</span><span class="plain">, &amp;</span><span class="identifier">uniq</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">) </span><span class="functiontext">Inter::Binary::read_error</span><span class="plain">(&amp;</span><span class="identifier">eloc</span><span class="plain">, </span><span class="identifier">ftell</span><span class="plain">(</span><span class="identifier">fh</span><span class="plain">), </span><span class="identifier">I</span><span class="string">"bytecode incomplete"</span><span class="plain">);</span>
<span class="reserved">unsigned</span><span class="plain"> </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">L</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">BinaryFiles::read_int32</span><span class="plain">(</span><span class="identifier">fh</span><span class="plain">, &amp;</span><span class="identifier">L</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">) </span><span class="functiontext">Inter::Binary::read_error</span><span class="plain">(&amp;</span><span class="identifier">eloc</span><span class="plain">, </span><span class="identifier">ftell</span><span class="plain">(</span><span class="identifier">fh</span><span class="plain">), </span><span class="identifier">I</span><span class="string">"bytecode incomplete"</span><span class="plain">);</span>
@ -366,6 +368,7 @@ that's the end of the list and therefore the block. (There is no resource 0.)
<span class="reserved">inter_symbol</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain"> = </span><span class="functiontext">Inter::SymbolsTables::symbol_from_name_creating_at_ID</span><span class="plain">(</span><span class="identifier">res</span><span class="plain">-</span><span class="element">&gt;stored_symbols_table</span><span class="plain">, </span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">X</span><span class="plain">);</span>
<span class="functiontext">Inter::Symbols::set_type</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">st</span><span class="plain">);</span>
<span class="functiontext">Inter::Symbols::set_scope</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">sc</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">uniq</span><span class="plain"> == 1) </span><span class="functiontext">Inter::Symbols::set_flag</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">, </span><span class="constant">MAKE_NAME_UNIQUE</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">trans</span><span class="plain">) &gt; 0) </span><span class="functiontext">Inter::Symbols::set_translate</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">, </span><span class="identifier">trans</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">BinaryFiles::read_int32</span><span class="plain">(</span><span class="identifier">fh</span><span class="plain">, &amp;</span><span class="identifier">L</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">) </span><span class="functiontext">Inter::Binary::read_error</span><span class="plain">(&amp;</span><span class="identifier">eloc</span><span class="plain">, </span><span class="identifier">ftell</span><span class="plain">(</span><span class="identifier">fh</span><span class="plain">), </span><span class="identifier">I</span><span class="string">"bytecode incomplete"</span><span class="plain">);</span>
@ -414,6 +417,10 @@ that's the end of the list and therefore the block. (There is no resource 0.)
<span class="identifier">BinaryFiles::write_int32</span><span class="plain">(</span><span class="identifier">fh</span><span class="plain">, </span><span class="identifier">symb</span><span class="plain">-</span><span class="element">&gt;symbol_ID</span><span class="plain">);</span>
<span class="identifier">BinaryFiles::write_int32</span><span class="plain">(</span><span class="identifier">fh</span><span class="plain">, (</span><span class="reserved">unsigned</span><span class="plain"> </span><span class="reserved">int</span><span class="plain">) </span><span class="functiontext">Inter::Symbols::get_type</span><span class="plain">(</span><span class="identifier">symb</span><span class="plain">));</span>
<span class="identifier">BinaryFiles::write_int32</span><span class="plain">(</span><span class="identifier">fh</span><span class="plain">, (</span><span class="reserved">unsigned</span><span class="plain"> </span><span class="reserved">int</span><span class="plain">) </span><span class="functiontext">Inter::Symbols::get_scope</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="functiontext">Inter::Symbols::get_flag</span><span class="plain">(</span><span class="identifier">symb</span><span class="plain">, </span><span class="constant">MAKE_NAME_UNIQUE</span><span class="plain">))</span>
<span class="identifier">BinaryFiles::write_int32</span><span class="plain">(</span><span class="identifier">fh</span><span class="plain">, 1);</span>
<span class="reserved">else</span>
<span class="identifier">BinaryFiles::write_int32</span><span class="plain">(</span><span class="identifier">fh</span><span class="plain">, 0);</span>
<span class="identifier">BinaryFiles::write_int32</span><span class="plain">(</span><span class="identifier">fh</span><span class="plain">, (</span><span class="reserved">unsigned</span><span class="plain"> </span><span class="reserved">int</span><span class="plain">) </span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">symb</span><span class="plain">-</span><span class="element">&gt;symbol_name</span><span class="plain">));</span>
<span class="identifier">LOOP_THROUGH_TEXT</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">symb</span><span class="plain">-</span><span class="element">&gt;symbol_name</span><span class="plain">)</span>
<span class="identifier">BinaryFiles::write_int32</span><span class="plain">(</span><span class="identifier">fh</span><span class="plain">, (</span><span class="reserved">unsigned</span><span class="plain"> </span><span class="reserved">int</span><span class="plain">) </span><span class="identifier">Str::get</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">));</span>

View file

@ -51,7 +51,7 @@
<span class="identifier">path_to_inter</span><span class="plain"> = </span><span class="functiontext">Pathnames::installation_path</span><span class="plain">(</span><span class="string">"INTER_PATH"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"inter"</span><span class="plain">);</span>
<span class="identifier">path_to_pipelines</span><span class="plain"> = </span><span class="functiontext">Pathnames::subfolder</span><span class="plain">(</span><span class="identifier">path_to_inter</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Pipelines"</span><span class="plain">);</span>
<span class="identifier">requirements_list</span><span class="plain"> = </span><span class="identifier">NEW_LINKED_LIST</span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain">);</span>
<span class="identifier">requirements_list</span><span class="plain"> = </span><span class="identifier">NEW_LINKED_LIST</span><span class="plain">(</span><span class="reserved">inter_library</span><span class="plain">);</span>
<span class="functiontext">CommandLine::declare_heading</span><span class="plain">(</span>
<span class="identifier">L</span><span class="string">"[[Purpose]]\</span><span class="plain">n</span><span class="string">\</span><span class="plain">n</span><span class="string">"</span>
@ -83,6 +83,8 @@
<span class="functiontext">CommandLine::read</span><span class="plain">(</span><span class="identifier">argc</span><span class="plain">, </span><span class="identifier">argv</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, &amp;</span><span class="functiontext">Main::respond</span><span class="plain">, &amp;</span><span class="functiontext">Main::add_file</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">template_action</span><span class="plain"> == </span><span class="constant">ASSIMILATE_CLSW</span><span class="plain">) {</span>
<span class="reserved">inter_library</span><span class="plain"> *</span><span class="identifier">lib</span><span class="plain"> = </span><span class="functiontext">CodeGen::Libraries::new</span><span class="plain">(</span><span class="identifier">template_path</span><span class="plain">);</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">attach</span><span class="plain"> = </span><span class="functiontext">CodeGen::Libraries::URL</span><span class="plain">(</span><span class="identifier">lib</span><span class="plain">);</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain"> = </span><span class="functiontext">CodeGen::Architecture::leafname</span><span class="plain">();</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::len</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">) == 0) </span><span class="functiontext">Errors::fatal</span><span class="plain">(</span><span class="string">"no -architecture given"</span><span class="plain">);</span>
<span class="identifier">pipeline_as_file</span><span class="plain"> = </span><span class="functiontext">Filenames::in_folder</span><span class="plain">(</span><span class="identifier">path_to_pipelines</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"assimilate.interpipeline"</span><span class="plain">);</span>
@ -100,6 +102,11 @@
<span class="functiontext">Str::copy</span><span class="plain">(</span><span class="functiontext">Dictionaries::create_text</span><span class="plain">(</span><span class="identifier">pipeline_vars</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"*outt"</span><span class="plain">), </span><span class="identifier">fullname</span><span class="plain">);</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">leafname</span><span class="plain">);</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">fullname</span><span class="plain">);</span>
<span class="reserved">match_results</span><span class="plain"> </span><span class="identifier">mr</span><span class="plain"> = </span><span class="functiontext">Regexp::create_mr</span><span class="plain">();</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Regexp::match</span><span class="plain">(&amp;</span><span class="identifier">mr</span><span class="plain">, </span><span class="identifier">attach</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"/main/(%c+)"</span><span class="plain">)) {</span>
<span class="functiontext">Str::copy</span><span class="plain">(</span><span class="functiontext">Dictionaries::create_text</span><span class="plain">(</span><span class="identifier">pipeline_vars</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"*attach"</span><span class="plain">), </span><span class="identifier">mr</span><span class="element">.exp</span><span class="plain">[0]);</span>
<span class="plain">}</span>
<span class="functiontext">Regexp::dispose_of</span><span class="plain">(&amp;</span><span class="identifier">mr</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="functiontext">Main::act</span><span class="plain">();</span>
@ -116,7 +123,7 @@
<p class="inwebparagraph"></p>
<p class="endnote">The function main is used in 2/pck (<a href="2-pck.html#SP3">&#167;3</a>), 2/cnn (<a href="2-cnn.html#SP1">&#167;1</a>), 1/bs (<a href="1-bs.html#SP2">&#167;2</a>), 1/ppl (<a href="1-ppl.html#SP5">&#167;5</a>), 2/lnk (<a href="2-lnk.html#SP1">&#167;1</a>), 3/fc (<a href="3-fc.html#SP1">&#167;1</a>).</p>
<p class="endnote">The function main is used in 2/pck (<a href="2-pck.html#SP3">&#167;3</a>), 2/cnn (<a href="2-cnn.html#SP1">&#167;1</a>), 1/bs (<a href="1-bs.html#SP2">&#167;2</a>), 3/fc (<a href="3-fc.html#SP1">&#167;1</a>).</p>
<p class="inwebparagraph"><a id="SP2"></a><b>&#167;2. </b></p>
@ -195,6 +202,7 @@
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">pipeline_as_file</span><span class="plain">) </span><span class="identifier">SS</span><span class="plain"> = </span><span class="functiontext">CodeGen::Pipeline::parse_from_file</span><span class="plain">(</span><span class="identifier">pipeline_as_file</span><span class="plain">, </span><span class="identifier">pipeline_vars</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">SS</span><span class="plain"> = </span><span class="functiontext">CodeGen::Pipeline::parse</span><span class="plain">(</span><span class="identifier">pipeline_as_text</span><span class="plain">, </span><span class="identifier">pipeline_vars</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">SS</span><span class="plain">) </span><span class="functiontext">CodeGen::Pipeline::run</span><span class="plain">(</span><span class="identifier">domain_path</span><span class="plain">, </span><span class="identifier">SS</span><span class="plain">, </span><span class="identifier">NO_FS_AREAS</span><span class="plain">, </span><span class="identifier">pathname_of_i6t_files</span><span class="plain">, </span><span class="identifier">requirements_list</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="functiontext">Errors::fatal</span><span class="plain">(</span><span class="string">"pipeline could not be parsed"</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">unit_test_file</span><span class="plain">) {</span>
<span class="functiontext">UnitTests::run</span><span class="plain">(</span><span class="identifier">unit_test_file</span><span class="plain">);</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>

1
inform7/.gitignore vendored
View file

@ -39,5 +39,6 @@ Tests/Test Inter/_Inter_Binary/
Tests/Test Maps/_Maps_Actual/
Tests/Test Problems/_Results_Actual/
Internal/I6T/basic_inform/*.interb
Internal/I6T/standard_rules/*.interb

View file

@ -0,0 +1 @@
attach: /main/basic

View file

@ -0,0 +1,13 @@
B/basict: Basic Inform Template.
@Purpose: Support for the language alone.
@-------------------------------------------------------------------------------
@p Contents.
@c
{-segment:Definitions.i6t}
{-segment:Flex.i6t}
{-segment:BlockValues.i6t}
{-segment:Text.i6t}

View file

@ -2136,11 +2136,7 @@ opcode, and so Glulx followed suit.
print "Interpreter version ", ix / $10000, ".", (ix & $FF00) / $100,
".", ix & $FF, " / ";
@gestalt 0 0 ix;
print "VM ", ix / $10000, ".", (ix & $FF00) / $100, ".", ix & $FF, " / ";
print "Library serial number ", (string) LibSerial, "^";
#Ifdef LanguageVersion;
print (string) LanguageVersion, "^";
#Endif; ! LanguageVersion
print "VM ", ix / $10000, ".", (ix & $FF00) / $100, ".", ix & $FF, "^";
ShowExtensionVersions();
say__p = 1;
];

View file

@ -16,22 +16,9 @@ ICL mode.
@p Identification.
Both of the compiler and template layer, and of the story file to be produced.
The "library" identifying texts are now a little anachronistic, since the
template layer is not strictly speaking an I6 library in the same way as
the original: but it is surely the spiritual successor to 6/11N, so we
may as well mark it 6/12N.
@c
! This file was compiled by Inform 7: the build number and version of the
! I6 template layer used are as follows.
Constant LibSerial = "080126";
Constant LibRelease = "6/12N";
Constant LIBRARY_VERSION = 612;
@p Constants.
@c
{-segment:Definitions.i6t}
@p Global Variables.
These are not the only global variables defined in the template layer:
@ -574,9 +561,6 @@ handles the heap, and there is then one further section to support each of
the kinds of value in question.
@c
{-segment:Flex.i6t}
{-segment:BlockValues.i6t}
{-segment:Text.i6t}
{-segment:RegExp.i6t}
{-segment:StoredAction.i6t}
{-segment:Lists.i6t}

View file

@ -397,7 +397,7 @@ compile a |Story_Author|.
VM_Describe_Release();
print " / Inform 7 build ", (PrintI6Text) NI_BUILD_COUNT, " ";
print "(I6/v"; inversion;
print " lib ", (PrintI6Text) LibRelease, ") ";
print ") ";
#Ifdef STRICT_MODE;
print "S";
#Endif; ! STRICT_MODE

View file

@ -709,7 +709,7 @@ opcode, and so Glulx followed suit.
#Ifnot;
print (char) HDR_TERPVERSION->0;
#Endif;
print ") / ";
print ")^";
} else {
print "Interpreter ", HDR_TERPNUMBER->0, " Version ";
#Iftrue (#version_number == 6);
@ -717,15 +717,9 @@ opcode, and so Glulx followed suit.
#Ifnot;
print (char) HDR_TERPVERSION->0;
#Endif;
print " / ";
print "^";
}
print "Library serial number ", (string) LibSerial, "^";
#Ifdef LanguageVersion;
print (string) LanguageVersion, "^";
#Endif; ! LanguageVersion
#ifdef ShowExtensionVersions;
ShowExtensionVersions();
#endif;
say__p = 1;
];

View file

@ -432,6 +432,11 @@ with "Output.i6t".
Problems::Fatal::issue("The Inter pipeline description contained errors");
CodeGen::Pipeline::set_repository(SS, Emit::tree());
linked_list *requirements_list = NEW_LINKED_LIST(inter_library);
inter_library *bi =
CodeGen::Libraries::find(I"basic_inform", NO_FS_AREAS, pathname_of_i6t_files);
if (bi == NULL)
Problems::Fatal::issue("The Basic Inform inter library cannot be found");
ADD_TO_LINKED_LIST(bi, inter_library, requirements_list);
inter_library *stdr =
CodeGen::Libraries::find(I"standard_rules", NO_FS_AREAS, pathname_of_i6t_files);
if (stdr == NULL)

View file

@ -29,4 +29,5 @@ Tests/Test Inter/_Inter_Binary/
Tests/Test Maps/_Maps_Actual/
Tests/Test Problems/_Results_Actual/
Internal/I6T/basic_inform/*.interb
Internal/I6T/standard_rules/*.interb

View file

@ -38,7 +38,7 @@ int main(int argc, char **argv) {
path_to_inter = Pathnames::installation_path("INTER_PATH", I"inter");
path_to_pipelines = Pathnames::subfolder(path_to_inter, I"Pipelines");
requirements_list = NEW_LINKED_LIST(text_stream);
requirements_list = NEW_LINKED_LIST(inter_library);
CommandLine::declare_heading(
L"[[Purpose]]\n\n"
@ -70,6 +70,8 @@ int main(int argc, char **argv) {
CommandLine::read(argc, argv, NULL, &Main::respond, &Main::add_file);
if (template_action == ASSIMILATE_CLSW) {
inter_library *lib = CodeGen::Libraries::new(template_path);
text_stream *attach = CodeGen::Libraries::URL(lib);
text_stream *name = CodeGen::Architecture::leafname();
if (Str::len(name) == 0) Errors::fatal("no -architecture given");
pipeline_as_file = Filenames::in_folder(path_to_pipelines, I"assimilate.interpipeline");
@ -87,6 +89,11 @@ int main(int argc, char **argv) {
Str::copy(Dictionaries::create_text(pipeline_vars, I"*outt"), fullname);
DISCARD_TEXT(leafname);
DISCARD_TEXT(fullname);
match_results mr = Regexp::create_mr();
if (Regexp::match(&mr, attach, L"/main/(%c+)")) {
Str::copy(Dictionaries::create_text(pipeline_vars, I"*attach"), mr.exp[0]);
}
Regexp::dispose_of(&mr);
}
Main::act();
@ -156,6 +163,7 @@ void Main::act(void) {
if (pipeline_as_file) SS = CodeGen::Pipeline::parse_from_file(pipeline_as_file, pipeline_vars);
else SS = CodeGen::Pipeline::parse(pipeline_as_text, pipeline_vars);
if (SS) CodeGen::Pipeline::run(domain_path, SS, NO_FS_AREAS, pathname_of_i6t_files, requirements_list);
else Errors::fatal("pipeline could not be parsed");
} else if (unit_test_file) {
UnitTests::run(unit_test_file);
} else {

View file

@ -1,4 +1,4 @@
prepare
prepare <- *attach
merge-template <- Main.i6t
parse-linked-matter
resolve-conditional-compilation

View file

@ -1,2 +1,2 @@
prepare
prepare <- template
generate text -> *out

View file

@ -1,7 +0,0 @@
prepare
merge-template <- Main.i6t
parse-linked-matter
resolve-conditional-compilation
assimilate
resolve-external-symbols
generate text -> *out

View file

@ -2,5 +2,5 @@ Constant Grammar__Version 2;
Global debug_flag;
Global reason_code = NULL;
Constant life = NULL;
Constant Peach = Banana;
Constant Banana = 2;
Constant Peach = Banana;

File diff suppressed because it is too large Load diff

View file

@ -7,3 +7,4 @@ inter: inter/Tests/PipelineErrors/Dismal.interpipeline, line 4: this stage shoul
inter: inter/Tests/PipelineErrors/Dismal.interpipeline, line 5: this stage should not take a left arrow and a source
inter: inter/Tests/PipelineErrors/Dismal.interpipeline, line 6: no such pipeline variable as '*this'
inter: fatal error: pipeline could not be parsed

View file

@ -15,6 +15,7 @@ itself during compilation.
typedef struct building_site {
struct inter_package *main_package;
struct inter_package *connectors_package;
struct inter_package *assimilation_package;
struct inter_symbol *opcodes_set[MAX_BIPS];
struct inter_bookmark pragmas_bookmark;
struct inter_bookmark package_types_bookmark;
@ -57,6 +58,7 @@ void Site::clear(inter_tree *I) {
building_site *B = &(I->site);
B->main_package = NULL;
B->connectors_package = NULL;
B->assimilation_package = NULL;
for (int i=0; i<MAX_BIPS; i++) B->opcodes_set[i] = NULL;
B->pragmas_bookmark = Inter::Bookmarks::at_start_of_this_repository(I);
B->package_types_bookmark = Inter::Bookmarks::at_start_of_this_repository(I);
@ -165,6 +167,30 @@ void Site::set_connectors_package(inter_tree *I, inter_package *M) {
I->site.connectors_package = M;
}
inter_package *Site::assimilation_package(inter_tree *I) {
if (I == NULL) internal_error("no tree");
return I->site.assimilation_package;
}
inter_package *Site::ensure_assimilation_package(inter_tree *I, inter_symbol *plain_ptype_symbol) {
if (I == NULL) internal_error("no tree");
if (I->site.assimilation_package == NULL) {
inter_package *main_package = Site::main_package(I);
inter_package *t_p = Inter::Packages::by_name(main_package, I"template");
if (t_p == NULL) {
inter_bookmark in_main = Inter::Bookmarks::at_end_of_this_package(main_package);
t_p = CodeGen::Assimilate::new_package_named(&in_main, I"template", plain_ptype_symbol);
}
I->site.assimilation_package = t_p;
}
return I->site.assimilation_package;
}
void Site::set_assimilation_package(inter_tree *I, inter_package *M) {
if (I == NULL) internal_error("no tree");
I->site.assimilation_package = M;
}
dictionary *Site::modules_dictionary(inter_tree *I) {
if (I->site.modules_indexed_by_name == NULL) {
I->site.modules_indexed_by_name = Dictionaries::new(512, FALSE);

View file

@ -38,7 +38,7 @@ text_stream *CodeGen::Architecture::leafname(void) {
=
void CodeGen::Architecture::create_pipeline_stage(void) {
CodeGen::Stage::new(I"prepare", CodeGen::Architecture::run_prepare_stage, NO_STAGE_ARG, FALSE);
CodeGen::Stage::new(I"prepare", CodeGen::Architecture::run_prepare_stage, GENERAL_STAGE_ARG, TRUE);
}
int CodeGen::Architecture::run_prepare_stage(pipeline_step *step) {
@ -117,8 +117,11 @@ int CodeGen::Architecture::run_prepare_stage_inner(pipeline_step *step, int Z, i
LIST_ICON, 1, operands,
(inter_t) Inter::Bookmarks::baseline(&in_generic) + 1, NULL);
inter_package *template_p = NULL;
Inter::Package::new_package_named(&in_main, I"template", FALSE, module_name, 1, NULL, &template_p);
if (Str::ne(step->step_argument, I"none")) {
inter_package *template_p = NULL;
Inter::Package::new_package_named(&in_main, step->step_argument, FALSE, module_name, 1, NULL, &template_p);
Site::set_assimilation_package(I, template_p);
}
inter_bookmark *in_veneer = Site::veneer_booknark(I);
inter_package *veneer_p = Inter::Packages::veneer(I);

View file

@ -23,6 +23,11 @@ inter_library *CodeGen::Libraries::new(pathname *P) {
return lib;
}
text_stream *CodeGen::Libraries::URL(inter_library *lib) {
if (lib == NULL) return NULL;
return lib->attachment_point;
}
void CodeGen::Libraries::read_metadata(text_stream *text,
text_file_position *tfp, void *state) {
inter_library *lib = (inter_library *) state;
@ -67,6 +72,10 @@ int CodeGen::Libraries::run_link_stage(pipeline_step *step) {
else Inter::Textual::read(sidecar, arch_file);
inter_package *pack = Inter::Packages::by_url(sidecar, req->attachment_point);
if (pack == NULL) {
WRITE_TO(STDERR, "sought attachment material at: %S in %f\n", req->attachment_point, arch_file);
internal_error("unable to find attachment point package");
}
Inter::Transmigration::move(pack, Site::main_package(step->repository), FALSE);
}
return TRUE;

View file

@ -115,7 +115,7 @@ pipeline_step *CodeGen::Pipeline::read_step(text_stream *step, dictionary *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, tfp);
if (ST->step_argument == NULL) return NULL;
if (ST->package_argument == NULL) return NULL;
Str::copy(step, mr.exp[0]);
}
@ -356,8 +356,6 @@ inter_symbol *command_ptype_symbol = NULL;
inter_symbol *property_ptype_symbol = NULL;
inter_symbol *to_phrase_ptype_symbol = NULL;
inter_package *template_package = NULL;
void CodeGen::Pipeline::prepare_to_run(inter_tree *I) {
code_ptype_symbol = Inter::SymbolsTables::url_name_to_symbol(I, NULL, I"/_code");
@ -369,8 +367,6 @@ void CodeGen::Pipeline::prepare_to_run(inter_tree *I) {
property_ptype_symbol = Inter::SymbolsTables::url_name_to_symbol(I, NULL, I"/_property");
to_phrase_ptype_symbol = Inter::SymbolsTables::url_name_to_symbol(I, NULL, I"/_to_phrase");
template_package = Inter::Packages::by_url(I, I"/main/template");
unchecked_kind_symbol = Inter::Packages::search_resources_exhaustively(I, I"K_unchecked");
unchecked_function_symbol = Inter::Packages::search_resources_exhaustively(I, I"K_unchecked_function");
typeless_int_symbol = Inter::Packages::search_resources_exhaustively(I, I"K_typeless_int");

View file

@ -22,7 +22,9 @@ int CodeGen::Assimilate::run_pipeline_stage(pipeline_step *step) {
no_assimilated_actions = 0;
no_assimilated_commands = 0;
no_assimilated_arrays = 0;
Site::ensure_assimilation_package(I, plain_ptype_symbol);
CodeGen::Assimilate::ensure(I, &verb_directive_reverse_symbol, I"VERB_DIRECTIVE_REVERSE");
CodeGen::Assimilate::ensure(I, &verb_directive_slash_symbol, I"VERB_DIRECTIVE_SLASH");
CodeGen::Assimilate::ensure(I, &verb_directive_divider_symbol, I"VERB_DIRECTIVE_DIVIDER");
@ -60,6 +62,7 @@ void CodeGen::Assimilate::ensure(inter_tree *I, inter_symbol **S, text_stream *i
=
inter_bookmark CodeGen::Assimilate::template_submodule(inter_tree *I, text_stream *name, inter_tree_node *P) {
if (submodule_ptype_symbol) {
inter_package *template_package = Site::ensure_assimilation_package(I, plain_ptype_symbol);
inter_package *t_p = Inter::Packages::by_name(template_package, name);
if (t_p == NULL) {
inter_bookmark IBM = Inter::Bookmarks::after_this_node(I, P);
@ -801,6 +804,7 @@ void CodeGen::Assimilate::function_bodies(inter_tree *I) {
Produce::push_code_position(I, Produce::new_cip(I, &(req->position)), Inter::Bookmarks::snapshot(Packaging::at(I)));
value_holster VH = Holsters::new(INTER_VOID_VHMODE);
inter_symbols_table *scope1 = Inter::Packages::scope(req->block_package);
inter_package *template_package = Site::assimilation_package(I);
inter_symbols_table *scope2 = Inter::Packages::scope(template_package);
EmitInterSchemas::emit(I, &VH, sch, NULL, TRUE, FALSE, scope1, scope2, NULL, NULL);
Produce::pop_code_position(I);

View file

@ -26,12 +26,7 @@ void CodeGen::MergeTemplate::link(inter_bookmark *IBM, text_stream *template_fil
else
Inter::Tree::traverse(I, CodeGen::MergeTemplate::visitor, NULL, NULL, 0);
inter_package *template_package = Inter::Packages::by_url(I, I"/main/template");
if (template_package == NULL) {
inter_package *main_package = Site::main_package(I);
inter_bookmark in_main = Inter::Bookmarks::at_end_of_this_package(main_package);
template_package = CodeGen::Assimilate::new_package_named(&in_main, I"template", plain_ptype_symbol);
}
inter_package *template_package = Site::ensure_assimilation_package(I, plain_ptype_symbol);
inter_bookmark link_bookmark =
Inter::Bookmarks::at_end_of_this_package(template_package);

View file

@ -31,7 +31,6 @@ void CodeGen::Externals::visitor(inter_tree *I, inter_tree_node *P, void *state)
if (!Inter::Symbols::is_defined(D)) {
inter_symbol *socket = Inter::Connectors::find_socket(I, D->symbol_name);
if (socket) {
LOG("Finding socket %S\n", D->symbol_name);
D = socket->equated_to;
S->equated_to = D;
}

View file

@ -210,7 +210,14 @@ void CodeGen::CL::constant(code_generation *gen, inter_tree_node *P) {
case CONSTANT_SUM_LIST:
case CONSTANT_PRODUCT_LIST:
case CONSTANT_DIFFERENCE_LIST:
case CONSTANT_QUOTIENT_LIST:
case CONSTANT_QUOTIENT_LIST: {
int depth = CodeGen::CL::constant_depth(con_name, FALSE);
if (depth > 1) {
LOG("Con %S has depth %d\n", con_name->symbol_name, depth);
CodeGen::CL::constant_depth(con_name, TRUE);
}
generated_segment *saved = CodeGen::select(gen, CodeGen::Targets::basic_constant_segment(gen, depth));
text_stream *OUT = CodeGen::current(gen);
CodeGen::Targets::begin_constant(gen, CodeGen::CL::name(con_name), TRUE);
for (int i=DATA_CONST_IFLD; i<P->W.extent; i=i+2) {
if (i>DATA_CONST_IFLD) {
@ -226,21 +233,70 @@ void CodeGen::CL::constant(code_generation *gen, inter_tree_node *P) {
if (bracket) WRITE(")");
}
CodeGen::Targets::end_constant(gen, CodeGen::CL::name(con_name));
CodeGen::deselect(gen, saved);
break;
}
case CONSTANT_DIRECT: {
inter_t val1 = P->W.data[DATA_CONST_IFLD];
inter_t val2 = P->W.data[DATA_CONST_IFLD + 1];
int depth = CodeGen::CL::constant_depth(con_name, FALSE);
if (depth > 1) LOG("Con %S has depth %d\n", con_name->symbol_name, depth);
generated_segment *saved = CodeGen::select(gen, CodeGen::Targets::basic_constant_segment(gen, depth));
text_stream *OUT = CodeGen::current(gen);
if (ifndef_me) WRITE("#ifndef %S;\n", CodeGen::CL::name(con_name));
CodeGen::Targets::begin_constant(gen, CodeGen::CL::name(con_name), TRUE);
inter_t val1 = P->W.data[DATA_CONST_IFLD];
inter_t val2 = P->W.data[DATA_CONST_IFLD + 1];
CodeGen::CL::literal(gen, con_name, Inter::Packages::scope_of(P), val1, val2, FALSE);
CodeGen::Targets::end_constant(gen, CodeGen::CL::name(con_name));
if (ifndef_me) WRITE(" #endif;\n");
CodeGen::deselect(gen, saved);
break;
}
default: internal_error("ungenerated constant format");
}
}
int CodeGen::CL::constant_depth(inter_symbol *con, int trace) {
LOG_INDENT;
int d = CodeGen::CL::constant_depth_inner(con, trace);
if (trace) LOG("%S has depth %d\n", con->symbol_name, d);
LOG_OUTDENT;
return d;
}
int CodeGen::CL::constant_depth_inner(inter_symbol *con, int trace) {
if (con == NULL) return 1;
inter_tree_node *D = Inter::Symbols::definition(con);
if (D->W.data[ID_IFLD] != CONSTANT_IST) return 1;
if (D->W.data[FORMAT_CONST_IFLD] == CONSTANT_DIRECT) {
inter_t val1 = D->W.data[DATA_CONST_IFLD];
inter_t val2 = D->W.data[DATA_CONST_IFLD + 1];
if (val1 == ALIAS_IVAL) {
inter_symbol *alias =
Inter::SymbolsTables::symbol_from_data_pair_and_table(
val1, val2, Inter::Packages::scope(D->package));
return CodeGen::CL::constant_depth(alias, trace) + 1;
}
return 1;
}
if ((D->W.data[FORMAT_CONST_IFLD] == CONSTANT_SUM_LIST) ||
(D->W.data[FORMAT_CONST_IFLD] == CONSTANT_PRODUCT_LIST) ||
(D->W.data[FORMAT_CONST_IFLD] == CONSTANT_DIFFERENCE_LIST) ||
(D->W.data[FORMAT_CONST_IFLD] == CONSTANT_QUOTIENT_LIST)) {
int total = 0;
for (int i=DATA_CONST_IFLD; i<D->W.extent; i=i+2) {
inter_t val1 = D->W.data[i];
inter_t val2 = D->W.data[i + 1];
if (val1 == ALIAS_IVAL) {
inter_symbol *alias =
Inter::SymbolsTables::symbol_from_data_pair_and_table(
val1, val2, Inter::Packages::scope(D->package));
total += CodeGen::CL::constant_depth(alias, trace);
} else total++;
}
return 1 + total;
}
return 1;
}
typedef struct text_literal_holder {
struct text_stream *definition_code;
struct text_stream *literal_content;

View file

@ -235,7 +235,7 @@ we assume that's the name of an attribute already declared (for example
in the I6 template, or some extension), and we therefore do nothing.
@<Declare as an I6 attribute@> =
generated_segment *saved = CodeGen::select(gen, CodeGen::Targets::constant_segment(gen));
generated_segment *saved = CodeGen::select(gen, CodeGen::Targets::basic_constant_segment(gen, 1));
if (Inter::Symbols::read_annotation(prop_name, ASSIMILATED_IANN) >= 0) {
text_stream *A = Inter::Symbols::get_translate(prop_name);
if (A == NULL) A = CodeGen::CL::name(prop_name);

View file

@ -12,6 +12,7 @@ void CodeGen::I6::create_target(void) {
METHOD_ADD(cgt, GENERAL_SEGMENT_MTID, CodeGen::I6::general_segment);
METHOD_ADD(cgt, TL_SEGMENT_MTID, CodeGen::I6::tl_segment);
METHOD_ADD(cgt, DEFAULT_SEGMENT_MTID, CodeGen::I6::default_segment);
METHOD_ADD(cgt, BASIC_CONSTANT_SEGMENT_MTID, CodeGen::I6::basic_constant_segment);
METHOD_ADD(cgt, CONSTANT_SEGMENT_MTID, CodeGen::I6::constant_segment);
METHOD_ADD(cgt, PROPERTY_SEGMENT_MTID, CodeGen::I6::property_segment);
METHOD_ADD(cgt, COMPILE_PRIMITIVE_MTID, CodeGen::I6::compile_primitive);
@ -47,6 +48,16 @@ now a bitmap of flags for tracing actions, calls to object routines, and so on.
@e compiler_versioning_matter_I7CGS
@e attributes_at_eof_I7CGS
@e very_early_matter_I7CGS
@e constants_1_I7CGS
@e constants_2_I7CGS
@e constants_3_I7CGS
@e constants_4_I7CGS
@e constants_5_I7CGS
@e constants_6_I7CGS
@e constants_7_I7CGS
@e constants_8_I7CGS
@e constants_9_I7CGS
@e constants_10_I7CGS
@e early_matter_I7CGS
@e text_literals_code_I7CGS
@e summations_at_eof_I7CGS
@ -64,6 +75,16 @@ int CodeGen::I6::begin_generation(code_generation_target *cgt, code_generation *
gen->segments[compiler_versioning_matter_I7CGS] = CodeGen::new_segment();
gen->segments[attributes_at_eof_I7CGS] = CodeGen::new_segment();
gen->segments[very_early_matter_I7CGS] = CodeGen::new_segment();
gen->segments[constants_1_I7CGS] = CodeGen::new_segment();
gen->segments[constants_2_I7CGS] = CodeGen::new_segment();
gen->segments[constants_3_I7CGS] = CodeGen::new_segment();
gen->segments[constants_4_I7CGS] = CodeGen::new_segment();
gen->segments[constants_5_I7CGS] = CodeGen::new_segment();
gen->segments[constants_6_I7CGS] = CodeGen::new_segment();
gen->segments[constants_7_I7CGS] = CodeGen::new_segment();
gen->segments[constants_8_I7CGS] = CodeGen::new_segment();
gen->segments[constants_9_I7CGS] = CodeGen::new_segment();
gen->segments[constants_10_I7CGS] = CodeGen::new_segment();
gen->segments[early_matter_I7CGS] = CodeGen::new_segment();
gen->segments[text_literals_code_I7CGS] = CodeGen::new_segment();
gen->segments[summations_at_eof_I7CGS] = CodeGen::new_segment();
@ -112,9 +133,13 @@ int CodeGen::I6::general_segment(code_generation_target *cgt, code_generation *g
int CodeGen::I6::default_segment(code_generation_target *cgt) {
return main_matter_I7CGS;
}
int CodeGen::I6::constant_segment(code_generation_target *cgt) {
int CodeGen::I6::constant_segment(code_generation_target *cgt, code_generation *gen) {
return early_matter_I7CGS;
}
int CodeGen::I6::basic_constant_segment(code_generation_target *cgt, code_generation *gen, int depth) {
if (depth >= 10) depth = 10;
return constants_1_I7CGS + depth - 1;
}
int CodeGen::I6::property_segment(code_generation_target *cgt) {
return attributes_at_eof_I7CGS;
}

View file

@ -50,6 +50,7 @@ int CodeGen::Targets::begin_generation(code_generation *gen) {
@e GENERAL_SEGMENT_MTID
@e DEFAULT_SEGMENT_MTID
@e BASIC_CONSTANT_SEGMENT_MTID
@e CONSTANT_SEGMENT_MTID
@e PROPERTY_SEGMENT_MTID
@e TL_SEGMENT_MTID
@ -57,6 +58,7 @@ int CodeGen::Targets::begin_generation(code_generation *gen) {
=
IMETHOD_TYPE(GENERAL_SEGMENT_MTID, code_generation_target *cgt, code_generation *gen, inter_tree_node *P)
IMETHOD_TYPE(DEFAULT_SEGMENT_MTID, code_generation_target *cgt, code_generation *gen)
IMETHOD_TYPE(BASIC_CONSTANT_SEGMENT_MTID, code_generation_target *cgt, code_generation *gen, int depth)
IMETHOD_TYPE(CONSTANT_SEGMENT_MTID, code_generation_target *cgt, code_generation *gen)
IMETHOD_TYPE(PROPERTY_SEGMENT_MTID, code_generation_target *cgt, code_generation *gen)
IMETHOD_TYPE(TL_SEGMENT_MTID, code_generation_target *cgt, code_generation *gen)
@ -79,6 +81,12 @@ int CodeGen::Targets::constant_segment(code_generation *gen) {
return rv;
}
int CodeGen::Targets::basic_constant_segment(code_generation *gen, int depth) {
int rv = 0;
IMETHOD_CALL(rv, gen->target, BASIC_CONSTANT_SEGMENT_MTID, gen, depth);
return rv;
}
int CodeGen::Targets::property_segment(code_generation *gen) {
int rv = 0;
IMETHOD_CALL(rv, gen->target, PROPERTY_SEGMENT_MTID, gen);

View file

@ -286,7 +286,9 @@ inter_package *Inter::Packages::by_url(inter_tree *I, text_stream *S) {
PUT_TO(C, c);
}
}
return Inter::Packages::by_name(at_P, C);
inter_package *pack = Inter::Packages::by_name(at_P, C);
DISCARD_TEXT(C);
return pack;
}
return Inter::Packages::by_name(I->root_package, S);
}

View file

@ -229,6 +229,8 @@ that's the end of the list and therefore the block. (There is no resource 0.)
if (BinaryFiles::read_int32(fh, &st) == FALSE) Inter::Binary::read_error(&eloc, ftell(fh), I"bytecode incomplete");
unsigned int sc;
if (BinaryFiles::read_int32(fh, &sc) == FALSE) Inter::Binary::read_error(&eloc, ftell(fh), I"bytecode incomplete");
unsigned int uniq;
if (BinaryFiles::read_int32(fh, &uniq) == FALSE) Inter::Binary::read_error(&eloc, ftell(fh), I"bytecode incomplete");
unsigned int L;
if (BinaryFiles::read_int32(fh, &L) == FALSE) Inter::Binary::read_error(&eloc, ftell(fh), I"bytecode incomplete");
@ -249,6 +251,7 @@ that's the end of the list and therefore the block. (There is no resource 0.)
inter_symbol *S = Inter::SymbolsTables::symbol_from_name_creating_at_ID(res->stored_symbols_table, name, X);
Inter::Symbols::set_type(S, (int) st);
Inter::Symbols::set_scope(S, (int) sc);
if (uniq == 1) Inter::Symbols::set_flag(S, MAKE_NAME_UNIQUE);
if (Str::len(trans) > 0) Inter::Symbols::set_translate(S, trans);
if (BinaryFiles::read_int32(fh, &L) == FALSE) Inter::Binary::read_error(&eloc, ftell(fh), I"bytecode incomplete");
@ -287,6 +290,10 @@ that's the end of the list and therefore the block. (There is no resource 0.)
BinaryFiles::write_int32(fh, symb->symbol_ID);
BinaryFiles::write_int32(fh, (unsigned int) Inter::Symbols::get_type(symb));
BinaryFiles::write_int32(fh, (unsigned int) Inter::Symbols::get_scope(symb));
if (Inter::Symbols::get_flag(symb, MAKE_NAME_UNIQUE))
BinaryFiles::write_int32(fh, 1);
else
BinaryFiles::write_int32(fh, 0);
BinaryFiles::write_int32(fh, (unsigned int) Str::len(symb->symbol_name));
LOOP_THROUGH_TEXT(P, symb->symbol_name)
BinaryFiles::write_int32(fh, (unsigned int) Str::get(P));

View file

@ -179,7 +179,27 @@ inform7/Internal/Languages/English/Syntax.preform: inform7/Tangled/Syntax.prefor
# (Of course those other four phony targets are yet to be defined.)
.PHONY: intertemplate
intertemplate: inform7/Internal/I6T/standard_rules/arch-16d.interb inform7/Internal/I6T/standard_rules/arch-16.interb inform7/Internal/I6T/standard_rules/arch-32d.interb inform7/Internal/I6T/standard_rules/arch-32.interb
intertemplate: \
inform7/Internal/I6T/basic_inform/arch-16d.interb \
inform7/Internal/I6T/basic_inform/arch-16.interb \
inform7/Internal/I6T/basic_inform/arch-32d.interb \
inform7/Internal/I6T/basic_inform/arch-32.interb \
inform7/Internal/I6T/standard_rules/arch-16d.interb \
inform7/Internal/I6T/standard_rules/arch-16.interb \
inform7/Internal/I6T/standard_rules/arch-32d.interb \
inform7/Internal/I6T/standard_rules/arch-32.interb
inform7/Internal/I6T/basic_inform/arch-16d.interb: inform7/Internal/I6T/basic_inform/source/*.i6t
$(INTERX) -architecture 16d -assimilate inform7/Internal/I6T/basic_inform
inform7/Internal/I6T/basic_inform/arch-16.interb: inform7/Internal/I6T/basic_inform/source/*.i6t
$(INTERX) -architecture 16 -assimilate inform7/Internal/I6T/basic_inform
inform7/Internal/I6T/basic_inform/arch-32d.interb: inform7/Internal/I6T/basic_inform/source/*.i6t
$(INTERX) -architecture 32d -assimilate inform7/Internal/I6T/basic_inform
inform7/Internal/I6T/basic_inform/arch-32.interb: inform7/Internal/I6T/basic_inform/source/*.i6t
$(INTERX) -architecture 32 -assimilate inform7/Internal/I6T/basic_inform
inform7/Internal/I6T/standard_rules/arch-16d.interb: inform7/Internal/I6T/standard_rules/source/*.i6t
$(INTERX) -architecture 16d -assimilate inform7/Internal/I6T/standard_rules
@ -577,6 +597,13 @@ define transfer-i6-template
cp -R -f inform7/Internal/I6T/standard_rules/source/*.i6t $(INTERNAL)/I6T/standard_rules/source
cp -R -f inform7/Internal/I6T/standard_rules/*.interb $(INTERNAL)/I6T/standard_rules
cp -R -f inform7/Internal/I6T/standard_rules/library_metadata.txt $(INTERNAL)/I6T/standard_rules
mkdir -p "$(INTERNAL)/I6T/basic_inform"
mkdir -p "$(INTERNAL)/I6T/basic_inform/source"
rm -f $(INTERNAL)/I6T/basic_inform/source/*.i6t
rm -f $(INTERNAL)/I6T/basic_inform/*.interb
cp -R -f inform7/Internal/I6T/basic_inform/source/*.i6t $(INTERNAL)/I6T/basic_inform/source
cp -R -f inform7/Internal/I6T/basic_inform/*.interb $(INTERNAL)/I6T/basic_inform
cp -R -f inform7/Internal/I6T/basic_inform/library_metadata.txt $(INTERNAL)/I6T/basic_inform
endef
$(INTERNAL)/Inter/default.interpipeline: inform7/Internal/Inter/*.interpipeline