1
0
Fork 0
mirror of https://github.com/ganelson/inform.git synced 2024-07-02 23:14:57 +03:00

Pushed to 420

This commit is contained in:
Graham Nelson 2019-05-06 01:56:40 +01:00
parent efd31f9f9f
commit f73b6d9dfd
12 changed files with 109 additions and 13 deletions

View file

@ -753,7 +753,7 @@
<span class="reserved">int</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="identifier">inter_reading_state</span><span class="plain"> </span><span class="identifier">bb</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="identifier">FALSE</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="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">body</span><span class="plain">) &lt; 350) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">body</span><span class="plain">) &lt; 420) {</span>
<span class="reserved">routine_body_request</span><span class="plain"> *</span><span class="identifier">req</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">routine_body_request</span><span class="plain">);</span>
<span class="identifier">req</span><span class="plain">-</span><span class="element">&gt;block_bookmark</span><span class="plain"> = </span><span class="identifier">bb</span><span class="plain">;</span>
<span class="identifier">req</span><span class="plain">-</span><span class="element">&gt;enclosure</span><span class="plain"> = </span><span class="identifier">Packaging::enclosure</span><span class="plain">();</span>

View file

@ -117,6 +117,7 @@
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">provides_interp</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">propertyvalue_interp</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">notin_interp</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">read_interp</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
</pre>
<p class="inwebparagraph"></p>
@ -230,6 +231,7 @@
<span class="functiontext">Primitives::emit_one</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">IRS</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"!provides"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"val val -&gt; val"</span><span class="plain">, &amp;</span><span class="identifier">provides_interp</span><span class="plain">);</span>
<span class="functiontext">Primitives::emit_one</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">IRS</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"!propertyvalue"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"val val -&gt; val"</span><span class="plain">, &amp;</span><span class="identifier">propertyvalue_interp</span><span class="plain">);</span>
<span class="functiontext">Primitives::emit_one</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">IRS</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"!notin"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"val val -&gt; val"</span><span class="plain">, &amp;</span><span class="identifier">notin_interp</span><span class="plain">);</span>
<span class="functiontext">Primitives::emit_one</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">IRS</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"!read"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"val val -&gt; void"</span><span class="plain">, &amp;</span><span class="identifier">read_interp</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Primitives::emit_one</span><span class="plain">(</span><span class="identifier">inter_repository</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">inter_reading_state</span><span class="plain"> *</span><span class="identifier">IRS</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">prim</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">category</span><span class="plain">, </span><span class="identifier">inter_symbol</span><span class="plain"> **</span><span class="identifier">to</span><span class="plain">) {</span>
@ -413,6 +415,7 @@
<span class="definitionkeyword">enum</span> <span class="constant">PROPERTYLENGTH_BIP</span>
<span class="definitionkeyword">enum</span> <span class="constant">PROVIDES_BIP</span>
<span class="definitionkeyword">enum</span> <span class="constant">PROPERTYVALUE_BIP</span>
<span class="definitionkeyword">enum</span> <span class="constant">READ_BIP</span>
</pre>
<pre class="display">
@ -526,6 +529,7 @@
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">symb</span><span class="plain">-&gt;</span><span class="identifier">symbol_name</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"!propertylength"</span><span class="plain">)) </span><span class="identifier">bip</span><span class="plain"> = </span><span class="constant">PROPERTYLENGTH_BIP</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">symb</span><span class="plain">-&gt;</span><span class="identifier">symbol_name</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"!provides"</span><span class="plain">)) </span><span class="identifier">bip</span><span class="plain"> = </span><span class="constant">PROVIDES_BIP</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">symb</span><span class="plain">-&gt;</span><span class="identifier">symbol_name</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"!propertyvalue"</span><span class="plain">)) </span><span class="identifier">bip</span><span class="plain"> = </span><span class="constant">PROPERTYVALUE_BIP</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">symb</span><span class="plain">-&gt;</span><span class="identifier">symbol_name</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"!read"</span><span class="plain">)) </span><span class="identifier">bip</span><span class="plain"> = </span><span class="constant">READ_BIP</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">bip</span><span class="plain"> != 0) {</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">symb</span><span class="plain">, </span><span class="identifier">BIP_CODE_IANN</span><span class="plain">, </span><span class="identifier">bip</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">bip</span><span class="plain">;</span>

View file

