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:
parent
1f5c282b27
commit
9a41dfadbd
|
@ -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><<span class="cwebmacro">Assimilate definition</span> <span class="cwebmacronumber">1.1</span>><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">-></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">-></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>
|
||||
<<span class="cwebmacro">Assimilate a value</span> <span class="cwebmacronumber">1.1.2</span>><span class="plain">;</span>
|
||||
<span class="functiontext">CodeGen::Link::guard</span><span class="plain">(</span><span class="identifier">Inter::Constant::new_numerical</span><span class="plain">(&</span><span class="identifier">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>
|
||||
<<span class="cwebmacro">Assimilate a value</span> <span class="cwebmacronumber">1.1.2</span>><span class="plain">;</span>
|
||||
<span class="functiontext">CodeGen::Link::guard</span><span class="plain">(</span><span class="identifier">Inter::Constant::new_numerical</span><span class="plain">(&</span><span class="identifier">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>
|
||||
<<span class="cwebmacro">Assimilate a value</span> <span class="cwebmacronumber">1.1.2</span>><span class="plain">;</span>
|
||||
|
@ -339,7 +338,7 @@
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP1_1">§1.1</a> (four times).</p>
|
||||
<p class="endnote">This code is used in <a href="#SP1_1">§1.1</a> (three times).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP1_2"></a><b>§1.2. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Assimilate routine</span> <span class="cwebmacronumber">1.2</span>> =
|
||||
|
@ -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">(&</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">>0) && (</span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">body</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">) != </span><span class="character">']'</span><span class="plain">)) </span><span class="identifier">L</span><span class="plain">--;</span>
|
||||
<span class="reserved">while</span><span class="plain"> ((</span><span class="identifier">L</span><span class="plain">>0) && (</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">(&</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">(&</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">(&</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">) < 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">-></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">>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">(&</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">§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-->
|
||||
|
|
|
@ -132,7 +132,7 @@
|
|||
|
||||
<p class="endnote">The function CodeGen::Link::guard is used in 2/alm (<a href="2-alm.html#SP1_1">§1.1</a>, <a href="2-alm.html#SP1_2">§1.2</a>, <a href="2-alm.html#SP3">§3</a>), 3/ip (<a href="3-ip.html#SP2">§2</a>).</p>
|
||||
|
||||
<p class="endnote">The function CodeGen::Link::entire_splat is used in <a href="#SP2">§2</a>, 2/alm (<a href="2-alm.html#SP1_2">§1.2</a>).</p>
|
||||
<p class="endnote">The function CodeGen::Link::entire_splat is used in <a href="#SP2">§2</a>, 2/alm (<a href="2-alm.html#SP3">§3</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP2"></a><b>§2. </b></p>
|
||||
|
||||
|
|
|
@ -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">--></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">--></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">"<null schema>"</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 schema>\</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">>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">"<schema without nodes>\</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">>node_tree</span><span class="plain">, 0);</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
|
@ -866,6 +867,7 @@ for instance, we could simply have defined:
|
|||
|
||||
<<span class="cwebmacro">Begin the schema as a single expression node with a linked list of tokens</span> <span class="cwebmacronumber">20.2</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Perform transformations to grow the tree and reduce the token count</span> <span class="cwebmacronumber">20.4</span>><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">) && (</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">) && (</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">) && (</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">) && (</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">) && (</span><span class="identifier">c</span><span class="plain"> != </span><span class="character">'#'</span><span class="plain">) && (!</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">>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">>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">>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">>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">>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">>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">>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">>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">>operation_primitive</span><span class="plain">) {</span>
|
||||
<span class="identifier">l</span><span class="plain">-</span><span class="element">>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">>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">>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">>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">>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">>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">>isn_type</span><span class="plain"> == </span><span class="constant">EXPRESSION_ISNT</span><span class="plain">) && (</span><span class="identifier">isn</span><span class="plain">-</span><span class="element">>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">>next_node</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-</span><span class="element">>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">>child_node</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-</span><span class="element">>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">>parent_schema</span><span class="plain">-</span><span class="element">>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">>parent_schema</span><span class="plain">-</span><span class="element">>node_tree</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-</span><span class="element">>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">>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>
|
||||
|
|
|
@ -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">-></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>
|
||||
<<span class="cwebmacro">Property knowledge</span> <span class="cwebmacronumber">1.1</span>><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"><</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">) && (</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">§1</a>, 2/erm (<a href="2-erm.html#SP1">§1</a>).</p>
|
||||
|
||||
<p class="endnote">The function CodeGen::frame is used in <a href="#SP1">§1</a>, <a href="#SP1_1">§1.1</a>, <a href="#SP3">§3</a>, <a href="#SP4">§4</a>, <a href="#SP4_1">§4.1</a>, <a href="#SP4_2">§4.2</a>, <a href="#SP4_6">§4.6</a>, <a href="#SP4_7">§4.7</a>, <a href="#SP4_8">§4.8</a>, <a href="#SP4_9">§4.9</a>, <a href="#SP4_10">§4.10</a>, <a href="#SP4_11">§4.11</a>, <a href="#SP4_12">§4.12</a>, <a href="#SP4_13">§4.13</a>, <a href="#SP4_14">§4.14</a>, <a href="#SP4_15">§4.15</a>, <a href="#SP4_16">§4.16</a>, <a href="#SP4_17">§4.17</a>, <a href="#SP4_18">§4.18</a>, <a href="#SP4_19">§4.19</a>, <a href="#SP4_20">§4.20</a>, <a href="#SP4_21">§4.21</a>, <a href="#SP4_22">§4.22</a>, <a href="#SP4_23">§4.23</a>, <a href="#SP4_24">§4.24</a>, <a href="#SP4_25">§4.25</a>, <a href="#SP4_26">§4.26</a>, <a href="#SP4_27">§4.27</a>, <a href="#SP4_28">§4.28</a>, <a href="#SP4_29">§4.29</a>, <a href="#SP4_30">§4.30</a>, <a href="#SP4_31">§4.31</a>, <a href="#SP4_32">§4.32</a>, <a href="#SP4_33">§4.33</a>, <a href="#SP4_34">§4.34</a>, <a href="#SP4_35">§4.35</a>, <a href="#SP4_39">§4.39</a>, <a href="#SP4_40">§4.40</a>, <a href="#SP4_41">§4.41</a>, <a href="#SP4_42">§4.42</a>, <a href="#SP4_43">§4.43</a>, <a href="#SP4_44">§4.44</a>, <a href="#SP4_45">§4.45</a>, <a href="#SP4_46">§4.46</a>, <a href="#SP4_47">§4.47</a>, <a href="#SP4_48">§4.48</a>, <a href="#SP4_49">§4.49</a>, <a href="#SP4_50">§4.50</a>, <a href="#SP4_51">§4.51</a>, <a href="#SP4_52">§4.52</a>, <a href="#SP4_53">§4.53</a>, <a href="#SP4_54">§4.54</a>, <a href="#SP4_55">§4.55</a>, <a href="#SP4_56">§4.56</a>, <a href="#SP4_57">§4.57</a>, <a href="#SP4_58">§4.58</a>, <a href="#SP4_59">§4.59</a>, <a href="#SP4_60">§4.60</a>, <a href="#SP4_61">§4.61</a>, <a href="#SP4_62">§4.62</a>, <a href="#SP4_63">§4.63</a>, <a href="#SP4_64">§4.64</a>, <a href="#SP4_65">§4.65</a>, <a href="#SP4_66">§4.66</a>, <a href="#SP4_67">§4.67</a>, <a href="#SP4_68">§4.68</a>, <a href="#SP4_69">§4.69</a>, <a href="#SP4_70">§4.70</a>, <a href="#SP4_71">§4.71</a>, <a href="#SP4_72">§4.72</a>, <a href="#SP4_73">§4.73</a>, <a href="#SP4_74">§4.74</a>, <a href="#SP4_75">§4.75</a>, <a href="#SP4_76">§4.76</a>, <a href="#SP4_77">§4.77</a>, <a href="#SP4_78">§4.78</a>, <a href="#SP4_79">§4.79</a>, <a href="#SP4_80">§4.80</a>, <a href="#SP4_81">§4.81</a>, <a href="#SP4_82">§4.82</a>, <a href="#SP4_83">§4.83</a>, <a href="#SP4_84">§4.84</a>, <a href="#SP4_85">§4.85</a>, <a href="#SP4_86">§4.86</a>, <a href="#SP4_87">§4.87</a>, <a href="#SP4_88">§4.88</a>, <a href="#SP4_89">§4.89</a>.</p>
|
||||
<p class="endnote">The function CodeGen::frame is used in <a href="#SP1">§1</a>, <a href="#SP3">§3</a>, <a href="#SP4">§4</a>, <a href="#SP4_1">§4.1</a>, <a href="#SP4_2">§4.2</a>, <a href="#SP4_6">§4.6</a>, <a href="#SP4_7">§4.7</a>, <a href="#SP4_8">§4.8</a>, <a href="#SP4_9">§4.9</a>, <a href="#SP4_10">§4.10</a>, <a href="#SP4_11">§4.11</a>, <a href="#SP4_12">§4.12</a>, <a href="#SP4_13">§4.13</a>, <a href="#SP4_14">§4.14</a>, <a href="#SP4_15">§4.15</a>, <a href="#SP4_16">§4.16</a>, <a href="#SP4_17">§4.17</a>, <a href="#SP4_18">§4.18</a>, <a href="#SP4_19">§4.19</a>, <a href="#SP4_20">§4.20</a>, <a href="#SP4_21">§4.21</a>, <a href="#SP4_22">§4.22</a>, <a href="#SP4_23">§4.23</a>, <a href="#SP4_24">§4.24</a>, <a href="#SP4_25">§4.25</a>, <a href="#SP4_26">§4.26</a>, <a href="#SP4_27">§4.27</a>, <a href="#SP4_28">§4.28</a>, <a href="#SP4_29">§4.29</a>, <a href="#SP4_30">§4.30</a>, <a href="#SP4_31">§4.31</a>, <a href="#SP4_32">§4.32</a>, <a href="#SP4_33">§4.33</a>, <a href="#SP4_34">§4.34</a>, <a href="#SP4_35">§4.35</a>, <a href="#SP4_39">§4.39</a>, <a href="#SP4_40">§4.40</a>, <a href="#SP4_41">§4.41</a>, <a href="#SP4_42">§4.42</a>, <a href="#SP4_43">§4.43</a>, <a href="#SP4_44">§4.44</a>, <a href="#SP4_45">§4.45</a>, <a href="#SP4_46">§4.46</a>, <a href="#SP4_47">§4.47</a>, <a href="#SP4_48">§4.48</a>, <a href="#SP4_49">§4.49</a>, <a href="#SP4_50">§4.50</a>, <a href="#SP4_51">§4.51</a>, <a href="#SP4_52">§4.52</a>, <a href="#SP4_53">§4.53</a>, <a href="#SP4_54">§4.54</a>, <a href="#SP4_55">§4.55</a>, <a href="#SP4_56">§4.56</a>, <a href="#SP4_57">§4.57</a>, <a href="#SP4_58">§4.58</a>, <a href="#SP4_59">§4.59</a>, <a href="#SP4_60">§4.60</a>, <a href="#SP4_61">§4.61</a>, <a href="#SP4_62">§4.62</a>, <a href="#SP4_63">§4.63</a>, <a href="#SP4_64">§4.64</a>, <a href="#SP4_65">§4.65</a>, <a href="#SP4_66">§4.66</a>, <a href="#SP4_67">§4.67</a>, <a href="#SP4_68">§4.68</a>, <a href="#SP4_69">§4.69</a>, <a href="#SP4_70">§4.70</a>, <a href="#SP4_71">§4.71</a>, <a href="#SP4_72">§4.72</a>, <a href="#SP4_73">§4.73</a>, <a href="#SP4_74">§4.74</a>, <a href="#SP4_75">§4.75</a>, <a href="#SP4_76">§4.76</a>, <a href="#SP4_77">§4.77</a>, <a href="#SP4_78">§4.78</a>, <a href="#SP4_79">§4.79</a>, <a href="#SP4_80">§4.80</a>, <a href="#SP4_81">§4.81</a>, <a href="#SP4_82">§4.82</a>, <a href="#SP4_83">§4.83</a>, <a href="#SP4_84">§4.84</a>, <a href="#SP4_85">§4.85</a>, <a href="#SP4_86">§4.86</a>, <a href="#SP4_87">§4.87</a>, <a href="#SP4_88">§4.88</a>, <a href="#SP4_89">§4.89</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP3"></a><b>§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">-></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">-></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">-></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">-></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">-></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">-></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">-></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">-></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">-></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">-></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">-></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">-></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">-></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">-></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">-></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">-></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">-></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">-></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>
|
||||
|
||||
|
|
|
@ -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">(&</span><span class="identifier">VH</span><span class="plain">, </span><span class="identifier">sch</span><span class="plain">-</span><span class="element">>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">(&</span><span class="identifier">VH</span><span class="plain">, </span><span class="identifier">sch</span><span class="plain">-</span><span class="element">>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">&</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>
|
||||
|
|
|
@ -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">>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">&</span><span class="functiontext">Invocations::Inline::csi_inline_inner_inner</span><span class="plain">, &</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>
|
||||
|
|
|
@ -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">>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">>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">>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">§1</a>), 13/rsfk (<a href="13-rsfk.html#SP24">§24</a>), 15/pr (<a href="15-pr.html#SP21">§21</a>), 27/hl (<a href="27-hl.html#SP3">§3</a>, <a href="27-hl.html#SP3_1">§3.1</a>), 27/pc (<a href="27-pc.html#SP18">§18</a>).</p>
|
||||
|
||||
<p class="endnote">The function Emit::get_translation is used in 15/pr (<a href="15-pr.html#SP22_1">§22.1</a>).</p>
|
||||
<p class="endnote">The function Emit::get_translation is used in 15/pr (<a href="15-pr.html#SP22_1">§22.1</a>), 27/hr (<a href="27-hr.html#SP5">§5</a>).</p>
|
||||
|
||||
<p class="endnote">The function Emit::to_text is used in 15/vp (<a href="15-vp.html#SP3">§3</a>), 27/hr (<a href="27-hr.html#SP5">§5</a>).</p>
|
||||
|
||||
|
|
|
@ -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">-></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">-></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">-></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">-></span><span class="identifier">ist_type</span><span class="plain"> == </span><span class="identifier">INLINE_ISTT</span><span class="plain">) &&</span>
|
||||
<span class="plain">((</span><span class="identifier">t</span><span class="plain">-></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">-></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">)(&</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">)(&</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">-></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">-></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">-></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">-></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">-></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">-></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">-></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"> > 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">-></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">-></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">-></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">-></span><span class="identifier">child_node</span><span class="plain">-></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"> > 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">) && (</span><span class="identifier">i</span><span class="plain"><</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">-></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">-></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">-></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">-></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">-></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">) && (</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">-></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">) && (</span><span class="identifier">var_node</span><span class="plain">-></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">-></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">-></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">-></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">-></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">-></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">-></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>
|
||||
|
|
|
@ -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">§11</a>, <a href="27-pc.html#SP14">§14</a>), 27/ei (<a href="27-ei.html#SP3">§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">§1.52</a>, 15/ep (<a href="15-ep.html#SP4">§4</a>), 27/hl (<a href="27-hl.html#SP3">§3</a>, <a href="27-hl.html#SP5">§5</a>), 27/in (<a href="27-in.html#SP5">§5</a>).</p>
|
||||
<p class="endnote">The function Hierarchy::template is used in <a href="#SP1_52">§1.52</a>, 15/ep (<a href="15-ep.html#SP4">§4</a>), 27/hl (<a href="27-hl.html#SP3">§3</a>, <a href="27-hl.html#SP5">§5</a>), 27/in (<a href="27-in.html#SP5">§5</a>), 27/ei (<a href="27-ei.html#SP2">§2</a>).</p>
|
||||
|
||||
<p class="endnote">The function Hierarchy::package is used in 5/nv (<a href="5-nv.html#SP16">§16</a>), 6/bp (<a href="6-bp.html#SP31">§31</a>), 15/pr (<a href="15-pr.html#SP27">§27</a>), 15/ma (<a href="15-ma.html#SP11_3">§11.3</a>), 19/tb (<a href="19-tb.html#SP9">§9</a>), 22/ph (<a href="22-ph.html#SP11">§11</a>), 22/tp (<a href="22-tp.html#SP5">§5</a>).</p>
|
||||
|
||||
|
|
|
@ -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">§4</a>), 21/rl (<a href="21-rl.html#SP11_2">§11.2</a>, <a href="21-rl.html#SP22">§22</a>), 26/iti (<a href="26-iti.html#SP9">§9</a>), 27/eis (<a href="27-eis.html#SP3">§3</a>), 27/ei (<a href="27-ei.html#SP2">§2</a>, <a href="27-ei.html#SP3">§3</a>, <a href="27-ei.html#SP4">§4</a>, <a href="27-ei.html#SP5">§5</a>).</p>
|
||||
<p class="endnote">The function InterNames::to_symbol is used in 15/epv (<a href="15-epv.html#SP4">§4</a>), 21/rl (<a href="21-rl.html#SP11_2">§11.2</a>, <a href="21-rl.html#SP22">§22</a>), 26/iti (<a href="26-iti.html#SP9">§9</a>), 27/hr (<a href="27-hr.html#SP5">§5</a>), 27/eis (<a href="27-eis.html#SP3">§3</a>), 27/ei (<a href="27-ei.html#SP2">§2</a>, <a href="27-ei.html#SP3">§3</a>, <a href="27-ei.html#SP4">§4</a>, <a href="27-ei.html#SP5">§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">
|
||||
|
|
|
@ -387,7 +387,7 @@ specification.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Packaging::incarnate is used in <a href="#SP12">§12</a>, 27/in (<a href="27-in.html#SP7">§7</a>), 27/ei (<a href="27-ei.html#SP3">§3</a>, <a href="27-ei.html#SP5">§5</a>).</p>
|
||||
<p class="endnote">The function Packaging::incarnate is used in <a href="#SP12">§12</a>, 27/in (<a href="27-in.html#SP7">§7</a>), 27/ei (<a href="27-ei.html#SP2">§2</a>, <a href="27-ei.html#SP3">§3</a>, <a href="27-ei.html#SP5">§5</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP14"></a><b>§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">§16</a>, 27/hr (<a href="27-hr.html#SP5">§5</a>), 27/cm (<a href="27-cm.html#SP2">§2</a>).</p>
|
||||
<p class="endnote">The function Packaging::get_module is used in <a href="#SP16">§16</a>, 27/hr (<a href="27-hr.html#SP5">§5</a>), 27/cm (<a href="27-cm.html#SP2">§2</a>), 27/ei (<a href="27-ei.html#SP2">§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>§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
|
||||
|
|
|
@ -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>
|
||||
|
||||
|
|
|
@ -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>
|
||||
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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++);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in a new issue