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

Compiled simplest template routines to pure Inter

This commit is contained in:
Graham Nelson 2019-04-27 21:11:52 +01:00
parent 1f5c282b27
commit 9a41dfadbd
25 changed files with 333 additions and 179 deletions

View file

@ -57,6 +57,7 @@
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">DEFAULT_PLM</span><span class="plain">:</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">CONSTANT_PLM</span><span class="plain">:</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">FAKEACTION_PLM</span><span class="plain">:</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">OBJECT_PLM</span><span class="plain">:</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">VERB_PLM</span><span class="plain">:</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">unchecked_kind_symbol</span><span class="plain">) </span>&lt;<span class="cwebmacro">Assimilate definition</span> <span class="cwebmacronumber">1.1</span>&gt;<span class="plain">;</span>
<span class="reserved">break</span><span class="plain">;</span>
@ -143,11 +144,15 @@
<span class="identifier">identifier</span><span class="plain"> = </span><span class="identifier">Str::new</span><span class="plain">();</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">identifier</span><span class="plain">, </span><span class="string">"##%S"</span><span class="plain">, </span><span class="identifier">old</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">switch_on</span><span class="plain"> == </span><span class="identifier">OBJECT_PLM</span><span class="plain">) </span><span class="identifier">value</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">switch_on</span><span class="plain"> != </span><span class="identifier">DEFAULT_PLM</span><span class="plain">) {</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"Assum identifier is %S\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">identifier</span><span class="plain">);</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">con_name</span><span class="plain"> = </span><span class="functiontext">CodeGen::Assimilate::maybe_extern</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">identifier</span><span class="plain">, </span><span class="identifier">into_scope</span><span class="plain">);</span>
<span class="identifier">Inter::Symbols::annotate_i</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">con_name</span><span class="plain">, </span><span class="identifier">ASSIMILATED_IANN</span><span class="plain">, 1);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">switch_on</span><span class="plain"> == </span><span class="identifier">FAKEACTION_PLM</span><span class="plain">)</span>
<span class="identifier">Inter::Symbols::annotate_i</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">con_name</span><span class="plain">, </span><span class="identifier">FAKE_ACTION_IANN</span><span class="plain">, 1);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">switch_on</span><span class="plain"> == </span><span class="identifier">OBJECT_PLM</span><span class="plain">)</span>
<span class="identifier">Inter::Symbols::annotate_i</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">con_name</span><span class="plain">, </span><span class="identifier">OBJECT_IANN</span><span class="plain">, 1);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">con_name</span><span class="plain">-&gt;</span><span class="identifier">equated_to</span><span class="plain">) {</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">external_name</span><span class="plain"> = </span><span class="identifier">con_name</span><span class="plain">-&gt;</span><span class="identifier">equated_to</span><span class="plain">;</span>
@ -159,19 +164,13 @@
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">switch_on</span><span class="plain">) {</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">CONSTANT_PLM</span><span class="plain">:</span>
&lt;<span class="cwebmacro">Assimilate a value</span> <span class="cwebmacronumber">1.1.2</span>&gt;<span class="plain">;</span>
<span class="functiontext">CodeGen::Link::guard</span><span class="plain">(</span><span class="identifier">Inter::Constant::new_numerical</span><span class="plain">(&amp;</span><span class="identifier">ib</span><span class="plain">,</span>
<span class="identifier">Inter::SymbolsTables::id_from_symbol</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">outer</span><span class="plain">, </span><span class="identifier">con_name</span><span class="plain">),</span>
<span class="identifier">Inter::SymbolsTables::id_from_symbol</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">outer</span><span class="plain">, </span><span class="identifier">unchecked_kind_symbol</span><span class="plain">), </span><span class="identifier">v1</span><span class="plain">, </span><span class="identifier">v2</span><span class="plain">,</span>
<span class="identifier">baseline</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">));</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">FAKEACTION_PLM</span><span class="plain">:</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">OBJECT_PLM</span><span class="plain">:</span>
&lt;<span class="cwebmacro">Assimilate a value</span> <span class="cwebmacronumber">1.1.2</span>&gt;<span class="plain">;</span>
<span class="functiontext">CodeGen::Link::guard</span><span class="plain">(</span><span class="identifier">Inter::Constant::new_numerical</span><span class="plain">(&amp;</span><span class="identifier">ib</span><span class="plain">,</span>
<span class="identifier">Inter::SymbolsTables::id_from_symbol</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">outer</span><span class="plain">, </span><span class="identifier">con_name</span><span class="plain">),</span>
<span class="identifier">Inter::SymbolsTables::id_from_symbol</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">outer</span><span class="plain">, </span><span class="identifier">unchecked_kind_symbol</span><span class="plain">), </span><span class="identifier">v1</span><span class="plain">, </span><span class="identifier">v2</span><span class="plain">,</span>
<span class="identifier">baseline</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">));</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"So FAPLM made $3\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">con_name</span><span class="plain">);</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">GLOBAL_PLM</span><span class="plain">:</span>
&lt;<span class="cwebmacro">Assimilate a value</span> <span class="cwebmacronumber">1.1.2</span>&gt;<span class="plain">;</span>
@ -339,7 +338,7 @@
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP1_1">&#167;1.1</a> (four times).</p>
<p class="endnote">This code is used in <a href="#SP1_1">&#167;1.1</a> (three times).</p>
<p class="inwebparagraph"><a id="SP1_2"></a><b>&#167;1.2. </b><code class="display">
&lt;<span class="cwebmacrodefn">Assimilate routine</span> <span class="cwebmacronumber">1.2</span>&gt; =
@ -397,6 +396,7 @@
<span class="identifier">var_count</span><span class="plain">++;</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">loc_name</span><span class="plain"> = </span><span class="identifier">Inter::SymbolsTables::create_with_unique_name</span><span class="plain">(</span><span class="identifier">Inter::Package::local_symbols</span><span class="plain">(</span><span class="identifier">block_name</span><span class="plain">), </span><span class="identifier">value</span><span class="plain">);</span>
<span class="identifier">Inter::Symbols::local</span><span class="plain">(</span><span class="identifier">loc_name</span><span class="plain">);</span>
<span class="functiontext">CodeGen::Link::guard</span><span class="plain">(</span><span class="identifier">Inter::Local::new</span><span class="plain">(&amp;</span><span class="identifier">ib</span><span class="plain">, </span><span class="identifier">block_name</span><span class="plain">, </span><span class="identifier">loc_name</span><span class="plain">, </span><span class="identifier">unchecked_kind_symbol</span><span class="plain">, 0, </span><span class="identifier">baseline</span><span class="plain">+1, </span><span class="identifier">NULL</span><span class="plain">));</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">value</span><span class="plain">);</span>
@ -415,7 +415,7 @@
<span class="reserved">while</span><span class="plain"> ((</span><span class="identifier">L</span><span class="plain">&gt;0) &amp;&amp; (</span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">body</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">) != </span><span class="character">']'</span><span class="plain">)) </span><span class="identifier">L</span><span class="plain">--;</span>
<span class="reserved">while</span><span class="plain"> ((</span><span class="identifier">L</span><span class="plain">&gt;0) &amp;&amp; (</span><span class="identifier">Characters::is_whitespace</span><span class="plain">(</span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">body</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">-1)))) </span><span class="identifier">L</span><span class="plain">--;</span>
<span class="identifier">Str::truncate</span><span class="plain">(</span><span class="identifier">body</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">);</span>
<span class="functiontext">CodeGen::Link::entire_splat</span><span class="plain">(&amp;</span><span class="identifier">ib</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">body</span><span class="plain">, </span><span class="identifier">baseline</span><span class="plain">+2, </span><span class="identifier">block_name</span><span class="plain">);</span>
<span class="functiontext">CodeGen::Assimilate::routine_body</span><span class="plain">(&amp;</span><span class="identifier">ib</span><span class="plain">, </span><span class="identifier">block_name</span><span class="plain">, </span><span class="identifier">baseline</span><span class="plain">+2, </span><span class="identifier">body</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="functiontext">CodeGen::Link::guard</span><span class="plain">(</span><span class="identifier">Inter::Label::new</span><span class="plain">(&amp;</span><span class="identifier">ib</span><span class="plain">, </span><span class="identifier">block_name</span><span class="plain">, </span><span class="identifier">end_name</span><span class="plain">, </span><span class="identifier">baseline</span><span class="plain">+1, </span><span class="identifier">NULL</span><span class="plain">));</span>
@ -726,6 +726,36 @@
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">NN</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">mcc_name</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">rb_splat_count</span><span class="plain"> = 1;</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::Assimilate::routine_body</span><span class="plain">(</span><span class="identifier">inter_reading_state</span><span class="plain"> *</span><span class="identifier">IRS</span><span class="plain">, </span><span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">block_name</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">offset</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">body</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::is_whitespace</span><span class="plain">(</span><span class="identifier">body</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">body</span><span class="plain">) &lt; 20) {</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"=======\</span><span class="plain">n</span><span class="string">\</span><span class="plain">n</span><span class="string">Candidate (%S): '%S'\</span><span class="plain">n</span><span class="string">\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">block_name</span><span class="plain">-&gt;</span><span class="identifier">symbol_name</span><span class="plain">, </span><span class="identifier">body</span><span class="plain">);</span>
<span class="reserved">inter_schema</span><span class="plain"> *</span><span class="identifier">sch</span><span class="plain"> = </span><span class="functiontext">InterSchemas::from_text</span><span class="plain">(</span><span class="identifier">body</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">, 0, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">sch</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">"NULL SCH\</span><span class="plain">n</span><span class="string">"</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">sch</span><span class="plain">-</span><span class="element">&gt;node_tree</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"Lint fail: Non-empty text but empty scheme\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
<span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"inter schema empty"</span><span class="plain">);</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="functiontext">InterSchemas::log</span><span class="plain">(</span><span class="identifier">sch</span><span class="plain">);</span>
<span class="plain">#</span><span class="identifier">ifdef</span><span class="plain"> </span><span class="identifier">CORE_MODULE</span>
<span class="identifier">current_inter_routine</span><span class="plain"> = </span><span class="identifier">block_name</span><span class="plain">;</span>
<span class="identifier">Packaging::set_state</span><span class="plain">(</span><span class="identifier">IRS</span><span class="plain">, </span><span class="identifier">Packaging::enclosure</span><span class="plain">());</span>
<span class="identifier">Emit::push_code_position</span><span class="plain">(</span><span class="identifier">Emit::new_cip</span><span class="plain">(</span><span class="identifier">IRS</span><span class="plain">));</span>
<span class="identifier">value_holster</span><span class="plain"> </span><span class="identifier">VH</span><span class="plain"> = </span><span class="identifier">Holsters::new</span><span class="plain">(</span><span class="identifier">INTER_VOID_VHMODE</span><span class="plain">);</span>
<span class="identifier">inter_symbols_table</span><span class="plain"> *</span><span class="identifier">scope1</span><span class="plain"> = </span><span class="identifier">Inter::Package::local_symbols</span><span class="plain">(</span><span class="identifier">block_name</span><span class="plain">);</span>
<span class="identifier">inter_symbols_table</span><span class="plain"> *</span><span class="identifier">scope2</span><span class="plain"> = </span><span class="identifier">Inter::Packages::scope</span><span class="plain">(</span><span class="identifier">Packaging::incarnate</span><span class="plain">(</span><span class="identifier">Hierarchy::template</span><span class="plain">()));</span>
<span class="identifier">EmitInterSchemas::emit</span><span class="plain">(&amp;</span><span class="identifier">VH</span><span class="plain">, </span><span class="identifier">sch</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">, </span><span class="identifier">scope1</span><span class="plain">, </span><span class="identifier">scope2</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="identifier">Emit::pop_code_position</span><span class="plain">();</span>
<span class="identifier">current_inter_routine</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain">;</span>
<span class="plain">#</span><span class="identifier">endif</span>
<span class="plain">}</span>
<span class="functiontext">CodeGen::Link::entire_splat</span><span class="plain">(</span><span class="identifier">IRS</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">body</span><span class="plain">, </span><span class="identifier">offset</span><span class="plain">, </span><span class="identifier">block_name</span><span class="plain">);</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"Splat %d\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">rb_splat_count</span><span class="plain">++);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
@ -744,6 +774,8 @@
<p class="endnote">The function CodeGen::Assimilate::computed_constant_symbol appears nowhere else.</p>
<p class="endnote">The function CodeGen::Assimilate::routine_body is used in <a href="#SP1_2">&#167;1.2</a>.</p>
<hr class="tocbar">
<ul class="toc"><li><a href="2-rcc.html">Back to 'Resolving Conditional Compilation'</a></li><li><a href="2-res.html">Continue with 'Resolve External Symbols'</a></li></ul><hr class="tocbar">
<!--End of weave-->

View file

@ -132,7 +132,7 @@
<p class="endnote">The function CodeGen::Link::guard is used in 2/alm (<a href="2-alm.html#SP1_1">&#167;1.1</a>, <a href="2-alm.html#SP1_2">&#167;1.2</a>, <a href="2-alm.html#SP3">&#167;3</a>), 3/ip (<a href="3-ip.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function CodeGen::Link::entire_splat is used in <a href="#SP2">&#167;2</a>, 2/alm (<a href="2-alm.html#SP1_2">&#167;1.2</a>).</p>
<p class="endnote">The function CodeGen::Link::entire_splat is used in <a href="#SP2">&#167;2</a>, 2/alm (<a href="2-alm.html#SP3">&#167;3</a>).</p>
<p class="inwebparagraph"><a id="SP2"></a><b>&#167;2. </b></p>

View file

@ -295,8 +295,8 @@ compilation process, and never survive into the final schema:
<pre class="definitions">
<span class="definitionkeyword">enum</span> <span class="constant">RAW_ISTT</span><span class="definitionkeyword"> from </span><span class="constant">1</span> <span class="comment">something unidentified as yet</span>
<span class="definitionkeyword">enum</span> <span class="constant">WHITE_SPACE_ISTT</span><span class="plain"> </span> <span class="comment">a stretch of white space</span>
<span class="definitionkeyword">enum</span> <span class="constant">RESERVED_ISTT</span><span class="plain"> </span> <span class="comment">am I6 reserved word such as <code class="display"><span class="extract">while</span></code></span>
<span class="definitionkeyword">enum</span> <span class="constant">OPERATOR_ISTT</span><span class="plain"> </span> <span class="comment">an I6 operator such as <code class="display"><span class="extract">--&gt;</span></code> or <code class="display"><span class="extract">+</span></code></span>
<span class="definitionkeyword">enum</span> <span class="constant">RESERVED_ISTT</span><span class="plain"> </span> <span class="comment">am I6 reserved word such as <code class="display"><span class="extract">while</span></code></span>
<span class="definitionkeyword">enum</span> <span class="constant">OPERATOR_ISTT</span><span class="plain"> </span> <span class="comment">an I6 operator such as <code class="display"><span class="extract">--&gt;</span></code> or <code class="display"><span class="extract">+</span></code></span>
<span class="definitionkeyword">enum</span> <span class="constant">DIVIDER_ISTT</span><span class="plain"> </span> <span class="comment">a semicolon used to divide I6 statements</span>
<span class="definitionkeyword">enum</span> <span class="constant">OPEN_ROUND_ISTT</span><span class="plain"> </span> <span class="comment">open round bracket</span>
<span class="definitionkeyword">enum</span> <span class="constant">CLOSE_ROUND_ISTT</span><span class="plain"> </span> <span class="comment">close round bracket</span>
@ -541,7 +541,8 @@ we go to some trouble here.
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">InterSchemas::log</span><span class="plain">(</span><span class="reserved">inter_schema</span><span class="plain"> *</span><span class="identifier">sch</span><span class="plain">) {</span>
<span class="reserved">if</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">LOG</span><span class="plain">(</span><span class="string">"&lt;null schema&gt;"</span><span class="plain">);</span>
<span class="reserved">if</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">LOG</span><span class="plain">(</span><span class="string">"&lt;null schema&gt;\</span><span class="plain">n</span><span class="string">"</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">sch</span><span class="plain">-</span><span class="element">&gt;node_tree</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">"&lt;schema without nodes&gt;\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="functiontext">InterSchemas::log_depth</span><span class="plain">(</span><span class="identifier">sch</span><span class="plain">-</span><span class="element">&gt;node_tree</span><span class="plain">, 0);</span>
<span class="plain">}</span>
@ -866,6 +867,7 @@ for instance, we could simply have defined:
&lt;<span class="cwebmacro">Begin the schema as a single expression node with a linked list of tokens</span> <span class="cwebmacronumber">20.2</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Perform transformations to grow the tree and reduce the token count</span> <span class="cwebmacronumber">20.4</span>&gt;<span class="plain">;</span>
<span class="functiontext">InterSchemas::lint</span><span class="plain">(</span><span class="identifier">sch</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">Log::aspect_switched_on</span><span class="plain">(</span><span class="constant">SCHEMA_COMPILATION_DA</span><span class="plain">)) ||</span>
@ -1521,6 +1523,7 @@ language opcodes such as <code class="display"><span class="extract">@pull</span
<pre class="displaydefn">
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">monograph</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">, </span><span class="identifier">digraph</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">, </span><span class="identifier">trigraph</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">Characters::isalnum</span><span class="plain">(</span><span class="identifier">c1</span><span class="plain">)) || (</span><span class="identifier">c1</span><span class="plain"> == </span><span class="character">'_'</span><span class="plain">)) </span><span class="identifier">monograph</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">c1</span><span class="plain"> == </span><span class="character">'#'</span><span class="plain">) &amp;&amp; (</span><span class="identifier">Characters::isalpha</span><span class="plain">(</span><span class="identifier">c2</span><span class="plain">))) </span><span class="identifier">monograph</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">c1</span><span class="plain"> == </span><span class="character">'@'</span><span class="plain">) &amp;&amp; (</span><span class="identifier">Characters::isalpha</span><span class="plain">(</span><span class="identifier">c2</span><span class="plain">))) </span><span class="identifier">monograph</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">c1</span><span class="plain"> == </span><span class="character">'+'</span><span class="plain">) &amp;&amp; (</span><span class="identifier">c2</span><span class="plain"> == </span><span class="character">'+'</span><span class="plain">)) </span><span class="identifier">digraph</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
@ -1617,6 +1620,15 @@ inclusive; we ignore an empty token.
<pre class="displaydefn">
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, 0) == </span><span class="character">'@'</span><span class="plain">) </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">OPCODE_ISTT</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, 0) == </span><span class="character">'#'</span><span class="plain">) &amp;&amp; (</span><span class="identifier">Characters::isalpha</span><span class="plain">(</span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, 1)))) {</span>
<span class="identifier">is</span><span class="plain"> = </span><span class="constant">IDENTIFIER_ISTT</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">T</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">c</span><span class="plain"> = </span><span class="identifier">Str::get</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">c</span><span class="plain"> != </span><span class="character">'_'</span><span class="plain">) &amp;&amp; (</span><span class="identifier">c</span><span class="plain"> != </span><span class="character">'#'</span><span class="plain">) &amp;&amp; (!</span><span class="identifier">Characters::isalnum</span><span class="plain">(</span><span class="identifier">c</span><span class="plain">)))</span>
<span class="identifier">is</span><span class="plain"> = </span><span class="constant">RAW_ISTT</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"Looks hashy! %S\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">T</span><span class="plain">);;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Characters::isalpha</span><span class="plain">(</span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, 0))) {</span>
<span class="identifier">is</span><span class="plain"> = </span><span class="constant">IDENTIFIER_ISTT</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">T</span><span class="plain">) {</span>
@ -2304,6 +2316,9 @@ these out at the start of each iteration.
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">pr</span><span class="plain">-</span><span class="element">&gt;material</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"string"</span><span class="plain">)) {</span>
<span class="identifier">subordinate_to</span><span class="plain"> = </span><span class="identifier">printstring_interp</span><span class="plain">;</span>
<span class="identifier">operand1</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">pr</span><span class="plain">-</span><span class="element">&gt;material</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"name"</span><span class="plain">)) {</span>
<span class="identifier">subordinate_to</span><span class="plain"> = </span><span class="identifier">printname_interp</span><span class="plain">;</span>
<span class="identifier">operand1</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">pr</span><span class="plain">-</span><span class="element">&gt;material</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"the"</span><span class="plain">)) {</span>
<span class="identifier">subordinate_to</span><span class="plain"> = </span><span class="identifier">printdef_interp</span><span class="plain">;</span>
<span class="identifier">operand1</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">;</span>
@ -2471,6 +2486,10 @@ these out at the start of each iteration.
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">l</span><span class="plain">-</span><span class="element">&gt;ist_type</span><span class="plain"> != </span><span class="constant">WHITE_SPACE_ISTT</span><span class="plain">) {</span>
<span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">new_isn</span><span class="plain"> = </span><span class="functiontext">InterSchemas::new_node</span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">-</span><span class="element">&gt;parent_schema</span><span class="plain">, </span><span class="constant">EXPRESSION_ISNT</span><span class="plain">);</span>
<span class="identifier">new_isn</span><span class="plain">-</span><span class="element">&gt;expression_tokens</span><span class="plain"> = </span><span class="identifier">l</span><span class="plain">; </span><span class="identifier">l</span><span class="plain">-</span><span class="element">&gt;next</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">; </span><span class="identifier">l</span><span class="plain">-</span><span class="element">&gt;owner</span><span class="plain"> = </span><span class="identifier">new_isn</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">l</span><span class="plain">-</span><span class="element">&gt;operation_primitive</span><span class="plain">) {</span>
<span class="identifier">l</span><span class="plain">-</span><span class="element">&gt;ist_type</span><span class="plain"> = </span><span class="constant">IDENTIFIER_ISTT</span><span class="plain">;</span>
<span class="identifier">l</span><span class="plain">-</span><span class="element">&gt;operation_primitive</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">isn</span><span class="plain">-</span><span class="element">&gt;child_node</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">isn</span><span class="plain">-</span><span class="element">&gt;child_node</span><span class="plain"> = </span><span class="identifier">new_isn</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">prev_node</span><span class="plain">) </span><span class="identifier">prev_node</span><span class="plain">-</span><span class="element">&gt;next_node</span><span class="plain"> = </span><span class="identifier">new_isn</span><span class="plain">;</span>
<span class="identifier">new_isn</span><span class="plain">-</span><span class="element">&gt;parent_node</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">;</span>
@ -2667,7 +2686,7 @@ these out at the start of each iteration.
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">isn</span><span class="plain">-</span><span class="element">&gt;isn_type</span><span class="plain"> == </span><span class="constant">EXPRESSION_ISNT</span><span class="plain">) &amp;&amp; (</span><span class="identifier">isn</span><span class="plain">-</span><span class="element">&gt;expression_tokens</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">prev</span><span class="plain">) </span><span class="identifier">prev</span><span class="plain">-</span><span class="element">&gt;next_node</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-</span><span class="element">&gt;next_node</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">par</span><span class="plain">) </span><span class="identifier">par</span><span class="plain">-</span><span class="element">&gt;child_node</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-</span><span class="element">&gt;next_node</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">isn</span><span class="plain">-</span><span class="element">&gt;parent_schema</span><span class="plain">-</span><span class="element">&gt;node_tree</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">isn</span><span class="plain">-</span><span class="element">&gt;parent_schema</span><span class="plain">-</span><span class="element">&gt;node_tree</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-</span><span class="element">&gt;next_node</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">InterSchemas::remove_empties</span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">, </span><span class="identifier">isn</span><span class="plain">-</span><span class="element">&gt;child_node</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