@ -439,6 +439,7 @@ compilation process, and never survive into the final schema:
<span class="definitionkeyword">enum</span> <span class="constant">QUIT_I6RW</span>
<span class="definitionkeyword">enum</span> <span class="constant">RESTORE_I6RW</span>
<span class="definitionkeyword">enum</span> <span class="constant">SPACES_I6RW</span>
<span class="definitionkeyword">enum</span> <span class="constant">READ_I6RW</span>
<span class="definitionkeyword">enum</span> <span class="constant">IFDEF_I6RW</span>
<span class="definitionkeyword">enum</span> <span class="constant">IFNDEF_I6RW</span>
<span class="definitionkeyword">enum</span> <span class="constant">IFTRUE_I6RW</span>
@ -555,7 +556,7 @@ compilation process, and never survive into the final schema:
<p class="endnote">The function InterSchemas::add_token is used in <a href="#SP20_2_2">&#167;20.2.2</a>, <a href="#SP20_2_3_1">&#167;20.2.3.1</a>, <a href="#SP20_2_4_1">&#167;20.2.4.1</a>, <a href="#SP20_2_5">&#167;20.2.5</a>, <a href="#SP20_2_2_1_4">&#167;20.2.2.1.4</a>.</p>
<p class="endnote">The function InterSchemas::add_token_to_node appears nowhere else.</p>
<p class="endnote">The function InterSchemas::add_token_to_node is used in <a href="#SP26">&#167;26</a>.</p>
<p class="endnote">The function InterSchemas::add_token_after is used in <a href="#SP21">&#167;21</a>, <a href="#SP26">&#167;26</a>.</p>
@ -1776,6 +1777,7 @@ inclusive; we ignore an empty token.
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"quit"</span><span class="plain">)) { </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">RESERVED_ISTT</span><span class="plain">; </span><span class="identifier">which_rw</span><span class="plain"> = </span><span class="constant">QUIT_I6RW</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">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"restore"</span><span class="plain">)) { </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">RESERVED_ISTT</span><span class="plain">; </span><span class="identifier">which_rw</span><span class="plain"> = </span><span class="constant">RESTORE_I6RW</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">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"spaces"</span><span class="plain">)) { </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">RESERVED_ISTT</span><span class="plain">; </span><span class="identifier">which_rw</span><span class="plain"> = </span><span class="constant">SPACES_I6RW</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">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"read"</span><span class="plain">)) { </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">RESERVED_ISTT</span><span class="plain">; </span><span class="identifier">which_rw</span><span class="plain"> = </span><span class="constant">READ_I6RW</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq_insensitive</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"#IFDEF"</span><span class="plain">)) { </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">DIRECTIVE_ISTT</span><span class="plain">; </span><span class="identifier">which_rw</span><span class="plain"> = </span><span class="constant">IFDEF_I6RW</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq_insensitive</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"#IFNDEF"</span><span class="plain">)) { </span><span class="identifier">is</span><span class="plain"> = </span><span class="constant">DIRECTIVE_ISTT</span><span class="plain">; </span><span class="identifier">which_rw</span><span class="plain"> = </span><span class="constant">IFNDEF_I6RW</span><span class="plain">; }</span>
@ -2541,8 +2543,14 @@ these out at the start of each iteration.
<span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">save_next</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-</span><span class="element">&gt;next_node</span><span class="plain">;</span>
<span class="identifier">isn</span><span class="plain">-</span><span class="element">&gt;next_node</span><span class="plain"> = </span><span class="functiontext">InterSchemas::new_node</span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">-</span><span class="element">&gt;parent_schema</span><span class="plain">, </span><span class="constant">STATEMENT_ISNT</span><span class="plain">);</span>
<span class="identifier">isn</span><span class="plain">-</span><span class="element">&gt;next_node</span><span class="plain">-</span><span class="element">&gt;parent_node</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-</span><span class="element">&gt;parent_node</span><span class="plain">;</span>
<span class="identifier">isn</span><span class="plain">-</span><span class="element">&gt;next_node</span><span class="plain">-</span><span class="element">&gt;next_node</span><span class="plain"> = </span><span class="identifier">save_next</span><span class="plain">;</span>
<span class="identifier">isn</span><span class="plain">-</span><span class="element">&gt;next_node</span><span class="plain">-</span><span class="element">&gt;isn_clarifier</span><span class="plain"> = </span><span class="identifier">return_interp</span><span class="plain">;</span>
<span class="identifier">isn</span><span class="plain">-</span><span class="element">&gt;next_node</span><span class="plain">-</span><span class="element">&gt;isn_clarifier</span><span class="plain"> = </span><span class="identifier">print_interp</span><span class="plain">;</span>
<span class="identifier">isn</span><span class="plain">-</span><span class="element">&gt;next_node</span><span class="plain">-</span><span class="element">&gt;child_node</span><span class="plain"> = </span><span class="functiontext">InterSchemas::new_node</span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">-</span><span class="element">&gt;parent_schema</span><span class="plain">, </span><span class="constant">EXPRESSION_ISNT</span><span class="plain">);</span>
<span class="identifier">isn</span><span class="plain">-</span><span class="element">&gt;next_node</span><span class="plain">-</span><span class="element">&gt;child_node</span><span class="plain">-</span><span class="element">&gt;parent_node</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-</span><span class="element">&gt;next_node</span><span class="plain">;</span>
<span class="functiontext">InterSchemas::add_token_to_node</span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">-</span><span class="element">&gt;next_node</span><span class="plain">-</span><span class="element">&gt;child_node</span><span class="plain">, </span><span class="functiontext">InterSchemas::new_token</span><span class="plain">(</span><span class="constant">DQUOTED_ISTT</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, 0, -1));</span>
<span class="identifier">isn</span><span class="plain">-</span><span class="element">&gt;next_node</span><span class="plain">-</span><span class="element">&gt;next_node</span><span class="plain"> = </span><span class="functiontext">InterSchemas::new_node</span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">-</span><span class="element">&gt;parent_schema</span><span class="plain">, </span><span class="constant">STATEMENT_ISNT</span><span class="plain">);</span>
<span class="identifier">isn</span><span class="plain">-</span><span class="element">&gt;next_node</span><span class="plain">-</span><span class="element">&gt;next_node</span><span class="plain">-</span><span class="element">&gt;parent_node</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-</span><span class="element">&gt;parent_node</span><span class="plain">;</span>
<span class="identifier">isn</span><span class="plain">-</span><span class="element">&gt;next_node</span><span class="plain">-</span><span class="element">&gt;next_node</span><span class="plain">-</span><span class="element">&gt;isn_clarifier</span><span class="plain"> = </span><span class="identifier">return_interp</span><span class="plain">;</span>
<span class="identifier">isn</span><span class="plain">-</span><span class="element">&gt;next_node</span><span class="plain">-</span><span class="element">&gt;next_node</span><span class="plain">-</span><span class="element">&gt;next_node</span><span class="plain"> = </span><span class="identifier">save_next</span><span class="plain">;</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="constant">STYLE_I6RW</span><span class="plain">: {</span>
@ -2666,6 +2674,18 @@ these out at the start of each iteration.
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">operand1</span><span class="plain">) &amp;&amp; (</span><span class="identifier">operand2</span><span class="plain">)) </span><span class="identifier">subordinate_to</span><span class="plain"> = </span><span class="identifier">move_interp</span><span class="plain">;</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">READ_I6RW</span><span class="plain">: {</span>
<span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-</span><span class="element">&gt;expression_tokens</span><span class="plain">-</span><span class="element">&gt;next</span><span class="plain">;</span>
<span class="reserved">while</span><span class="plain"> ((</span><span class="identifier">n</span><span class="plain">) &amp;&amp; (</span><span class="identifier">n</span><span class="plain">-</span><span class="element">&gt;ist_type</span><span class="plain"> == </span><span class="constant">WHITE_SPACE_ISTT</span><span class="plain">)) </span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">-</span><span class="element">&gt;next</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="identifier">n</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">-</span><span class="element">&gt;next</span><span class="plain">;</span>
<span class="reserved">while</span><span class="plain"> ((</span><span class="identifier">n</span><span class="plain">) &amp;&amp; (</span><span class="identifier">n</span><span class="plain">-</span><span class="element">&gt;ist_type</span><span class="plain"> == </span><span class="constant">WHITE_SPACE_ISTT</span><span class="plain">)) </span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">-</span><span class="element">&gt;next</span><span class="plain">;</span>
<span class="identifier">operand2</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">;</span>
<span class="identifier">operand1</span><span class="plain">-</span><span class="element">&gt;next</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">operand2</span><span class="plain">-</span><span class="element">&gt;next</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">operand1</span><span class="plain">) &amp;&amp; (</span><span class="identifier">operand2</span><span class="plain">)) </span><span class="identifier">subordinate_to</span><span class="plain"> = </span><span class="identifier">read_interp</span><span class="plain">;</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">REMOVE_I6RW</span><span class="plain">:</span>
<span class="identifier">subordinate_to</span><span class="plain"> = </span><span class="identifier">remove_interp</span><span class="plain">;</span>
<span class="reserved">break</span><span class="plain">;</span>
@ -3585,6 +3605,7 @@ which are prefix or postfix, and so on.
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="identifier">for_interp</span><span class="plain">) </span><span class="identifier">arity</span><span class="plain"> = 4;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="identifier">while_interp</span><span class="plain">) </span><span class="identifier">arity</span><span class="plain"> = 2;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="identifier">do_interp</span><span class="plain">) </span><span class="identifier">arity</span><span class="plain"> = 2;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">O</span><span class="plain"> == </span><span class="identifier">read_interp</span><span class="plain">) </span><span class="identifier">arity</span><span class="plain"> = 2;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">arity</span><span class="plain">;</span>
<span class="plain">}</span>

View file

@ -290,7 +290,7 @@
<p class="endnote">The function CodeGen::repo_list is used in <a href="#SP1">&#167;1</a>, 2/erm (<a href="2-erm.html#SP1">&#167;1</a>).</p>
<p class="endnote">The function CodeGen::frame is used in <a href="#SP1">&#167;1</a>, <a href="#SP3">&#167;3</a>, <a href="#SP4">&#167;4</a>, <a href="#SP4_1">&#167;4.1</a>, <a href="#SP4_2">&#167;4.2</a>, <a href="#SP4_4">&#167;4.4</a>, <a href="#SP4_5">&#167;4.5</a>, <a href="#SP4_8">&#167;4.8</a>, <a href="#SP4_9">&#167;4.9</a>, <a href="#SP4_10">&#167;4.10</a>, <a href="#SP4_11">&#167;4.11</a>, <a href="#SP4_12">&#167;4.12</a>, <a href="#SP4_13">&#167;4.13</a>, <a href="#SP4_14">&#167;4.14</a>, <a href="#SP4_15">&#167;4.15</a>, <a href="#SP4_16">&#167;4.16</a>, <a href="#SP4_17">&#167;4.17</a>, <a href="#SP4_18">&#167;4.18</a>, <a href="#SP4_19">&#167;4.19</a>, <a href="#SP4_20">&#167;4.20</a>, <a href="#SP4_21">&#167;4.21</a>, <a href="#SP4_22">&#167;4.22</a>, <a href="#SP4_23">&#167;4.23</a>, <a href="#SP4_24">&#167;4.24</a>, <a href="#SP4_25">&#167;4.25</a>, <a href="#SP4_26">&#167;4.26</a>, <a href="#SP4_27">&#167;4.27</a>, <a href="#SP4_28">&#167;4.28</a>, <a href="#SP4_29">&#167;4.29</a>, <a href="#SP4_30">&#167;4.30</a>, <a href="#SP4_31">&#167;4.31</a>, <a href="#SP4_32">&#167;4.32</a>, <a href="#SP4_33">&#167;4.33</a>, <a href="#SP4_34">&#167;4.34</a>, <a href="#SP4_35">&#167;4.35</a>, <a href="#SP4_36">&#167;4.36</a>, <a href="#SP4_37">&#167;4.37</a>, <a href="#SP4_38">&#167;4.38</a>, <a href="#SP4_39">&#167;4.39</a>, <a href="#SP4_40">&#167;4.40</a>, <a href="#SP4_45">&#167;4.45</a>, <a href="#SP4_46">&#167;4.46</a>, <a href="#SP4_47">&#167;4.47</a>, <a href="#SP4_48">&#167;4.48</a>, <a href="#SP4_49">&#167;4.49</a>, <a href="#SP4_50">&#167;4.50</a>, <a href="#SP4_51">&#167;4.51</a>, <a href="#SP4_52">&#167;4.52</a>, <a href="#SP4_53">&#167;4.53</a>, <a href="#SP4_54">&#167;4.54</a>, <a href="#SP4_55">&#167;4.55</a>, <a href="#SP4_56">&#167;4.56</a>, <a href="#SP4_57">&#167;4.57</a>, <a href="#SP4_58">&#167;4.58</a>, <a href="#SP4_59">&#167;4.59</a>, <a href="#SP4_60">&#167;4.60</a>, <a href="#SP4_61">&#167;4.61</a>, <a href="#SP4_62">&#167;4.62</a>, <a href="#SP4_63">&#167;4.63</a>, <a href="#SP4_64">&#167;4.64</a>, <a href="#SP4_65">&#167;4.65</a>, <a href="#SP4_66">&#167;4.66</a>, <a href="#SP4_67">&#167;4.67</a>, <a href="#SP4_68">&#167;4.68</a>, <a href="#SP4_69">&#167;4.69</a>, <a href="#SP4_70">&#167;4.70</a>, <a href="#SP4_71">&#167;4.71</a>, <a href="#SP4_72">&#167;4.72</a>, <a href="#SP4_73">&#167;4.73</a>, <a href="#SP4_74">&#167;4.74</a>, <a href="#SP4_75">&#167;4.75</a>, <a href="#SP4_76">&#167;4.76</a>, <a href="#SP4_77">&#167;4.77</a>, <a href="#SP4_78">&#167;4.78</a>, <a href="#SP4_79">&#167;4.79</a>, <a href="#SP4_80">&#167;4.80</a>, <a href="#SP4_81">&#167;4.81</a>, <a href="#SP4_82">&#167;4.82</a>, <a href="#SP4_83">&#167;4.83</a>, <a href="#SP4_84">&#167;4.84</a>, <a href="#SP4_85">&#167;4.85</a>, <a href="#SP4_86">&#167;4.86</a>, <a href="#SP4_87">&#167;4.87</a>, <a href="#SP4_88">&#167;4.88</a>, <a href="#SP4_89">&#167;4.89</a>, <a href="#SP4_90">&#167;4.90</a>, <a href="#SP4_91">&#167;4.91</a>, <a href="#SP4_92">&#167;4.92</a>, <a href="#SP4_93">&#167;4.93</a>, <a href="#SP4_94">&#167;4.94</a>, <a href="#SP4_95">&#167;4.95</a>, <a href="#SP4_96">&#167;4.96</a>, <a href="#SP4_97">&#167;4.97</a>, <a href="#SP4_98">&#167;4.98</a>, <a href="#SP4_99">&#167;4.99</a>, <a href="#SP4_100">&#167;4.100</a>, <a href="#SP4_101">&#167;4.101</a>, <a href="#SP4_102">&#167;4.102</a>, <a href="#SP4_103">&#167;4.103</a>, <a href="#SP4_104">&#167;4.104</a>, <a href="#SP4_105">&#167;4.105</a>.</p>
<p class="endnote">The function CodeGen::frame is used in <a href="#SP1">&#167;1</a>, <a href="#SP3">&#167;3</a>, <a href="#SP4">&#167;4</a>, <a href="#SP4_1">&#167;4.1</a>, <a href="#SP4_2">&#167;4.2</a>, <a href="#SP4_4">&#167;4.4</a>, <a href="#SP4_5">&#167;4.5</a>, <a href="#SP4_8">&#167;4.8</a>, <a href="#SP4_9">&#167;4.9</a>, <a href="#SP4_10">&#167;4.10</a>, <a href="#SP4_11">&#167;4.11</a>, <a href="#SP4_12">&#167;4.12</a>, <a href="#SP4_13">&#167;4.13</a>, <a href="#SP4_14">&#167;4.14</a>, <a href="#SP4_15">&#167;4.15</a>, <a href="#SP4_16">&#167;4.16</a>, <a href="#SP4_17">&#167;4.17</a>, <a href="#SP4_18">&#167;4.18</a>, <a href="#SP4_19">&#167;4.19</a>, <a href="#SP4_20">&#167;4.20</a>, <a href="#SP4_21">&#167;4.21</a>, <a href="#SP4_22">&#167;4.22</a>, <a href="#SP4_23">&#167;4.23</a>, <a href="#SP4_24">&#167;4.24</a>, <a href="#SP4_25">&#167;4.25</a>, <a href="#SP4_26">&#167;4.26</a>, <a href="#SP4_27">&#167;4.27</a>, <a href="#SP4_28">&#167;4.28</a>, <a href="#SP4_29">&#167;4.29</a>, <a href="#SP4_30">&#167;4.30</a>, <a href="#SP4_31">&#167;4.31</a>, <a href="#SP4_32">&#167;4.32</a>, <a href="#SP4_33">&#167;4.33</a>, <a href="#SP4_34">&#167;4.34</a>, <a href="#SP4_35">&#167;4.35</a>, <a href="#SP4_36">&#167;4.36</a>, <a href="#SP4_37">&#167;4.37</a>, <a href="#SP4_38">&#167;4.38</a>, <a href="#SP4_39">&#167;4.39</a>, <a href="#SP4_40">&#167;4.40</a>, <a href="#SP4_45">&#167;4.45</a>, <a href="#SP4_46">&#167;4.46</a>, <a href="#SP4_47">&#167;4.47</a>, <a href="#SP4_48">&#167;4.48</a>, <a href="#SP4_49">&#167;4.49</a>, <a href="#SP4_50">&#167;4.50</a>, <a href="#SP4_51">&#167;4.51</a>, <a href="#SP4_52">&#167;4.52</a>, <a href="#SP4_53">&#167;4.53</a>, <a href="#SP4_54">&#167;4.54</a>, <a href="#SP4_55">&#167;4.55</a>, <a href="#SP4_56">&#167;4.56</a>, <a href="#SP4_57">&#167;4.57</a>, <a href="#SP4_58">&#167;4.58</a>, <a href="#SP4_59">&#167;4.59</a>, <a href="#SP4_60">&#167;4.60</a>, <a href="#SP4_61">&#167;4.61</a>, <a href="#SP4_62">&#167;4.62</a>, <a href="#SP4_63">&#167;4.63</a>, <a href="#SP4_64">&#167;4.64</a>, <a href="#SP4_65">&#167;4.65</a>, <a href="#SP4_66">&#167;4.66</a>, <a href="#SP4_67">&#167;4.67</a>, <a href="#SP4_68">&#167;4.68</a>, <a href="#SP4_69">&#167;4.69</a>, <a href="#SP4_70">&#167;4.70</a>, <a href="#SP4_71">&#167;4.71</a>, <a href="#SP4_72">&#167;4.72</a>, <a href="#SP4_73">&#167;4.73</a>, <a href="#SP4_74">&#167;4.74</a>, <a href="#SP4_75">&#167;4.75</a>, <a href="#SP4_76">&#167;4.76</a>, <a href="#SP4_77">&#167;4.77</a>, <a href="#SP4_78">&#167;4.78</a>, <a href="#SP4_79">&#167;4.79</a>, <a href="#SP4_80">&#167;4.80</a>, <a href="#SP4_81">&#167;4.81</a>, <a href="#SP4_82">&#167;4.82</a>, <a href="#SP4_83">&#167;4.83</a>, <a href="#SP4_84">&#167;4.84</a>, <a href="#SP4_85">&#167;4.85</a>, <a href="#SP4_86">&#167;4.86</a>, <a href="#SP4_87">&#167;4.87</a>, <a href="#SP4_88">&#167;4.88</a>, <a href="#SP4_89">&#167;4.89</a>, <a href="#SP4_90">&#167;4.90</a>, <a href="#SP4_91">&#167;4.91</a>, <a href="#SP4_92">&#167;4.92</a>, <a href="#SP4_93">&#167;4.93</a>, <a href="#SP4_94">&#167;4.94</a>, <a href="#SP4_95">&#167;4.95</a>, <a href="#SP4_96">&#167;4.96</a>, <a href="#SP4_97">&#167;4.97</a>, <a href="#SP4_98">&#167;4.98</a>, <a href="#SP4_99">&#167;4.99</a>, <a href="#SP4_100">&#167;4.100</a>, <a href="#SP4_101">&#167;4.101</a>, <a href="#SP4_102">&#167;4.102</a>, <a href="#SP4_103">&#167;4.103</a>, <a href="#SP4_104">&#167;4.104</a>, <a href="#SP4_105">&#167;4.105</a>, <a href="#SP4_106">&#167;4.106</a>.</p>
<p class="inwebparagraph"><a id="SP3"></a><b>&#167;3. </b>There's a contrivance here to get around an awkward point of I6 syntax:
an array written in the form
@ -351,6 +351,8 @@ is 20. We instead compile this as
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">-&gt;</span><span class="identifier">symbol_name</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"#version_number"</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">-&gt;</span><span class="identifier">symbol_name</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"property_metadata"</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">-&gt;</span><span class="identifier">symbol_name</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"FBNA_PROP_NUMBER"</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">-&gt;</span><span class="identifier">symbol_name</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"value_property_holders"</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">-&gt;</span><span class="identifier">symbol_name</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"value_range"</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">-&gt;</span><span class="identifier">symbol_name</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"__assembly_arrow"</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">-&gt;</span><span class="identifier">symbol_name</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"__assembly_sp"</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">con_name</span><span class="plain">-&gt;</span><span class="identifier">symbol_name</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"__assembly_label"</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain">;</span>
@ -794,6 +796,7 @@ is 20. We instead compile this as
<span class="reserved">case</span><span class="plain"> </span><span class="constant">PROPERTYLENGTH_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for propertylength</span> <span class="cwebmacronumber">4.103</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">PROVIDES_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for provides</span> <span class="cwebmacronumber">4.104</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">PROPERTYVALUE_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for propertyvalue</span> <span class="cwebmacronumber">4.105</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">READ_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for read</span> <span class="cwebmacronumber">4.106</span>&gt;<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">LOG</span><span class="plain">(</span><span class="string">"Prim: %S\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">prim</span><span class="plain">-&gt;</span><span class="identifier">symbol_name</span><span class="plain">); </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"unimplemented prim"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">break</span><span class="plain">;</span>
@ -2769,6 +2772,22 @@ then the result.
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
<p class="inwebparagraph"><a id="SP4_106"></a><b>&#167;4.106. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for read</span> <span class="cwebmacronumber">4.106</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"read "</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::top_of_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" "</span><span class="plain">);</span>
<span class="functiontext">CodeGen::frame</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">Inter::second_in_frame_list</span><span class="plain">(</span><span class="identifier">ifl</span><span class="plain">));</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
<p class="inwebparagraph"><a id="SP5"></a><b>&#167;5. </b></p>

