mirror of
https://github.com/ganelson/inform.git
synced 2024-07-05 00:24:22 +03:00
Pushed to 420
This commit is contained in:
parent
efd31f9f9f
commit
f73b6d9dfd
|
@ -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">) < 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">) < 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">>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">>enclosure</span><span class="plain"> = </span><span class="identifier">Packaging::enclosure</span><span class="plain">();</span>
|
||||
|
|
|
@ -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 -> val"</span><span class="plain">, &</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 -> val"</span><span class="plain">, &</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 -> val"</span><span class="plain">, &</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 -> void"</span><span class="plain">, &</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">-></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">-></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">-></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">-></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>
|
||||
|
|
|
@ -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">§20.2.2</a>, <a href="#SP20_2_3_1">§20.2.3.1</a>, <a href="#SP20_2_4_1">§20.2.4.1</a>, <a href="#SP20_2_5">§20.2.5</a>, <a href="#SP20_2_2_1_4">§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">§26</a>.</p>
|
||||
|
||||
<p class="endnote">The function InterSchemas::add_token_after is used in <a href="#SP21">§21</a>, <a href="#SP26">§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">>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="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">STATEMENT_ISNT</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="element">>parent_node</span><span class="plain"> = </span><span class="identifier">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><span class="element">>next_node</span><span class="plain">-</span><span class="element">>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">>next_node</span><span class="plain">-</span><span class="element">>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">>next_node</span><span class="plain">-</span><span class="element">>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">>next_node</span><span class="plain">-</span><span class="element">>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">>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">>next_node</span><span class="plain">-</span><span class="element">>child_node</span><span class="plain">-</span><span class="element">>parent_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="functiontext">InterSchemas::add_token_to_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="element">>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">>next_node</span><span class="plain">-</span><span class="element">>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">>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">>next_node</span><span class="plain">-</span><span class="element">>next_node</span><span class="plain">-</span><span class="element">>parent_node</span><span class="plain"> = </span><span class="identifier">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><span class="element">>next_node</span><span class="plain">-</span><span class="element">>next_node</span><span class="plain">-</span><span class="element">>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">>next_node</span><span class="plain">-</span><span class="element">>next_node</span><span class="plain">-</span><span class="element">>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">) && (</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">>expression_tokens</span><span class="plain">-</span><span class="element">>next</span><span class="plain">;</span>
|
||||
<span class="reserved">while</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">>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">>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">>next</span><span class="plain">;</span>
|
||||
<span class="reserved">while</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">>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">>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">>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">>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">) && (</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>
|
||||
|
||||
|
|
|
@ -290,7 +290,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="#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_4">§4.4</a>, <a href="#SP4_5">§4.5</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_36">§4.36</a>, <a href="#SP4_37">§4.37</a>, <a href="#SP4_38">§4.38</a>, <a href="#SP4_39">§4.39</a>, <a href="#SP4_40">§4.40</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>, <a href="#SP4_90">§4.90</a>, <a href="#SP4_91">§4.91</a>, <a href="#SP4_92">§4.92</a>, <a href="#SP4_93">§4.93</a>, <a href="#SP4_94">§4.94</a>, <a href="#SP4_95">§4.95</a>, <a href="#SP4_96">§4.96</a>, <a href="#SP4_97">§4.97</a>, <a href="#SP4_98">§4.98</a>, <a href="#SP4_99">§4.99</a>, <a href="#SP4_100">§4.100</a>, <a href="#SP4_101">§4.101</a>, <a href="#SP4_102">§4.102</a>, <a href="#SP4_103">§4.103</a>, <a href="#SP4_104">§4.104</a>, <a href="#SP4_105">§4.105</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_4">§4.4</a>, <a href="#SP4_5">§4.5</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_36">§4.36</a>, <a href="#SP4_37">§4.37</a>, <a href="#SP4_38">§4.38</a>, <a href="#SP4_39">§4.39</a>, <a href="#SP4_40">§4.40</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>, <a href="#SP4_90">§4.90</a>, <a href="#SP4_91">§4.91</a>, <a href="#SP4_92">§4.92</a>, <a href="#SP4_93">§4.93</a>, <a href="#SP4_94">§4.94</a>, <a href="#SP4_95">§4.95</a>, <a href="#SP4_96">§4.96</a>, <a href="#SP4_97">§4.97</a>, <a href="#SP4_98">§4.98</a>, <a href="#SP4_99">§4.99</a>, <a href="#SP4_100">§4.100</a>, <a href="#SP4_101">§4.101</a>, <a href="#SP4_102">§4.102</a>, <a href="#SP4_103">§4.103</a>, <a href="#SP4_104">§4.104</a>, <a href="#SP4_105">§4.105</a>, <a href="#SP4_106">§4.106</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
|
||||
|
@ -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">-></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">-></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">-></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">-></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">-></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">-></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">-></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">-></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><<span class="cwebmacro">Generate primitive for propertylength</span> <span class="cwebmacronumber">4.103</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">PROVIDES_BIP</span><span class="plain">: </span><<span class="cwebmacro">Generate primitive for provides</span> <span class="cwebmacronumber">4.104</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">PROPERTYVALUE_BIP</span><span class="plain">: </span><<span class="cwebmacro">Generate primitive for propertyvalue</span> <span class="cwebmacronumber">4.105</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">READ_BIP</span><span class="plain">: </span><<span class="cwebmacro">Generate primitive for read</span> <span class="cwebmacronumber">4.106</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">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">-></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">§4</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP4_106"></a><b>§4.106. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Generate primitive for read</span> <span class="cwebmacronumber">4.106</span>> =
|
||||
</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">§4</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP5"></a><b>§5. </b></p>
|
||||
|
||||
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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", ¬in_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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue