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

Handled I6 message calls in Inter schema

This commit is contained in:
Graham Nelson 2019-05-02 08:41:06 +01:00
parent 54d6366fb5
commit e69fc2b4e4
17 changed files with 655 additions and 76 deletions

View file

@ -739,7 +739,7 @@
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">rb_splat_count</span><span class="plain"> = 1;</span> <span class="reserved">int</span><span class="plain"> </span><span class="identifier">rb_splat_count</span><span class="plain"> = 1;</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::Assimilate::routine_body</span><span class="plain">(</span><span class="identifier">inter_reading_state</span><span class="plain"> *</span><span class="identifier">IRS</span><span class="plain">, </span><span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">block_name</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">offset</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">body</span><span class="plain">) {</span> <span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CodeGen::Assimilate::routine_body</span><span class="plain">(</span><span class="identifier">inter_reading_state</span><span class="plain"> *</span><span class="identifier">IRS</span><span class="plain">, </span><span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">block_name</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">offset</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">body</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::is_whitespace</span><span class="plain">(</span><span class="identifier">body</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain">;</span> <span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::is_whitespace</span><span class="plain">(</span><span class="identifier">body</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">body</span><span class="plain">) &lt; 100) {</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; 120) {</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"=======\</span><span class="plain">n</span><span class="string">\</span><span class="plain">n</span><span class="string">Candidate (%S) len %d: '%S'\</span><span class="plain">n</span><span class="string">\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">block_name</span><span class="plain">-&gt;</span><span class="identifier">symbol_name</span><span class="plain">, </span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">body</span><span class="plain">), </span><span class="identifier">body</span><span class="plain">);</span> <span class="identifier">LOG</span><span class="plain">(</span><span class="string">"=======\</span><span class="plain">n</span><span class="string">\</span><span class="plain">n</span><span class="string">Candidate (%S) len %d: '%S'\</span><span class="plain">n</span><span class="string">\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">block_name</span><span class="plain">-&gt;</span><span class="identifier">symbol_name</span><span class="plain">, </span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">body</span><span class="plain">), </span><span class="identifier">body</span><span class="plain">);</span>
<span class="reserved">inter_schema</span><span class="plain"> *</span><span class="identifier">sch</span><span class="plain"> = </span><span class="functiontext">InterSchemas::from_text</span><span class="plain">(</span><span class="identifier">body</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">, 0, </span><span class="identifier">NULL</span><span class="plain">);</span> <span class="reserved">inter_schema</span><span class="plain"> *</span><span class="identifier">sch</span><span class="plain"> = </span><span class="functiontext">InterSchemas::from_text</span><span class="plain">(</span><span class="identifier">body</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">, 0, </span><span class="identifier">NULL</span><span class="plain">);</span>

View file

@ -99,6 +99,14 @@
<span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">indirect3_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">indirect3_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">indirect4_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">indirect4_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">indirect5_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">indirect5_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">message0_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">message1_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">message2_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">message3_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">callmessage0_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">callmessage1_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">callmessage2_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">callmessage3_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">propertyaddress_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">propertyaddress_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">propertylength_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">propertylength_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">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">provides_interp</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
@ -199,6 +207,14 @@
<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">"!indirect3"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"val val val val -&gt; val"</span><span class="plain">, &amp;</span><span class="identifier">indirect3_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">"!indirect3"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"val val val val -&gt; val"</span><span class="plain">, &amp;</span><span class="identifier">indirect3_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">"!indirect4"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"val val val val val -&gt; val"</span><span class="plain">, &amp;</span><span class="identifier">indirect4_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">"!indirect4"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"val val val val val -&gt; val"</span><span class="plain">, &amp;</span><span class="identifier">indirect4_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">"!indirect5"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"val val val val val val -&gt; val"</span><span class="plain">, &amp;</span><span class="identifier">indirect5_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">"!indirect5"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"val val val val val val -&gt; val"</span><span class="plain">, &amp;</span><span class="identifier">indirect5_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">"!message0"</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">message0_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">"!message1"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"val val val -&gt; val"</span><span class="plain">, &amp;</span><span class="identifier">message1_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">"!message2"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"val val val val -&gt; val"</span><span class="plain">, &amp;</span><span class="identifier">message2_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">"!message3"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"val val val val val -&gt; val"</span><span class="plain">, &amp;</span><span class="identifier">message3_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">"!callmessage0"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"val -&gt; val"</span><span class="plain">, &amp;</span><span class="identifier">callmessage0_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">"!callmessage1"</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">callmessage1_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">"!callmessage2"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"val val val -&gt; val"</span><span class="plain">, &amp;</span><span class="identifier">callmessage2_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">"!callmessage3"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"val val val val -&gt; val"</span><span class="plain">, &amp;</span><span class="identifier">callmessage3_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">"!propertyaddress"</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">propertyaddress_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">"!propertyaddress"</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">propertyaddress_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">"!propertylength"</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">propertylength_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">"!propertylength"</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">propertylength_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">"!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">"!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>
@ -370,6 +386,14 @@
<span class="definitionkeyword">enum</span> <span class="constant">INDIRECT3_BIP</span> <span class="definitionkeyword">enum</span> <span class="constant">INDIRECT3_BIP</span>
<span class="definitionkeyword">enum</span> <span class="constant">INDIRECT4_BIP</span> <span class="definitionkeyword">enum</span> <span class="constant">INDIRECT4_BIP</span>
<span class="definitionkeyword">enum</span> <span class="constant">INDIRECT5_BIP</span> <span class="definitionkeyword">enum</span> <span class="constant">INDIRECT5_BIP</span>
<span class="definitionkeyword">enum</span> <span class="constant">MESSAGE0_BIP</span>
<span class="definitionkeyword">enum</span> <span class="constant">MESSAGE1_BIP</span>
<span class="definitionkeyword">enum</span> <span class="constant">MESSAGE2_BIP</span>
<span class="definitionkeyword">enum</span> <span class="constant">MESSAGE3_BIP</span>
<span class="definitionkeyword">enum</span> <span class="constant">CALLMESSAGE0_BIP</span>
<span class="definitionkeyword">enum</span> <span class="constant">CALLMESSAGE1_BIP</span>
<span class="definitionkeyword">enum</span> <span class="constant">CALLMESSAGE2_BIP</span>
<span class="definitionkeyword">enum</span> <span class="constant">CALLMESSAGE3_BIP</span>
<span class="definitionkeyword">enum</span> <span class="constant">PROPERTYADDRESS_BIP</span> <span class="definitionkeyword">enum</span> <span class="constant">PROPERTYADDRESS_BIP</span>
<span class="definitionkeyword">enum</span> <span class="constant">PROPERTYLENGTH_BIP</span> <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">PROVIDES_BIP</span>
@ -470,6 +494,14 @@
<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">"!indirect3"</span><span class="plain">)) </span><span class="identifier">bip</span><span class="plain"> = </span><span class="constant">INDIRECT3_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">"!indirect3"</span><span class="plain">)) </span><span class="identifier">bip</span><span class="plain"> = </span><span class="constant">INDIRECT3_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">"!indirect4"</span><span class="plain">)) </span><span class="identifier">bip</span><span class="plain"> = </span><span class="constant">INDIRECT4_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">"!indirect4"</span><span class="plain">)) </span><span class="identifier">bip</span><span class="plain"> = </span><span class="constant">INDIRECT4_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">"!indirect5"</span><span class="plain">)) </span><span class="identifier">bip</span><span class="plain"> = </span><span class="constant">INDIRECT5_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">"!indirect5"</span><span class="plain">)) </span><span class="identifier">bip</span><span class="plain"> = </span><span class="constant">INDIRECT5_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">"!message0"</span><span class="plain">)) </span><span class="identifier">bip</span><span class="plain"> = </span><span class="constant">MESSAGE0_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">"!message1"</span><span class="plain">)) </span><span class="identifier">bip</span><span class="plain"> = </span><span class="constant">MESSAGE1_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">"!message2"</span><span class="plain">)) </span><span class="identifier">bip</span><span class="plain"> = </span><span class="constant">MESSAGE2_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">"!message3"</span><span class="plain">)) </span><span class="identifier">bip</span><span class="plain"> = </span><span class="constant">MESSAGE3_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">"!callmessage0"</span><span class="plain">)) </span><span class="identifier">bip</span><span class="plain"> = </span><span class="constant">CALLMESSAGE0_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">"!callmessage1"</span><span class="plain">)) </span><span class="identifier">bip</span><span class="plain"> = </span><span class="constant">CALLMESSAGE1_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">"!callmessage2"</span><span class="plain">)) </span><span class="identifier">bip</span><span class="plain"> = </span><span class="constant">CALLMESSAGE2_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">"!callmessage3"</span><span class="plain">)) </span><span class="identifier">bip</span><span class="plain"> = </span><span class="constant">CALLMESSAGE3_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">"!propertyaddress"</span><span class="plain">)) </span><span class="identifier">bip</span><span class="plain"> = </span><span class="constant">PROPERTYADDRESS_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">"!propertyaddress"</span><span class="plain">)) </span><span class="identifier">bip</span><span class="plain"> = </span><span class="constant">PROPERTYADDRESS_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">"!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">"!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">"!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>

View file