View file

@ -88,6 +88,8 @@
<span class="definitionkeyword">enum</span> <span class="constant">TARGET_ZCODE_HL</span>
<span class="definitionkeyword">enum</span> <span class="constant">TARGET_GLULX_HL</span>
<span class="definitionkeyword">enum</span> <span class="constant">INDIV_PROP_START_HL</span>
<span class="definitionkeyword">enum</span> <span class="constant">VALUE_PROPERTY_HOLDERS_HL</span>
<span class="definitionkeyword">enum</span> <span class="constant">VALUE_RANGE_HL</span>
<span class="definitionkeyword">enum</span> <span class="constant">DICT_WORD_SIZE_HL</span>
<span class="definitionkeyword">enum</span> <span class="constant">WORDSIZE_HL</span>
<span class="definitionkeyword">enum</span> <span class="constant">NULL_HL</span>
@ -172,6 +174,8 @@
<span class="functiontext">HierarchyLocations::con</span><span class="plain">(</span><span class="constant">NO_TEST_SCENARIOS_HL</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"NO_TEST_SCENARIOS"</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">MEMORY_HEAP_SIZE_HL</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"MEMORY_HEAP_SIZE"</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">INDIV_PROP_START_HL</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"INDIV_PROP_START"</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">VALUE_PROPERTY_HOLDERS_HL</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"value_property_holders"</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">VALUE_RANGE_HL</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"value_range"</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="reserved">location_requirement</span><span class="plain"> </span><span class="identifier">synoptic_basics</span><span class="plain"> = </span><span class="functiontext">HierarchyLocations::synoptic_submodule</span><span class="plain">(</span><span class="identifier">basics</span><span class="plain">);</span>
<span class="functiontext">HierarchyLocations::con</span><span class="plain">(</span><span class="constant">CCOUNT_QUOTATIONS_HL</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"CCOUNT_QUOTATIONS"</span><span class="plain">, </span><span class="functiontext">Translation::same</span><span class="plain">(), </span><span class="identifier">synoptic_basics</span><span class="plain">);</span>
@ -1936,6 +1940,8 @@
<span class="reserved">case</span><span class="plain"> </span><span class="constant">VERSION_NUMBER_HL</span><span class="plain">:</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">PROPERTY_METADATA_HL</span><span class="plain">:</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">FBNA_PROP_NUMBER_HL</span><span class="plain">:</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">VALUE_PROPERTY_HOLDERS_HL</span><span class="plain">:</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">VALUE_RANGE_HL</span><span class="plain">:</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="reserved">case</span><span class="plain"> </span><span class="constant">INDIRECT_HL</span><span class="plain">:</span>

View file

@ -26,11 +26,11 @@ moves an object to a new position in the object tree.
];
[ XTestMove obj dest;
if (obj <= InformLibrary) "[Can't move ", (name) obj, ": it's a system object.]";
if (obj.component_parent) "[Can't move ", (name) obj, ": it's part of ",
if (obj <= InformLibrary) print_ret "[Can't move ", (name) obj, ": it's a system object.]";
if (obj.component_parent) print_ret "[Can't move ", (name) obj, ": it's part of ",
(the) obj.component_parent, ".]";
while (dest) {
if (dest == obj) "[Can't move ", (name) obj, ": it would contain itself.]";
if (dest == obj) print_ret "[Can't move ", (name) obj, ": it would contain itself.]";
dest = CoreOfParentOfCoreOf(dest);
}
rfalse;

View file

@ -69,6 +69,8 @@ void Hierarchy::establish(void) {
@e TARGET_ZCODE_HL
@e TARGET_GLULX_HL
@e INDIV_PROP_START_HL
@e VALUE_PROPERTY_HOLDERS_HL
@e VALUE_RANGE_HL
@e DICT_WORD_SIZE_HL
@e WORDSIZE_HL
@e NULL_HL
@ -149,6 +151,8 @@ void Hierarchy::establish(void) {
HierarchyLocations::con(NO_TEST_SCENARIOS_HL, I"NO_TEST_SCENARIOS", Translation::same(), generic_basics);
HierarchyLocations::con(MEMORY_HEAP_SIZE_HL, I"MEMORY_HEAP_SIZE", Translation::same(), generic_basics);
HierarchyLocations::con(INDIV_PROP_START_HL, I"INDIV_PROP_START", Translation::same(), generic_basics);
HierarchyLocations::con(VALUE_PROPERTY_HOLDERS_HL, I"value_property_holders", Translation::same(), generic_basics);
HierarchyLocations::con(VALUE_RANGE_HL, I"value_range", Translation::same(), generic_basics);
location_requirement synoptic_basics = HierarchyLocations::synoptic_submodule(basics);
HierarchyLocations::con(CCOUNT_QUOTATIONS_HL, I"CCOUNT_QUOTATIONS", Translation::same(), synoptic_basics);
@ -1618,6 +1622,8 @@ inter_name *Hierarchy::post_process(int HL_id, inter_name *iname) {
case VERSION_NUMBER_HL:
case PROPERTY_METADATA_HL:
case FBNA_PROP_NUMBER_HL:
case VALUE_PROPERTY_HOLDERS_HL:
case VALUE_RANGE_HL:
case FLOAT_NAN_HL:
case RESPONSETEXTS_HL:
case INDIRECT_HL:

View file

@ -100,9 +100,15 @@ schema
token = token-->RE_NEXT;
}
end
schema-workings
schema
if (b) print 1; else print 2;
end
schema-workings
schema
a: if (b) print 1; else print 2;
end
schema
print_ret "This is ", (char) X, ".";
end
schema-workings
"This is ", (char) X, ".";
end

View file

@ -683,7 +683,7 @@ int rb_splat_count = 1;
int CodeGen::Assimilate::routine_body(inter_reading_state *IRS, inter_symbol *block_name, inter_t offset, text_stream *body, inter_reading_state bb) {
if (Str::is_whitespace(body)) return FALSE;
#ifdef CORE_MODULE
if (Str::len(body) < 350) {
if (Str::len(body) < 420) {
routine_body_request *req = CREATE(routine_body_request);
req->block_bookmark = bb;
req->enclosure = Packaging::enclosure();

View file

@ -107,6 +107,7 @@ inter_symbol *propertylength_interp = NULL;
inter_symbol *provides_interp = NULL;
inter_symbol *propertyvalue_interp = NULL;
inter_symbol *notin_interp = NULL;
inter_symbol *read_interp = NULL;
@ =
void Primitives::emit(inter_repository *I, inter_reading_state *IRS) {
@ -214,6 +215,7 @@ void Primitives::emit(inter_repository *I, inter_reading_state *IRS) {
Primitives::emit_one(I, IRS, I"!provides", I"val val -> val", &provides_interp);
Primitives::emit_one(I, IRS, I"!propertyvalue", I"val val -> val", &propertyvalue_interp);
Primitives::emit_one(I, IRS, I"!notin", I"val val -> val", &notin_interp);
Primitives::emit_one(I, IRS, I"!read", I"val val -> void", &read_interp);
}
void Primitives::emit_one(inter_repository *I, inter_reading_state *IRS, text_stream *prim, text_stream *category, inter_symbol **to) {
@ -380,6 +382,7 @@ inter_symbol *Primitives::indirectv_interp(int arity) {
@e PROPERTYLENGTH_BIP
@e PROVIDES_BIP
@e PROPERTYVALUE_BIP
@e READ_BIP
=
inter_t Primitives::to_bip(inter_repository *I, inter_symbol *symb) {
@ -492,6 +495,7 @@ inter_t Primitives::to_bip(inter_repository *I, inter_symbol *symb) {
if (Str::eq(symb->symbol_name, I"!propertylength")) bip = PROPERTYLENGTH_BIP;
if (Str::eq(symb->symbol_name, I"!provides")) bip = PROVIDES_BIP;
if (Str::eq(symb->symbol_name, I"!propertyvalue")) bip = PROPERTYVALUE_BIP;
if (Str::eq(symb->symbol_name, I"!read")) bip = READ_BIP;
if (bip != 0) {
Inter::Symbols::annotate_i(I, symb, BIP_CODE_IANN, bip);
return bip;

View file

@ -312,6 +312,7 @@ inter_schema_token *InterSchemas::new_token(int type, text_stream *material, int
@e QUIT_I6RW
@e RESTORE_I6RW
@e SPACES_I6RW
@e READ_I6RW
@e IFDEF_I6RW
@e IFNDEF_I6RW
@ -1353,6 +1354,7 @@ inclusive; we ignore an empty token.
if (Str::eq(T, I"quit")) { is = RESERVED_ISTT; which_rw = QUIT_I6RW; }
if (Str::eq(T, I"restore")) { is = RESERVED_ISTT; which_rw = RESTORE_I6RW; }
if (Str::eq(T, I"spaces")) { is = RESERVED_ISTT; which_rw = SPACES_I6RW; }
if (Str::eq(T, I"read")) { is = RESERVED_ISTT; which_rw = READ_I6RW; }
if (Str::eq_insensitive(T, I"#IFDEF")) { is = DIRECTIVE_ISTT; which_rw = IFDEF_I6RW; }
if (Str::eq_insensitive(T, I"#IFNDEF")) { is = DIRECTIVE_ISTT; which_rw = IFNDEF_I6RW; }
@ -2023,8 +2025,14 @@ int InterSchemas::identify_constructs(inter_schema_node *par, inter_schema_node
inter_schema_node *save_next = isn->next_node;
isn->next_node = InterSchemas::new_node(isn->parent_schema, STATEMENT_ISNT);
isn->next_node->parent_node = isn->parent_node;
isn->next_node->next_node = save_next;
isn->next_node->isn_clarifier = return_interp;
isn->next_node->isn_clarifier = print_interp;
isn->next_node->child_node = InterSchemas::new_node(isn->parent_schema, EXPRESSION_ISNT);
isn->next_node->child_node->parent_node = isn->next_node;
InterSchemas::add_token_to_node(isn->next_node->child_node, InterSchemas::new_token(DQUOTED_ISTT, I"\n", NULL, 0, -1));
isn->next_node->next_node = InterSchemas::new_node(isn->parent_schema, STATEMENT_ISNT);
isn->next_node->next_node->parent_node = isn->parent_node;
isn->next_node->next_node->isn_clarifier = return_interp;
isn->next_node->next_node->next_node = save_next;
}
break;
case STYLE_I6RW: {
@ -2148,6 +2156,18 @@ int InterSchemas::identify_constructs(inter_schema_node *par, inter_schema_node
if ((operand1) && (operand2)) subordinate_to = move_interp;
break;
}
case READ_I6RW: {
inter_schema_token *n = isn->expression_tokens->next;
while ((n) && (n->ist_type == WHITE_SPACE_ISTT)) n = n->next;
operand1 = n;
n = n->next;
while ((n) && (n->ist_type == WHITE_SPACE_ISTT)) n = n->next;
operand2 = n;
operand1->next = NULL;
operand2->next = NULL;
if ((operand1) && (operand2)) subordinate_to = read_interp;
break;
}
case REMOVE_I6RW:
subordinate_to = remove_interp;
break;
@ -2958,6 +2978,7 @@ int InterSchemas::ip_arity(inter_symbol *O) {
if (O == for_interp) arity = 4;
if (O == while_interp) arity = 2;
if (O == do_interp) arity = 2;
if (O == read_interp) arity = 2;
return arity;
}

View file

@ -303,6 +303,8 @@ void CodeGen::constant(OUTPUT_STREAM, inter_repository *I, inter_frame P) {
if (Str::eq(con_name->symbol_name, I"#version_number")) return;
if (Str::eq(con_name->symbol_name, I"property_metadata")) return;
if (Str::eq(con_name->symbol_name, I"FBNA_PROP_NUMBER")) return;
if (Str::eq(con_name->symbol_name, I"value_property_holders")) return;
if (Str::eq(con_name->symbol_name, I"value_range")) return;
if (Str::eq(con_name->symbol_name, I"__assembly_arrow")) return;
if (Str::eq(con_name->symbol_name, I"__assembly_sp")) return;
if (Str::eq(con_name->symbol_name, I"__assembly_label")) return;
@ -734,6 +736,7 @@ void CodeGen::inv(OUTPUT_STREAM, inter_repository *I, inter_frame P) {
case PROPERTYLENGTH_BIP: @<Generate primitive for propertylength@>; break;
case PROVIDES_BIP: @<Generate primitive for provides@>; break;
case PROPERTYVALUE_BIP: @<Generate primitive for propertyvalue@>; break;
case READ_BIP: @<Generate primitive for read@>; break;
default: LOG("Prim: %S\n", prim->symbol_name); internal_error("unimplemented prim");
}
break;
@ -1611,6 +1614,12 @@ then the result.
CodeGen::frame(OUT, I, Inter::second_in_frame_list(ifl));
WRITE(")");
@<Generate primitive for read@> =
WRITE("read ");
CodeGen::frame(OUT, I, Inter::top_of_frame_list(ifl));
WRITE(" ");
CodeGen::frame(OUT, I, Inter::second_in_frame_list(ifl));
@ =
int CodeGen::compare_tlh(const void *elem1, const void *elem2) {
const text_literal_holder **e1 = (const text_literal_holder **) elem1;