@ -85,6 +85,7 @@
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">CONSTANT_IST</span><span class="plain">: {</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">con_name</span><span class="plain"> =</span>
<span class="identifier">Inter::SymbolsTables::symbol_from_frame_data</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">DEFN_CONST_IFLD</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Inter::Symbols::read_annotation</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">, </span><span class="identifier">OBJECT_IANN</span><span class="plain">) == 1) </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Inter::Packages::container</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">) == </span><span class="identifier">Inter::Packages::main</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">)) {</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">STDERR</span><span class="plain">, </span><span class="string">"Bad constant: %S\</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">internal_error</span><span class="plain">(</span><span class="string">"constant defined in main"</span><span class="plain">);</span>
@ -119,7 +120,8 @@
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">INSTANCE_IST</span><span class="plain">:</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">TO</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">SPLAT_IST</span><span class="plain">:</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">P</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">PLM_SPLAT_IFLD</span><span class="plain">] != </span><span class="identifier">OBJECT_PLM</span><span class="plain">) </span><span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">TO</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">);</span>
<span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"top-level splat remaining"</span><span class="plain">);</span>
<span class="comment">if (P.data[PLM_SPLAT_IFLD] != OBJECT_PLM) CodeGen::frame(TO, I, P);</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">PROPERTYVALUE_IST</span><span class="plain">:</span>
&lt;<span class="cwebmacro">Property knowledge</span> <span class="cwebmacronumber">1.1</span>&gt;<span class="plain">;</span>
@ -194,8 +196,8 @@
<span class="plain">}</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%S"</span><span class="plain">, </span><span class="identifier">summations_at_eof</span><span class="plain">);</span>
<span class="comment">WRITE("%S", attributes_at_eof);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%S"</span><span class="plain">, </span><span class="identifier">arrays_at_eof</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%S"</span><span class="plain">, </span><span class="identifier">main_matter</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%S"</span><span class="plain">, </span><span class="identifier">routines_at_eof</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%S"</span><span class="plain">, </span><span class="identifier">code_at_eof</span><span class="plain">);</span>
@ -216,14 +218,10 @@
<pre class="displaydefn">
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">properties_written</span><span class="plain"> == </span><span class="identifier">FALSE</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">j</span><span class="plain">=0; </span><span class="identifier">j</span><span class="plain">&lt;</span><span class="identifier">no_repos</span><span class="plain">; </span><span class="identifier">j</span><span class="plain">++) {</span>
<span class="identifier">inter_repository</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain"> = </span><span class="identifier">repos</span><span class="plain">[</span><span class="identifier">j</span><span class="plain">];</span>
<span class="identifier">inter_frame</span><span class="plain"> </span><span class="identifier">P</span><span class="plain">;</span>
<span class="identifier">LOOP_THROUGH_FRAMES</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">P</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">ID_IFLD</span><span class="plain">] == </span><span class="identifier">SPLAT_IST</span><span class="plain">) &amp;&amp; (</span><span class="identifier">P</span><span class="plain">.</span><span class="identifier">data</span><span class="plain">[</span><span class="identifier">PLM_SPLAT_IFLD</span><span class="plain">] == </span><span class="identifier">OBJECT_PLM</span><span class="plain">))</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">TO</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">TO</span><span class="plain">, </span><span class="string">"Object Compass \</span><span class="plain">"</span><span class="string">compass\</span><span class="plain">"</span><span class="string"> has concealed;\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">TO</span><span class="plain">, </span><span class="string">"Object thedark \</span><span class="plain">"</span><span class="string">(darkness object)\</span><span class="plain">"</span><span class="string">;\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">TO</span><span class="plain">, </span><span class="string">"Object InformParser \</span><span class="plain">"</span><span class="string">(Inform Parser)\</span><span class="plain">"</span><span class="string"> has proper;\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">TO</span><span class="plain">, </span><span class="string">"Object InformLibrary \</span><span class="plain">"</span><span class="string">(Inform Library)\</span><span class="plain">"</span><span class="string"> has proper;\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
<span class="identifier">properties_written</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="functiontext">CodeGen::IP::knowledge</span><span class="plain">(</span><span class="identifier">TO</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">code_at_eof</span><span class="plain">, </span><span class="identifier">attributes_at_eof</span><span class="plain">);</span>
<span class="plain">}</span>
@ -297,7 +295,7 @@
<p class="endnote">The function CodeGen::repo_list is used in <a href="#SP1">&#167;1</a>, 2/erm (<a href="2-erm.html#SP1">&#167;1</a>).</p>
<p class="endnote">The function CodeGen::frame is used in <a href="#SP1">&#167;1</a>, <a href="#SP1_1">&#167;1.1</a>, <a href="#SP3">&#167;3</a>, <a href="#SP4">&#167;4</a>, <a href="#SP4_1">&#167;4.1</a>, <a href="#SP4_2">&#167;4.2</a>, <a href="#SP4_6">&#167;4.6</a>, <a href="#SP4_7">&#167;4.7</a>, <a href="#SP4_8">&#167;4.8</a>, <a href="#SP4_9">&#167;4.9</a>, <a href="#SP4_10">&#167;4.10</a>, <a href="#SP4_11">&#167;4.11</a>, <a href="#SP4_12">&#167;4.12</a>, <a href="#SP4_13">&#167;4.13</a>, <a href="#SP4_14">&#167;4.14</a>, <a href="#SP4_15">&#167;4.15</a>, <a href="#SP4_16">&#167;4.16</a>, <a href="#SP4_17">&#167;4.17</a>, <a href="#SP4_18">&#167;4.18</a>, <a href="#SP4_19">&#167;4.19</a>, <a href="#SP4_20">&#167;4.20</a>, <a href="#SP4_21">&#167;4.21</a>, <a href="#SP4_22">&#167;4.22</a>, <a href="#SP4_23">&#167;4.23</a>, <a href="#SP4_24">&#167;4.24</a>, <a href="#SP4_25">&#167;4.25</a>, <a href="#SP4_26">&#167;4.26</a>, <a href="#SP4_27">&#167;4.27</a>, <a href="#SP4_28">&#167;4.28</a>, <a href="#SP4_29">&#167;4.29</a>, <a href="#SP4_30">&#167;4.30</a>, <a href="#SP4_31">&#167;4.31</a>, <a href="#SP4_32">&#167;4.32</a>, <a href="#SP4_33">&#167;4.33</a>, <a href="#SP4_34">&#167;4.34</a>, <a href="#SP4_35">&#167;4.35</a>, <a href="#SP4_39">&#167;4.39</a>, <a href="#SP4_40">&#167;4.40</a>, <a href="#SP4_41">&#167;4.41</a>, <a href="#SP4_42">&#167;4.42</a>, <a href="#SP4_43">&#167;4.43</a>, <a href="#SP4_44">&#167;4.44</a>, <a href="#SP4_45">&#167;4.45</a>, <a href="#SP4_46">&#167;4.46</a>, <a href="#SP4_47">&#167;4.47</a>, <a href="#SP4_48">&#167;4.48</a>, <a href="#SP4_49">&#167;4.49</a>, <a href="#SP4_50">&#167;4.50</a>, <a href="#SP4_51">&#167;4.51</a>, <a href="#SP4_52">&#167;4.52</a>, <a href="#SP4_53">&#167;4.53</a>, <a href="#SP4_54">&#167;4.54</a>, <a href="#SP4_55">&#167;4.55</a>, <a href="#SP4_56">&#167;4.56</a>, <a href="#SP4_57">&#167;4.57</a>, <a href="#SP4_58">&#167;4.58</a>, <a href="#SP4_59">&#167;4.59</a>, <a href="#SP4_60">&#167;4.60</a>, <a href="#SP4_61">&#167;4.61</a>, <a href="#SP4_62">&#167;4.62</a>, <a href="#SP4_63">&#167;4.63</a>, <a href="#SP4_64">&#167;4.64</a>, <a href="#SP4_65">&#167;4.65</a>, <a href="#SP4_66">&#167;4.66</a>, <a href="#SP4_67">&#167;4.67</a>, <a href="#SP4_68">&#167;4.68</a>, <a href="#SP4_69">&#167;4.69</a>, <a href="#SP4_70">&#167;4.70</a>, <a href="#SP4_71">&#167;4.71</a>, <a href="#SP4_72">&#167;4.72</a>, <a href="#SP4_73">&#167;4.73</a>, <a href="#SP4_74">&#167;4.74</a>, <a href="#SP4_75">&#167;4.75</a>, <a href="#SP4_76">&#167;4.76</a>, <a href="#SP4_77">&#167;4.77</a>, <a href="#SP4_78">&#167;4.78</a>, <a href="#SP4_79">&#167;4.79</a>, <a href="#SP4_80">&#167;4.80</a>, <a href="#SP4_81">&#167;4.81</a>, <a href="#SP4_82">&#167;4.82</a>, <a href="#SP4_83">&#167;4.83</a>, <a href="#SP4_84">&#167;4.84</a>, <a href="#SP4_85">&#167;4.85</a>, <a href="#SP4_86">&#167;4.86</a>, <a href="#SP4_87">&#167;4.87</a>, <a href="#SP4_88">&#167;4.88</a>, <a href="#SP4_89">&#167;4.89</a>.</p>
<p class="endnote">The function CodeGen::frame is used in <a href="#SP1">&#167;1</a>, <a href="#SP3">&#167;3</a>, <a href="#SP4">&#167;4</a>, <a href="#SP4_1">&#167;4.1</a>, <a href="#SP4_2">&#167;4.2</a>, <a href="#SP4_6">&#167;4.6</a>, <a href="#SP4_7">&#167;4.7</a>, <a href="#SP4_8">&#167;4.8</a>, <a href="#SP4_9">&#167;4.9</a>, <a href="#SP4_10">&#167;4.10</a>, <a href="#SP4_11">&#167;4.11</a>, <a href="#SP4_12">&#167;4.12</a>, <a href="#SP4_13">&#167;4.13</a>, <a href="#SP4_14">&#167;4.14</a>, <a href="#SP4_15">&#167;4.15</a>, <a href="#SP4_16">&#167;4.16</a>, <a href="#SP4_17">&#167;4.17</a>, <a href="#SP4_18">&#167;4.18</a>, <a href="#SP4_19">&#167;4.19</a>, <a href="#SP4_20">&#167;4.20</a>, <a href="#SP4_21">&#167;4.21</a>, <a href="#SP4_22">&#167;4.22</a>, <a href="#SP4_23">&#167;4.23</a>, <a href="#SP4_24">&#167;4.24</a>, <a href="#SP4_25">&#167;4.25</a>, <a href="#SP4_26">&#167;4.26</a>, <a href="#SP4_27">&#167;4.27</a>, <a href="#SP4_28">&#167;4.28</a>, <a href="#SP4_29">&#167;4.29</a>, <a href="#SP4_30">&#167;4.30</a>, <a href="#SP4_31">&#167;4.31</a>, <a href="#SP4_32">&#167;4.32</a>, <a href="#SP4_33">&#167;4.33</a>, <a href="#SP4_34">&#167;4.34</a>, <a href="#SP4_35">&#167;4.35</a>, <a href="#SP4_39">&#167;4.39</a>, <a href="#SP4_40">&#167;4.40</a>, <a href="#SP4_41">&#167;4.41</a>, <a href="#SP4_42">&#167;4.42</a>, <a href="#SP4_43">&#167;4.43</a>, <a href="#SP4_44">&#167;4.44</a>, <a href="#SP4_45">&#167;4.45</a>, <a href="#SP4_46">&#167;4.46</a>, <a href="#SP4_47">&#167;4.47</a>, <a href="#SP4_48">&#167;4.48</a>, <a href="#SP4_49">&#167;4.49</a>, <a href="#SP4_50">&#167;4.50</a>, <a href="#SP4_51">&#167;4.51</a>, <a href="#SP4_52">&#167;4.52</a>, <a href="#SP4_53">&#167;4.53</a>, <a href="#SP4_54">&#167;4.54</a>, <a href="#SP4_55">&#167;4.55</a>, <a href="#SP4_56">&#167;4.56</a>, <a href="#SP4_57">&#167;4.57</a>, <a href="#SP4_58">&#167;4.58</a>, <a href="#SP4_59">&#167;4.59</a>, <a href="#SP4_60">&#167;4.60</a>, <a href="#SP4_61">&#167;4.61</a>, <a href="#SP4_62">&#167;4.62</a>, <a href="#SP4_63">&#167;4.63</a>, <a href="#SP4_64">&#167;4.64</a>, <a href="#SP4_65">&#167;4.65</a>, <a href="#SP4_66">&#167;4.66</a>, <a href="#SP4_67">&#167;4.67</a>, <a href="#SP4_68">&#167;4.68</a>, <a href="#SP4_69">&#167;4.69</a>, <a href="#SP4_70">&#167;4.70</a>, <a href="#SP4_71">&#167;4.71</a>, <a href="#SP4_72">&#167;4.72</a>, <a href="#SP4_73">&#167;4.73</a>, <a href="#SP4_74">&#167;4.74</a>, <a href="#SP4_75">&#167;4.75</a>, <a href="#SP4_76">&#167;4.76</a>, <a href="#SP4_77">&#167;4.77</a>, <a href="#SP4_78">&#167;4.78</a>, <a href="#SP4_79">&#167;4.79</a>, <a href="#SP4_80">&#167;4.80</a>, <a href="#SP4_81">&#167;4.81</a>, <a href="#SP4_82">&#167;4.82</a>, <a href="#SP4_83">&#167;4.83</a>, <a href="#SP4_84">&#167;4.84</a>, <a href="#SP4_85">&#167;4.85</a>, <a href="#SP4_86">&#167;4.86</a>, <a href="#SP4_87">&#167;4.87</a>, <a href="#SP4_88">&#167;4.88</a>, <a href="#SP4_89">&#167;4.89</a>.</p>
<p class="inwebparagraph"><a id="SP3"></a><b>&#167;3. </b>There's a contrivance here to get around an awkward point of I6 syntax:
an array written in the form
@ -326,20 +324,11 @@ is 20. We instead compile this as
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">con_name</span><span class="plain"> = </span><span class="identifier">Inter::SymbolsTables::symbol_from_frame_data</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">DEFN_CONST_IFLD</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Inter::Symbols::read_annotation</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">, </span><span class="identifier">INLINE_ARRAY_IANN</span><span class="plain">) == 1) </span><span class="reserved">return</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Inter::Symbols::read_annotation</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">,</span><span class="identifier">ACTION_IANN</span><span class="plain">) == 1) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Inter::Symbols::read_annotation</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">, </span><span class="identifier">FAKE_ACTION_IANN</span><span class="plain">) == 1) {</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"Fake_action %S;\</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="plain">}</span>
<span class="reserved">return</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Inter::Symbols::read_annotation</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">, </span><span class="identifier">ACTION_IANN</span><span class="plain">) == 1) </span><span class="reserved">return</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">-&gt;</span><span class="identifier">symbol_name</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"nothing"</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">Str::eq</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">I</span><span class="string">"##TheSame"</span><span class="plain">)) ||</span>
<span class="plain">(</span><span class="identifier">Str::eq</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">I</span><span class="string">"##PluralFound"</span><span class="plain">)) ||</span>
<span class="plain">(</span><span class="identifier">Str::eq</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">I</span><span class="string">"##Miscellany"</span><span class="plain">)) ||</span>
<span class="plain">(</span><span class="identifier">Str::eq</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">I</span><span class="string">"##ListMiscellany"</span><span class="plain">))) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Inter::Symbols::read_annotation</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">, </span><span class="identifier">FAKE_ACTION_IANN</span><span class="plain">) == 1) {</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">fa</span><span class="plain"> = </span><span class="identifier">Str::duplicate</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">Str::delete_first_character</span><span class="plain">(</span><span class="identifier">fa</span><span class="plain">);</span>
<span class="identifier">Str::delete_first_character</span><span class="plain">(</span><span class="identifier">fa</span><span class="plain">);</span>
@ -350,8 +339,23 @@ is 20. We instead compile this as
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</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">I</span><span class="string">"parent"</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</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">I</span><span class="string">"child"</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</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">I</span><span class="string">"sibling"</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</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">I</span><span class="string">"thedark"</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</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">I</span><span class="string">"InformLibrary"</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</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">I</span><span class="string">"thedark"</span><span class="plain">)) {</span>
<span class="comment">WRITE("Object thedark \"(darkness object)\";\n");</span>
<span class="reserved">return</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">-&gt;</span><span class="identifier">symbol_name</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"InformLibrary"</span><span class="plain">)) {</span>
<span class="comment">WRITE("Object InformLibrary \"(Inform Library)\" has proper;\n");</span>
<span class="reserved">return</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">-&gt;</span><span class="identifier">symbol_name</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"InformParser"</span><span class="plain">)) {</span>
<span class="comment">WRITE("Object InformParser \"(Inform Parser)\" has proper;\n");</span>
<span class="reserved">return</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">-&gt;</span><span class="identifier">symbol_name</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Compass"</span><span class="plain">)) {</span>
<span class="comment">WRITE("Object Compass \"compass\" has concealed;\n");</span>
<span class="reserved">return</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">-&gt;</span><span class="identifier">symbol_name</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"ResponseTexts"</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</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">I</span><span class="string">"FLOAT_NAN"</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain">;</span>

View file

@ -311,7 +311,7 @@ either specify two parameters, both of them terms...
<span class="reserved">value_holster</span><span class="plain"> </span><span class="identifier">VH</span><span class="plain"> = </span><span class="functiontext">Holsters::new</span><span class="plain">(</span><span class="constant">INTER_VAL_VHMODE</span><span class="plain">);</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">val_mode</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">code_mode</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">) </span><span class="identifier">val_mode</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="functiontext">EmitInterSchemas::emit</span><span class="plain">(&amp;</span><span class="identifier">VH</span><span class="plain">, </span><span class="identifier">sch</span><span class="plain">-</span><span class="element">&gt;compiled</span><span class="plain">, </span><span class="identifier">ems</span><span class="plain">, </span><span class="identifier">code_mode</span><span class="plain">, </span><span class="identifier">val_mode</span><span class="plain">,</span>
<span class="functiontext">EmitInterSchemas::emit</span><span class="plain">(&amp;</span><span class="identifier">VH</span><span class="plain">, </span><span class="identifier">sch</span><span class="plain">-</span><span class="element">&gt;compiled</span><span class="plain">, </span><span class="identifier">ems</span><span class="plain">, </span><span class="identifier">code_mode</span><span class="plain">, </span><span class="identifier">val_mode</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="plain">&amp;</span><span class="functiontext">Calculus::Schemas::sch_inline</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="constant">END_COMPILATION_MODE</span><span class="plain">;</span>

View file

@ -255,7 +255,7 @@ or with a fragment of Inform 7 source text inside <code class="display"><span cl
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">to_val</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">VH</span><span class="plain">-</span><span class="element">&gt;vhmode_wanted</span><span class="plain"> == </span><span class="constant">INTER_VAL_VHMODE</span><span class="plain">) { </span><span class="identifier">to_val</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">; </span><span class="identifier">to_code</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">; }</span>
<span class="functiontext">EmitInterSchemas::emit</span><span class="plain">(</span><span class="identifier">VH</span><span class="plain">, </span><span class="identifier">sch</span><span class="plain">, </span><span class="identifier">CSIS</span><span class="plain">, </span><span class="identifier">to_code</span><span class="plain">, </span><span class="identifier">to_val</span><span class="plain">,</span>
<span class="functiontext">EmitInterSchemas::emit</span><span class="plain">(</span><span class="identifier">VH</span><span class="plain">, </span><span class="identifier">sch</span><span class="plain">, </span><span class="identifier">CSIS</span><span class="plain">, </span><span class="identifier">to_code</span><span class="plain">, </span><span class="identifier">to_val</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="plain">&amp;</span><span class="functiontext">Invocations::Inline::csi_inline_inner_inner</span><span class="plain">, &amp;</span><span class="functiontext">TemplateFiles::compile_I7_from_I6</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
@ -2514,7 +2514,7 @@ very special circumstances.
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="string">"%~W"</span><span class="plain">, </span><span class="identifier">Wordings::one_word</span><span class="plain">(</span><span class="identifier">ParseTree::int_annotation</span><span class="plain">(</span><span class="identifier">inv</span><span class="plain">, </span><span class="constant">ssp_closing_segment_wn_ANNOT</span><span class="plain">)));</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">T_s</span><span class="plain"> = </span><span class="functiontext">EmitInterSchemas::find_identifier_text</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">);</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">T_s</span><span class="plain"> = </span><span class="functiontext">EmitInterSchemas::find_identifier_text</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="functiontext">Emit::val_symbol</span><span class="plain">(</span><span class="identifier">K_value</span><span class="plain">, </span><span class="identifier">T_s</span><span class="plain">);</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">);</span>
<span class="plain">}</span>

View file

@ -49,6 +49,11 @@
<span class="functiontext">Packaging::initialise_state</span><span class="plain">(</span><span class="identifier">repo</span><span class="plain">);</span>
<span class="functiontext">Packaging::outside_all_packages</span><span class="plain">();</span>
<span class="functiontext">Packaging::incarnate</span><span class="plain">(</span><span class="functiontext">Packaging::get_module</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"generic"</span><span class="plain">)-</span><span class="element">&gt;the_package</span><span class="plain">);</span>
<span class="functiontext">Packaging::incarnate</span><span class="plain">(</span><span class="functiontext">Packaging::get_module</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"synoptic"</span><span class="plain">)-</span><span class="element">&gt;the_package</span><span class="plain">);</span>
<span class="functiontext">Packaging::incarnate</span><span class="plain">(</span><span class="functiontext">Packaging::get_module</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"standard_rules"</span><span class="plain">)-</span><span class="element">&gt;the_package</span><span class="plain">);</span>
<span class="functiontext">Packaging::incarnate</span><span class="plain">(</span><span class="functiontext">Hierarchy::template</span><span class="plain">());</span>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">KU</span><span class="plain"> = </span><span class="functiontext">Hierarchy::find</span><span class="plain">(</span><span class="constant">K_UNCHECKED_HL</span><span class="plain">);</span>
<span class="reserved">packaging_state</span><span class="plain"> </span><span class="identifier">save</span><span class="plain"> = </span><span class="functiontext">Packaging::enter_home_of</span><span class="plain">(</span><span class="identifier">KU</span><span class="plain">);</span>
<span class="identifier">unchecked_interk</span><span class="plain"> = </span><span class="functiontext">InterNames::to_symbol</span><span class="plain">(</span><span class="identifier">KU</span><span class="plain">);</span>
@ -1704,7 +1709,7 @@ insert them into the Inter stream close to the top.
<p class="endnote">The function Emit::change_translation is used in 5/un (<a href="5-un.html#SP1">&#167;1</a>), 13/rsfk (<a href="13-rsfk.html#SP24">&#167;24</a>), 15/pr (<a href="15-pr.html#SP21">&#167;21</a>), 27/hl (<a href="27-hl.html#SP3">&#167;3</a>, <a href="27-hl.html#SP3_1">&#167;3.1</a>), 27/pc (<a href="27-pc.html#SP18">&#167;18</a>).</p>
<p class="endnote">The function Emit::get_translation is used in 15/pr (<a href="15-pr.html#SP22_1">&#167;22.1</a>).</p>
<p class="endnote">The function Emit::get_translation is used in 15/pr (<a href="15-pr.html#SP22_1">&#167;22.1</a>), 27/hr (<a href="27-hr.html#SP5">&#167;5</a>).</p>
<p class="endnote">The function Emit::to_text is used in 15/vp (<a href="15-vp.html#SP3">&#167;3</a>), 27/hr (<a href="27-hr.html#SP5">&#167;5</a>).</p>

View file

@ -14,14 +14,14 @@
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">EmitInterSchemas::emit</span><span class="plain">(</span><span class="reserved">value_holster</span><span class="plain"> *</span><span class="identifier">VH</span><span class="plain">, </span><span class="identifier">inter_schema</span><span class="plain"> *</span><span class="identifier">sch</span><span class="plain">, </span><span class="reserved">void</span><span class="plain"> *</span><span class="identifier">opaque_state</span><span class="plain">,</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">to_code</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">to_val</span><span class="plain">,</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">to_code</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">to_val</span><span class="plain">, </span><span class="identifier">inter_symbols_table</span><span class="plain"> *</span><span class="identifier">first_call</span><span class="plain">, </span><span class="identifier">inter_symbols_table</span><span class="plain"> *</span><span class="identifier">second_call</span><span class="plain">,</span>
<span class="reserved">void</span><span class="plain"> (*</span><span class="identifier">inline_command_handler</span><span class="plain">)(</span><span class="reserved">value_holster</span><span class="plain"> *</span><span class="identifier">VH</span><span class="plain">, </span><span class="identifier">inter_schema_token</span><span class="plain"> *</span><span class="identifier">t</span><span class="plain">, </span><span class="reserved">void</span><span class="plain"> *</span><span class="identifier">opaque_state</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">prim_cat</span><span class="plain">),</span>
<span class="reserved">void</span><span class="plain"> (*</span><span class="identifier">i7_source_handler</span><span class="plain">)(</span><span class="reserved">value_holster</span><span class="plain"> *</span><span class="identifier">VH</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="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">)) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">sch</span><span class="plain">-&gt;</span><span class="identifier">mid_case</span><span class="plain">) { </span><span class="functiontext">Emit::to_last_level</span><span class="plain">(4); }</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">prim_cat</span><span class="plain"> = </span><span class="identifier">VAL_PRIM_CAT</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">to_code</span><span class="plain">) </span><span class="identifier">prim_cat</span><span class="plain"> = </span><span class="identifier">CODE_PRIM_CAT</span><span class="plain">;</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="identifier">inter_schema_node</span><span class="plain"> *</span><span class="identifier">isn</span><span class="plain"> = </span><span class="identifier">sch</span><span class="plain">-&gt;</span><span class="identifier">node_tree</span><span class="plain">; </span><span class="identifier">isn</span><span class="plain">; </span><span class="identifier">isn</span><span class="plain">=</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="identifier">next_node</span><span class="plain">)</span>
<span class="functiontext">EmitInterSchemas::emit_inner</span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">, </span><span class="identifier">VH</span><span class="plain">, </span><span class="identifier">sch</span><span class="plain">, </span><span class="identifier">opaque_state</span><span class="plain">, </span><span class="identifier">prim_cat</span><span class="plain">, </span><span class="identifier">inline_command_handler</span><span class="plain">, </span><span class="identifier">i7_source_handler</span><span class="plain">);</span>
<span class="functiontext">EmitInterSchemas::emit_inner</span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">, </span><span class="identifier">VH</span><span class="plain">, </span><span class="identifier">sch</span><span class="plain">, </span><span class="identifier">opaque_state</span><span class="plain">, </span><span class="identifier">prim_cat</span><span class="plain">, </span><span class="identifier">first_call</span><span class="plain">, </span><span class="identifier">second_call</span><span class="plain">, </span><span class="identifier">inline_command_handler</span><span class="plain">, </span><span class="identifier">i7_source_handler</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
@ -34,7 +34,7 @@
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">EmitInterSchemas::emit_inner</span><span class="plain">(</span><span class="identifier">inter_schema_node</span><span class="plain"> *</span><span class="identifier">isn</span><span class="plain">, </span><span class="reserved">value_holster</span><span class="plain"> *</span><span class="identifier">VH</span><span class="plain">,</span>
<span class="identifier">inter_schema</span><span class="plain"> *</span><span class="identifier">sch</span><span class="plain">, </span><span class="reserved">void</span><span class="plain"> *</span><span class="identifier">opaque_state</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">prim_cat</span><span class="plain">,</span>
<span class="identifier">inter_schema</span><span class="plain"> *</span><span class="identifier">sch</span><span class="plain">, </span><span class="reserved">void</span><span class="plain"> *</span><span class="identifier">opaque_state</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">prim_cat</span><span class="plain">, </span><span class="identifier">inter_symbols_table</span><span class="plain"> *</span><span class="identifier">first_call</span><span class="plain">, </span><span class="identifier">inter_symbols_table</span><span class="plain"> *</span><span class="identifier">second_call</span><span class="plain">,</span>
<span class="reserved">void</span><span class="plain"> (*</span><span class="identifier">inline_command_handler</span><span class="plain">)(</span><span class="reserved">value_holster</span><span class="plain"> *</span><span class="identifier">VH</span><span class="plain">, </span><span class="identifier">inter_schema_token</span><span class="plain"> *</span><span class="identifier">t</span><span class="plain">, </span><span class="reserved">void</span><span class="plain"> *</span><span class="identifier">opaque_state</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">prim_cat</span><span class="plain">),</span>
<span class="reserved">void</span><span class="plain"> (*</span><span class="identifier">i7_source_handler</span><span class="plain">)(</span><span class="reserved">value_holster</span><span class="plain"> *</span><span class="identifier">VH</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="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">)) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">isn</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="reserved">return</span><span class="plain">;</span>
@ -75,7 +75,8 @@
<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">t</span><span class="plain">-&gt;</span><span class="identifier">ist_type</span><span class="plain"> == </span><span class="identifier">INLINE_ISTT</span><span class="plain">) &amp;&amp;</span>
<span class="plain">((</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="identifier">inline_command</span><span class="plain"> == </span><span class="identifier">counter_up_ISINC</span><span class="plain">) || (</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="identifier">inline_command</span><span class="plain"> == </span><span class="identifier">counter_down_ISINC</span><span class="plain">))) {</span>
<span class="reserved">value_holster</span><span class="plain"> </span><span class="identifier">VN</span><span class="plain"> = </span><span class="functiontext">Holsters::new</span><span class="plain">(</span><span class="constant">INTER_DATA_VHMODE</span><span class="plain">);</span>
<span class="plain">(*</span><span class="identifier">inline_command_handler</span><span class="plain">)(&amp;</span><span class="identifier">VN</span><span class="plain">, </span><span class="identifier">t</span><span class="plain">, </span><span class="identifier">opaque_state</span><span class="plain">, </span><span class="identifier">VAL_PRIM_CAT</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">inline_command_handler</span><span class="plain">)</span>
<span class="plain">(*</span><span class="identifier">inline_command_handler</span><span class="plain">)(&amp;</span><span class="identifier">VN</span><span class="plain">, </span><span class="identifier">t</span><span class="plain">, </span><span class="identifier">opaque_state</span><span class="plain">, </span><span class="identifier">VAL_PRIM_CAT</span><span class="plain">);</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"bad label stuff"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">}</span>
@ -100,7 +101,8 @@
<span class="plain">}</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="identifier">inter_schema_node</span><span class="plain"> *</span><span class="identifier">at</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="identifier">child_node</span><span class="plain">; </span><span class="identifier">at</span><span class="plain">; </span><span class="identifier">at</span><span class="plain">=</span><span class="identifier">at</span><span class="plain">-&gt;</span><span class="identifier">next_node</span><span class="plain">)</span>
<span class="functiontext">EmitInterSchemas::emit_inner</span><span class="plain">(</span><span class="identifier">at</span><span class="plain">,</span>
<span class="identifier">VH</span><span class="plain">, </span><span class="identifier">sch</span><span class="plain">, </span><span class="identifier">opaque_state</span><span class="plain">, </span><span class="identifier">CODE_PRIM_CAT</span><span class="plain">, </span><span class="identifier">inline_command_handler</span><span class="plain">, </span><span class="identifier">i7_source_handler</span><span class="plain">);</span>
<span class="identifier">VH</span><span class="plain">, </span><span class="identifier">sch</span><span class="plain">, </span><span class="identifier">opaque_state</span><span class="plain">, </span><span class="identifier">CODE_PRIM_CAT</span><span class="plain">, </span><span class="identifier">first_call</span><span class="plain">, </span><span class="identifier">second_call</span><span class="plain">,</span>
<span class="identifier">inline_command_handler</span><span class="plain">, </span><span class="identifier">i7_source_handler</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="identifier">unclosed</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">) {</span>
<span class="functiontext">Emit::up</span><span class="plain">();</span>
<span class="plain">}</span>
@ -131,7 +133,8 @@
<span class="functiontext">Emit::down</span><span class="plain">();</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="identifier">at</span><span class="plain"> = </span><span class="identifier">at</span><span class="plain">-&gt;</span><span class="identifier">next_node</span><span class="plain">; </span><span class="identifier">at</span><span class="plain">; </span><span class="identifier">at</span><span class="plain">=</span><span class="identifier">at</span><span class="plain">-&gt;</span><span class="identifier">next_node</span><span class="plain">)</span>
<span class="functiontext">EmitInterSchemas::emit_inner</span><span class="plain">(</span><span class="identifier">at</span><span class="plain">, </span><span class="identifier">VH</span><span class="plain">, </span><span class="identifier">sch</span><span class="plain">, </span><span class="identifier">opaque_state</span><span class="plain">,</span>
<span class="identifier">VAL_PRIM_CAT</span><span class="plain">, </span><span class="identifier">inline_command_handler</span><span class="plain">, </span><span class="identifier">i7_source_handler</span><span class="plain">);</span>
<span class="identifier">VAL_PRIM_CAT</span><span class="plain">, </span><span class="identifier">first_call</span><span class="plain">, </span><span class="identifier">second_call</span><span class="plain">,</span>
<span class="identifier">inline_command_handler</span><span class="plain">, </span><span class="identifier">i7_source_handler</span><span class="plain">);</span>
<span class="functiontext">Emit::up</span><span class="plain">();</span>
<span class="plain">}</span>
</pre>
@ -155,7 +158,7 @@
<span class="identifier">to_call</span><span class="plain"> = </span><span class="identifier">tok</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">to_call</span><span class="plain">) {</span>
<span class="functiontext">Emit::inv_call</span><span class="plain">(</span><span class="functiontext">EmitInterSchemas::find_identifier</span><span class="plain">(</span><span class="identifier">to_call</span><span class="plain">));</span>
<span class="functiontext">Emit::inv_call</span><span class="plain">(</span><span class="functiontext">EmitInterSchemas::find_identifier</span><span class="plain">(</span><span class="identifier">to_call</span><span class="plain">, </span><span class="identifier">first_call</span><span class="plain">, </span><span class="identifier">second_call</span><span class="plain">));</span>
<span class="identifier">at</span><span class="plain"> = </span><span class="identifier">at</span><span class="plain">-&gt;</span><span class="identifier">next_node</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">argc</span><span class="plain"> = 0;</span>
@ -175,7 +178,8 @@
<span class="functiontext">Emit::down</span><span class="plain">();</span>
<span class="reserved">for</span><span class="plain"> (; </span><span class="identifier">at</span><span class="plain">; </span><span class="identifier">at</span><span class="plain">=</span><span class="identifier">at</span><span class="plain">-&gt;</span><span class="identifier">next_node</span><span class="plain">)</span>
<span class="functiontext">EmitInterSchemas::emit_inner</span><span class="plain">(</span><span class="identifier">at</span><span class="plain">,</span>
<span class="identifier">VH</span><span class="plain">, </span><span class="identifier">sch</span><span class="plain">, </span><span class="identifier">opaque_state</span><span class="plain">, </span><span class="identifier">VAL_PRIM_CAT</span><span class="plain">, </span><span class="identifier">inline_command_handler</span><span class="plain">, </span><span class="identifier">i7_source_handler</span><span class="plain">);</span>
<span class="identifier">VH</span><span class="plain">, </span><span class="identifier">sch</span><span class="plain">, </span><span class="identifier">opaque_state</span><span class="plain">, </span><span class="identifier">VAL_PRIM_CAT</span><span class="plain">,</span>
<span class="identifier">first_call</span><span class="plain">, </span><span class="identifier">second_call</span><span class="plain">, </span><span class="identifier">inline_command_handler</span><span class="plain">, </span><span class="identifier">i7_source_handler</span><span class="plain">);</span>
<span class="functiontext">Emit::up</span><span class="plain">();</span>
<span class="plain">}</span>
</pre>
@ -202,7 +206,8 @@
<span class="functiontext">Emit::down</span><span class="plain">();</span>
<span class="plain">}</span>
<span class="functiontext">EmitInterSchemas::emit_inner</span><span class="plain">(</span><span class="identifier">at</span><span class="plain">,</span>
<span class="identifier">VH</span><span class="plain">, </span><span class="identifier">sch</span><span class="plain">, </span><span class="identifier">opaque_state</span><span class="plain">, </span><span class="identifier">VAL_PRIM_CAT</span><span class="plain">, </span><span class="identifier">inline_command_handler</span><span class="plain">, </span><span class="identifier">i7_source_handler</span><span class="plain">);</span>
<span class="identifier">VH</span><span class="plain">, </span><span class="identifier">sch</span><span class="plain">, </span><span class="identifier">opaque_state</span><span class="plain">, </span><span class="identifier">VAL_PRIM_CAT</span><span class="plain">,</span>
<span class="identifier">first_call</span><span class="plain">, </span><span class="identifier">second_call</span><span class="plain">, </span><span class="identifier">inline_command_handler</span><span class="plain">, </span><span class="identifier">i7_source_handler</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">while</span><span class="plain"> (</span><span class="identifier">d</span><span class="plain"> &gt; 0) { </span><span class="functiontext">Emit::up</span><span class="plain">(); </span><span class="identifier">d</span><span class="plain">--; }</span>
<span class="plain">}</span>
@ -225,10 +230,13 @@
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">pc</span><span class="plain"> = </span><span class="identifier">VAL_PRIM_CAT</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">InterSchemas::first_operand_ref</span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="identifier">isn_clarifier</span><span class="plain">)) </span><span class="identifier">pc</span><span class="plain"> = </span><span class="identifier">REF_PRIM_CAT</span><span class="plain">;</span>
<span class="functiontext">EmitInterSchemas::emit_inner</span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="identifier">child_node</span><span class="plain">,</span>
<span class="identifier">VH</span><span class="plain">, </span><span class="identifier">sch</span><span class="plain">, </span><span class="identifier">opaque_state</span><span class="plain">, </span><span class="identifier">pc</span><span class="plain">, </span><span class="identifier">inline_command_handler</span><span class="plain">, </span><span class="identifier">i7_source_handler</span><span class="plain">);</span>
<span class="identifier">VH</span><span class="plain">, </span><span class="identifier">sch</span><span class="plain">, </span><span class="identifier">opaque_state</span><span class="plain">, </span><span class="identifier">pc</span><span class="plain">, </span><span class="identifier">first_call</span><span class="plain">, </span><span class="identifier">second_call</span><span class="plain">,</span>
<span class="identifier">inline_command_handler</span><span class="plain">, </span><span class="identifier">i7_source_handler</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">InterSchemas::arity</span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="identifier">isn_clarifier</span><span class="plain">) == 2)</span>
<span class="functiontext">EmitInterSchemas::emit_inner</span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="identifier">child_node</span><span class="plain">-&gt;</span><span class="identifier">next_node</span><span class="plain">,</span>
<span class="identifier">VH</span><span class="plain">, </span><span class="identifier">sch</span><span class="plain">, </span><span class="identifier">opaque_state</span><span class="plain">, </span><span class="identifier">VAL_PRIM_CAT</span><span class="plain">, </span><span class="identifier">inline_command_handler</span><span class="plain">, </span><span class="identifier">i7_source_handler</span><span class="plain">);</span>
<span class="identifier">VH</span><span class="plain">, </span><span class="identifier">sch</span><span class="plain">, </span><span class="identifier">opaque_state</span><span class="plain">, </span><span class="identifier">VAL_PRIM_CAT</span><span class="plain">,</span>
<span class="identifier">first_call</span><span class="plain">, </span><span class="identifier">second_call</span><span class="plain">,</span>
<span class="identifier">inline_command_handler</span><span class="plain">, </span><span class="identifier">i7_source_handler</span><span class="plain">);</span>
<span class="functiontext">Emit::up</span><span class="plain">();</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">prim_cat</span><span class="plain"> == </span><span class="identifier">REF_PRIM_CAT</span><span class="plain">) { </span><span class="functiontext">Emit::up</span><span class="plain">(); }</span>
@ -252,7 +260,8 @@
<span class="functiontext">Emit::down</span><span class="plain">();</span>
<span class="plain">}</span>
<span class="functiontext">EmitInterSchemas::emit_inner</span><span class="plain">(</span><span class="identifier">at</span><span class="plain">,</span>
<span class="identifier">VH</span><span class="plain">, </span><span class="identifier">sch</span><span class="plain">, </span><span class="identifier">opaque_state</span><span class="plain">, </span><span class="identifier">prim_cat</span><span class="plain">, </span><span class="identifier">inline_command_handler</span><span class="plain">, </span><span class="identifier">i7_source_handler</span><span class="plain">);</span>
<span class="identifier">VH</span><span class="plain">, </span><span class="identifier">sch</span><span class="plain">, </span><span class="identifier">opaque_state</span><span class="plain">, </span><span class="identifier">prim_cat</span><span class="plain">, </span><span class="identifier">first_call</span><span class="plain">, </span><span class="identifier">second_call</span><span class="plain">,</span>
<span class="identifier">inline_command_handler</span><span class="plain">, </span><span class="identifier">i7_source_handler</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">while</span><span class="plain"> (</span><span class="identifier">d</span><span class="plain"> &gt; 0) { </span><span class="functiontext">Emit::up</span><span class="plain">(); </span><span class="identifier">d</span><span class="plain">--; }</span>
</pre>
@ -281,7 +290,8 @@
<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">at</span><span class="plain">) &amp;&amp; (</span><span class="identifier">i</span><span class="plain">&lt;</span><span class="identifier">arity</span><span class="plain">)); </span><span class="identifier">i</span><span class="plain">++) {</span>
<span class="identifier">actual_arity</span><span class="plain">++;</span>
<span class="functiontext">EmitInterSchemas::emit_inner</span><span class="plain">(</span><span class="identifier">at</span><span class="plain">, </span><span class="identifier">VH</span><span class="plain">, </span><span class="identifier">sch</span><span class="plain">, </span><span class="identifier">opaque_state</span><span class="plain">,</span>
<span class="identifier">InterSchemas::ip_prim_cat</span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="identifier">isn_clarifier</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">), </span><span class="identifier">inline_command_handler</span><span class="plain">, </span><span class="identifier">i7_source_handler</span><span class="plain">);</span>
<span class="identifier">InterSchemas::ip_prim_cat</span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="identifier">isn_clarifier</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">),</span>
<span class="identifier">first_call</span><span class="plain">, </span><span class="identifier">second_call</span><span class="plain">, </span><span class="identifier">inline_command_handler</span><span class="plain">, </span><span class="identifier">i7_source_handler</span><span class="plain">);</span>
<span class="identifier">last</span><span class="plain"> = </span><span class="identifier">at</span><span class="plain">;</span>
<span class="identifier">at</span><span class="plain"> = </span><span class="identifier">at</span><span class="plain">-&gt;</span><span class="identifier">next_node</span><span class="plain">;</span>
<span class="plain">}</span>
@ -310,15 +320,18 @@
<span class="identifier">inter_schema_node</span><span class="plain"> *</span><span class="identifier">var_node</span><span class="plain"> = </span><span class="identifier">oc_node</span><span class="plain">-&gt;</span><span class="identifier">child_node</span><span class="plain">;</span>
<span class="identifier">inter_schema_node</span><span class="plain"> *</span><span class="identifier">cl_node</span><span class="plain"> = </span><span class="identifier">var_node</span><span class="plain">?(</span><span class="identifier">var_node</span><span class="plain">-&gt;</span><span class="identifier">next_node</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">var_node</span><span class="plain">) &amp;&amp; (</span><span class="identifier">cl_node</span><span class="plain">)) {</span>
<span class="functiontext">EmitInterSchemas::emit_inner</span><span class="plain">(</span><span class="identifier">var_node</span><span class="plain">, </span><span class="identifier">VH</span><span class="plain">, </span><span class="identifier">sch</span><span class="plain">, </span><span class="identifier">opaque_state</span><span class="plain">, </span><span class="identifier">REF_PRIM_CAT</span><span class="plain">, </span><span class="identifier">inline_command_handler</span><span class="plain">, </span><span class="identifier">i7_source_handler</span><span class="plain">);</span>
<span class="functiontext">EmitInterSchemas::emit_inner</span><span class="plain">(</span><span class="identifier">cl_node</span><span class="plain">, </span><span class="identifier">VH</span><span class="plain">, </span><span class="identifier">sch</span><span class="plain">, </span><span class="identifier">opaque_state</span><span class="plain">, </span><span class="identifier">VAL_PRIM_CAT</span><span class="plain">, </span><span class="identifier">inline_command_handler</span><span class="plain">, </span><span class="identifier">i7_source_handler</span><span class="plain">);</span>
<span class="functiontext">EmitInterSchemas::emit_inner</span><span class="plain">(</span><span class="identifier">var_node</span><span class="plain">, </span><span class="identifier">VH</span><span class="plain">, </span><span class="identifier">sch</span><span class="plain">, </span><span class="identifier">opaque_state</span><span class="plain">, </span><span class="identifier">REF_PRIM_CAT</span><span class="plain">,</span>
<span class="identifier">first_call</span><span class="plain">, </span><span class="identifier">second_call</span><span class="plain">, </span><span class="identifier">inline_command_handler</span><span class="plain">, </span><span class="identifier">i7_source_handler</span><span class="plain">);</span>
<span class="functiontext">EmitInterSchemas::emit_inner</span><span class="plain">(</span><span class="identifier">cl_node</span><span class="plain">, </span><span class="identifier">VH</span><span class="plain">, </span><span class="identifier">sch</span><span class="plain">, </span><span class="identifier">opaque_state</span><span class="plain">, </span><span class="identifier">VAL_PRIM_CAT</span><span class="plain">,</span>
<span class="identifier">first_call</span><span class="plain">, </span><span class="identifier">second_call</span><span class="plain">, </span><span class="identifier">inline_command_handler</span><span class="plain">, </span><span class="identifier">i7_source_handler</span><span class="plain">);</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"malformed OC node"</span><span class="plain">);</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="identifier">inter_schema_node</span><span class="plain"> *</span><span class="identifier">var_node</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="identifier">child_node</span><span class="plain">;</span>
<span class="reserved">while</span><span class="plain"> ((</span><span class="identifier">var_node</span><span class="plain">) &amp;&amp; (</span><span class="identifier">var_node</span><span class="plain">-&gt;</span><span class="identifier">isn_type</span><span class="plain"> != </span><span class="identifier">EXPRESSION_ISNT</span><span class="plain">))</span>
<span class="identifier">var_node</span><span class="plain"> = </span><span class="identifier">var_node</span><span class="plain">-&gt;</span><span class="identifier">child_node</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">var_node</span><span class="plain">) {</span>
<span class="functiontext">EmitInterSchemas::emit_inner</span><span class="plain">(</span><span class="identifier">var_node</span><span class="plain">, </span><span class="identifier">VH</span><span class="plain">, </span><span class="identifier">sch</span><span class="plain">, </span><span class="identifier">opaque_state</span><span class="plain">, </span><span class="identifier">REF_PRIM_CAT</span><span class="plain">, </span><span class="identifier">inline_command_handler</span><span class="plain">, </span><span class="identifier">i7_source_handler</span><span class="plain">);</span>
<span class="functiontext">EmitInterSchemas::emit_inner</span><span class="plain">(</span><span class="identifier">var_node</span><span class="plain">, </span><span class="identifier">VH</span><span class="plain">, </span><span class="identifier">sch</span><span class="plain">, </span><span class="identifier">opaque_state</span><span class="plain">, </span><span class="identifier">REF_PRIM_CAT</span><span class="plain">,</span>
<span class="identifier">first_call</span><span class="plain">, </span><span class="identifier">second_call</span><span class="plain">, </span><span class="identifier">inline_command_handler</span><span class="plain">, </span><span class="identifier">i7_source_handler</span><span class="plain">);</span>
<span class="functiontext">Emit::val_iname</span><span class="plain">(</span><span class="identifier">K_value</span><span class="plain">, </span><span class="functiontext">Kinds::RunTime::I6_classname</span><span class="plain">(</span><span class="identifier">K_object</span><span class="plain">));</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"objectloop without visible variable"</span><span class="plain">);</span>
<span class="plain">}</span>
@ -349,7 +362,7 @@
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">lvar_s</span><span class="plain"> = </span><span class="functiontext">LocalVariables::declare_this</span><span class="plain">(</span><span class="identifier">lvar</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">, 8);</span>
<span class="functiontext">Emit::val_symbol</span><span class="plain">(</span><span class="identifier">K_value</span><span class="plain">, </span><span class="identifier">lvar_s</span><span class="plain">);</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="functiontext">Emit::val_symbol</span><span class="plain">(</span><span class="identifier">K_value</span><span class="plain">, </span><span class="functiontext">EmitInterSchemas::find_identifier</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">));</span>
<span class="functiontext">Emit::val_symbol</span><span class="plain">(</span><span class="identifier">K_value</span><span class="plain">, </span><span class="functiontext">EmitInterSchemas::find_identifier</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">, </span><span class="identifier">first_call</span><span class="plain">, </span><span class="identifier">second_call</span><span class="plain">));</span>
<span class="plain">}</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="plain">}</span>
@ -380,7 +393,8 @@
<span class="plain">(*</span><span class="identifier">i7_source_handler</span><span class="plain">)(</span><span class="identifier">VH</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="identifier">material</span><span class="plain">);</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">INLINE_ISTT</span><span class="plain">:</span>
<span class="plain">(*</span><span class="identifier">inline_command_handler</span><span class="plain">)(</span><span class="identifier">VH</span><span class="plain">, </span><span class="identifier">t</span><span class="plain">, </span><span class="identifier">opaque_state</span><span class="plain">, </span><span class="identifier">prim_cat</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">inline_command_handler</span><span class="plain">)</span>
<span class="plain">(*</span><span class="identifier">inline_command_handler</span><span class="plain">)(</span><span class="identifier">VH</span><span class="plain">, </span><span class="identifier">t</span><span class="plain">, </span><span class="identifier">opaque_state</span><span class="plain">, </span><span class="identifier">prim_cat</span><span class="plain">);</span>
<span class="reserved">break</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">"bad expression token"</span><span class="plain">);</span>
@ -399,17 +413,28 @@
<pre class="display">
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="functiontext">EmitInterSchemas::find_identifier</span><span class="plain">(</span><span class="identifier">inter_schema_token</span><span class="plain"> *</span><span class="identifier">t</span><span class="plain">) {</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="functiontext">EmitInterSchemas::find_identifier</span><span class="plain">(</span><span class="identifier">inter_schema_token</span><span class="plain"> *</span><span class="identifier">t</span><span class="plain">, </span><span class="identifier">inter_symbols_table</span><span class="plain"> *</span><span class="identifier">first_call</span><span class="plain">, </span><span class="identifier">inter_symbols_table</span><span class="plain"> *</span><span class="identifier">second_call</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="identifier">as_quoted</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="functiontext">InterNames::to_symbol</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="identifier">as_quoted</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">EmitInterSchemas::find_identifier_text</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="identifier">material</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">EmitInterSchemas::find_identifier_text</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">-&gt;</span><span class="identifier">material</span><span class="plain">, </span><span class="identifier">first_call</span><span class="plain">, </span><span class="identifier">second_call</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="functiontext">EmitInterSchemas::find_identifier_text</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">) {</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="functiontext">EmitInterSchemas::find_identifier_text</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">, </span><span class="identifier">inter_symbols_table</span><span class="plain"> *</span><span class="identifier">first_call</span><span class="plain">, </span><span class="identifier">inter_symbols_table</span><span class="plain"> *</span><span class="identifier">second_call</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">first_call</span><span class="plain">) {</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain"> = </span><span class="functiontext">Emit::seek_symbol</span><span class="plain">(</span><span class="identifier">first_call</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">I</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">second_call</span><span class="plain">) {</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain"> = </span><span class="functiontext">Emit::seek_symbol</span><span class="plain">(</span><span class="identifier">second_call</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">I</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain"> = </span><span class="functiontext">Emit::seek_symbol</span><span class="plain">(</span><span class="functiontext">Emit::main_scope</span><span class="plain">(), </span><span class="identifier">S</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">I</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">InterNames::to_symbol</span><span class="plain">(</span><span class="functiontext">Hierarchy::find_by_name</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">));</span>
<span class="identifier">I</span><span class="plain"> = </span><span class="functiontext">InterNames::to_symbol</span><span class="plain">(</span><span class="functiontext">Hierarchy::find_by_name</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">));</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">I</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="plain">;</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"Defeated on %S\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">);</span>
<span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"unable to find identifier"</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>

View file

@ -56,14 +56,10 @@
<pre class="definitions">
<span class="definitionkeyword">enum</span> <span class="constant">THESAME_HL</span><span class="definitionkeyword"> from </span><span class="constant">0</span>
<span class="definitionkeyword">enum</span> <span class="constant">PLURALFOUND_HL</span>
<span class="definitionkeyword">enum</span> <span class="constant">PARENT_HL</span>
<span class="definitionkeyword">enum</span> <span class="constant">PARENT_HL</span><span class="definitionkeyword"> from </span><span class="constant">0</span>
<span class="definitionkeyword">enum</span> <span class="constant">CHILD_HL</span>
<span class="definitionkeyword">enum</span> <span class="constant">SIBLING_HL</span>
<span class="definitionkeyword">enum</span> <span class="constant">SELF_HL</span>
<span class="definitionkeyword">enum</span> <span class="constant">THEDARK_HL</span>
<span class="definitionkeyword">enum</span> <span class="constant">INFORMLIBRARY_HL</span>
<span class="definitionkeyword">enum</span> <span class="constant">DEBUG_HL</span>
<span class="definitionkeyword">enum</span> <span class="constant">TARGET_ZCODE_HL</span>
<span class="definitionkeyword">enum</span> <span class="constant">TARGET_GLULX_HL</span>
@ -105,8 +101,6 @@
<span class="functiontext">HierarchyLocations::con</span><span class="plain">(</span><span class="constant">CHILD_HL</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"child"</span><span class="plain">, </span><span class="functiontext">Translation::same</span><span class="plain">(), </span><span class="identifier">generic_basics</span><span class="plain">);</span>
<span class="functiontext">HierarchyLocations::con</span><span class="plain">(</span><span class="constant">SIBLING_HL</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"sibling"</span><span class="plain">, </span><span class="functiontext">Translation::same</span><span class="plain">(), </span><span class="identifier">generic_basics</span><span class="plain">);</span>
<span class="functiontext">HierarchyLocations::con</span><span class="plain">(</span><span class="constant">SELF_HL</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"self"</span><span class="plain">, </span><span class="functiontext">Translation::same</span><span class="plain">(), </span><span class="identifier">generic_basics</span><span class="plain">);</span>
<span class="functiontext">HierarchyLocations::con</span><span class="plain">(</span><span class="constant">THEDARK_HL</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"thedark"</span><span class="plain">, </span><span class="functiontext">Translation::same</span><span class="plain">(), </span><span class="identifier">generic_basics</span><span class="plain">);</span>
<span class="functiontext">HierarchyLocations::con</span><span class="plain">(</span><span class="constant">INFORMLIBRARY_HL</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"InformLibrary"</span><span class="plain">, </span><span class="functiontext">Translation::same</span><span class="plain">(), </span><span class="identifier">generic_basics</span><span class="plain">);</span>
<span class="functiontext">HierarchyLocations::con</span><span class="plain">(</span><span class="constant">RESPONSETEXTS_HL</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"ResponseTexts"</span><span class="plain">, </span><span class="functiontext">Translation::same</span><span class="plain">(), </span><span class="identifier">generic_basics</span><span class="plain">);</span>
<span class="functiontext">HierarchyLocations::con</span><span class="plain">(</span><span class="constant">DEBUG_HL</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"DEBUG"</span><span class="plain">, </span><span class="functiontext">Translation::same</span><span class="plain">(), </span><span class="identifier">generic_basics</span><span class="plain">);</span>
<span class="functiontext">HierarchyLocations::con</span><span class="plain">(</span><span class="constant">TARGET_ZCODE_HL</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"TARGET_ZCODE"</span><span class="plain">, </span><span class="functiontext">Translation::same</span><span class="plain">(), </span><span class="identifier">generic_basics</span><span class="plain">);</span>
@ -1354,6 +1348,10 @@
<pre class="definitions">
<span class="definitionkeyword">enum</span> <span class="constant">THESAME_HL</span>
<span class="definitionkeyword">enum</span> <span class="constant">PLURALFOUND_HL</span>
<span class="definitionkeyword">enum</span> <span class="constant">THEDARK_HL</span>
<span class="definitionkeyword">enum</span> <span class="constant">INFORMLIBRARY_HL</span>
<span class="definitionkeyword">enum</span> <span class="constant">ACT_REQUESTER_HL</span>
<span class="definitionkeyword">enum</span> <span class="constant">ACTION_HL</span>
<span class="definitionkeyword">enum</span> <span class="constant">ACTIONCURRENTLYHAPPENINGFLAG_HL</span>
@ -1597,6 +1595,8 @@
<span class="reserved">location_requirement</span><span class="plain"> </span><span class="identifier">template</span><span class="plain"> = </span><span class="functiontext">HierarchyLocations::this_package</span><span class="plain">(</span><span class="functiontext">Hierarchy::template</span><span class="plain">());</span>
<span class="functiontext">HierarchyLocations::con</span><span class="plain">(</span><span class="constant">THESAME_HL</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"##TheSame"</span><span class="plain">, </span><span class="functiontext">Translation::same</span><span class="plain">(), </span><span class="identifier">template</span><span class="plain">);</span>
<span class="functiontext">HierarchyLocations::con</span><span class="plain">(</span><span class="constant">PLURALFOUND_HL</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"##PluralFound"</span><span class="plain">, </span><span class="functiontext">Translation::same</span><span class="plain">(), </span><span class="identifier">template</span><span class="plain">);</span>
<span class="functiontext">HierarchyLocations::con</span><span class="plain">(</span><span class="constant">THEDARK_HL</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"thedark"</span><span class="plain">, </span><span class="functiontext">Translation::same</span><span class="plain">(), </span><span class="identifier">template</span><span class="plain">);</span>
<span class="functiontext">HierarchyLocations::con</span><span class="plain">(</span><span class="constant">INFORMLIBRARY_HL</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"InformLibrary"</span><span class="plain">, </span><span class="functiontext">Translation::same</span><span class="plain">(), </span><span class="identifier">template</span><span class="plain">);</span>
<span class="functiontext">HierarchyLocations::con</span><span class="plain">(</span><span class="constant">ACT_REQUESTER_HL</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"act_requester"</span><span class="plain">, </span><span class="functiontext">Translation::same</span><span class="plain">(), </span><span class="identifier">template</span><span class="plain">);</span>
<span class="functiontext">HierarchyLocations::con</span><span class="plain">(</span><span class="constant">ACTION_HL</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"action"</span><span class="plain">, </span><span class="functiontext">Translation::same</span><span class="plain">(), </span><span class="identifier">template</span><span class="plain">);</span>
<span class="functiontext">HierarchyLocations::con</span><span class="plain">(</span><span class="constant">ACTIONCURRENTLYHAPPENINGFLAG_HL</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"ActionCurrentlyHappeningFlag"</span><span class="plain">, </span><span class="functiontext">Translation::same</span><span class="plain">(), </span><span class="identifier">template</span><span class="plain">);</span>
@ -1881,13 +1881,11 @@
<pre class="display">
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="functiontext">Hierarchy::post_process</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">HL_id</span><span class="plain">, </span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain">) {</span>
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">HL_id</span><span class="plain">) {</span>
<span class="comment">case THESAME_HL:</span>
<span class="comment">case PLURALFOUND_HL:</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">PARENT_HL</span><span class="plain">:</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">CHILD_HL</span><span class="plain">:</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">SIBLING_HL</span><span class="plain">:</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">THEDARK_HL</span><span class="plain">:</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">INFORMLIBRARY_HL</span><span class="plain">:</span>
<span class="comment">case THEDARK_HL:</span>
<span class="comment">case INFORMLIBRARY_HL:</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">FLOAT_NAN_HL</span><span class="plain">:</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">RESPONSETEXTS_HL</span><span class="plain">:</span>
<span class="functiontext">Emit::named_numeric_constant</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">, 0);</span>
@ -1916,7 +1914,10 @@
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Hierarchy::make_available</span><span class="plain">(</span><span class="reserved">inter_name</span><span class="plain"> *</span><span class="identifier">iname</span><span class="plain">) {</span>
<span class="functiontext">HierarchyLocations::make_as</span><span class="plain">(-1, </span><span class="functiontext">Emit::to_text</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">), </span><span class="identifier">iname</span><span class="plain">);</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">ma_as</span><span class="plain"> = </span><span class="functiontext">Emit::get_translation</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">ma_as</span><span class="plain">) == 0) </span><span class="identifier">ma_as</span><span class="plain"> = </span><span class="functiontext">Emit::to_text</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">);</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"MA: %S = $3\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">ma_as</span><span class="plain">, </span><span class="functiontext">InterNames::to_symbol</span><span class="plain">(</span><span class="identifier">iname</span><span class="plain">));</span>
<span class="functiontext">HierarchyLocations::make_as</span><span class="plain">(-1, </span><span class="identifier">ma_as</span><span class="plain">, </span><span class="identifier">iname</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">inter_name</span><span class="plain"> *</span><span class="functiontext">Hierarchy::find_by_name</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">) {</span>
@ -1937,15 +1938,6 @@
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">main_pr</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">package_request</span><span class="plain"> *</span><span class="identifier">resources_pr</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">package_request</span><span class="plain"> *</span><span class="functiontext">Hierarchy::resources</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">resources_pr</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">)</span>
<span class="identifier">resources_pr</span><span class="plain"> = </span><span class="functiontext">Packaging::request</span><span class="plain">(</span>
<span class="functiontext">InterNames::explicitly_named</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"resources"</span><span class="plain">, </span><span class="functiontext">Hierarchy::main</span><span class="plain">()),</span>
<span class="functiontext">PackageTypes::get</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"_plain"</span><span class="plain">));</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">resources_pr</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">package_request</span><span class="plain"> *</span><span class="identifier">template_pr</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">package_request</span><span class="plain"> *</span><span class="functiontext">Hierarchy::template</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">template_pr</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
@ -2044,9 +2036,7 @@
<p class="endnote">The function Hierarchy::main is used in 27/pc (<a href="27-pc.html#SP11">&#167;11</a>, <a href="27-pc.html#SP14">&#167;14</a>), 27/ei (<a href="27-ei.html#SP3">&#167;3</a>).</p>
<p class="endnote">The function Hierarchy::resources appears nowhere else.</p>
<p class="endnote">The function Hierarchy::template is used in <a href="#SP1_52">&#167;1.52</a>, 15/ep (<a href="15-ep.html#SP4">&#167;4</a>), 27/hl (<a href="27-hl.html#SP3">&#167;3</a>, <a href="27-hl.html#SP5">&#167;5</a>), 27/in (<a href="27-in.html#SP5">&#167;5</a>).</p>
<p class="endnote">The function Hierarchy::template is used in <a href="#SP1_52">&#167;1.52</a>, 15/ep (<a href="15-ep.html#SP4">&#167;4</a>), 27/hl (<a href="27-hl.html#SP3">&#167;3</a>, <a href="27-hl.html#SP5">&#167;5</a>), 27/in (<a href="27-in.html#SP5">&#167;5</a>), 27/ei (<a href="27-ei.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Hierarchy::package is used in 5/nv (<a href="5-nv.html#SP16">&#167;16</a>), 6/bp (<a href="6-bp.html#SP31">&#167;31</a>), 15/pr (<a href="15-pr.html#SP27">&#167;27</a>), 15/ma (<a href="15-ma.html#SP11_3">&#167;11.3</a>), 19/tb (<a href="19-tb.html#SP9">&#167;9</a>), 22/ph (<a href="22-ph.html#SP11">&#167;11</a>), 22/tp (<a href="22-tp.html#SP5">&#167;5</a>).</p>

View file

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

View file

@ -387,7 +387,7 @@ specification.
<p class="inwebparagraph"></p>
<p class="endnote">The function Packaging::incarnate is used in <a href="#SP12">&#167;12</a>, 27/in (<a href="27-in.html#SP7">&#167;7</a>), 27/ei (<a href="27-ei.html#SP3">&#167;3</a>, <a href="27-ei.html#SP5">&#167;5</a>).</p>
<p class="endnote">The function Packaging::incarnate is used in <a href="#SP12">&#167;12</a>, 27/in (<a href="27-in.html#SP7">&#167;7</a>), 27/ei (<a href="27-ei.html#SP2">&#167;2</a>, <a href="27-ei.html#SP3">&#167;3</a>, <a href="27-ei.html#SP5">&#167;5</a>).</p>
<p class="inwebparagraph"><a id="SP14"></a><b>&#167;14. Modules. </b>With the code above, then, we can get the Inter hierarchy of packages set up
as far as creating <code class="display"><span class="extract">main</span></code>. After that the Hierarchy code takes over, but it
@ -432,9 +432,9 @@ following creates modules on demand.
<p class="inwebparagraph"></p>
<p class="endnote">The function Packaging::get_module is used in <a href="#SP16">&#167;16</a>, 27/hr (<a href="27-hr.html#SP5">&#167;5</a>), 27/cm (<a href="27-cm.html#SP2">&#167;2</a>).</p>
<p class="endnote">The function Packaging::get_module is used in <a href="#SP16">&#167;16</a>, 27/hr (<a href="27-hr.html#SP5">&#167;5</a>), 27/cm (<a href="27-cm.html#SP2">&#167;2</a>), 27/ei (<a href="27-ei.html#SP2">&#167;2</a>).</p>
<p class="endnote">The structure module_package is accessed in 27/hr, 27/cm and here.</p>
<p class="endnote">The structure module_package is accessed in 27/hr, 27/cm, 27/ei and here.</p>
<p class="inwebparagraph"><a id="SP15"></a><b>&#167;15. Submodules. </b>Submodules have names such as <code class="display"><span class="extract">properties</span></code>, and the idea is that the same submodule
(or rather, submodules with the same name) can be found in multiple modules. The

View file

@ -208,6 +208,7 @@ for parsing:
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">stage</span><span class="plain"> == 5) {</span>
<span class="identifier">instance</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">;</span>
<span class="identifier">P_name</span><span class="plain"> = </span><span class="identifier">Properties::Valued::new_nameless</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"name"</span><span class="plain">, </span><span class="identifier">K_text</span><span class="plain">);</span>
<span class="identifier">Hierarchy::make_available</span><span class="plain">(</span><span class="functiontext">PL::Parsing::Visibility::name_name</span><span class="plain">());</span>
<span class="identifier">P_parse_name</span><span class="plain"> = </span><span class="identifier">Properties::Valued::new_nameless</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"parse_name"</span><span class="plain">, </span><span class="identifier">K_value</span><span class="plain">);</span>
<span class="identifier">P_action_bitmap</span><span class="plain"> = </span><span class="identifier">Properties::Valued::new_nameless</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"action_bitmap"</span><span class="plain">, </span><span class="identifier">K_value</span><span class="plain">);</span>

View file

@ -64,7 +64,6 @@
<span class="identifier">IRS</span><span class="element">.pos</span><span class="plain"> = </span><span class="identifier">pos</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">IRS</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"Didn't nail it."</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">IRS</span><span class="plain">;</span>
<span class="plain">}</span>
@ -79,7 +78,6 @@
<span class="identifier">IRS</span><span class="element">.pos</span><span class="plain"> = </span><span class="identifier">pos</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">IRS</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"Didn't nail it."</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">IRS</span><span class="plain">;</span>
<span class="plain">}</span>

View file

@ -38,6 +38,7 @@
<span class="definitionkeyword">enum</span> <span class="constant">EITHER_OR_IANN</span>
<span class="definitionkeyword">enum</span> <span class="constant">ENCLOSING_IANN</span>
<span class="definitionkeyword">enum</span> <span class="constant">FAKE_ACTION_IANN</span>
<span class="definitionkeyword">enum</span> <span class="constant">OBJECT_IANN</span>
<span class="definitionkeyword">enum</span> <span class="constant">HOLDING_IANN</span>
<span class="definitionkeyword">enum</span> <span class="constant">INLINE_ARRAY_IANN</span>
<span class="definitionkeyword">enum</span> <span class="constant">LATE_IANN</span>
@ -99,6 +100,7 @@ symbol.
<span class="functiontext">Inter::Defn::create_annotation</span><span class="plain">(</span><span class="constant">EITHER_OR_IANN</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"__either_or"</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
<span class="functiontext">Inter::Defn::create_annotation</span><span class="plain">(</span><span class="constant">ENCLOSING_IANN</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"__enclosing"</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
<span class="functiontext">Inter::Defn::create_annotation</span><span class="plain">(</span><span class="constant">FAKE_ACTION_IANN</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"__fake_action"</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
<span class="functiontext">Inter::Defn::create_annotation</span><span class="plain">(</span><span class="constant">OBJECT_IANN</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"__object"</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
<span class="functiontext">Inter::Defn::create_annotation</span><span class="plain">(</span><span class="constant">HOLDING_IANN</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"__holding"</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
<span class="functiontext">Inter::Defn::create_annotation</span><span class="plain">(</span><span class="constant">INLINE_ARRAY_IANN</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"__inline_array"</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
<span class="functiontext">Inter::Defn::create_annotation</span><span class="plain">(</span><span class="constant">LATE_IANN</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"__late"</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>

View file

@ -213,7 +213,7 @@ void Calculus::Schemas::sch_emit_inner(i6_schema *sch, i6s_emission_state *ems,
value_holster VH = Holsters::new(INTER_VAL_VHMODE);
int val_mode = FALSE;
if (code_mode == FALSE) val_mode = TRUE;
EmitInterSchemas::emit(&VH, sch->compiled, ems, code_mode, val_mode,
EmitInterSchemas::emit(&VH, sch->compiled, ems, code_mode, val_mode, NULL, NULL,
&Calculus::Schemas::sch_inline, NULL);
END_COMPILATION_MODE;

View file

@ -145,7 +145,7 @@ void Invocations::Inline::csi_inline_inner(value_holster *VH, inter_schema *sch,
int to_val = FALSE;
if (VH->vhmode_wanted == INTER_VAL_VHMODE) { to_val = TRUE; to_code = FALSE; }
EmitInterSchemas::emit(VH, sch, CSIS, to_code, to_val,
EmitInterSchemas::emit(VH, sch, CSIS, to_code, to_val, NULL, NULL,
&Invocations::Inline::csi_inline_inner_inner, &TemplateFiles::compile_I7_from_I6);
}
@ -1412,7 +1412,7 @@ very special circumstances.
} else {
TEMPORARY_TEXT(T);
WRITE_TO(T, "%~W", Wordings::one_word(ParseTree::int_annotation(inv, ssp_closing_segment_wn_ANNOT)));
inter_symbol *T_s = EmitInterSchemas::find_identifier_text(T);
inter_symbol *T_s = EmitInterSchemas::find_identifier_text(T, NULL, NULL);
Emit::val_symbol(K_value, T_s);
DISCARD_TEXT(T);
}

View file

@ -38,6 +38,11 @@ void Emit::begin(void) {
inter_repository *repo = Inter::create(1, 4096);
Packaging::initialise_state(repo);
Packaging::outside_all_packages();
Packaging::incarnate(Packaging::get_module(I"generic")->the_package);
Packaging::incarnate(Packaging::get_module(I"synoptic")->the_package);
Packaging::incarnate(Packaging::get_module(I"standard_rules")->the_package);
Packaging::incarnate(Hierarchy::template());
inter_name *KU = Hierarchy::find(K_UNCHECKED_HL);
packaging_state save = Packaging::enter_home_of(KU);

View file

@ -4,19 +4,19 @@
=
void EmitInterSchemas::emit(value_holster *VH, inter_schema *sch, void *opaque_state,
int to_code, int to_val,
int to_code, int to_val, inter_symbols_table *first_call, inter_symbols_table *second_call,
void (*inline_command_handler)(value_holster *VH, inter_schema_token *t, void *opaque_state, int prim_cat),
void (*i7_source_handler)(value_holster *VH, text_stream *OUT, text_stream *S)) {
if (sch->mid_case) { Emit::to_last_level(4); }
int prim_cat = VAL_PRIM_CAT;
if (to_code) prim_cat = CODE_PRIM_CAT;
for (inter_schema_node *isn = sch->node_tree; isn; isn=isn->next_node)
EmitInterSchemas::emit_inner(isn, VH, sch, opaque_state, prim_cat, inline_command_handler, i7_source_handler);
EmitInterSchemas::emit_inner(isn, VH, sch, opaque_state, prim_cat, first_call, second_call, inline_command_handler, i7_source_handler);
}
@ =
void EmitInterSchemas::emit_inner(inter_schema_node *isn, value_holster *VH,
inter_schema *sch, void *opaque_state, int prim_cat,
inter_schema *sch, void *opaque_state, int prim_cat, inter_symbols_table *first_call, inter_symbols_table *second_call,
void (*inline_command_handler)(value_holster *VH, inter_schema_token *t, void *opaque_state, int prim_cat),
void (*i7_source_handler)(value_holster *VH, text_stream *OUT, text_stream *S)) {
if (isn == NULL) return;
@ -47,7 +47,8 @@ void EmitInterSchemas::emit_inner(inter_schema_node *isn, value_holster *VH,
} else if ((t->ist_type == INLINE_ISTT) &&
((t->inline_command == counter_up_ISINC) || (t->inline_command == counter_down_ISINC))) {
value_holster VN = Holsters::new(INTER_DATA_VHMODE);
(*inline_command_handler)(&VN, t, opaque_state, VAL_PRIM_CAT);
if (inline_command_handler)
(*inline_command_handler)(&VN, t, opaque_state, VAL_PRIM_CAT);
} else internal_error("bad label stuff");
}
}
@ -62,7 +63,8 @@ void EmitInterSchemas::emit_inner(inter_schema_node *isn, value_holster *VH,
}
for (inter_schema_node *at = isn->child_node; at; at=at->next_node)
EmitInterSchemas::emit_inner(at,
VH, sch, opaque_state, CODE_PRIM_CAT, inline_command_handler, i7_source_handler);
VH, sch, opaque_state, CODE_PRIM_CAT, first_call, second_call,
inline_command_handler, i7_source_handler);
if (isn->unclosed == FALSE) {
Emit::up();
}
@ -83,7 +85,8 @@ void EmitInterSchemas::emit_inner(inter_schema_node *isn, value_holster *VH,
Emit::down();
for (at = at->next_node; at; at=at->next_node)
EmitInterSchemas::emit_inner(at, VH, sch, opaque_state,
VAL_PRIM_CAT, inline_command_handler, i7_source_handler);
VAL_PRIM_CAT, first_call, second_call,
inline_command_handler, i7_source_handler);
Emit::up();
}
@ -97,7 +100,7 @@ void EmitInterSchemas::emit_inner(inter_schema_node *isn, value_holster *VH,
to_call = tok;
}
if (to_call) {
Emit::inv_call(EmitInterSchemas::find_identifier(to_call));
Emit::inv_call(EmitInterSchemas::find_identifier(to_call, first_call, second_call));
at = at->next_node;
} else {
int argc = 0;
@ -117,7 +120,8 @@ void EmitInterSchemas::emit_inner(inter_schema_node *isn, value_holster *VH,
Emit::down();
for (; at; at=at->next_node)
EmitInterSchemas::emit_inner(at,
VH, sch, opaque_state, VAL_PRIM_CAT, inline_command_handler, i7_source_handler);
VH, sch, opaque_state, VAL_PRIM_CAT,
first_call, second_call, inline_command_handler, i7_source_handler);
Emit::up();
}
@ -134,7 +138,8 @@ void EmitInterSchemas::emit_inner(inter_schema_node *isn, value_holster *VH,
Emit::down();
}
EmitInterSchemas::emit_inner(at,
VH, sch, opaque_state, VAL_PRIM_CAT, inline_command_handler, i7_source_handler);
VH, sch, opaque_state, VAL_PRIM_CAT,
first_call, second_call, inline_command_handler, i7_source_handler);
}
while (d > 0) { Emit::up(); d--; }
}
@ -147,10 +152,13 @@ void EmitInterSchemas::emit_inner(inter_schema_node *isn, value_holster *VH,
int pc = VAL_PRIM_CAT;
if (InterSchemas::first_operand_ref(isn->isn_clarifier)) pc = REF_PRIM_CAT;
EmitInterSchemas::emit_inner(isn->child_node,
VH, sch, opaque_state, pc, inline_command_handler, i7_source_handler);
VH, sch, opaque_state, pc, first_call, second_call,
inline_command_handler, i7_source_handler);
if (InterSchemas::arity(isn->isn_clarifier) == 2)
EmitInterSchemas::emit_inner(isn->child_node->next_node,
VH, sch, opaque_state, VAL_PRIM_CAT, inline_command_handler, i7_source_handler);
VH, sch, opaque_state, VAL_PRIM_CAT,
first_call, second_call,
inline_command_handler, i7_source_handler);
Emit::up();
if (prim_cat == REF_PRIM_CAT) { Emit::up(); }
@ -164,7 +172,8 @@ void EmitInterSchemas::emit_inner(inter_schema_node *isn, value_holster *VH,
Emit::down();
}
EmitInterSchemas::emit_inner(at,
VH, sch, opaque_state, prim_cat, inline_command_handler, i7_source_handler);
VH, sch, opaque_state, prim_cat, first_call, second_call,
inline_command_handler, i7_source_handler);
}
while (d > 0) { Emit::up(); d--; }
@ -183,7 +192,8 @@ void EmitInterSchemas::emit_inner(inter_schema_node *isn, value_holster *VH,
for (int i = 0; ((at) && (i<arity)); i++) {
actual_arity++;
EmitInterSchemas::emit_inner(at, VH, sch, opaque_state,
InterSchemas::ip_prim_cat(isn->isn_clarifier, i), inline_command_handler, i7_source_handler);
InterSchemas::ip_prim_cat(isn->isn_clarifier, i),
first_call, second_call, inline_command_handler, i7_source_handler);
last = at;
at = at->next_node;
}
@ -202,15 +212,18 @@ void EmitInterSchemas::emit_inner(inter_schema_node *isn, value_holster *VH,
inter_schema_node *var_node = oc_node->child_node;
inter_schema_node *cl_node = var_node?(var_node->next_node):NULL;
if ((var_node) && (cl_node)) {
EmitInterSchemas::emit_inner(var_node, VH, sch, opaque_state, REF_PRIM_CAT, inline_command_handler, i7_source_handler);
EmitInterSchemas::emit_inner(cl_node, VH, sch, opaque_state, VAL_PRIM_CAT, inline_command_handler, i7_source_handler);
EmitInterSchemas::emit_inner(var_node, VH, sch, opaque_state, REF_PRIM_CAT,
first_call, second_call, inline_command_handler, i7_source_handler);
EmitInterSchemas::emit_inner(cl_node, VH, sch, opaque_state, VAL_PRIM_CAT,
first_call, second_call, inline_command_handler, i7_source_handler);
} else internal_error("malformed OC node");
} else {
inter_schema_node *var_node = isn->child_node;
while ((var_node) && (var_node->isn_type != EXPRESSION_ISNT))
var_node = var_node->child_node;
if (var_node) {
EmitInterSchemas::emit_inner(var_node, VH, sch, opaque_state, REF_PRIM_CAT, inline_command_handler, i7_source_handler);
EmitInterSchemas::emit_inner(var_node, VH, sch, opaque_state, REF_PRIM_CAT,
first_call, second_call, inline_command_handler, i7_source_handler);
Emit::val_iname(K_value, Kinds::RunTime::I6_classname(K_object));
} else internal_error("objectloop without visible variable");
}
@ -231,7 +244,7 @@ void EmitInterSchemas::emit_inner(inter_schema_node *isn, value_holster *VH,
inter_symbol *lvar_s = LocalVariables::declare_this(lvar, FALSE, 8);
Emit::val_symbol(K_value, lvar_s);
} else {
Emit::val_symbol(K_value, EmitInterSchemas::find_identifier(t));
Emit::val_symbol(K_value, EmitInterSchemas::find_identifier(t, first_call, second_call));
}
break;
}
@ -262,7 +275,8 @@ void EmitInterSchemas::emit_inner(inter_schema_node *isn, value_holster *VH,
(*i7_source_handler)(VH, NULL, t->material);
break;
case INLINE_ISTT:
(*inline_command_handler)(VH, t, opaque_state, prim_cat);
if (inline_command_handler)
(*inline_command_handler)(VH, t, opaque_state, prim_cat);
break;
default:
internal_error("bad expression token");
@ -273,14 +287,25 @@ void EmitInterSchemas::emit_inner(inter_schema_node *isn, value_holster *VH,
if (prim_cat == REF_PRIM_CAT) { Emit::up(); }
@ =
inter_symbol *EmitInterSchemas::find_identifier(inter_schema_token *t) {
inter_symbol *EmitInterSchemas::find_identifier(inter_schema_token *t, inter_symbols_table *first_call, inter_symbols_table *second_call) {
if (t->as_quoted) return InterNames::to_symbol(t->as_quoted);
return EmitInterSchemas::find_identifier_text(t->material);
return EmitInterSchemas::find_identifier_text(t->material, first_call, second_call);
}
inter_symbol *EmitInterSchemas::find_identifier_text(text_stream *S) {
inter_symbol *EmitInterSchemas::find_identifier_text(text_stream *S, inter_symbols_table *first_call, inter_symbols_table *second_call) {
if (first_call) {
inter_symbol *I = Emit::seek_symbol(first_call, S);
if (I) return I;
}
if (second_call) {
inter_symbol *I = Emit::seek_symbol(second_call, S);
if (I) return I;
}
inter_symbol *I = Emit::seek_symbol(Emit::main_scope(), S);
if (I) return I;
return InterNames::to_symbol(Hierarchy::find_by_name(S));
I = InterNames::to_symbol(Hierarchy::find_by_name(S));
if (I) return I;
LOG("Defeated on %S\n", S);
internal_error("unable to find identifier");
return NULL;
}

View file

@ -37,14 +37,10 @@ void Hierarchy::establish(void) {
@h Basics.
@e THESAME_HL from 0
@e PLURALFOUND_HL
@e PARENT_HL
@e PARENT_HL from 0
@e CHILD_HL
@e SIBLING_HL
@e SELF_HL
@e THEDARK_HL
@e INFORMLIBRARY_HL
@e DEBUG_HL
@e TARGET_ZCODE_HL
@e TARGET_GLULX_HL
@ -82,8 +78,6 @@ void Hierarchy::establish(void) {
HierarchyLocations::con(CHILD_HL, I"child", Translation::same(), generic_basics);
HierarchyLocations::con(SIBLING_HL, I"sibling", Translation::same(), generic_basics);
HierarchyLocations::con(SELF_HL, I"self", Translation::same(), generic_basics);
HierarchyLocations::con(THEDARK_HL, I"thedark", Translation::same(), generic_basics);
HierarchyLocations::con(INFORMLIBRARY_HL, I"InformLibrary", Translation::same(), generic_basics);
HierarchyLocations::con(RESPONSETEXTS_HL, I"ResponseTexts", Translation::same(), generic_basics);
HierarchyLocations::con(DEBUG_HL, I"DEBUG", Translation::same(), generic_basics);
HierarchyLocations::con(TARGET_ZCODE_HL, I"TARGET_ZCODE", Translation::same(), generic_basics);
@ -1055,6 +1049,10 @@ void Hierarchy::establish(void) {
@
@e THESAME_HL
@e PLURALFOUND_HL
@e THEDARK_HL
@e INFORMLIBRARY_HL
@e ACT_REQUESTER_HL
@e ACTION_HL
@e ACTIONCURRENTLYHAPPENINGFLAG_HL
@ -1293,6 +1291,8 @@ void Hierarchy::establish(void) {
location_requirement template = HierarchyLocations::this_package(Hierarchy::template());
HierarchyLocations::con(THESAME_HL, I"##TheSame", Translation::same(), template);
HierarchyLocations::con(PLURALFOUND_HL, I"##PluralFound", Translation::same(), template);
HierarchyLocations::con(THEDARK_HL, I"thedark", Translation::same(), template);
HierarchyLocations::con(INFORMLIBRARY_HL, I"InformLibrary", Translation::same(), template);
HierarchyLocations::con(ACT_REQUESTER_HL, I"act_requester", Translation::same(), template);
HierarchyLocations::con(ACTION_HL, I"action", Translation::same(), template);
HierarchyLocations::con(ACTIONCURRENTLYHAPPENINGFLAG_HL, I"ActionCurrentlyHappeningFlag", Translation::same(), template);
@ -1563,13 +1563,11 @@ package_request *Hierarchy::exotic_package(int x) {
=
inter_name *Hierarchy::post_process(int HL_id, inter_name *iname) {
switch (HL_id) {
// case THESAME_HL:
// case PLURALFOUND_HL:
case PARENT_HL:
case CHILD_HL:
case SIBLING_HL:
case THEDARK_HL:
case INFORMLIBRARY_HL:
// case THEDARK_HL:
// case INFORMLIBRARY_HL:
case FLOAT_NAN_HL:
case RESPONSETEXTS_HL:
Emit::named_numeric_constant(iname, 0);
@ -1592,7 +1590,10 @@ inter_name *Hierarchy::find(int id) {
}
void Hierarchy::make_available(inter_name *iname) {
HierarchyLocations::make_as(-1, Emit::to_text(iname), iname);
text_stream *ma_as = Emit::get_translation(iname);
if (Str::len(ma_as) == 0) ma_as = Emit::to_text(iname);
LOG("MA: %S = $3\n", ma_as, InterNames::to_symbol(iname));
HierarchyLocations::make_as(-1, ma_as, iname);
}
inter_name *Hierarchy::find_by_name(text_stream *name) {
@ -1613,15 +1614,6 @@ package_request *Hierarchy::main(void) {
return main_pr;
}
package_request *resources_pr = NULL;
package_request *Hierarchy::resources(void) {
if (resources_pr == NULL)
resources_pr = Packaging::request(
InterNames::explicitly_named(I"resources", Hierarchy::main()),
PackageTypes::get(I"_plain"));
return resources_pr;
}
package_request *template_pr = NULL;
package_request *Hierarchy::template(void) {
if (template_pr == NULL) {

View file

@ -138,6 +138,7 @@ int PL::Parsing::Visibility::parsing_complete_model(int stage) {
if (stage == 5) {
instance *I;
P_name = Properties::Valued::new_nameless(I"name", K_text);
Hierarchy::make_available(PL::Parsing::Visibility::name_name());
P_parse_name = Properties::Valued::new_nameless(I"parse_name", K_value);
P_action_bitmap = Properties::Valued::new_nameless(I"action_bitmap", K_value);

View file

@ -45,6 +45,7 @@ void CodeGen::Assimilate::assimilate(inter_reading_state *IRS) {
case DEFAULT_PLM:
case CONSTANT_PLM:
case FAKEACTION_PLM:
case OBJECT_PLM:
case VERB_PLM:
if (unchecked_kind_symbol) @<Assimilate definition@>;
break;
@ -119,10 +120,15 @@ void CodeGen::Assimilate::assimilate(inter_reading_state *IRS) {
identifier = Str::new();
WRITE_TO(identifier, "##%S", old);
}
if (switch_on == OBJECT_PLM) value = NULL;
if (switch_on != DEFAULT_PLM) {
inter_symbol *con_name = CodeGen::Assimilate::maybe_extern(I, identifier, into_scope);
Inter::Symbols::annotate_i(I, con_name, ASSIMILATED_IANN, 1);
if (switch_on == FAKEACTION_PLM)
Inter::Symbols::annotate_i(I, con_name, FAKE_ACTION_IANN, 1);
if (switch_on == OBJECT_PLM)
Inter::Symbols::annotate_i(I, con_name, OBJECT_IANN, 1);
if (con_name->equated_to) {
inter_symbol *external_name = con_name->equated_to;
@ -134,13 +140,8 @@ void CodeGen::Assimilate::assimilate(inter_reading_state *IRS) {
switch (switch_on) {
case CONSTANT_PLM:
@<Assimilate a value@>;
CodeGen::Link::guard(Inter::Constant::new_numerical(&ib,
Inter::SymbolsTables::id_from_symbol(I, outer, con_name),
Inter::SymbolsTables::id_from_symbol(I, outer, unchecked_kind_symbol), v1, v2,
baseline, NULL));
break;
case FAKEACTION_PLM:
case OBJECT_PLM:
@<Assimilate a value@>;
CodeGen::Link::guard(Inter::Constant::new_numerical(&ib,
Inter::SymbolsTables::id_from_symbol(I, outer, con_name),
@ -341,6 +342,7 @@ void CodeGen::Assimilate::assimilate(inter_reading_state *IRS) {
var_count++;
inter_symbol *loc_name = Inter::SymbolsTables::create_with_unique_name(Inter::Package::local_symbols(block_name), value);
Inter::Symbols::local(loc_name);
CodeGen::Link::guard(Inter::Local::new(&ib, block_name, loc_name, unchecked_kind_symbol, 0, baseline+1, NULL));
DISCARD_TEXT(value);
@ -359,7 +361,7 @@ void CodeGen::Assimilate::assimilate(inter_reading_state *IRS) {
while ((L>0) && (Str::get_at(body, L) != ']')) L--;
while ((L>0) && (Characters::is_whitespace(Str::get_at(body, L-1)))) L--;
Str::truncate(body, L);
CodeGen::Link::entire_splat(&ib, NULL, body, baseline+2, block_name);
CodeGen::Assimilate::routine_body(&ib, block_name, baseline+2, body);
}
CodeGen::Link::guard(Inter::Label::new(&ib, block_name, end_name, baseline+1, NULL));
@ -654,3 +656,33 @@ inter_symbol *CodeGen::Assimilate::computed_constant_symbol(inter_package *pack)
DISCARD_TEXT(NN);
return mcc_name;
}
int rb_splat_count = 1;
void CodeGen::Assimilate::routine_body(inter_reading_state *IRS, inter_symbol *block_name, inter_t offset, text_stream *body) {
if (Str::is_whitespace(body)) return;
if (Str::len(body) < 20) {
LOG("=======\n\nCandidate (%S): '%S'\n\n", block_name->symbol_name, body);
inter_schema *sch = InterSchemas::from_text(body, FALSE, 0, NULL);
if (sch == NULL) LOG("NULL SCH\n");
else if (sch->node_tree == NULL) {
LOG("Lint fail: Non-empty text but empty scheme\n");
internal_error("inter schema empty");
} else InterSchemas::log(sch);
#ifdef CORE_MODULE
current_inter_routine = block_name;
Packaging::set_state(IRS, Packaging::enclosure());
Emit::push_code_position(Emit::new_cip(IRS));
value_holster VH = Holsters::new(INTER_VOID_VHMODE);
inter_symbols_table *scope1 = Inter::Package::local_symbols(block_name);
inter_symbols_table *scope2 = Inter::Packages::scope(Packaging::incarnate(Hierarchy::template()));
EmitInterSchemas::emit(&VH, sch, NULL, TRUE, FALSE, scope1, scope2, NULL, NULL);
Emit::pop_code_position();
current_inter_routine = NULL;
return;
#endif
}
CodeGen::Link::entire_splat(IRS, NULL, body, offset, block_name);
LOG("Splat %d\n", rb_splat_count++);
}

View file

@ -188,8 +188,8 @@ compilation process, and never survive into the final schema:
@e RAW_ISTT from 1 /* something unidentified as yet */
@e WHITE_SPACE_ISTT /* a stretch of white space */
@e RESERVED_ISTT /* am I6 reserved word such as |while| */
@e OPERATOR_ISTT /* an I6 operator such as |-->| or |+| */
@e RESERVED_ISTT /* am I6 reserved word such as |while| */
@e OPERATOR_ISTT /* an I6 operator such as |-->| or |+| */
@e DIVIDER_ISTT /* a semicolon used to divide I6 statements */
@e OPEN_ROUND_ISTT /* open round bracket */
@e CLOSE_ROUND_ISTT /* close round bracket */
@ -398,7 +398,8 @@ we go to some trouble here.
=
void InterSchemas::log(inter_schema *sch) {
if (sch == NULL) LOG("<null schema>");
if (sch == NULL) LOG("<null schema>\n");
else if (sch->node_tree == NULL) LOG("<schema without nodes>\n");
else InterSchemas::log_depth(sch->node_tree, 0);
}
@ -653,6 +654,7 @@ inter_schema *InterSchemas::from_text(text_stream *from, int abbreviated, int no
@<Begin the schema as a single expression node with a linked list of tokens@>;
@<Perform transformations to grow the tree and reduce the token count@>;
InterSchemas::lint(sch);
if ((Log::aspect_switched_on(SCHEMA_COMPILATION_DA)) ||
@ -1125,6 +1127,7 @@ language opcodes such as |@pull|.
@<Break off here for operators@> =
int monograph = TRUE, digraph = FALSE, trigraph = FALSE;
if ((Characters::isalnum(c1)) || (c1 == '_')) monograph = FALSE;
if ((c1 == '#') && (Characters::isalpha(c2))) monograph = FALSE;
if ((c1 == '@') && (Characters::isalpha(c2))) monograph = FALSE;
if ((c1 == '+') && (c2 == '+')) digraph = TRUE;
@ -1197,6 +1200,15 @@ inclusive; we ignore an empty token.
@<Identify this new token@> =
if (Str::get_at(T, 0) == '@') is = OPCODE_ISTT;
if ((Str::get_at(T, 0) == '#') && (Characters::isalpha(Str::get_at(T, 1)))) {
is = IDENTIFIER_ISTT;
LOOP_THROUGH_TEXT(P, T) {
int c = Str::get(P);
if ((c != '_') && (c != '#') && (!Characters::isalnum(c)))
is = RAW_ISTT;
}
LOG("Looks hashy! %S\n", T);;
}
if (Characters::isalpha(Str::get_at(T, 0))) {
is = IDENTIFIER_ISTT;
LOOP_THROUGH_TEXT(P, T) {
@ -1799,6 +1811,9 @@ int InterSchemas::identify_constructs(inter_schema_node *par, inter_schema_node
} else if (Str::eq(pr->material, I"string")) {
subordinate_to = printstring_interp;
operand1 = n;
} else if (Str::eq(pr->material, I"name")) {
subordinate_to = printname_interp;
operand1 = n;
} else if (Str::eq(pr->material, I"the")) {
subordinate_to = printdef_interp;
operand1 = n;
@ -1966,6 +1981,10 @@ int InterSchemas::identify_constructs(inter_schema_node *par, inter_schema_node
if (l->ist_type != WHITE_SPACE_ISTT) {
inter_schema_node *new_isn = InterSchemas::new_node(isn->parent_schema, EXPRESSION_ISNT);
new_isn->expression_tokens = l; l->next = NULL; l->owner = new_isn;
if (l->operation_primitive) {
l->ist_type = IDENTIFIER_ISTT;
l->operation_primitive = NULL;
}
if (isn->child_node == NULL) isn->child_node = new_isn;
else if (prev_node) prev_node->next_node = new_isn;
new_isn->parent_node = isn;
@ -2136,7 +2155,7 @@ int InterSchemas::remove_empties(inter_schema_node *par, inter_schema_node *isn)
if ((isn->isn_type == EXPRESSION_ISNT) && (isn->expression_tokens == NULL)) {
if (prev) prev->next_node = isn->next_node;
else if (par) par->child_node = isn->next_node;
else isn->parent_schema->node_tree = NULL;
else isn->parent_schema->node_tree = isn->next_node;
return TRUE;
}
if (InterSchemas::remove_empties(isn, isn->child_node)) return TRUE;

View file

@ -71,6 +71,7 @@ void CodeGen::to_I6(inter_repository *I, OUTPUT_STREAM) {
case CONSTANT_IST: {
inter_symbol *con_name =
Inter::SymbolsTables::symbol_from_frame_data(P, DEFN_CONST_IFLD);
if (Inter::Symbols::read_annotation(con_name, OBJECT_IANN) == 1) break;
if (Inter::Packages::container(P) == Inter::Packages::main(I)) {
WRITE_TO(STDERR, "Bad constant: %S\n", con_name->symbol_name);
internal_error("constant defined in main");
@ -105,7 +106,8 @@ void CodeGen::to_I6(inter_repository *I, OUTPUT_STREAM) {
case INSTANCE_IST:
CodeGen::frame(TO, I, P); break;
case SPLAT_IST:
if (P.data[PLM_SPLAT_IFLD] != OBJECT_PLM) CodeGen::frame(TO, I, P);
internal_error("top-level splat remaining");
// if (P.data[PLM_SPLAT_IFLD] != OBJECT_PLM) CodeGen::frame(TO, I, P);
break;
case PROPERTYVALUE_IST:
@<Property knowledge@>;
@ -180,8 +182,8 @@ void CodeGen::to_I6(inter_repository *I, OUTPUT_STREAM) {
}
WRITE("%S", summations_at_eof);
// WRITE("%S", attributes_at_eof);
WRITE("%S", arrays_at_eof);
WRITE("%S", main_matter);
WRITE("%S", routines_at_eof);
WRITE("%S", code_at_eof);
@ -190,14 +192,10 @@ void CodeGen::to_I6(inter_repository *I, OUTPUT_STREAM) {
@<Property knowledge@> =
if (properties_written == FALSE) {
for (int j=0; j<no_repos; j++) {
inter_repository *I = repos[j];
inter_frame P;
LOOP_THROUGH_FRAMES(P, I) {
if ((P.data[ID_IFLD] == SPLAT_IST) && (P.data[PLM_SPLAT_IFLD] == OBJECT_PLM))
CodeGen::frame(TO, I, P);
}
}
WRITE_TO(TO, "Object Compass \"compass\" has concealed;\n");
WRITE_TO(TO, "Object thedark \"(darkness object)\";\n");
WRITE_TO(TO, "Object InformParser \"(Inform Parser)\" has proper;\n");
WRITE_TO(TO, "Object InformLibrary \"(Inform Library)\" has proper;\n");
properties_written = TRUE;
CodeGen::IP::knowledge(TO, I, code_at_eof, attributes_at_eof);
}
@ -278,20 +276,11 @@ void CodeGen::constant(OUTPUT_STREAM, inter_repository *I, inter_frame P) {
inter_symbol *con_name = Inter::SymbolsTables::symbol_from_frame_data(P, DEFN_CONST_IFLD);
if (Inter::Symbols::read_annotation(con_name, INLINE_ARRAY_IANN) == 1) return;
if (Inter::Symbols::read_annotation(con_name,ACTION_IANN) == 1) {
if (Inter::Symbols::read_annotation(con_name, FAKE_ACTION_IANN) == 1) {
WRITE("Fake_action %S;\n", con_name->symbol_name);
}
return;
}
if (Inter::Symbols::read_annotation(con_name, ACTION_IANN) == 1) return;
if (Str::eq(con_name->symbol_name, I"nothing")) return;
if ((Str::eq(con_name->symbol_name, I"##TheSame")) ||
(Str::eq(con_name->symbol_name, I"##PluralFound")) ||
(Str::eq(con_name->symbol_name, I"##Miscellany")) ||
(Str::eq(con_name->symbol_name, I"##ListMiscellany"))) {
if (Inter::Symbols::read_annotation(con_name, FAKE_ACTION_IANN) == 1) {
text_stream *fa = Str::duplicate(con_name->symbol_name);
Str::delete_first_character(fa);
Str::delete_first_character(fa);
@ -302,8 +291,23 @@ void CodeGen::constant(OUTPUT_STREAM, inter_repository *I, inter_frame P) {
if (Str::eq(con_name->symbol_name, I"parent")) return;
if (Str::eq(con_name->symbol_name, I"child")) return;
if (Str::eq(con_name->symbol_name, I"sibling")) return;
if (Str::eq(con_name->symbol_name, I"thedark")) return;
if (Str::eq(con_name->symbol_name, I"InformLibrary")) return;
if (Str::eq(con_name->symbol_name, I"thedark")) {
// WRITE("Object thedark \"(darkness object)\";\n");
return;
}
if (Str::eq(con_name->symbol_name, I"InformLibrary")) {
// WRITE("Object InformLibrary \"(Inform Library)\" has proper;\n");
return;
}
if (Str::eq(con_name->symbol_name, I"InformParser")) {
// WRITE("Object InformParser \"(Inform Parser)\" has proper;\n");
return;
}
if (Str::eq(con_name->symbol_name, I"Compass")) {
// WRITE("Object Compass \"compass\" has concealed;\n");
return;
}
if (Str::eq(con_name->symbol_name, I"ResponseTexts")) return;
if (Str::eq(con_name->symbol_name, I"FLOAT_NAN")) return;

View file

@ -44,7 +44,6 @@ inter_reading_state Inter::Bookmarks::from_package(inter_package *pack) {
IRS.pos = pos;
return IRS;
}
LOG("Didn't nail it.");
return IRS;
}
@ -59,7 +58,6 @@ inter_reading_state Inter::Bookmarks::from_frame(inter_frame D) {
IRS.pos = pos;
return IRS;
}
LOG("Didn't nail it.");
return IRS;
}

View file

@ -24,6 +24,7 @@ Defining the one true set of Inter annotation codes.
@e EITHER_OR_IANN
@e ENCLOSING_IANN
@e FAKE_ACTION_IANN
@e OBJECT_IANN
@e HOLDING_IANN
@e INLINE_ARRAY_IANN
@e LATE_IANN
@ -76,6 +77,7 @@ void Inter::Canon::declare(void) {
Inter::Defn::create_annotation(EITHER_OR_IANN, I"__either_or", FALSE);
Inter::Defn::create_annotation(ENCLOSING_IANN, I"__enclosing", FALSE);
Inter::Defn::create_annotation(FAKE_ACTION_IANN, I"__fake_action", FALSE);
Inter::Defn::create_annotation(OBJECT_IANN, I"__object", FALSE);
Inter::Defn::create_annotation(HOLDING_IANN, I"__holding", FALSE);
Inter::Defn::create_annotation(INLINE_ARRAY_IANN, I"__inline_array", FALSE);
Inter::Defn::create_annotation(LATE_IANN, I"__late", FALSE);