@ -109,6 +109,8 @@ but the need to do this went away.)
<span class="definitionkeyword">enum</span> <span class="constant">ASSEMBLY_ISNT</span> <span class="definitionkeyword">enum</span> <span class="constant">ASSEMBLY_ISNT</span>
<span class="definitionkeyword">enum</span> <span class="constant">LABEL_ISNT</span> <span class="definitionkeyword">enum</span> <span class="constant">LABEL_ISNT</span>
<span class="definitionkeyword">enum</span> <span class="constant">CALL_ISNT</span> <span class="definitionkeyword">enum</span> <span class="constant">CALL_ISNT</span>
<span class="definitionkeyword">enum</span> <span class="constant">MESSAGE_ISNT</span>
<span class="definitionkeyword">enum</span> <span class="constant">CALLMESSAGE_ISNT</span>
</pre> </pre>
<pre class="display"> <pre class="display">
@ -605,6 +607,12 @@ we go to some trouble here.
<span class="reserved">case</span><span class="plain"> </span><span class="constant">CALL_ISNT</span><span class="plain">:</span> <span class="reserved">case</span><span class="plain"> </span><span class="constant">CALL_ISNT</span><span class="plain">:</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"* (call)\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span> <span class="identifier">LOG</span><span class="plain">(</span><span class="string">"* (call)\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
<span class="reserved">break</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">MESSAGE_ISNT</span><span class="plain">:</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"* (message)\</span><span class="plain">n</span><span class="string">"</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">CALLMESSAGE_ISNT</span><span class="plain">:</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"* (call-message)\</span><span class="plain">n</span><span class="string">"</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">SUBEXPRESSION_ISNT</span><span class="plain">:</span> <span class="reserved">case</span><span class="plain"> </span><span class="constant">SUBEXPRESSION_ISNT</span><span class="plain">:</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"* (subexpression)\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span> <span class="identifier">LOG</span><span class="plain">(</span><span class="string">"* (subexpression)\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
<span class="reserved">break</span><span class="plain">;</span> <span class="reserved">break</span><span class="plain">;</span>
@ -1037,6 +1045,7 @@ out for the two extra syntaxes allowed, <code class="display"><span class="extra
<span class="functiontext">InterSchemas::add_token</span><span class="plain">(</span><span class="identifier">sch</span><span class="plain">, </span><span class="functiontext">InterSchemas::new_token</span><span class="plain">(</span><span class="constant">WHITE_SPACE_ISTT</span><span class="plain">, </span><span class="identifier">I</span><span class="string">" "</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, 0, -1));</span> <span class="functiontext">InterSchemas::add_token</span><span class="plain">(</span><span class="identifier">sch</span><span class="plain">, </span><span class="functiontext">InterSchemas::new_token</span><span class="plain">(</span><span class="constant">WHITE_SPACE_ISTT</span><span class="plain">, </span><span class="identifier">I</span><span class="string">" "</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, 0, -1));</span>
<span class="reserved">break</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">DQUOTED_TOKSTATE</span><span class="plain">:</span> <span class="reserved">case</span><span class="plain"> </span><span class="constant">DQUOTED_TOKSTATE</span><span class="plain">:</span>
<span class="functiontext">InterSchemas::de_escape_text</span><span class="plain">(</span><span class="identifier">current_raw</span><span class="plain">);</span>
<span class="functiontext">InterSchemas::add_token</span><span class="plain">(</span><span class="identifier">sch</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">current_raw</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, 0, -1));</span> <span class="functiontext">InterSchemas::add_token</span><span class="plain">(</span><span class="identifier">sch</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">current_raw</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, 0, -1));</span>
<span class="reserved">break</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">SQUOTED_TOKSTATE</span><span class="plain">:</span> <span class="reserved">case</span><span class="plain"> </span><span class="constant">SQUOTED_TOKSTATE</span><span class="plain">:</span>
@ -1871,6 +1880,7 @@ these out at the start of each iteration.
<span class="identifier">REPEATEDLY_APPLY</span><span class="plain">(</span><span class="functiontext">InterSchemas::strip_all_spacing</span><span class="plain">);</span> <span class="identifier">REPEATEDLY_APPLY</span><span class="plain">(</span><span class="functiontext">InterSchemas::strip_all_spacing</span><span class="plain">);</span>
<span class="identifier">REPEATEDLY_APPLY</span><span class="plain">(</span><span class="functiontext">InterSchemas::debracket</span><span class="plain">);</span> <span class="identifier">REPEATEDLY_APPLY</span><span class="plain">(</span><span class="functiontext">InterSchemas::debracket</span><span class="plain">);</span>
<span class="identifier">REPEATEDLY_APPLY</span><span class="plain">(</span><span class="functiontext">InterSchemas::implied_return_values</span><span class="plain">);</span> <span class="identifier">REPEATEDLY_APPLY</span><span class="plain">(</span><span class="functiontext">InterSchemas::implied_return_values</span><span class="plain">);</span>
<span class="identifier">REPEATEDLY_APPLY</span><span class="plain">(</span><span class="functiontext">InterSchemas::message_calls</span><span class="plain">);</span>
</pre> </pre>
<p class="inwebparagraph"></p> <p class="inwebparagraph"></p>
@ -2352,10 +2362,10 @@ these out at the start of each iteration.
<pre class="display"> <pre class="display">
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">InterSchemas::alternatecases</span><span class="plain">(</span><span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">par</span><span class="plain">, </span><span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">isn</span><span class="plain">) {</span> <span class="reserved">int</span><span class="plain"> </span><span class="functiontext">InterSchemas::alternatecases</span><span class="plain">(</span><span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">par</span><span class="plain">, </span><span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">isn</span><span class="plain">) {</span>
<span class="reserved">for</span><span class="plain"> (; </span><span class="identifier">isn</span><span class="plain">; </span><span class="identifier">isn</span><span class="plain">=</span><span class="identifier">isn</span><span class="plain">-</span><span class="element">&gt;next_node</span><span class="plain">) {</span> <span class="reserved">for</span><span class="plain"> (; </span><span class="identifier">isn</span><span class="plain">; </span><span class="identifier">isn</span><span class="plain">=</span><span class="identifier">isn</span><span class="plain">-</span><span class="element">&gt;next_node</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">isn</span><span class="plain">-</span><span class="element">&gt;isn_clarifier</span><span class="plain"> == </span><span class="identifier">case_interp</span><span class="plain">) {</span> <span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">isn</span><span class="plain">-</span><span class="element">&gt;isn_clarifier</span><span class="plain"> == </span><span class="identifier">case_interp</span><span class="plain">) &amp;&amp; (</span><span class="identifier">isn</span><span class="plain">-</span><span class="element">&gt;child_node</span><span class="plain">)) {</span>
<span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">A</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-</span><span class="element">&gt;child_node</span><span class="plain">;</span> <span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">A</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-</span><span class="element">&gt;child_node</span><span class="plain">;</span>
<span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">B</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-</span><span class="element">&gt;child_node</span><span class="plain">-</span><span class="element">&gt;next_node</span><span class="plain">;</span> <span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">B</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-</span><span class="element">&gt;child_node</span><span class="plain">-</span><span class="element">&gt;next_node</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">A</span><span class="plain">-</span><span class="element">&gt;isn_type</span><span class="plain"> == </span><span class="constant">EXPRESSION_ISNT</span><span class="plain">) &amp;&amp; (</span><span class="identifier">B</span><span class="plain">-</span><span class="element">&gt;isn_type</span><span class="plain"> == </span><span class="constant">EXPRESSION_ISNT</span><span class="plain">)) {</span> <span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">A</span><span class="plain">) &amp;&amp; (</span><span class="identifier">B</span><span class="plain">) &amp;&amp; (</span><span class="identifier">B</span><span class="plain">-</span><span class="element">&gt;next_node</span><span class="plain">)) {</span>
<span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">C</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">OPERATION_ISNT</span><span class="plain">);</span> <span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">C</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">OPERATION_ISNT</span><span class="plain">);</span>
<span class="identifier">C</span><span class="plain">-</span><span class="element">&gt;isn_clarifier</span><span class="plain"> = </span><span class="identifier">alternativecase_interp</span><span class="plain">;</span> <span class="identifier">C</span><span class="plain">-</span><span class="element">&gt;isn_clarifier</span><span class="plain"> = </span><span class="identifier">alternativecase_interp</span><span class="plain">;</span>
<span class="identifier">C</span><span class="plain">-</span><span class="element">&gt;child_node</span><span class="plain"> = </span><span class="identifier">A</span><span class="plain">;</span> <span class="identifier">C</span><span class="plain">-</span><span class="element">&gt;child_node</span><span class="plain"> = </span><span class="identifier">A</span><span class="plain">;</span>
@ -2453,12 +2463,7 @@ these out at the start of each iteration.
<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="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="reserved">if</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">DQUOTED_ISTT</span><span class="plain">)) {</span> <span class="reserved">if</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">DQUOTED_ISTT</span><span class="plain">)) {</span>
<span class="identifier">subordinate_to</span><span class="plain"> = </span><span class="identifier">print_interp</span><span class="plain">;</span> <span class="identifier">subordinate_to</span><span class="plain"> = </span><span class="identifier">print_interp</span><span class="plain">;</span>
<span class="identifier">LOOP_THROUGH_TEXT</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">n</span><span class="plain">-</span><span class="element">&gt;material</span><span class="plain">) {</span> <span class="functiontext">InterSchemas::de_escape_text</span><span class="plain">(</span><span class="identifier">n</span><span class="plain">-</span><span class="element">&gt;material</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::get</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">) == </span><span class="character">'^'</span><span class="plain">)</span>
<span class="identifier">Str::put</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="character">'\</span><span class="plain">n</span><span class="character">'</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::get</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">) == </span><span class="character">'~'</span><span class="plain">)</span>
<span class="identifier">Str::put</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="character">'\</span><span class="plain">"</span><span class="character">'</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">}</span> <span class="plain">}</span>
<span class="plain">}</span> <span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">isn</span><span class="plain">-</span><span class="element">&gt;expression_tokens</span><span class="plain">-</span><span class="element">&gt;reserved_word</span><span class="plain"> == </span><span class="constant">PRINTRET_I6RW</span><span class="plain">) {</span> <span class="reserved">if</span><span class="plain"> (</span><span class="identifier">isn</span><span class="plain">-</span><span class="element">&gt;expression_tokens</span><span class="plain">-</span><span class="element">&gt;reserved_word</span><span class="plain"> == </span><span class="constant">PRINTRET_I6RW</span><span class="plain">) {</span>
@ -2650,6 +2655,7 @@ these out at the start of each iteration.
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">dangle_text</span><span class="plain">) {</span> <span class="reserved">if</span><span class="plain"> (</span><span class="identifier">dangle_text</span><span class="plain">) {</span>
<span class="identifier">new_isn</span><span class="plain">-</span><span class="element">&gt;expression_tokens</span><span class="plain"> = </span><span class="functiontext">InterSchemas::new_token</span><span class="plain">(</span><span class="constant">DQUOTED_ISTT</span><span class="plain">, </span><span class="identifier">dangle_text</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, 0, -1);</span> <span class="identifier">new_isn</span><span class="plain">-</span><span class="element">&gt;expression_tokens</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">dangle_text</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, 0, -1);</span>
<span class="identifier">new_isn</span><span class="plain">-</span><span class="element">&gt;expression_tokens</span><span class="plain">-</span><span class="element">&gt;owner</span><span class="plain"> = </span><span class="identifier">new_isn</span><span class="plain">;</span> <span class="identifier">new_isn</span><span class="plain">-</span><span class="element">&gt;expression_tokens</span><span class="plain">-</span><span class="element">&gt;owner</span><span class="plain"> = </span><span class="identifier">new_isn</span><span class="plain">;</span>
<span class="functiontext">InterSchemas::de_escape_text</span><span class="plain">(</span><span class="identifier">new_isn</span><span class="plain">-</span><span class="element">&gt;expression_tokens</span><span class="plain">-</span><span class="element">&gt;material</span><span class="plain">);</span>
<span class="plain">}</span> <span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">operand2</span><span class="plain">) {</span> <span class="reserved">if</span><span class="plain"> (</span><span class="identifier">operand2</span><span class="plain">) {</span>
<span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">new_new_isn</span><span class="plain"> = </span><span class="functiontext">InterSchemas::new_node</span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">-</span><span class="element">&gt;parent_schema</span><span class="plain">, </span><span class="constant">EXPRESSION_ISNT</span><span class="plain">);</span> <span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">new_new_isn</span><span class="plain"> = </span><span class="functiontext">InterSchemas::new_node</span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">-</span><span class="element">&gt;parent_schema</span><span class="plain">, </span><span class="constant">EXPRESSION_ISNT</span><span class="plain">);</span>
@ -3157,7 +3163,57 @@ these out at the start of each iteration.
<p class="endnote">The function InterSchemas::implied_return_values is used in <a href="#SP20_4">&#167;20.4</a>.</p> <p class="endnote">The function InterSchemas::implied_return_values is used in <a href="#SP20_4">&#167;20.4</a>.</p>
<p class="inwebparagraph"><a id="SP30"></a><b>&#167;30. Operators in I6. </b>The following routines return data which is essentially the content of the <p class="inwebparagraph"><a id="SP30"></a><b>&#167;30. </b></p>
<pre class="display">
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">InterSchemas::message_calls</span><span class="plain">(</span><span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">par</span><span class="plain">, </span><span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">isn</span><span class="plain">) {</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">prev</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">; </span><span class="identifier">isn</span><span class="plain">; </span><span class="identifier">prev</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">, </span><span class="identifier">isn</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-</span><span class="element">&gt;next_node</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">isn</span><span class="plain">-</span><span class="element">&gt;isn_type</span><span class="plain"> == </span><span class="constant">OPERATION_ISNT</span><span class="plain">) &amp;&amp; (</span><span class="identifier">isn</span><span class="plain">-</span><span class="element">&gt;isn_clarifier</span><span class="plain"> == </span><span class="identifier">propertyvalue_interp</span><span class="plain">) &amp;&amp;</span>
<span class="plain">(</span><span class="identifier">isn</span><span class="plain">-</span><span class="element">&gt;child_node</span><span class="plain">) &amp;&amp; (</span><span class="identifier">isn</span><span class="plain">-</span><span class="element">&gt;child_node</span><span class="plain">-</span><span class="element">&gt;next_node</span><span class="plain">) &amp;&amp; (</span><span class="identifier">isn</span><span class="plain">-</span><span class="element">&gt;child_node</span><span class="plain">-</span><span class="element">&gt;next_node</span><span class="plain">-</span><span class="element">&gt;isn_type</span><span class="plain"> == </span><span class="constant">CALL_ISNT</span><span class="plain">)) {</span>
<span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">obj</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-</span><span class="element">&gt;child_node</span><span class="plain">;</span>
<span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">message</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-</span><span class="element">&gt;child_node</span><span class="plain">-</span><span class="element">&gt;next_node</span><span class="plain">-</span><span class="element">&gt;child_node</span><span class="plain">;</span>
<span class="reserved">inter_schema_node</span><span class="plain"> *</span><span class="identifier">args</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-</span><span class="element">&gt;child_node</span><span class="plain">-</span><span class="element">&gt;next_node</span><span class="plain">-</span><span class="element">&gt;child_node</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;isn_type</span><span class="plain"> = </span><span class="constant">MESSAGE_ISNT</span><span class="plain">; </span><span class="identifier">isn</span><span class="plain">-</span><span class="element">&gt;isn_clarifier</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">obj</span><span class="plain">-</span><span class="element">&gt;next_node</span><span class="plain"> = </span><span class="identifier">message</span><span class="plain">; </span><span class="identifier">message</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="identifier">message</span><span class="plain">-</span><span class="element">&gt;next_node</span><span class="plain"> = </span><span class="identifier">args</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">message</span><span class="plain">-</span><span class="element">&gt;isn_type</span><span class="plain"> == </span><span class="constant">EXPRESSION_ISNT</span><span class="plain">) {</span>
<span class="reserved">inter_schema_token</span><span class="plain"> *</span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">message</span><span class="plain">-</span><span class="element">&gt;expression_tokens</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">n</span><span class="plain">) &amp;&amp; (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">n</span><span class="plain">-</span><span class="element">&gt;material</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"call"</span><span class="plain">))) {</span>
<span class="identifier">obj</span><span class="plain">-</span><span class="element">&gt;next_node</span><span class="plain"> = </span><span class="identifier">args</span><span class="plain">; </span><span class="identifier">isn</span><span class="plain">-</span><span class="element">&gt;isn_type</span><span class="plain"> = </span><span class="constant">CALLMESSAGE_ISNT</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">while</span><span class="plain"> (</span><span class="identifier">args</span><span class="plain">) { </span><span class="identifier">args</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="identifier">args</span><span class="plain"> = </span><span class="identifier">args</span><span class="plain">-</span><span class="element">&gt;next_node</span><span class="plain">; }</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">InterSchemas::message_calls</span><span class="plain">(</span><span class="identifier">isn</span><span class="plain">, </span><span class="identifier">isn</span><span class="plain">-</span><span class="element">&gt;child_node</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<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>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function InterSchemas::message_calls is used in <a href="#SP20_4">&#167;20.4</a>.</p>
<p class="inwebparagraph"><a id="SP31"></a><b>&#167;31. </b></p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">InterSchemas::de_escape_text</span><span class="plain">(</span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">m</span><span class="plain">) {</span>
<span class="identifier">LOOP_THROUGH_TEXT</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">m</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::get</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">) == </span><span class="character">'^'</span><span class="plain">)</span>
<span class="identifier">Str::put</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="character">'\</span><span class="plain">n</span><span class="character">'</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::get</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">) == </span><span class="character">'~'</span><span class="plain">)</span>
<span class="identifier">Str::put</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="character">'\</span><span class="plain">"</span><span class="character">'</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function InterSchemas::de_escape_text is used in <a href="#SP20_2_2">&#167;20.2.2</a>, <a href="#SP26">&#167;26</a>.</p>
<p class="inwebparagraph"><a id="SP32"></a><b>&#167;32. Operators in I6. </b>The following routines return data which is essentially the content of the
table shown in section 6.2 of the Inform 6 Technical Manual: which operators table shown in section 6.2 of the Inform 6 Technical Manual: which operators
take precedence over which others, which are right or left associative, take precedence over which others, which are right or left associative,
which are prefix or postfix, and so on. which are prefix or postfix, and so on.
@ -3365,7 +3421,7 @@ which are prefix or postfix, and so on.
<p class="endnote">The function InterSchemas::right_associative is used in <a href="#SP28">&#167;28</a>.</p> <p class="endnote">The function InterSchemas::right_associative is used in <a href="#SP28">&#167;28</a>.</p>
<p class="inwebparagraph"><a id="SP31"></a><b>&#167;31. Metadata on inter primitives. </b></p> <p class="inwebparagraph"><a id="SP33"></a><b>&#167;33. Metadata on inter primitives. </b></p>
<pre class="display"> <pre class="display">

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::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_6">&#167;4.6</a>, <a href="#SP4_7">&#167;4.7</a>, <a href="#SP4_8">&#167;4.8</a>, <a href="#SP4_9">&#167;4.9</a>, <a href="#SP4_10">&#167;4.10</a>, <a href="#SP4_11">&#167;4.11</a>, <a href="#SP4_12">&#167;4.12</a>, <a href="#SP4_13">&#167;4.13</a>, <a href="#SP4_14">&#167;4.14</a>, <a href="#SP4_15">&#167;4.15</a>, <a href="#SP4_16">&#167;4.16</a>, <a href="#SP4_17">&#167;4.17</a>, <a href="#SP4_18">&#167;4.18</a>, <a href="#SP4_19">&#167;4.19</a>, <a href="#SP4_20">&#167;4.20</a>, <a href="#SP4_21">&#167;4.21</a>, <a href="#SP4_22">&#167;4.22</a>, <a href="#SP4_23">&#167;4.23</a>, <a href="#SP4_24">&#167;4.24</a>, <a href="#SP4_25">&#167;4.25</a>, <a href="#SP4_26">&#167;4.26</a>, <a href="#SP4_27">&#167;4.27</a>, <a href="#SP4_28">&#167;4.28</a>, <a href="#SP4_29">&#167;4.29</a>, <a href="#SP4_30">&#167;4.30</a>, <a href="#SP4_31">&#167;4.31</a>, <a href="#SP4_32">&#167;4.32</a>, <a href="#SP4_33">&#167;4.33</a>, <a href="#SP4_34">&#167;4.34</a>, <a href="#SP4_35">&#167;4.35</a>, <a href="#SP4_36">&#167;4.36</a>, <a href="#SP4_37">&#167;4.37</a>, <a href="#SP4_41">&#167;4.41</a>, <a href="#SP4_42">&#167;4.42</a>, <a href="#SP4_43">&#167;4.43</a>, <a href="#SP4_44">&#167;4.44</a>, <a href="#SP4_45">&#167;4.45</a>, <a href="#SP4_46">&#167;4.46</a>, <a href="#SP4_47">&#167;4.47</a>, <a href="#SP4_48">&#167;4.48</a>, <a href="#SP4_49">&#167;4.49</a>, <a href="#SP4_50">&#167;4.50</a>, <a href="#SP4_51">&#167;4.51</a>, <a href="#SP4_52">&#167;4.52</a>, <a href="#SP4_53">&#167;4.53</a>, <a href="#SP4_54">&#167;4.54</a>, <a href="#SP4_55">&#167;4.55</a>, <a href="#SP4_56">&#167;4.56</a>, <a href="#SP4_57">&#167;4.57</a>, <a href="#SP4_58">&#167;4.58</a>, <a href="#SP4_59">&#167;4.59</a>, <a href="#SP4_60">&#167;4.60</a>, <a href="#SP4_61">&#167;4.61</a>, <a href="#SP4_62">&#167;4.62</a>, <a href="#SP4_63">&#167;4.63</a>, <a href="#SP4_64">&#167;4.64</a>, <a href="#SP4_65">&#167;4.65</a>, <a href="#SP4_66">&#167;4.66</a>, <a href="#SP4_67">&#167;4.67</a>, <a href="#SP4_68">&#167;4.68</a>, <a href="#SP4_69">&#167;4.69</a>, <a href="#SP4_70">&#167;4.70</a>, <a href="#SP4_71">&#167;4.71</a>, <a href="#SP4_72">&#167;4.72</a>, <a href="#SP4_73">&#167;4.73</a>, <a href="#SP4_74">&#167;4.74</a>, <a href="#SP4_75">&#167;4.75</a>, <a href="#SP4_76">&#167;4.76</a>, <a href="#SP4_77">&#167;4.77</a>, <a href="#SP4_78">&#167;4.78</a>, <a href="#SP4_79">&#167;4.79</a>, <a href="#SP4_80">&#167;4.80</a>, <a href="#SP4_81">&#167;4.81</a>, <a href="#SP4_82">&#167;4.82</a>, <a href="#SP4_83">&#167;4.83</a>, <a href="#SP4_84">&#167;4.84</a>, <a href="#SP4_85">&#167;4.85</a>, <a href="#SP4_86">&#167;4.86</a>, <a href="#SP4_87">&#167;4.87</a>, <a href="#SP4_88">&#167;4.88</a>, <a href="#SP4_89">&#167;4.89</a>, <a href="#SP4_90">&#167;4.90</a>, <a href="#SP4_91">&#167;4.91</a>, <a href="#SP4_92">&#167;4.92</a>.</p> <p class="endnote">The function CodeGen::frame is used in <a href="#SP1">&#167;1</a>, <a href="#SP3">&#167;3</a>, <a href="#SP4">&#167;4</a>, <a href="#SP4_1">&#167;4.1</a>, <a href="#SP4_2">&#167;4.2</a>, <a href="#SP4_6">&#167;4.6</a>, <a href="#SP4_7">&#167;4.7</a>, <a href="#SP4_8">&#167;4.8</a>, <a href="#SP4_9">&#167;4.9</a>, <a href="#SP4_10">&#167;4.10</a>, <a href="#SP4_11">&#167;4.11</a>, <a href="#SP4_12">&#167;4.12</a>, <a href="#SP4_13">&#167;4.13</a>, <a href="#SP4_14">&#167;4.14</a>, <a href="#SP4_15">&#167;4.15</a>, <a href="#SP4_16">&#167;4.16</a>, <a href="#SP4_17">&#167;4.17</a>, <a href="#SP4_18">&#167;4.18</a>, <a href="#SP4_19">&#167;4.19</a>, <a href="#SP4_20">&#167;4.20</a>, <a href="#SP4_21">&#167;4.21</a>, <a href="#SP4_22">&#167;4.22</a>, <a href="#SP4_23">&#167;4.23</a>, <a href="#SP4_24">&#167;4.24</a>, <a href="#SP4_25">&#167;4.25</a>, <a href="#SP4_26">&#167;4.26</a>, <a href="#SP4_27">&#167;4.27</a>, <a href="#SP4_28">&#167;4.28</a>, <a href="#SP4_29">&#167;4.29</a>, <a href="#SP4_30">&#167;4.30</a>, <a href="#SP4_31">&#167;4.31</a>, <a href="#SP4_32">&#167;4.32</a>, <a href="#SP4_33">&#167;4.33</a>, <a href="#SP4_34">&#167;4.34</a>, <a href="#SP4_35">&#167;4.35</a>, <a href="#SP4_36">&#167;4.36</a>, <a href="#SP4_37">&#167;4.37</a>, <a href="#SP4_41">&#167;4.41</a>, <a href="#SP4_42">&#167;4.42</a>, <a href="#SP4_43">&#167;4.43</a>, <a href="#SP4_44">&#167;4.44</a>, <a href="#SP4_45">&#167;4.45</a>, <a href="#SP4_46">&#167;4.46</a>, <a href="#SP4_47">&#167;4.47</a>, <a href="#SP4_48">&#167;4.48</a>, <a href="#SP4_49">&#167;4.49</a>, <a href="#SP4_50">&#167;4.50</a>, <a href="#SP4_51">&#167;4.51</a>, <a href="#SP4_52">&#167;4.52</a>, <a href="#SP4_53">&#167;4.53</a>, <a href="#SP4_54">&#167;4.54</a>, <a href="#SP4_55">&#167;4.55</a>, <a href="#SP4_56">&#167;4.56</a>, <a href="#SP4_57">&#167;4.57</a>, <a href="#SP4_58">&#167;4.58</a>, <a href="#SP4_59">&#167;4.59</a>, <a href="#SP4_60">&#167;4.60</a>, <a href="#SP4_61">&#167;4.61</a>, <a href="#SP4_62">&#167;4.62</a>, <a href="#SP4_63">&#167;4.63</a>, <a href="#SP4_64">&#167;4.64</a>, <a href="#SP4_65">&#167;4.65</a>, <a href="#SP4_66">&#167;4.66</a>, <a href="#SP4_67">&#167;4.67</a>, <a href="#SP4_68">&#167;4.68</a>, <a href="#SP4_69">&#167;4.69</a>, <a href="#SP4_70">&#167;4.70</a>, <a href="#SP4_71">&#167;4.71</a>, <a href="#SP4_72">&#167;4.72</a>, <a href="#SP4_73">&#167;4.73</a>, <a href="#SP4_74">&#167;4.74</a>, <a href="#SP4_75">&#167;4.75</a>, <a href="#SP4_76">&#167;4.76</a>, <a href="#SP4_77">&#167;4.77</a>, <a href="#SP4_78">&#167;4.78</a>, <a href="#SP4_79">&#167;4.79</a>, <a href="#SP4_80">&#167;4.80</a>, <a href="#SP4_81">&#167;4.81</a>, <a href="#SP4_82">&#167;4.82</a>, <a href="#SP4_83">&#167;4.83</a>, <a href="#SP4_84">&#167;4.84</a>, <a href="#SP4_85">&#167;4.85</a>, <a href="#SP4_86">&#167;4.86</a>, <a href="#SP4_87">&#167;4.87</a>, <a href="#SP4_88">&#167;4.88</a>, <a href="#SP4_89">&#167;4.89</a>, <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>.</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: <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 an array written in the form
@ -762,10 +762,18 @@ is 20. We instead compile this as
<span class="reserved">case</span><span class="plain"> </span><span class="constant">INDIRECT3_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for indirect3</span> <span class="cwebmacronumber">4.86</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">INDIRECT3_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for indirect3</span> <span class="cwebmacronumber">4.86</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">INDIRECT4_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for indirect4</span> <span class="cwebmacronumber">4.87</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">INDIRECT4_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for indirect4</span> <span class="cwebmacronumber">4.87</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">INDIRECT5_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for indirect5</span> <span class="cwebmacronumber">4.88</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">INDIRECT5_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for indirect5</span> <span class="cwebmacronumber">4.88</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">PROPERTYADDRESS_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for propertyaddress</span> <span class="cwebmacronumber">4.89</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">MESSAGE0_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for message0</span> <span class="cwebmacronumber">4.89</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">PROPERTYLENGTH_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for propertylength</span> <span class="cwebmacronumber">4.90</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">MESSAGE1_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for message1</span> <span class="cwebmacronumber">4.90</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.91</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">MESSAGE2_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for message2</span> <span class="cwebmacronumber">4.91</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.92</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">MESSAGE3_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for message3</span> <span class="cwebmacronumber">4.92</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">CALLMESSAGE0_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for callmessage0</span> <span class="cwebmacronumber">4.93</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">CALLMESSAGE1_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for callmessage1</span> <span class="cwebmacronumber">4.94</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">CALLMESSAGE2_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for callmessage2</span> <span class="cwebmacronumber">4.95</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">CALLMESSAGE3_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for callmessage3</span> <span class="cwebmacronumber">4.96</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">PROPERTYADDRESS_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for propertyaddress</span> <span class="cwebmacronumber">4.97</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">PROPERTYLENGTH_BIP</span><span class="plain">: </span>&lt;<span class="cwebmacro">Generate primitive for propertylength</span> <span class="cwebmacronumber">4.98</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.99</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.100</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="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="plain">}</span>
<span class="reserved">break</span><span class="plain">;</span> <span class="reserved">break</span><span class="plain">;</span>
@ -2448,7 +2456,159 @@ then the result.
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p> <p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
<p class="inwebparagraph"><a id="SP4_89"></a><b>&#167;4.89. </b><code class="display"> <p class="inwebparagraph"><a id="SP4_89"></a><b>&#167;4.89. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for propertyaddress</span> <span class="cwebmacronumber">4.89</span>&gt; = &lt;<span class="cwebmacrodefn">Generate primitive for message0</span> <span class="cwebmacronumber">4.89</span>&gt; =
</code></p>
<pre class="displaydefn">
<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::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>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"())"</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="SP4_90"></a><b>&#167;4.90. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for message1</span> <span class="cwebmacronumber">4.90</span>&gt; =
</code></p>
<pre class="displaydefn">
<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::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>
<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::third_in_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>
</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="SP4_91"></a><b>&#167;4.91. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for message2</span> <span class="cwebmacronumber">4.91</span>&gt; =
</code></p>
<pre class="displaydefn">
<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::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>
<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::third_in_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::fourth_in_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>
</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="SP4_92"></a><b>&#167;4.92. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for message3</span> <span class="cwebmacronumber">4.92</span>&gt; =
</code></p>
<pre class="displaydefn">
<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::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>
<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::third_in_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::fourth_in_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::fifth_in_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>
</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="SP4_93"></a><b>&#167;4.93. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for callmessage0</span> <span class="cwebmacronumber">4.93</span>&gt; =
</code></p>
<pre class="displaydefn">
<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::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">".call())"</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="SP4_94"></a><b>&#167;4.94. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for callmessage1</span> <span class="cwebmacronumber">4.94</span>&gt; =
</code></p>
<pre class="displaydefn">
<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::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">".call("</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>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"))"</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="SP4_95"></a><b>&#167;4.95. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for callmessage2</span> <span class="cwebmacronumber">4.95</span>&gt; =
</code></p>
<pre class="displaydefn">
<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::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">".call("</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>
<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::third_in_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>
</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="SP4_96"></a><b>&#167;4.96. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for callmessage3</span> <span class="cwebmacronumber">4.96</span>&gt; =
</code></p>
<pre class="displaydefn">
<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::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">".call("</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>
<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::third_in_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::fourth_in_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>
</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="SP4_97"></a><b>&#167;4.97. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for propertyaddress</span> <span class="cwebmacronumber">4.97</span>&gt; =
</code></p> </code></p>
@ -2464,8 +2624,8 @@ then the result.
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p> <p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
<p class="inwebparagraph"><a id="SP4_90"></a><b>&#167;4.90. </b><code class="display"> <p class="inwebparagraph"><a id="SP4_98"></a><b>&#167;4.98. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for propertylength</span> <span class="cwebmacronumber">4.90</span>&gt; = &lt;<span class="cwebmacrodefn">Generate primitive for propertylength</span> <span class="cwebmacronumber">4.98</span>&gt; =
</code></p> </code></p>
@ -2481,8 +2641,8 @@ then the result.
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p> <p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
<p class="inwebparagraph"><a id="SP4_91"></a><b>&#167;4.91. </b><code class="display"> <p class="inwebparagraph"><a id="SP4_99"></a><b>&#167;4.99. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for provides</span> <span class="cwebmacronumber">4.91</span>&gt; = &lt;<span class="cwebmacrodefn">Generate primitive for provides</span> <span class="cwebmacronumber">4.99</span>&gt; =
</code></p> </code></p>
@ -2498,8 +2658,8 @@ then the result.
<p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p> <p class="endnote">This code is used in <a href="#SP4">&#167;4</a>.</p>
<p class="inwebparagraph"><a id="SP4_92"></a><b>&#167;4.92. </b><code class="display"> <p class="inwebparagraph"><a id="SP4_100"></a><b>&#167;4.100. </b><code class="display">
&lt;<span class="cwebmacrodefn">Generate primitive for propertyvalue</span> <span class="cwebmacronumber">4.92</span>&gt; = &lt;<span class="cwebmacrodefn">Generate primitive for propertyvalue</span> <span class="cwebmacronumber">4.100</span>&gt; =
</code></p> </code></p>

View file

@ -60,7 +60,7 @@ kinds being compiled to an I6 <code class="display"><span class="extract">Class<
<p class="inwebparagraph"></p> <p class="inwebparagraph"></p>
<p class="endnote">The function Kinds::RunTime::I6_classname is used in <a href="#SP25">&#167;25</a>, 6/bp (<a href="6-bp.html#SP25">&#167;25</a>), 6/rlt (<a href="6-rlt.html#SP29_2">&#167;29.2</a>, <a href="6-rlt.html#SP29_3">&#167;29.3</a>, <a href="6-rlt.html#SP29_4">&#167;29.4</a>, <a href="6-rlt.html#SP29_5">&#167;29.5</a>, <a href="6-rlt.html#SP29_6">&#167;29.6</a>), 12/ter (<a href="12-ter.html#SP8_6">&#167;8.6</a>), 12/ca (<a href="12-ca.html#SP6_2">&#167;6.2</a>), 12/dtd (<a href="12-dtd.html#SP24">&#167;24</a>), 13/kak (<a href="13-kak.html#SP2">&#167;2</a>), 25/cii (<a href="25-cii.html#SP3_1_1_4_7_1">&#167;3.1.1.4.7.1</a>), 26/iti (<a href="26-iti.html#SP9">&#167;9</a>), 27/hr (<a href="27-hr.html#SP4">&#167;4</a>), 27/eis (<a href="27-eis.html#SP2_8_1">&#167;2.8.1</a>).</p> <p class="endnote">The function Kinds::RunTime::I6_classname is used in <a href="#SP25">&#167;25</a>, 6/bp (<a href="6-bp.html#SP25">&#167;25</a>), 6/rlt (<a href="6-rlt.html#SP29_2">&#167;29.2</a>, <a href="6-rlt.html#SP29_3">&#167;29.3</a>, <a href="6-rlt.html#SP29_4">&#167;29.4</a>, <a href="6-rlt.html#SP29_5">&#167;29.5</a>, <a href="6-rlt.html#SP29_6">&#167;29.6</a>), 12/ter (<a href="12-ter.html#SP8_6">&#167;8.6</a>), 12/ca (<a href="12-ca.html#SP6_2">&#167;6.2</a>), 12/dtd (<a href="12-dtd.html#SP24">&#167;24</a>), 13/kak (<a href="13-kak.html#SP2">&#167;2</a>), 25/cii (<a href="25-cii.html#SP3_1_1_4_7_1">&#167;3.1.1.4.7.1</a>), 26/iti (<a href="26-iti.html#SP9">&#167;9</a>), 27/hr (<a href="27-hr.html#SP4">&#167;4</a>), 27/eis (<a href="27-eis.html#SP2_10_1">&#167;2.10.1</a>).</p>
<p class="endnote">The function Kinds::RunTime::I6_classnumber is used in <a href="#SP23">&#167;23</a>, 16/ic (<a href="16-ic.html#SP6">&#167;6</a>, <a href="16-ic.html#SP10">&#167;10</a>).</p> <p class="endnote">The function Kinds::RunTime::I6_classnumber is used in <a href="#SP23">&#167;23</a>, 16/ic (<a href="16-ic.html#SP6">&#167;6</a>, <a href="16-ic.html#SP10">&#167;10</a>).</p>

View file

@ -670,7 +670,7 @@ given fresh names in between now and then.
<p class="endnote">The function LocalVariables::by_name is used in 14/lv (<a href="14-lv.html#SP14_5">&#167;14.5</a>), 25/cii (<a href="25-cii.html#SP6">&#167;6</a>).</p> <p class="endnote">The function LocalVariables::by_name is used in 14/lv (<a href="14-lv.html#SP14_5">&#167;14.5</a>), 25/cii (<a href="25-cii.html#SP6">&#167;6</a>).</p>
<p class="endnote">The function LocalVariables::by_name_any is used in 27/eis (<a href="27-eis.html#SP2_9">&#167;2.9</a>).</p> <p class="endnote">The function LocalVariables::by_name_any is used in 27/eis (<a href="27-eis.html#SP2_11">&#167;2.11</a>).</p>
<p class="endnote">The function LocalVariables::phrase_options is used in 14/cn (<a href="14-cn.html#SP16_3">&#167;16.3</a>).</p> <p class="endnote">The function LocalVariables::phrase_options is used in 14/cn (<a href="14-cn.html#SP16_3">&#167;16.3</a>).</p>
@ -1648,7 +1648,7 @@ need in the compilation of any given routine:
<p class="endnote">The function LocalVariables::declare is used in 26/rt (<a href="26-rt.html#SP3">&#167;3</a>, <a href="26-rt.html#SP4">&#167;4</a>, <a href="26-rt.html#SP4_1_1">&#167;4.1.1</a>).</p> <p class="endnote">The function LocalVariables::declare is used in 26/rt (<a href="26-rt.html#SP3">&#167;3</a>, <a href="26-rt.html#SP4">&#167;4</a>, <a href="26-rt.html#SP4_1_1">&#167;4.1.1</a>).</p>
<p class="endnote">The function LocalVariables::declare_this is used in <a href="#SP8">&#167;8</a>, <a href="#SP10">&#167;10</a>, <a href="#SP11">&#167;11</a>, <a href="#SP27">&#167;27</a>, <a href="#SP28">&#167;28</a>, <a href="#SP29">&#167;29</a>, <a href="#SP41">&#167;41</a>, <a href="#SP43">&#167;43</a>, <a href="#SP45">&#167;45</a>, 4/am (<a href="4-am.html#SP34_2">&#167;34.2</a>), 11/tr (<a href="11-tr.html#SP10">&#167;10</a>), 12/dtd (<a href="12-dtd.html#SP9">&#167;9</a>, <a href="12-dtd.html#SP23">&#167;23</a>, <a href="12-dtd.html#SP25">&#167;25</a>, <a href="12-dtd.html#SP26">&#167;26</a>, <a href="12-dtd.html#SP27">&#167;27</a>), 12/cad (<a href="12-cad.html#SP7">&#167;7</a>), 13/rsfk (<a href="13-rsfk.html#SP24_6_2">&#167;24.6.2</a>, <a href="13-rsfk.html#SP24_6_3">&#167;24.6.3</a>, <a href="13-rsfk.html#SP24_6_4">&#167;24.6.4</a>), 14/lv (<a href="14-lv.html#SP14_1">&#167;14.1</a>, <a href="14-lv.html#SP14_5">&#167;14.5</a>), 14/cn (<a href="14-cn.html#SP16_3">&#167;16.3</a>), 20/eq (<a href="20-eq.html#SP48">&#167;48</a>), 25/cii (<a href="25-cii.html#SP1_2_1">&#167;1.2.1</a>, <a href="25-cii.html#SP3_5_1">&#167;3.5.1</a>, <a href="25-cii.html#SP3_5_3">&#167;3.5.3</a>), 25/cp (<a href="25-cp.html#SP5_3_5">&#167;5.3.5</a>), 27/eis (<a href="27-eis.html#SP2_9">&#167;2.9</a>).</p> <p class="endnote">The function LocalVariables::declare_this is used in <a href="#SP8">&#167;8</a>, <a href="#SP10">&#167;10</a>, <a href="#SP11">&#167;11</a>, <a href="#SP27">&#167;27</a>, <a href="#SP28">&#167;28</a>, <a href="#SP29">&#167;29</a>, <a href="#SP41">&#167;41</a>, <a href="#SP43">&#167;43</a>, <a href="#SP45">&#167;45</a>, 4/am (<a href="4-am.html#SP34_2">&#167;34.2</a>), 11/tr (<a href="11-tr.html#SP10">&#167;10</a>), 12/dtd (<a href="12-dtd.html#SP9">&#167;9</a>, <a href="12-dtd.html#SP23">&#167;23</a>, <a href="12-dtd.html#SP25">&#167;25</a>, <a href="12-dtd.html#SP26">&#167;26</a>, <a href="12-dtd.html#SP27">&#167;27</a>), 12/cad (<a href="12-cad.html#SP7">&#167;7</a>), 13/rsfk (<a href="13-rsfk.html#SP24_6_2">&#167;24.6.2</a>, <a href="13-rsfk.html#SP24_6_3">&#167;24.6.3</a>, <a href="13-rsfk.html#SP24_6_4">&#167;24.6.4</a>), 14/lv (<a href="14-lv.html#SP14_1">&#167;14.1</a>, <a href="14-lv.html#SP14_5">&#167;14.5</a>), 14/cn (<a href="14-cn.html#SP16_3">&#167;16.3</a>), 20/eq (<a href="20-eq.html#SP48">&#167;48</a>), 25/cii (<a href="25-cii.html#SP1_2_1">&#167;1.2.1</a>, <a href="25-cii.html#SP3_5_1">&#167;3.5.1</a>, <a href="25-cii.html#SP3_5_3">&#167;3.5.3</a>), 25/cp (<a href="25-cp.html#SP5_3_5">&#167;5.3.5</a>), 27/eis (<a href="27-eis.html#SP2_11">&#167;2.11</a>).</p>
<p class="endnote">The function LocalVariables::create_and_declare is used in 13/rsfk (<a href="13-rsfk.html#SP24_4_1">&#167;24.4.1</a>, <a href="13-rsfk.html#SP24_4_2">&#167;24.4.2</a>).</p> <p class="endnote">The function LocalVariables::create_and_declare is used in 13/rsfk (<a href="13-rsfk.html#SP24_4_1">&#167;24.4.1</a>, <a href="13-rsfk.html#SP24_4_2">&#167;24.4.2</a>).</p>

File diff suppressed because one or more lines are too long

View file

@ -41,14 +41,16 @@
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="identifier">isn_type</span><span class="plain">) {</span> <span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="identifier">isn_type</span><span class="plain">) {</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">LABEL_ISNT</span><span class="plain">: </span>&lt;<span class="cwebmacro">Label</span> <span class="cwebmacronumber">2.1</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="identifier">LABEL_ISNT</span><span class="plain">: </span>&lt;<span class="cwebmacro">Label</span> <span class="cwebmacronumber">2.1</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="identifier">CODE_ISNT</span><span class="plain">: </span>&lt;<span class="cwebmacro">Code block</span> <span class="cwebmacronumber">2.2</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="identifier">CODE_ISNT</span><span class="plain">: </span>&lt;<span class="cwebmacro">Code block</span> <span class="cwebmacronumber">2.2</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="identifier">EVAL_ISNT</span><span class="plain">: </span>&lt;<span class="cwebmacro">Eval block</span> <span class="cwebmacronumber">2.5</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="identifier">EVAL_ISNT</span><span class="plain">: </span>&lt;<span class="cwebmacro">Eval block</span> <span class="cwebmacronumber">2.7</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="identifier">EXPRESSION_ISNT</span><span class="plain">: </span>&lt;<span class="cwebmacro">Expression</span> <span class="cwebmacronumber">2.9</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="identifier">EXPRESSION_ISNT</span><span class="plain">: </span>&lt;<span class="cwebmacro">Expression</span> <span class="cwebmacronumber">2.11</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="identifier">SUBEXPRESSION_ISNT</span><span class="plain">: </span>&lt;<span class="cwebmacro">Subexpression</span> <span class="cwebmacronumber">2.7</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="identifier">SUBEXPRESSION_ISNT</span><span class="plain">: </span>&lt;<span class="cwebmacro">Subexpression</span> <span class="cwebmacronumber">2.9</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="identifier">STATEMENT_ISNT</span><span class="plain">: </span>&lt;<span class="cwebmacro">Statement</span> <span class="cwebmacronumber">2.8</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="identifier">STATEMENT_ISNT</span><span class="plain">: </span>&lt;<span class="cwebmacro">Statement</span> <span class="cwebmacronumber">2.10</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="identifier">OPERATION_ISNT</span><span class="plain">: </span>&lt;<span class="cwebmacro">Operation</span> <span class="cwebmacronumber">2.6</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="identifier">OPERATION_ISNT</span><span class="plain">: </span>&lt;<span class="cwebmacro">Operation</span> <span class="cwebmacronumber">2.8</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="identifier">ASSEMBLY_ISNT</span><span class="plain">: </span>&lt;<span class="cwebmacro">Assembly</span> <span class="cwebmacronumber">2.3</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="identifier">ASSEMBLY_ISNT</span><span class="plain">: </span>&lt;<span class="cwebmacro">Assembly</span> <span class="cwebmacronumber">2.3</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="identifier">CALL_ISNT</span><span class="plain">: </span>&lt;<span class="cwebmacro">Call</span> <span class="cwebmacronumber">2.4</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="identifier">CALL_ISNT</span><span class="plain">: </span>&lt;<span class="cwebmacro">Call</span> <span class="cwebmacronumber">2.4</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="identifier">DIRECTIVE_ISNT</span><span class="plain">: </span>&lt;<span class="cwebmacro">Directive</span> <span class="cwebmacronumber">2.10</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="identifier">MESSAGE_ISNT</span><span class="plain">: </span>&lt;<span class="cwebmacro">Message</span> <span class="cwebmacronumber">2.5</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="identifier">CALLMESSAGE_ISNT</span><span class="plain">: </span>&lt;<span class="cwebmacro">Call-message</span> <span class="cwebmacronumber">2.6</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="identifier">DIRECTIVE_ISNT</span><span class="plain">: </span>&lt;<span class="cwebmacro">Directive</span> <span class="cwebmacronumber">2.12</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">internal_error</span><span class="plain">(</span><span class="string">"unknown schema node type"</span><span class="plain">);</span> <span class="reserved">default</span><span class="plain">: </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"unknown schema node type"</span><span class="plain">);</span>
<span class="plain">}</span> <span class="plain">}</span>
<span class="plain">}</span> <span class="plain">}</span>
@ -56,7 +58,7 @@
<p class="inwebparagraph"></p> <p class="inwebparagraph"></p>
<p class="endnote">The function EmitInterSchemas::emit_inner is used in <a href="#SP1">&#167;1</a>, <a href="#SP2_2">&#167;2.2</a>, <a href="#SP2_3">&#167;2.3</a>, <a href="#SP2_4">&#167;2.4</a>, <a href="#SP2_5">&#167;2.5</a>, <a href="#SP2_6">&#167;2.6</a>, <a href="#SP2_7">&#167;2.7</a>, <a href="#SP2_8">&#167;2.8</a>, <a href="#SP2_8_1">&#167;2.8.1</a>.</p> <p class="endnote">The function EmitInterSchemas::emit_inner is used in <a href="#SP1">&#167;1</a>, <a href="#SP2_2">&#167;2.2</a>, <a href="#SP2_3">&#167;2.3</a>, <a href="#SP2_4">&#167;2.4</a>, <a href="#SP2_5">&#167;2.5</a>, <a href="#SP2_6">&#167;2.6</a>, <a href="#SP2_7">&#167;2.7</a>, <a href="#SP2_8">&#167;2.8</a>, <a href="#SP2_9">&#167;2.9</a>, <a href="#SP2_10">&#167;2.10</a>, <a href="#SP2_10_1">&#167;2.10.1</a>.</p>
<p class="inwebparagraph"><a id="SP2_1"></a><b>&#167;2.1. </b><code class="display"> <p class="inwebparagraph"><a id="SP2_1"></a><b>&#167;2.1. </b><code class="display">
&lt;<span class="cwebmacrodefn">Label</span> <span class="cwebmacronumber">2.1</span>&gt; = &lt;<span class="cwebmacrodefn">Label</span> <span class="cwebmacronumber">2.1</span>&gt; =
@ -192,7 +194,67 @@
<p class="endnote">This code is used in <a href="#SP2">&#167;2</a>.</p> <p class="endnote">This code is used in <a href="#SP2">&#167;2</a>.</p>
<p class="inwebparagraph"><a id="SP2_5"></a><b>&#167;2.5. </b><code class="display"> <p class="inwebparagraph"><a id="SP2_5"></a><b>&#167;2.5. </b><code class="display">
&lt;<span class="cwebmacrodefn">Eval block</span> <span class="cwebmacronumber">2.5</span>&gt; = &lt;<span class="cwebmacrodefn">Message</span> <span class="cwebmacronumber">2.5</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="identifier">child_node</span><span class="plain">) {</span>
<span class="identifier">inter_schema_node</span><span class="plain"> *</span><span class="identifier">at</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="identifier">child_node</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">argc</span><span class="plain"> = 0;</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="identifier">inter_schema_node</span><span class="plain"> *</span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="identifier">child_node</span><span class="plain">; </span><span class="identifier">n</span><span class="plain">; </span><span class="identifier">n</span><span class="plain">=</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="identifier">next_node</span><span class="plain">) </span><span class="identifier">argc</span><span class="plain">++;</span>
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">argc</span><span class="plain">) {</span>
<span class="reserved">case</span><span class="plain"> 2: </span><span class="functiontext">Emit::inv_primitive</span><span class="plain">(</span><span class="identifier">message0_interp</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> 3: </span><span class="functiontext">Emit::inv_primitive</span><span class="plain">(</span><span class="identifier">message1_interp</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> 4: </span><span class="functiontext">Emit::inv_primitive</span><span class="plain">(</span><span class="identifier">message2_interp</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> 5: </span><span class="functiontext">Emit::inv_primitive</span><span class="plain">(</span><span class="identifier">message3_interp</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">default</span><span class="plain">: </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"too many args for message"</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="functiontext">Emit::down</span><span class="plain">();</span>
<span class="reserved">for</span><span class="plain"> (; </span><span class="identifier">at</span><span class="plain">; </span><span class="identifier">at</span><span class="plain">=</span><span class="identifier">at</span><span class="plain">-&gt;</span><span class="identifier">next_node</span><span class="plain">)</span>
<span class="functiontext">EmitInterSchemas::emit_inner</span><span class="plain">(</span><span class="identifier">at</span><span class="plain">,</span>
<span class="identifier">VH</span><span class="plain">, </span><span class="identifier">sch</span><span class="plain">, </span><span class="identifier">opaque_state</span><span class="plain">, </span><span class="identifier">VAL_PRIM_CAT</span><span class="plain">,</span>
<span class="identifier">first_call</span><span class="plain">, </span><span class="identifier">second_call</span><span class="plain">, </span><span class="identifier">inline_command_handler</span><span class="plain">, </span><span class="identifier">i7_source_handler</span><span class="plain">);</span>
<span class="functiontext">Emit::up</span><span class="plain">();</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP2">&#167;2</a>.</p>
<p class="inwebparagraph"><a id="SP2_6"></a><b>&#167;2.6. </b><code class="display">
&lt;<span class="cwebmacrodefn">Call-message</span> <span class="cwebmacronumber">2.6</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="identifier">child_node</span><span class="plain">) {</span>
<span class="identifier">inter_schema_node</span><span class="plain"> *</span><span class="identifier">at</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="identifier">child_node</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">argc</span><span class="plain"> = 0;</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="identifier">inter_schema_node</span><span class="plain"> *</span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="identifier">child_node</span><span class="plain">; </span><span class="identifier">n</span><span class="plain">; </span><span class="identifier">n</span><span class="plain">=</span><span class="identifier">n</span><span class="plain">-&gt;</span><span class="identifier">next_node</span><span class="plain">) </span><span class="identifier">argc</span><span class="plain">++;</span>
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">argc</span><span class="plain">) {</span>
<span class="reserved">case</span><span class="plain"> 1: </span><span class="functiontext">Emit::inv_primitive</span><span class="plain">(</span><span class="identifier">callmessage0_interp</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> 2: </span><span class="functiontext">Emit::inv_primitive</span><span class="plain">(</span><span class="identifier">callmessage1_interp</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> 3: </span><span class="functiontext">Emit::inv_primitive</span><span class="plain">(</span><span class="identifier">callmessage2_interp</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> 4: </span><span class="functiontext">Emit::inv_primitive</span><span class="plain">(</span><span class="identifier">callmessage3_interp</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">default</span><span class="plain">: </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"too many args for call-message"</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="functiontext">Emit::down</span><span class="plain">();</span>
<span class="reserved">for</span><span class="plain"> (; </span><span class="identifier">at</span><span class="plain">; </span><span class="identifier">at</span><span class="plain">=</span><span class="identifier">at</span><span class="plain">-&gt;</span><span class="identifier">next_node</span><span class="plain">)</span>
<span class="functiontext">EmitInterSchemas::emit_inner</span><span class="plain">(</span><span class="identifier">at</span><span class="plain">,</span>
<span class="identifier">VH</span><span class="plain">, </span><span class="identifier">sch</span><span class="plain">, </span><span class="identifier">opaque_state</span><span class="plain">, </span><span class="identifier">VAL_PRIM_CAT</span><span class="plain">,</span>
<span class="identifier">first_call</span><span class="plain">, </span><span class="identifier">second_call</span><span class="plain">, </span><span class="identifier">inline_command_handler</span><span class="plain">, </span><span class="identifier">i7_source_handler</span><span class="plain">);</span>
<span class="functiontext">Emit::up</span><span class="plain">();</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP2">&#167;2</a>.</p>
<p class="inwebparagraph"><a id="SP2_7"></a><b>&#167;2.7. </b><code class="display">
&lt;<span class="cwebmacrodefn">Eval block</span> <span class="cwebmacronumber">2.7</span>&gt; =
</code></p> </code></p>
@ -220,8 +282,8 @@
<p class="endnote">This code is used in <a href="#SP2">&#167;2</a>.</p> <p class="endnote">This code is used in <a href="#SP2">&#167;2</a>.</p>
<p class="inwebparagraph"><a id="SP2_6"></a><b>&#167;2.6. </b><code class="display"> <p class="inwebparagraph"><a id="SP2_8"></a><b>&#167;2.8. </b><code class="display">
&lt;<span class="cwebmacrodefn">Operation</span> <span class="cwebmacronumber">2.6</span>&gt; = &lt;<span class="cwebmacrodefn">Operation</span> <span class="cwebmacronumber">2.8</span>&gt; =
</code></p> </code></p>
@ -249,8 +311,8 @@
<p class="endnote">This code is used in <a href="#SP2">&#167;2</a>.</p> <p class="endnote">This code is used in <a href="#SP2">&#167;2</a>.</p>
<p class="inwebparagraph"><a id="SP2_7"></a><b>&#167;2.7. </b><code class="display"> <p class="inwebparagraph"><a id="SP2_9"></a><b>&#167;2.9. </b><code class="display">
&lt;<span class="cwebmacrodefn">Subexpression</span> <span class="cwebmacronumber">2.7</span>&gt; = &lt;<span class="cwebmacrodefn">Subexpression</span> <span class="cwebmacronumber">2.9</span>&gt; =
</code></p> </code></p>
@ -273,8 +335,8 @@
<p class="endnote">This code is used in <a href="#SP2">&#167;2</a>.</p> <p class="endnote">This code is used in <a href="#SP2">&#167;2</a>.</p>
<p class="inwebparagraph"><a id="SP2_8"></a><b>&#167;2.8. </b><code class="display"> <p class="inwebparagraph"><a id="SP2_10"></a><b>&#167;2.10. </b><code class="display">
&lt;<span class="cwebmacrodefn">Statement</span> <span class="cwebmacronumber">2.8</span>&gt; = &lt;<span class="cwebmacrodefn">Statement</span> <span class="cwebmacronumber">2.10</span>&gt; =
</code></p> </code></p>
@ -286,7 +348,7 @@
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">arity</span><span class="plain"> &gt; 0) {</span> <span class="reserved">if</span><span class="plain"> (</span><span class="identifier">arity</span><span class="plain"> &gt; 0) {</span>
<span class="functiontext">Emit::down</span><span class="plain">();</span> <span class="functiontext">Emit::down</span><span class="plain">();</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="identifier">isn_clarifier</span><span class="plain"> == </span><span class="identifier">objectloop_interp</span><span class="plain">)</span> <span class="reserved">if</span><span class="plain"> (</span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="identifier">isn_clarifier</span><span class="plain"> == </span><span class="identifier">objectloop_interp</span><span class="plain">)</span>
&lt;<span class="cwebmacro">Add the objectloop range tokens</span> <span class="cwebmacronumber">2.8.1</span>&gt;<span class="plain">;</span> &lt;<span class="cwebmacro">Add the objectloop range tokens</span> <span class="cwebmacronumber">2.10.1</span>&gt;<span class="plain">;</span>
<span class="identifier">inter_schema_node</span><span class="plain"> *</span><span class="identifier">at</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="identifier">child_node</span><span class="plain">;</span> <span class="identifier">inter_schema_node</span><span class="plain"> *</span><span class="identifier">at</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-&gt;</span><span class="identifier">child_node</span><span class="plain">;</span>
<span class="identifier">inter_schema_node</span><span class="plain"> *</span><span class="identifier">last</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span> <span class="identifier">inter_schema_node</span><span class="plain"> *</span><span class="identifier">last</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">actual_arity</span><span class="plain"> = 0;</span> <span class="reserved">int</span><span class="plain"> </span><span class="identifier">actual_arity</span><span class="plain"> = 0;</span>
@ -308,8 +370,8 @@
<p class="endnote">This code is used in <a href="#SP2">&#167;2</a>.</p> <p class="endnote">This code is used in <a href="#SP2">&#167;2</a>.</p>
<p class="inwebparagraph"><a id="SP2_8_1"></a><b>&#167;2.8.1. </b><code class="display"> <p class="inwebparagraph"><a id="SP2_10_1"></a><b>&#167;2.10.1. </b><code class="display">
&lt;<span class="cwebmacrodefn">Add the objectloop range tokens</span> <span class="cwebmacronumber">2.8.1</span>&gt; = &lt;<span class="cwebmacrodefn">Add the objectloop range tokens</span> <span class="cwebmacronumber">2.10.1</span>&gt; =
</code></p> </code></p>
@ -342,10 +404,10 @@
<p class="inwebparagraph"></p> <p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP2_8">&#167;2.8</a>.</p> <p class="endnote">This code is used in <a href="#SP2_10">&#167;2.10</a>.</p>
<p class="inwebparagraph"><a id="SP2_9"></a><b>&#167;2.9. </b><code class="display"> <p class="inwebparagraph"><a id="SP2_11"></a><b>&#167;2.11. </b><code class="display">
&lt;<span class="cwebmacrodefn">Expression</span> <span class="cwebmacronumber">2.9</span>&gt; = &lt;<span class="cwebmacrodefn">Expression</span> <span class="cwebmacronumber">2.11</span>&gt; =
</code></p> </code></p>
@ -437,8 +499,8 @@
<p class="endnote">This code is used in <a href="#SP2">&#167;2</a>.</p> <p class="endnote">This code is used in <a href="#SP2">&#167;2</a>.</p>
<p class="inwebparagraph"><a id="SP2_10"></a><b>&#167;2.10. </b><code class="display"> <p class="inwebparagraph"><a id="SP2_12"></a><b>&#167;2.12. </b><code class="display">
&lt;<span class="cwebmacrodefn">Directive</span> <span class="cwebmacronumber">2.10</span>&gt; = &lt;<span class="cwebmacrodefn">Directive</span> <span class="cwebmacronumber">2.12</span>&gt; =
</code></p> </code></p>
@ -515,7 +577,7 @@
<p class="inwebparagraph"></p> <p class="inwebparagraph"></p>
<p class="endnote">The function EmitInterSchemas::find_identifier is used in <a href="#SP2_4">&#167;2.4</a>, <a href="#SP2_9">&#167;2.9</a>.</p> <p class="endnote">The function EmitInterSchemas::find_identifier is used in <a href="#SP2_4">&#167;2.4</a>, <a href="#SP2_11">&#167;2.11</a>.</p>
<p class="endnote">The function EmitInterSchemas::find_identifier_text is used in 25/cii (<a href="25-cii.html#SP3_6_2">&#167;3.6.2</a>).</p> <p class="endnote">The function EmitInterSchemas::find_identifier_text is used in 25/cii (<a href="25-cii.html#SP3_6_2">&#167;3.6.2</a>).</p>

File diff suppressed because one or more lines are too long

View file

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

View file

@ -30,6 +30,8 @@ void EmitInterSchemas::emit_inner(inter_schema_node *isn, value_holster *VH,
case OPERATION_ISNT: @<Operation@>; break; case OPERATION_ISNT: @<Operation@>; break;
case ASSEMBLY_ISNT: @<Assembly@>; break; case ASSEMBLY_ISNT: @<Assembly@>; break;
case CALL_ISNT: @<Call@>; break; case CALL_ISNT: @<Call@>; break;
case MESSAGE_ISNT: @<Message@>; break;
case CALLMESSAGE_ISNT: @<Call-message@>; break;
case DIRECTIVE_ISNT: @<Directive@>; break; case DIRECTIVE_ISNT: @<Directive@>; break;
default: internal_error("unknown schema node type"); default: internal_error("unknown schema node type");
} }
@ -128,6 +130,46 @@ void EmitInterSchemas::emit_inner(inter_schema_node *isn, value_holster *VH,
Emit::up(); Emit::up();
} }
@<Message@> =
if (isn->child_node) {
inter_schema_node *at = isn->child_node;
int argc = 0;
for (inter_schema_node *n = isn->child_node; n; n=n->next_node) argc++;
switch (argc) {
case 2: Emit::inv_primitive(message0_interp); break;
case 3: Emit::inv_primitive(message1_interp); break;
case 4: Emit::inv_primitive(message2_interp); break;
case 5: Emit::inv_primitive(message3_interp); break;
default: internal_error("too many args for message"); break;
}
Emit::down();
for (; at; at=at->next_node)
EmitInterSchemas::emit_inner(at,
VH, sch, opaque_state, VAL_PRIM_CAT,
first_call, second_call, inline_command_handler, i7_source_handler);
Emit::up();
}
@<Call-message@> =
if (isn->child_node) {
inter_schema_node *at = isn->child_node;
int argc = 0;
for (inter_schema_node *n = isn->child_node; n; n=n->next_node) argc++;
switch (argc) {
case 1: Emit::inv_primitive(callmessage0_interp); break;
case 2: Emit::inv_primitive(callmessage1_interp); break;
case 3: Emit::inv_primitive(callmessage2_interp); break;
case 4: Emit::inv_primitive(callmessage3_interp); break;
default: internal_error("too many args for call-message"); break;
}
Emit::down();
for (; at; at=at->next_node)
EmitInterSchemas::emit_inner(at,
VH, sch, opaque_state, VAL_PRIM_CAT,
first_call, second_call, inline_command_handler, i7_source_handler);
Emit::up();
}
@<Eval block@> = @<Eval block@> =
if ((prim_cat != CODE_PRIM_CAT) && (prim_cat != VAL_PRIM_CAT)) if ((prim_cat != CODE_PRIM_CAT) && (prim_cat != VAL_PRIM_CAT))
internal_error("eval block outside evaluation context"); internal_error("eval block outside evaluation context");

View file

@ -0,0 +1,59 @@
Test: parse schema from:
alpha.beta()
* (message)
* (expr)
IDENTIFIER alpha
* (expr)
IDENTIFIER beta
=========
Test: parse schema from:
alpha.beta(x)
* (message)
* (expr)
IDENTIFIER alpha
* (expr)
IDENTIFIER beta
* (expr)
IDENTIFIER x
=========
Test: parse schema from:
routine.call(x)
* (call-message)
* (expr)
IDENTIFIER routine
* (expr)
IDENTIFIER x
=========
Test: parse schema from:
(alpha.beta)(x)
* (call)
* (subexpression)
* (operation) !propertyvalue
* (expr)
IDENTIFIER alpha
* (expr)
IDENTIFIER beta
* (expr)
IDENTIFIER x
=========
Test: parse schema from:
debug_rules = 2; say__p = 1;
"Rules tracing now switched to ~all~. Type ~rules off~ to switch it off again.";
* (operation) !store
* (expr)
IDENTIFIER debug_rules
* (expr)
NUMBER 2
* (operation) !store
* (expr)
IDENTIFIER say__p
* (expr)
NUMBER 1
* (expr) ;
DQUOTED Rules tracing now switched to "all". Type "rules off" to switch it off again.
=========

16
inter/Tests/Units/exp.txt Normal file
View file

@ -0,0 +1,16 @@
schema
alpha.beta()
end
schema
alpha.beta(x)
end
schema
routine.call(x)
end
schema
(alpha.beta)(x)
end
schema
debug_rules = 2; say__p = 1;
"Rules tracing now switched to ~all~. Type ~rules off~ to switch it off again.";
end

View file

@ -669,7 +669,7 @@ inter_symbol *CodeGen::Assimilate::computed_constant_symbol(inter_package *pack)
int rb_splat_count = 1; int rb_splat_count = 1;
void CodeGen::Assimilate::routine_body(inter_reading_state *IRS, inter_symbol *block_name, inter_t offset, text_stream *body) { void CodeGen::Assimilate::routine_body(inter_reading_state *IRS, inter_symbol *block_name, inter_t offset, text_stream *body) {
if (Str::is_whitespace(body)) return; if (Str::is_whitespace(body)) return;
if (Str::len(body) < 100) { if (Str::len(body) < 120) {
LOG("=======\n\nCandidate (%S) len %d: '%S'\n\n", block_name->symbol_name, Str::len(body), body); LOG("=======\n\nCandidate (%S) len %d: '%S'\n\n", block_name->symbol_name, Str::len(body), body);
inter_schema *sch = InterSchemas::from_text(body, FALSE, 0, NULL); inter_schema *sch = InterSchemas::from_text(body, FALSE, 0, NULL);

View file

@ -89,6 +89,14 @@ inter_symbol *indirect2_interp = NULL;
inter_symbol *indirect3_interp = NULL; inter_symbol *indirect3_interp = NULL;
inter_symbol *indirect4_interp = NULL; inter_symbol *indirect4_interp = NULL;
inter_symbol *indirect5_interp = NULL; inter_symbol *indirect5_interp = NULL;
inter_symbol *message0_interp = NULL;
inter_symbol *message1_interp = NULL;
inter_symbol *message2_interp = NULL;
inter_symbol *message3_interp = NULL;
inter_symbol *callmessage0_interp = NULL;
inter_symbol *callmessage1_interp = NULL;
inter_symbol *callmessage2_interp = NULL;
inter_symbol *callmessage3_interp = NULL;
inter_symbol *propertyaddress_interp = NULL; inter_symbol *propertyaddress_interp = NULL;
inter_symbol *propertylength_interp = NULL; inter_symbol *propertylength_interp = NULL;
inter_symbol *provides_interp = NULL; inter_symbol *provides_interp = NULL;
@ -183,6 +191,14 @@ void Primitives::emit(inter_repository *I, inter_reading_state *IRS) {
Primitives::emit_one(I, IRS, I"!indirect3", I"val val val val -> val", &indirect3_interp); Primitives::emit_one(I, IRS, I"!indirect3", I"val val val val -> val", &indirect3_interp);
Primitives::emit_one(I, IRS, I"!indirect4", I"val val val val val -> val", &indirect4_interp); Primitives::emit_one(I, IRS, I"!indirect4", I"val val val val val -> val", &indirect4_interp);
Primitives::emit_one(I, IRS, I"!indirect5", I"val val val val val val -> val", &indirect5_interp); Primitives::emit_one(I, IRS, I"!indirect5", I"val val val val val val -> val", &indirect5_interp);
Primitives::emit_one(I, IRS, I"!message0", I"val val -> val", &message0_interp);
Primitives::emit_one(I, IRS, I"!message1", I"val val val -> val", &message1_interp);
Primitives::emit_one(I, IRS, I"!message2", I"val val val val -> val", &message2_interp);
Primitives::emit_one(I, IRS, I"!message3", I"val val val val val -> val", &message3_interp);
Primitives::emit_one(I, IRS, I"!callmessage0", I"val -> val", &callmessage0_interp);
Primitives::emit_one(I, IRS, I"!callmessage1", I"val val -> val", &callmessage1_interp);
Primitives::emit_one(I, IRS, I"!callmessage2", I"val val val -> val", &callmessage2_interp);
Primitives::emit_one(I, IRS, I"!callmessage3", I"val val val val -> val", &callmessage3_interp);
Primitives::emit_one(I, IRS, I"!propertyaddress", I"val val -> val", &propertyaddress_interp); Primitives::emit_one(I, IRS, I"!propertyaddress", I"val val -> val", &propertyaddress_interp);
Primitives::emit_one(I, IRS, I"!propertylength", I"val val -> val", &propertylength_interp); Primitives::emit_one(I, IRS, I"!propertylength", I"val val -> val", &propertylength_interp);
Primitives::emit_one(I, IRS, I"!provides", I"val val -> val", &provides_interp); Primitives::emit_one(I, IRS, I"!provides", I"val val -> val", &provides_interp);
@ -337,6 +353,14 @@ inter_symbol *Primitives::indirectv_interp(int arity) {
@e INDIRECT3_BIP @e INDIRECT3_BIP
@e INDIRECT4_BIP @e INDIRECT4_BIP
@e INDIRECT5_BIP @e INDIRECT5_BIP
@e MESSAGE0_BIP
@e MESSAGE1_BIP
@e MESSAGE2_BIP
@e MESSAGE3_BIP
@e CALLMESSAGE0_BIP
@e CALLMESSAGE1_BIP
@e CALLMESSAGE2_BIP
@e CALLMESSAGE3_BIP
@e PROPERTYADDRESS_BIP @e PROPERTYADDRESS_BIP
@e PROPERTYLENGTH_BIP @e PROPERTYLENGTH_BIP
@e PROVIDES_BIP @e PROVIDES_BIP
@ -436,6 +460,14 @@ inter_t Primitives::to_bip(inter_repository *I, inter_symbol *symb) {
if (Str::eq(symb->symbol_name, I"!indirect3")) bip = INDIRECT3_BIP; if (Str::eq(symb->symbol_name, I"!indirect3")) bip = INDIRECT3_BIP;
if (Str::eq(symb->symbol_name, I"!indirect4")) bip = INDIRECT4_BIP; if (Str::eq(symb->symbol_name, I"!indirect4")) bip = INDIRECT4_BIP;
if (Str::eq(symb->symbol_name, I"!indirect5")) bip = INDIRECT5_BIP; if (Str::eq(symb->symbol_name, I"!indirect5")) bip = INDIRECT5_BIP;
if (Str::eq(symb->symbol_name, I"!message0")) bip = MESSAGE0_BIP;
if (Str::eq(symb->symbol_name, I"!message1")) bip = MESSAGE1_BIP;
if (Str::eq(symb->symbol_name, I"!message2")) bip = MESSAGE2_BIP;
if (Str::eq(symb->symbol_name, I"!message3")) bip = MESSAGE3_BIP;
if (Str::eq(symb->symbol_name, I"!callmessage0")) bip = CALLMESSAGE0_BIP;
if (Str::eq(symb->symbol_name, I"!callmessage1")) bip = CALLMESSAGE1_BIP;
if (Str::eq(symb->symbol_name, I"!callmessage2")) bip = CALLMESSAGE2_BIP;
if (Str::eq(symb->symbol_name, I"!callmessage3")) bip = CALLMESSAGE3_BIP;
if (Str::eq(symb->symbol_name, I"!propertyaddress")) bip = PROPERTYADDRESS_BIP; if (Str::eq(symb->symbol_name, I"!propertyaddress")) bip = PROPERTYADDRESS_BIP;
if (Str::eq(symb->symbol_name, I"!propertylength")) bip = PROPERTYLENGTH_BIP; 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"!provides")) bip = PROVIDES_BIP;

View file

@ -65,6 +65,8 @@ but the need to do this went away.)
@e ASSEMBLY_ISNT @e ASSEMBLY_ISNT
@e LABEL_ISNT @e LABEL_ISNT
@e CALL_ISNT @e CALL_ISNT
@e MESSAGE_ISNT
@e CALLMESSAGE_ISNT
= =
typedef struct inter_schema_node { typedef struct inter_schema_node {
@ -463,6 +465,12 @@ void InterSchemas::log_just(inter_schema_node *isn, int depth) {
case CALL_ISNT: case CALL_ISNT:
LOG("* (call)\n"); LOG("* (call)\n");
break; break;
case MESSAGE_ISNT:
LOG("* (message)\n");
break;
case CALLMESSAGE_ISNT:
LOG("* (call-message)\n");
break;
case SUBEXPRESSION_ISNT: case SUBEXPRESSION_ISNT:
LOG("* (subexpression)\n"); LOG("* (subexpression)\n");
break; break;
@ -791,6 +799,7 @@ out for the two extra syntaxes allowed, |{-bracing}| and |(+ Inform 7 interpolat
InterSchemas::add_token(sch, InterSchemas::new_token(WHITE_SPACE_ISTT, I" ", NULL, 0, -1)); InterSchemas::add_token(sch, InterSchemas::new_token(WHITE_SPACE_ISTT, I" ", NULL, 0, -1));
break; break;
case DQUOTED_TOKSTATE: case DQUOTED_TOKSTATE:
InterSchemas::de_escape_text(current_raw);
InterSchemas::add_token(sch, InterSchemas::new_token(DQUOTED_ISTT, current_raw, NULL, 0, -1)); InterSchemas::add_token(sch, InterSchemas::new_token(DQUOTED_ISTT, current_raw, NULL, 0, -1));
break; break;
case SQUOTED_TOKSTATE: case SQUOTED_TOKSTATE:
@ -1429,6 +1438,7 @@ void InterSchemas::unmark(inter_schema_node *isn) {
REPEATEDLY_APPLY(InterSchemas::strip_all_spacing); REPEATEDLY_APPLY(InterSchemas::strip_all_spacing);
REPEATEDLY_APPLY(InterSchemas::debracket); REPEATEDLY_APPLY(InterSchemas::debracket);
REPEATEDLY_APPLY(InterSchemas::implied_return_values); REPEATEDLY_APPLY(InterSchemas::implied_return_values);
REPEATEDLY_APPLY(InterSchemas::message_calls);
@ = @ =
int InterSchemas::implied_braces(inter_schema_node *par, inter_schema_node *at) { int InterSchemas::implied_braces(inter_schema_node *par, inter_schema_node *at) {
@ -1846,10 +1856,10 @@ int InterSchemas::splitcases(inter_schema_node *par, inter_schema_node *isn) {
@ = @ =
int InterSchemas::alternatecases(inter_schema_node *par, inter_schema_node *isn) { int InterSchemas::alternatecases(inter_schema_node *par, inter_schema_node *isn) {
for (; isn; isn=isn->next_node) { for (; isn; isn=isn->next_node) {
if (isn->isn_clarifier == case_interp) { if ((isn->isn_clarifier == case_interp) && (isn->child_node)) {
inter_schema_node *A = isn->child_node; inter_schema_node *A = isn->child_node;
inter_schema_node *B = isn->child_node->next_node; inter_schema_node *B = isn->child_node->next_node;
if ((A->isn_type == EXPRESSION_ISNT) && (B->isn_type == EXPRESSION_ISNT)) { if ((A) && (B) && (B->next_node)) {
inter_schema_node *C = InterSchemas::new_node(isn->parent_schema, OPERATION_ISNT); inter_schema_node *C = InterSchemas::new_node(isn->parent_schema, OPERATION_ISNT);
C->isn_clarifier = alternativecase_interp; C->isn_clarifier = alternativecase_interp;
C->child_node = A; C->child_node = A;
@ -1939,12 +1949,7 @@ int InterSchemas::identify_constructs(inter_schema_node *par, inter_schema_node
while ((n) && (n->ist_type == WHITE_SPACE_ISTT)) n = n->next; while ((n) && (n->ist_type == WHITE_SPACE_ISTT)) n = n->next;
if ((n) && (n->ist_type == DQUOTED_ISTT)) { if ((n) && (n->ist_type == DQUOTED_ISTT)) {
subordinate_to = print_interp; subordinate_to = print_interp;
LOOP_THROUGH_TEXT(P, n->material) { InterSchemas::de_escape_text(n->material);
if (Str::get(P) == '^')
Str::put(P, '\n');
if (Str::get(P) == '~')
Str::put(P, '\"');
}
} }
} }
if (isn->expression_tokens->reserved_word == PRINTRET_I6RW) { if (isn->expression_tokens->reserved_word == PRINTRET_I6RW) {
@ -2136,6 +2141,7 @@ int InterSchemas::identify_constructs(inter_schema_node *par, inter_schema_node
if (dangle_text) { if (dangle_text) {
new_isn->expression_tokens = InterSchemas::new_token(DQUOTED_ISTT, dangle_text, NULL, 0, -1); new_isn->expression_tokens = InterSchemas::new_token(DQUOTED_ISTT, dangle_text, NULL, 0, -1);
new_isn->expression_tokens->owner = new_isn; new_isn->expression_tokens->owner = new_isn;
InterSchemas::de_escape_text(new_isn->expression_tokens->material);
} }
if (operand2) { if (operand2) {
inter_schema_node *new_new_isn = InterSchemas::new_node(isn->parent_schema, EXPRESSION_ISNT); inter_schema_node *new_new_isn = InterSchemas::new_node(isn->parent_schema, EXPRESSION_ISNT);
@ -2570,6 +2576,40 @@ int InterSchemas::implied_return_values(inter_schema_node *par, inter_schema_nod
return FALSE; return FALSE;
} }
@ =
int InterSchemas::message_calls(inter_schema_node *par, inter_schema_node *isn) {
for (inter_schema_node *prev = NULL; isn; prev = isn, isn = isn->next_node) {
if ((isn->isn_type == OPERATION_ISNT) && (isn->isn_clarifier == propertyvalue_interp) &&
(isn->child_node) && (isn->child_node->next_node) && (isn->child_node->next_node->isn_type == CALL_ISNT)) {
inter_schema_node *obj = isn->child_node;
inter_schema_node *message = isn->child_node->next_node->child_node;
inter_schema_node *args = isn->child_node->next_node->child_node->next_node;
isn->isn_type = MESSAGE_ISNT; isn->isn_clarifier = NULL;
obj->next_node = message; message->parent_node = isn; message->next_node = args;
if (message->isn_type == EXPRESSION_ISNT) {
inter_schema_token *n = message->expression_tokens;
if ((n) && (Str::eq(n->material, I"call"))) {
obj->next_node = args; isn->isn_type = CALLMESSAGE_ISNT;
}
}
while (args) { args->parent_node = isn; args = args->next_node; }
return TRUE;
}
if (InterSchemas::message_calls(isn, isn->child_node)) return TRUE;
}
return FALSE;
}
@ =
void InterSchemas::de_escape_text(text_stream *m) {
LOOP_THROUGH_TEXT(P, m) {
if (Str::get(P) == '^')
Str::put(P, '\n');
if (Str::get(P) == '~')
Str::put(P, '\"');
}
}
@h Operators in I6. @h Operators in I6.
The following routines return data which is essentially the content of the The following routines return data which is essentially the content of the
table shown in section 6.2 of the Inform 6 Technical Manual: which operators table shown in section 6.2 of the Inform 6 Technical Manual: which operators

View file

@ -702,6 +702,14 @@ void CodeGen::inv(OUTPUT_STREAM, inter_repository *I, inter_frame P) {
case INDIRECT3_BIP: @<Generate primitive for indirect3@>; break; case INDIRECT3_BIP: @<Generate primitive for indirect3@>; break;
case INDIRECT4_BIP: @<Generate primitive for indirect4@>; break; case INDIRECT4_BIP: @<Generate primitive for indirect4@>; break;
case INDIRECT5_BIP: @<Generate primitive for indirect5@>; break; case INDIRECT5_BIP: @<Generate primitive for indirect5@>; break;
case MESSAGE0_BIP: @<Generate primitive for message0@>; break;
case MESSAGE1_BIP: @<Generate primitive for message1@>; break;
case MESSAGE2_BIP: @<Generate primitive for message2@>; break;
case MESSAGE3_BIP: @<Generate primitive for message3@>; break;
case CALLMESSAGE0_BIP: @<Generate primitive for callmessage0@>; break;
case CALLMESSAGE1_BIP: @<Generate primitive for callmessage1@>; break;
case CALLMESSAGE2_BIP: @<Generate primitive for callmessage2@>; break;
case CALLMESSAGE3_BIP: @<Generate primitive for callmessage3@>; break;
case PROPERTYADDRESS_BIP: @<Generate primitive for propertyaddress@>; break; case PROPERTYADDRESS_BIP: @<Generate primitive for propertyaddress@>; break;
case PROPERTYLENGTH_BIP: @<Generate primitive for propertylength@>; break; case PROPERTYLENGTH_BIP: @<Generate primitive for propertylength@>; break;
case PROVIDES_BIP: @<Generate primitive for provides@>; break; case PROVIDES_BIP: @<Generate primitive for provides@>; break;
@ -1459,6 +1467,78 @@ then the result.
CodeGen::frame(OUT, I, Inter::sixth_in_frame_list(ifl)); CodeGen::frame(OUT, I, Inter::sixth_in_frame_list(ifl));
WRITE(")"); WRITE(")");
@<Generate primitive for message0@> =
WRITE("(");
CodeGen::frame(OUT, I, Inter::top_of_frame_list(ifl));
WRITE(".");
CodeGen::frame(OUT, I, Inter::second_in_frame_list(ifl));
WRITE("())");
@<Generate primitive for message1@> =
WRITE("(");
CodeGen::frame(OUT, I, Inter::top_of_frame_list(ifl));
WRITE(".");
CodeGen::frame(OUT, I, Inter::second_in_frame_list(ifl));
WRITE("(");
CodeGen::frame(OUT, I, Inter::third_in_frame_list(ifl));
WRITE("))");
@<Generate primitive for message2@> =
WRITE("(");
CodeGen::frame(OUT, I, Inter::top_of_frame_list(ifl));
WRITE(".");
CodeGen::frame(OUT, I, Inter::second_in_frame_list(ifl));
WRITE("(");
CodeGen::frame(OUT, I, Inter::third_in_frame_list(ifl));
WRITE(",");
CodeGen::frame(OUT, I, Inter::fourth_in_frame_list(ifl));
WRITE("))");
@<Generate primitive for message3@> =
WRITE("(");
CodeGen::frame(OUT, I, Inter::top_of_frame_list(ifl));
WRITE(".");
CodeGen::frame(OUT, I, Inter::second_in_frame_list(ifl));
WRITE("(");
CodeGen::frame(OUT, I, Inter::third_in_frame_list(ifl));
WRITE(",");
CodeGen::frame(OUT, I, Inter::fourth_in_frame_list(ifl));
WRITE(",");
CodeGen::frame(OUT, I, Inter::fifth_in_frame_list(ifl));
WRITE("))");
@<Generate primitive for callmessage0@> =
WRITE("(");
CodeGen::frame(OUT, I, Inter::top_of_frame_list(ifl));
WRITE(".call())");
@<Generate primitive for callmessage1@> =
WRITE("(");
CodeGen::frame(OUT, I, Inter::top_of_frame_list(ifl));
WRITE(".call(");
CodeGen::frame(OUT, I, Inter::second_in_frame_list(ifl));
WRITE("))");
@<Generate primitive for callmessage2@> =
WRITE("(");
CodeGen::frame(OUT, I, Inter::top_of_frame_list(ifl));
WRITE(".call(");
CodeGen::frame(OUT, I, Inter::second_in_frame_list(ifl));
WRITE(",");
CodeGen::frame(OUT, I, Inter::third_in_frame_list(ifl));
WRITE("))");
@<Generate primitive for callmessage3@> =
WRITE("(");
CodeGen::frame(OUT, I, Inter::top_of_frame_list(ifl));
WRITE(".call(");
CodeGen::frame(OUT, I, Inter::second_in_frame_list(ifl));
WRITE(",");
CodeGen::frame(OUT, I, Inter::third_in_frame_list(ifl));
WRITE(",");
CodeGen::frame(OUT, I, Inter::fourth_in_frame_list(ifl));
WRITE("))");
@<Generate primitive for propertyaddress@> = @<Generate primitive for propertyaddress@> =
WRITE("("); WRITE("(");
CodeGen::frame(OUT, I, Inter::top_of_frame_list(ifl)); CodeGen::frame(OUT, I, Inter::top_of_frame_list(ifl));