mirror of
https://github.com/ganelson/inform.git
synced 2024-07-05 16:44:21 +03:00
Handled I6 message calls in Inter schema
This commit is contained in:
parent
54d6366fb5
commit
e69fc2b4e4
|
@ -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">void</span><span class="plain"> </span><span class="functiontext">CodeGen::Assimilate::routine_body</span><span class="plain">(</span><span class="identifier">inter_reading_state</span><span class="plain"> *</span><span class="identifier">IRS</span><span class="plain">, </span><span class="identifier">inter_symbol</span><span class="plain"> *</span><span class="identifier">block_name</span><span class="plain">, </span><span class="identifier">inter_t</span><span class="plain"> </span><span class="identifier">offset</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">body</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::is_whitespace</span><span class="plain">(</span><span class="identifier">body</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">body</span><span class="plain">) < 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">) < 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">-></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>
|
||||
|
||||
|
|
|
@ -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">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">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">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>
|
||||
|
@ -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 -> val"</span><span class="plain">, &</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 -> val"</span><span class="plain">, &</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 -> val"</span><span class="plain">, &</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 -> val"</span><span class="plain">, &</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 -> val"</span><span class="plain">, &</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 -> val"</span><span class="plain">, &</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 -> val"</span><span class="plain">, &</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 -> val"</span><span class="plain">, &</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 -> val"</span><span class="plain">, &</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 -> val"</span><span class="plain">, &</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 -> val"</span><span class="plain">, &</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 -> val"</span><span class="plain">, &</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 -> val"</span><span class="plain">, &</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 -> val"</span><span class="plain">, &</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">INDIRECT4_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">PROPERTYLENGTH_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">-></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">-></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">-></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">-></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">-></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">-></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">-></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">-></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">-></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">-></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">-></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">-></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">-></span><span class="identifier">symbol_name</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"!propertylength"</span><span class="plain">)) </span><span class="identifier">bip</span><span class="plain"> = </span><span class="constant">PROPERTYLENGTH_BIP</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">symb</span><span class="plain">-></span><span class="identifier">symbol_name</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"!provides"</span><span class="plain">)) </span><span class="identifier">bip</span><span class="plain"> = </span><span class="constant">PROVIDES_BIP</span><span class="plain">;</span>
|
||||
|
|
|
@ -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">LABEL_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 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="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">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="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>
|
||||
|
@ -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="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="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="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>
|
||||
|
@ -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::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::message_calls</span><span class="plain">);</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
@ -2352,10 +2362,10 @@ these out at the start of each iteration.
|
|||
<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">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">>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">>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">>isn_clarifier</span><span class="plain"> == </span><span class="identifier">case_interp</span><span class="plain">) && (</span><span class="identifier">isn</span><span class="plain">-</span><span class="element">>child_node</span><span class="plain">)) {</span>
|
||||
<span class="reserved">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">>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">>child_node</span><span class="plain">-</span><span class="element">>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">>isn_type</span><span class="plain"> == </span><span class="constant">EXPRESSION_ISNT</span><span class="plain">) && (</span><span class="identifier">B</span><span class="plain">-</span><span class="element">>isn_type</span><span class="plain"> == </span><span class="constant">EXPRESSION_ISNT</span><span class="plain">)) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">A</span><span class="plain">) && (</span><span class="identifier">B</span><span class="plain">) && (</span><span class="identifier">B</span><span class="plain">-</span><span class="element">>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">>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">>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">>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">) && (</span><span class="identifier">n</span><span class="plain">-</span><span class="element">>ist_type</span><span class="plain"> == </span><span class="constant">WHITE_SPACE_ISTT</span><span class="plain">)) </span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">n</span><span class="plain">-</span><span class="element">>next</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">n</span><span class="plain">) && (</span><span class="identifier">n</span><span class="plain">-</span><span class="element">>ist_type</span><span class="plain"> == </span><span class="constant">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">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">>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="functiontext">InterSchemas::de_escape_text</span><span class="plain">(</span><span class="identifier">n</span><span class="plain">-</span><span class="element">>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">isn</span><span class="plain">-</span><span class="element">>expression_tokens</span><span class="plain">-</span><span class="element">>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="identifier">new_isn</span><span class="plain">-</span><span class="element">>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">>expression_tokens</span><span class="plain">-</span><span class="element">>owner</span><span class="plain"> = </span><span class="identifier">new_isn</span><span class="plain">;</span>
|
||||
<span class="functiontext">InterSchemas::de_escape_text</span><span class="plain">(</span><span class="identifier">new_isn</span><span class="plain">-</span><span class="element">>expression_tokens</span><span class="plain">-</span><span class="element">>material</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">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">>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">§20.4</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP30"></a><b>§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>§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">>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">>isn_type</span><span class="plain"> == </span><span class="constant">OPERATION_ISNT</span><span class="plain">) && (</span><span class="identifier">isn</span><span class="plain">-</span><span class="element">>isn_clarifier</span><span class="plain"> == </span><span class="identifier">propertyvalue_interp</span><span class="plain">) &&</span>
|
||||
<span class="plain">(</span><span class="identifier">isn</span><span class="plain">-</span><span class="element">>child_node</span><span class="plain">) && (</span><span class="identifier">isn</span><span class="plain">-</span><span class="element">>child_node</span><span class="plain">-</span><span class="element">>next_node</span><span class="plain">) && (</span><span class="identifier">isn</span><span class="plain">-</span><span class="element">>child_node</span><span class="plain">-</span><span class="element">>next_node</span><span class="plain">-</span><span class="element">>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">>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">>child_node</span><span class="plain">-</span><span class="element">>next_node</span><span class="plain">-</span><span class="element">>child_node</span><span class="plain">;</span>
|
||||
<span class="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">>child_node</span><span class="plain">-</span><span class="element">>next_node</span><span class="plain">-</span><span class="element">>child_node</span><span class="plain">-</span><span class="element">>next_node</span><span class="plain">;</span>
|
||||
<span class="identifier">isn</span><span class="plain">-</span><span class="element">>isn_type</span><span class="plain"> = </span><span class="constant">MESSAGE_ISNT</span><span class="plain">; </span><span class="identifier">isn</span><span class="plain">-</span><span class="element">>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">>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">>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">>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">>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">>expression_tokens</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">n</span><span class="plain">) && (</span><span class="identifier">Str::eq</span><span class="plain">(</span><span class="identifier">n</span><span class="plain">-</span><span class="element">>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">>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">>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">>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">>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">>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">§20.4</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP31"></a><b>§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">§20.2.2</a>, <a href="#SP26">§26</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP32"></a><b>§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
|
||||
take precedence over which others, which are right or left associative,
|
||||
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">§28</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP31"></a><b>§31. Metadata on inter primitives. </b></p>
|
||||
<p class="inwebparagraph"><a id="SP33"></a><b>§33. Metadata on inter primitives. </b></p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
|
|
|
@ -290,7 +290,7 @@
|
|||
|
||||
<p class="endnote">The function CodeGen::repo_list is used in <a href="#SP1">§1</a>, 2/erm (<a href="2-erm.html#SP1">§1</a>).</p>
|
||||
|
||||
<p class="endnote">The function CodeGen::frame is used in <a href="#SP1">§1</a>, <a href="#SP3">§3</a>, <a href="#SP4">§4</a>, <a href="#SP4_1">§4.1</a>, <a href="#SP4_2">§4.2</a>, <a href="#SP4_6">§4.6</a>, <a href="#SP4_7">§4.7</a>, <a href="#SP4_8">§4.8</a>, <a href="#SP4_9">§4.9</a>, <a href="#SP4_10">§4.10</a>, <a href="#SP4_11">§4.11</a>, <a href="#SP4_12">§4.12</a>, <a href="#SP4_13">§4.13</a>, <a href="#SP4_14">§4.14</a>, <a href="#SP4_15">§4.15</a>, <a href="#SP4_16">§4.16</a>, <a href="#SP4_17">§4.17</a>, <a href="#SP4_18">§4.18</a>, <a href="#SP4_19">§4.19</a>, <a href="#SP4_20">§4.20</a>, <a href="#SP4_21">§4.21</a>, <a href="#SP4_22">§4.22</a>, <a href="#SP4_23">§4.23</a>, <a href="#SP4_24">§4.24</a>, <a href="#SP4_25">§4.25</a>, <a href="#SP4_26">§4.26</a>, <a href="#SP4_27">§4.27</a>, <a href="#SP4_28">§4.28</a>, <a href="#SP4_29">§4.29</a>, <a href="#SP4_30">§4.30</a>, <a href="#SP4_31">§4.31</a>, <a href="#SP4_32">§4.32</a>, <a href="#SP4_33">§4.33</a>, <a href="#SP4_34">§4.34</a>, <a href="#SP4_35">§4.35</a>, <a href="#SP4_36">§4.36</a>, <a href="#SP4_37">§4.37</a>, <a href="#SP4_41">§4.41</a>, <a href="#SP4_42">§4.42</a>, <a href="#SP4_43">§4.43</a>, <a href="#SP4_44">§4.44</a>, <a href="#SP4_45">§4.45</a>, <a href="#SP4_46">§4.46</a>, <a href="#SP4_47">§4.47</a>, <a href="#SP4_48">§4.48</a>, <a href="#SP4_49">§4.49</a>, <a href="#SP4_50">§4.50</a>, <a href="#SP4_51">§4.51</a>, <a href="#SP4_52">§4.52</a>, <a href="#SP4_53">§4.53</a>, <a href="#SP4_54">§4.54</a>, <a href="#SP4_55">§4.55</a>, <a href="#SP4_56">§4.56</a>, <a href="#SP4_57">§4.57</a>, <a href="#SP4_58">§4.58</a>, <a href="#SP4_59">§4.59</a>, <a href="#SP4_60">§4.60</a>, <a href="#SP4_61">§4.61</a>, <a href="#SP4_62">§4.62</a>, <a href="#SP4_63">§4.63</a>, <a href="#SP4_64">§4.64</a>, <a href="#SP4_65">§4.65</a>, <a href="#SP4_66">§4.66</a>, <a href="#SP4_67">§4.67</a>, <a href="#SP4_68">§4.68</a>, <a href="#SP4_69">§4.69</a>, <a href="#SP4_70">§4.70</a>, <a href="#SP4_71">§4.71</a>, <a href="#SP4_72">§4.72</a>, <a href="#SP4_73">§4.73</a>, <a href="#SP4_74">§4.74</a>, <a href="#SP4_75">§4.75</a>, <a href="#SP4_76">§4.76</a>, <a href="#SP4_77">§4.77</a>, <a href="#SP4_78">§4.78</a>, <a href="#SP4_79">§4.79</a>, <a href="#SP4_80">§4.80</a>, <a href="#SP4_81">§4.81</a>, <a href="#SP4_82">§4.82</a>, <a href="#SP4_83">§4.83</a>, <a href="#SP4_84">§4.84</a>, <a href="#SP4_85">§4.85</a>, <a href="#SP4_86">§4.86</a>, <a href="#SP4_87">§4.87</a>, <a href="#SP4_88">§4.88</a>, <a href="#SP4_89">§4.89</a>, <a href="#SP4_90">§4.90</a>, <a href="#SP4_91">§4.91</a>, <a href="#SP4_92">§4.92</a>.</p>
|
||||
<p class="endnote">The function CodeGen::frame is used in <a href="#SP1">§1</a>, <a href="#SP3">§3</a>, <a href="#SP4">§4</a>, <a href="#SP4_1">§4.1</a>, <a href="#SP4_2">§4.2</a>, <a href="#SP4_6">§4.6</a>, <a href="#SP4_7">§4.7</a>, <a href="#SP4_8">§4.8</a>, <a href="#SP4_9">§4.9</a>, <a href="#SP4_10">§4.10</a>, <a href="#SP4_11">§4.11</a>, <a href="#SP4_12">§4.12</a>, <a href="#SP4_13">§4.13</a>, <a href="#SP4_14">§4.14</a>, <a href="#SP4_15">§4.15</a>, <a href="#SP4_16">§4.16</a>, <a href="#SP4_17">§4.17</a>, <a href="#SP4_18">§4.18</a>, <a href="#SP4_19">§4.19</a>, <a href="#SP4_20">§4.20</a>, <a href="#SP4_21">§4.21</a>, <a href="#SP4_22">§4.22</a>, <a href="#SP4_23">§4.23</a>, <a href="#SP4_24">§4.24</a>, <a href="#SP4_25">§4.25</a>, <a href="#SP4_26">§4.26</a>, <a href="#SP4_27">§4.27</a>, <a href="#SP4_28">§4.28</a>, <a href="#SP4_29">§4.29</a>, <a href="#SP4_30">§4.30</a>, <a href="#SP4_31">§4.31</a>, <a href="#SP4_32">§4.32</a>, <a href="#SP4_33">§4.33</a>, <a href="#SP4_34">§4.34</a>, <a href="#SP4_35">§4.35</a>, <a href="#SP4_36">§4.36</a>, <a href="#SP4_37">§4.37</a>, <a href="#SP4_41">§4.41</a>, <a href="#SP4_42">§4.42</a>, <a href="#SP4_43">§4.43</a>, <a href="#SP4_44">§4.44</a>, <a href="#SP4_45">§4.45</a>, <a href="#SP4_46">§4.46</a>, <a href="#SP4_47">§4.47</a>, <a href="#SP4_48">§4.48</a>, <a href="#SP4_49">§4.49</a>, <a href="#SP4_50">§4.50</a>, <a href="#SP4_51">§4.51</a>, <a href="#SP4_52">§4.52</a>, <a href="#SP4_53">§4.53</a>, <a href="#SP4_54">§4.54</a>, <a href="#SP4_55">§4.55</a>, <a href="#SP4_56">§4.56</a>, <a href="#SP4_57">§4.57</a>, <a href="#SP4_58">§4.58</a>, <a href="#SP4_59">§4.59</a>, <a href="#SP4_60">§4.60</a>, <a href="#SP4_61">§4.61</a>, <a href="#SP4_62">§4.62</a>, <a href="#SP4_63">§4.63</a>, <a href="#SP4_64">§4.64</a>, <a href="#SP4_65">§4.65</a>, <a href="#SP4_66">§4.66</a>, <a href="#SP4_67">§4.67</a>, <a href="#SP4_68">§4.68</a>, <a href="#SP4_69">§4.69</a>, <a href="#SP4_70">§4.70</a>, <a href="#SP4_71">§4.71</a>, <a href="#SP4_72">§4.72</a>, <a href="#SP4_73">§4.73</a>, <a href="#SP4_74">§4.74</a>, <a href="#SP4_75">§4.75</a>, <a href="#SP4_76">§4.76</a>, <a href="#SP4_77">§4.77</a>, <a href="#SP4_78">§4.78</a>, <a href="#SP4_79">§4.79</a>, <a href="#SP4_80">§4.80</a>, <a href="#SP4_81">§4.81</a>, <a href="#SP4_82">§4.82</a>, <a href="#SP4_83">§4.83</a>, <a href="#SP4_84">§4.84</a>, <a href="#SP4_85">§4.85</a>, <a href="#SP4_86">§4.86</a>, <a href="#SP4_87">§4.87</a>, <a href="#SP4_88">§4.88</a>, <a href="#SP4_89">§4.89</a>, <a href="#SP4_90">§4.90</a>, <a href="#SP4_91">§4.91</a>, <a href="#SP4_92">§4.92</a>, <a href="#SP4_93">§4.93</a>, <a href="#SP4_94">§4.94</a>, <a href="#SP4_95">§4.95</a>, <a href="#SP4_96">§4.96</a>, <a href="#SP4_97">§4.97</a>, <a href="#SP4_98">§4.98</a>, <a href="#SP4_99">§4.99</a>, <a href="#SP4_100">§4.100</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP3"></a><b>§3. </b>There's a contrivance here to get around an awkward point of I6 syntax:
|
||||
an array written in the form
|
||||
|
@ -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><<span class="cwebmacro">Generate primitive for indirect3</span> <span class="cwebmacronumber">4.86</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">INDIRECT4_BIP</span><span class="plain">: </span><<span class="cwebmacro">Generate primitive for indirect4</span> <span class="cwebmacronumber">4.87</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">INDIRECT5_BIP</span><span class="plain">: </span><<span class="cwebmacro">Generate primitive for indirect5</span> <span class="cwebmacronumber">4.88</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">PROPERTYADDRESS_BIP</span><span class="plain">: </span><<span class="cwebmacro">Generate primitive for propertyaddress</span> <span class="cwebmacronumber">4.89</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">PROPERTYLENGTH_BIP</span><span class="plain">: </span><<span class="cwebmacro">Generate primitive for propertylength</span> <span class="cwebmacronumber">4.90</span>><span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
|
||||
<span class="reserved">case</span><span class="plain"> </span><span class="constant">PROVIDES_BIP</span><span class="plain">: </span><<span class="cwebmacro">Generate primitive for provides</span> <span class="cwebmacronumber">4.91</span>><span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
|
||||
<span class="reserved">case</span><span class="plain"> </span><span class="constant">PROPERTYVALUE_BIP</span><span class="plain">: </span><<span class="cwebmacro">Generate primitive for propertyvalue</span> <span class="cwebmacronumber">4.92</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">MESSAGE0_BIP</span><span class="plain">: </span><<span class="cwebmacro">Generate primitive for message0</span> <span class="cwebmacronumber">4.89</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">MESSAGE1_BIP</span><span class="plain">: </span><<span class="cwebmacro">Generate primitive for message1</span> <span class="cwebmacronumber">4.90</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">MESSAGE2_BIP</span><span class="plain">: </span><<span class="cwebmacro">Generate primitive for message2</span> <span class="cwebmacronumber">4.91</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">MESSAGE3_BIP</span><span class="plain">: </span><<span class="cwebmacro">Generate primitive for message3</span> <span class="cwebmacronumber">4.92</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">CALLMESSAGE0_BIP</span><span class="plain">: </span><<span class="cwebmacro">Generate primitive for callmessage0</span> <span class="cwebmacronumber">4.93</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">CALLMESSAGE1_BIP</span><span class="plain">: </span><<span class="cwebmacro">Generate primitive for callmessage1</span> <span class="cwebmacronumber">4.94</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">CALLMESSAGE2_BIP</span><span class="plain">: </span><<span class="cwebmacro">Generate primitive for callmessage2</span> <span class="cwebmacronumber">4.95</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">CALLMESSAGE3_BIP</span><span class="plain">: </span><<span class="cwebmacro">Generate primitive for callmessage3</span> <span class="cwebmacronumber">4.96</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">PROPERTYADDRESS_BIP</span><span class="plain">: </span><<span class="cwebmacro">Generate primitive for propertyaddress</span> <span class="cwebmacronumber">4.97</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">PROPERTYLENGTH_BIP</span><span class="plain">: </span><<span class="cwebmacro">Generate primitive for propertylength</span> <span class="cwebmacronumber">4.98</span>><span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
|
||||
<span class="reserved">case</span><span class="plain"> </span><span class="constant">PROVIDES_BIP</span><span class="plain">: </span><<span class="cwebmacro">Generate primitive for provides</span> <span class="cwebmacronumber">4.99</span>><span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
|
||||
<span class="reserved">case</span><span class="plain"> </span><span class="constant">PROPERTYVALUE_BIP</span><span class="plain">: </span><<span class="cwebmacro">Generate primitive for propertyvalue</span> <span class="cwebmacronumber">4.100</span>><span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
|
||||
<span class="reserved">default</span><span class="plain">: </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">"Prim: %S\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">prim</span><span class="plain">-></span><span class="identifier">symbol_name</span><span class="plain">); </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"unimplemented prim"</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">break</span><span class="plain">;</span>
|
||||
|
@ -2448,7 +2456,159 @@ then the result.
|
|||
<p class="endnote">This code is used in <a href="#SP4">§4</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP4_89"></a><b>§4.89. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Generate primitive for propertyaddress</span> <span class="cwebmacronumber">4.89</span>> =
|
||||
<<span class="cwebmacrodefn">Generate primitive for message0</span> <span class="cwebmacronumber">4.89</span>> =
|
||||
</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">§4</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP4_90"></a><b>§4.90. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Generate primitive for message1</span> <span class="cwebmacronumber">4.90</span>> =
|
||||
</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">§4</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP4_91"></a><b>§4.91. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Generate primitive for message2</span> <span class="cwebmacronumber">4.91</span>> =
|
||||
</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">§4</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP4_92"></a><b>§4.92. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Generate primitive for message3</span> <span class="cwebmacronumber">4.92</span>> =
|
||||
</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">§4</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP4_93"></a><b>§4.93. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Generate primitive for callmessage0</span> <span class="cwebmacronumber">4.93</span>> =
|
||||
</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">§4</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP4_94"></a><b>§4.94. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Generate primitive for callmessage1</span> <span class="cwebmacronumber">4.94</span>> =
|
||||
</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">§4</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP4_95"></a><b>§4.95. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Generate primitive for callmessage2</span> <span class="cwebmacronumber">4.95</span>> =
|
||||
</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">§4</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP4_96"></a><b>§4.96. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Generate primitive for callmessage3</span> <span class="cwebmacronumber">4.96</span>> =
|
||||
</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">§4</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP4_97"></a><b>§4.97. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Generate primitive for propertyaddress</span> <span class="cwebmacronumber">4.97</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
|
@ -2464,8 +2624,8 @@ then the result.
|
|||
|
||||
<p class="endnote">This code is used in <a href="#SP4">§4</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP4_90"></a><b>§4.90. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Generate primitive for propertylength</span> <span class="cwebmacronumber">4.90</span>> =
|
||||
<p class="inwebparagraph"><a id="SP4_98"></a><b>§4.98. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Generate primitive for propertylength</span> <span class="cwebmacronumber">4.98</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
|
@ -2481,8 +2641,8 @@ then the result.
|
|||
|
||||
<p class="endnote">This code is used in <a href="#SP4">§4</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP4_91"></a><b>§4.91. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Generate primitive for provides</span> <span class="cwebmacronumber">4.91</span>> =
|
||||
<p class="inwebparagraph"><a id="SP4_99"></a><b>§4.99. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Generate primitive for provides</span> <span class="cwebmacronumber">4.99</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
|
@ -2498,8 +2658,8 @@ then the result.
|
|||
|
||||
<p class="endnote">This code is used in <a href="#SP4">§4</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP4_92"></a><b>§4.92. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Generate primitive for propertyvalue</span> <span class="cwebmacronumber">4.92</span>> =
|
||||
<p class="inwebparagraph"><a id="SP4_100"></a><b>§4.100. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Generate primitive for propertyvalue</span> <span class="cwebmacronumber">4.100</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
|
|
|
@ -60,7 +60,7 @@ kinds being compiled to an I6 <code class="display"><span class="extract">Class<
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Kinds::RunTime::I6_classname is used in <a href="#SP25">§25</a>, 6/bp (<a href="6-bp.html#SP25">§25</a>), 6/rlt (<a href="6-rlt.html#SP29_2">§29.2</a>, <a href="6-rlt.html#SP29_3">§29.3</a>, <a href="6-rlt.html#SP29_4">§29.4</a>, <a href="6-rlt.html#SP29_5">§29.5</a>, <a href="6-rlt.html#SP29_6">§29.6</a>), 12/ter (<a href="12-ter.html#SP8_6">§8.6</a>), 12/ca (<a href="12-ca.html#SP6_2">§6.2</a>), 12/dtd (<a href="12-dtd.html#SP24">§24</a>), 13/kak (<a href="13-kak.html#SP2">§2</a>), 25/cii (<a href="25-cii.html#SP3_1_1_4_7_1">§3.1.1.4.7.1</a>), 26/iti (<a href="26-iti.html#SP9">§9</a>), 27/hr (<a href="27-hr.html#SP4">§4</a>), 27/eis (<a href="27-eis.html#SP2_8_1">§2.8.1</a>).</p>
|
||||
<p class="endnote">The function Kinds::RunTime::I6_classname is used in <a href="#SP25">§25</a>, 6/bp (<a href="6-bp.html#SP25">§25</a>), 6/rlt (<a href="6-rlt.html#SP29_2">§29.2</a>, <a href="6-rlt.html#SP29_3">§29.3</a>, <a href="6-rlt.html#SP29_4">§29.4</a>, <a href="6-rlt.html#SP29_5">§29.5</a>, <a href="6-rlt.html#SP29_6">§29.6</a>), 12/ter (<a href="12-ter.html#SP8_6">§8.6</a>), 12/ca (<a href="12-ca.html#SP6_2">§6.2</a>), 12/dtd (<a href="12-dtd.html#SP24">§24</a>), 13/kak (<a href="13-kak.html#SP2">§2</a>), 25/cii (<a href="25-cii.html#SP3_1_1_4_7_1">§3.1.1.4.7.1</a>), 26/iti (<a href="26-iti.html#SP9">§9</a>), 27/hr (<a href="27-hr.html#SP4">§4</a>), 27/eis (<a href="27-eis.html#SP2_10_1">§2.10.1</a>).</p>
|
||||
|
||||
<p class="endnote">The function Kinds::RunTime::I6_classnumber is used in <a href="#SP23">§23</a>, 16/ic (<a href="16-ic.html#SP6">§6</a>, <a href="16-ic.html#SP10">§10</a>).</p>
|
||||
|
||||
|
|
|
@ -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">§14.5</a>), 25/cii (<a href="25-cii.html#SP6">§6</a>).</p>
|
||||
|
||||
<p class="endnote">The function LocalVariables::by_name_any is used in 27/eis (<a href="27-eis.html#SP2_9">§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">§2.11</a>).</p>
|
||||
|
||||
<p class="endnote">The function LocalVariables::phrase_options is used in 14/cn (<a href="14-cn.html#SP16_3">§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">§3</a>, <a href="26-rt.html#SP4">§4</a>, <a href="26-rt.html#SP4_1_1">§4.1.1</a>).</p>
|
||||
|
||||
<p class="endnote">The function LocalVariables::declare_this is used in <a href="#SP8">§8</a>, <a href="#SP10">§10</a>, <a href="#SP11">§11</a>, <a href="#SP27">§27</a>, <a href="#SP28">§28</a>, <a href="#SP29">§29</a>, <a href="#SP41">§41</a>, <a href="#SP43">§43</a>, <a href="#SP45">§45</a>, 4/am (<a href="4-am.html#SP34_2">§34.2</a>), 11/tr (<a href="11-tr.html#SP10">§10</a>), 12/dtd (<a href="12-dtd.html#SP9">§9</a>, <a href="12-dtd.html#SP23">§23</a>, <a href="12-dtd.html#SP25">§25</a>, <a href="12-dtd.html#SP26">§26</a>, <a href="12-dtd.html#SP27">§27</a>), 12/cad (<a href="12-cad.html#SP7">§7</a>), 13/rsfk (<a href="13-rsfk.html#SP24_6_2">§24.6.2</a>, <a href="13-rsfk.html#SP24_6_3">§24.6.3</a>, <a href="13-rsfk.html#SP24_6_4">§24.6.4</a>), 14/lv (<a href="14-lv.html#SP14_1">§14.1</a>, <a href="14-lv.html#SP14_5">§14.5</a>), 14/cn (<a href="14-cn.html#SP16_3">§16.3</a>), 20/eq (<a href="20-eq.html#SP48">§48</a>), 25/cii (<a href="25-cii.html#SP1_2_1">§1.2.1</a>, <a href="25-cii.html#SP3_5_1">§3.5.1</a>, <a href="25-cii.html#SP3_5_3">§3.5.3</a>), 25/cp (<a href="25-cp.html#SP5_3_5">§5.3.5</a>), 27/eis (<a href="27-eis.html#SP2_9">§2.9</a>).</p>
|
||||
<p class="endnote">The function LocalVariables::declare_this is used in <a href="#SP8">§8</a>, <a href="#SP10">§10</a>, <a href="#SP11">§11</a>, <a href="#SP27">§27</a>, <a href="#SP28">§28</a>, <a href="#SP29">§29</a>, <a href="#SP41">§41</a>, <a href="#SP43">§43</a>, <a href="#SP45">§45</a>, 4/am (<a href="4-am.html#SP34_2">§34.2</a>), 11/tr (<a href="11-tr.html#SP10">§10</a>), 12/dtd (<a href="12-dtd.html#SP9">§9</a>, <a href="12-dtd.html#SP23">§23</a>, <a href="12-dtd.html#SP25">§25</a>, <a href="12-dtd.html#SP26">§26</a>, <a href="12-dtd.html#SP27">§27</a>), 12/cad (<a href="12-cad.html#SP7">§7</a>), 13/rsfk (<a href="13-rsfk.html#SP24_6_2">§24.6.2</a>, <a href="13-rsfk.html#SP24_6_3">§24.6.3</a>, <a href="13-rsfk.html#SP24_6_4">§24.6.4</a>), 14/lv (<a href="14-lv.html#SP14_1">§14.1</a>, <a href="14-lv.html#SP14_5">§14.5</a>), 14/cn (<a href="14-cn.html#SP16_3">§16.3</a>), 20/eq (<a href="20-eq.html#SP48">§48</a>), 25/cii (<a href="25-cii.html#SP1_2_1">§1.2.1</a>, <a href="25-cii.html#SP3_5_1">§3.5.1</a>, <a href="25-cii.html#SP3_5_3">§3.5.3</a>), 25/cp (<a href="25-cp.html#SP5_3_5">§5.3.5</a>), 27/eis (<a href="27-eis.html#SP2_11">§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">§24.4.1</a>, <a href="13-rsfk.html#SP24_4_2">§24.4.2</a>).</p>
|
||||
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -41,14 +41,16 @@
|
|||
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">isn</span><span class="plain">-></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><<span class="cwebmacro">Label</span> <span class="cwebmacronumber">2.1</span>><span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
|
||||
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">CODE_ISNT</span><span class="plain">: </span><<span class="cwebmacro">Code block</span> <span class="cwebmacronumber">2.2</span>><span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
|
||||
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">EVAL_ISNT</span><span class="plain">: </span><<span class="cwebmacro">Eval block</span> <span class="cwebmacronumber">2.5</span>><span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
|
||||
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">EXPRESSION_ISNT</span><span class="plain">: </span><<span class="cwebmacro">Expression</span> <span class="cwebmacronumber">2.9</span>><span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
|
||||
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">SUBEXPRESSION_ISNT</span><span class="plain">: </span><<span class="cwebmacro">Subexpression</span> <span class="cwebmacronumber">2.7</span>><span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
|
||||
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">STATEMENT_ISNT</span><span class="plain">: </span><<span class="cwebmacro">Statement</span> <span class="cwebmacronumber">2.8</span>><span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
|
||||
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">OPERATION_ISNT</span><span class="plain">: </span><<span class="cwebmacro">Operation</span> <span class="cwebmacronumber">2.6</span>><span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
|
||||
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">EVAL_ISNT</span><span class="plain">: </span><<span class="cwebmacro">Eval block</span> <span class="cwebmacronumber">2.7</span>><span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
|
||||
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">EXPRESSION_ISNT</span><span class="plain">: </span><<span class="cwebmacro">Expression</span> <span class="cwebmacronumber">2.11</span>><span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
|
||||
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">SUBEXPRESSION_ISNT</span><span class="plain">: </span><<span class="cwebmacro">Subexpression</span> <span class="cwebmacronumber">2.9</span>><span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
|
||||
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">STATEMENT_ISNT</span><span class="plain">: </span><<span class="cwebmacro">Statement</span> <span class="cwebmacronumber">2.10</span>><span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
|
||||
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">OPERATION_ISNT</span><span class="plain">: </span><<span class="cwebmacro">Operation</span> <span class="cwebmacronumber">2.8</span>><span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
|
||||
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">ASSEMBLY_ISNT</span><span class="plain">: </span><<span class="cwebmacro">Assembly</span> <span class="cwebmacronumber">2.3</span>><span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
|
||||
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">CALL_ISNT</span><span class="plain">: </span><<span class="cwebmacro">Call</span> <span class="cwebmacronumber">2.4</span>><span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
|
||||
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">DIRECTIVE_ISNT</span><span class="plain">: </span><<span class="cwebmacro">Directive</span> <span class="cwebmacronumber">2.10</span>><span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
|
||||
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">MESSAGE_ISNT</span><span class="plain">: </span><<span class="cwebmacro">Message</span> <span class="cwebmacronumber">2.5</span>><span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
|
||||
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">CALLMESSAGE_ISNT</span><span class="plain">: </span><<span class="cwebmacro">Call-message</span> <span class="cwebmacronumber">2.6</span>><span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
|
||||
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">DIRECTIVE_ISNT</span><span class="plain">: </span><<span class="cwebmacro">Directive</span> <span class="cwebmacronumber">2.12</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">"unknown schema node type"</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="plain">}</span>
|
||||
|
@ -56,7 +58,7 @@
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function EmitInterSchemas::emit_inner is used in <a href="#SP1">§1</a>, <a href="#SP2_2">§2.2</a>, <a href="#SP2_3">§2.3</a>, <a href="#SP2_4">§2.4</a>, <a href="#SP2_5">§2.5</a>, <a href="#SP2_6">§2.6</a>, <a href="#SP2_7">§2.7</a>, <a href="#SP2_8">§2.8</a>, <a href="#SP2_8_1">§2.8.1</a>.</p>
|
||||
<p class="endnote">The function EmitInterSchemas::emit_inner is used in <a href="#SP1">§1</a>, <a href="#SP2_2">§2.2</a>, <a href="#SP2_3">§2.3</a>, <a href="#SP2_4">§2.4</a>, <a href="#SP2_5">§2.5</a>, <a href="#SP2_6">§2.6</a>, <a href="#SP2_7">§2.7</a>, <a href="#SP2_8">§2.8</a>, <a href="#SP2_9">§2.9</a>, <a href="#SP2_10">§2.10</a>, <a href="#SP2_10_1">§2.10.1</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP2_1"></a><b>§2.1. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Label</span> <span class="cwebmacronumber">2.1</span>> =
|
||||
|
@ -192,7 +194,67 @@
|
|||
<p class="endnote">This code is used in <a href="#SP2">§2</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP2_5"></a><b>§2.5. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Eval block</span> <span class="cwebmacronumber">2.5</span>> =
|
||||
<<span class="cwebmacrodefn">Message</span> <span class="cwebmacronumber">2.5</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">isn</span><span class="plain">-></span><span class="identifier">child_node</span><span class="plain">) {</span>
|
||||
<span class="identifier">inter_schema_node</span><span class="plain"> *</span><span class="identifier">at</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-></span><span class="identifier">child_node</span><span class="plain">;</span>
|
||||
<span class="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">-></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">-></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">-></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">§2</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP2_6"></a><b>§2.6. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Call-message</span> <span class="cwebmacronumber">2.6</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">isn</span><span class="plain">-></span><span class="identifier">child_node</span><span class="plain">) {</span>
|
||||
<span class="identifier">inter_schema_node</span><span class="plain"> *</span><span class="identifier">at</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-></span><span class="identifier">child_node</span><span class="plain">;</span>
|
||||
<span class="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">-></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">-></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">-></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">§2</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP2_7"></a><b>§2.7. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Eval block</span> <span class="cwebmacronumber">2.7</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
|
@ -220,8 +282,8 @@
|
|||
|
||||
<p class="endnote">This code is used in <a href="#SP2">§2</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP2_6"></a><b>§2.6. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Operation</span> <span class="cwebmacronumber">2.6</span>> =
|
||||
<p class="inwebparagraph"><a id="SP2_8"></a><b>§2.8. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Operation</span> <span class="cwebmacronumber">2.8</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
|
@ -249,8 +311,8 @@
|
|||
|
||||
<p class="endnote">This code is used in <a href="#SP2">§2</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP2_7"></a><b>§2.7. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Subexpression</span> <span class="cwebmacronumber">2.7</span>> =
|
||||
<p class="inwebparagraph"><a id="SP2_9"></a><b>§2.9. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Subexpression</span> <span class="cwebmacronumber">2.9</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
|
@ -273,8 +335,8 @@
|
|||
|
||||
<p class="endnote">This code is used in <a href="#SP2">§2</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP2_8"></a><b>§2.8. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Statement</span> <span class="cwebmacronumber">2.8</span>> =
|
||||
<p class="inwebparagraph"><a id="SP2_10"></a><b>§2.10. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Statement</span> <span class="cwebmacronumber">2.10</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
|
@ -286,7 +348,7 @@
|
|||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">arity</span><span class="plain"> > 0) {</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">-></span><span class="identifier">isn_clarifier</span><span class="plain"> == </span><span class="identifier">objectloop_interp</span><span class="plain">)</span>
|
||||
<<span class="cwebmacro">Add the objectloop range tokens</span> <span class="cwebmacronumber">2.8.1</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Add the objectloop range tokens</span> <span class="cwebmacronumber">2.10.1</span>><span class="plain">;</span>
|
||||
<span class="identifier">inter_schema_node</span><span class="plain"> *</span><span class="identifier">at</span><span class="plain"> = </span><span class="identifier">isn</span><span class="plain">-></span><span class="identifier">child_node</span><span class="plain">;</span>
|
||||
<span class="identifier">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>
|
||||
|
@ -308,8 +370,8 @@
|
|||
|
||||
<p class="endnote">This code is used in <a href="#SP2">§2</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP2_8_1"></a><b>§2.8.1. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Add the objectloop range tokens</span> <span class="cwebmacronumber">2.8.1</span>> =
|
||||
<p class="inwebparagraph"><a id="SP2_10_1"></a><b>§2.10.1. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Add the objectloop range tokens</span> <span class="cwebmacronumber">2.10.1</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
|
@ -342,10 +404,10 @@
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP2_8">§2.8</a>.</p>
|
||||
<p class="endnote">This code is used in <a href="#SP2_10">§2.10</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP2_9"></a><b>§2.9. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Expression</span> <span class="cwebmacronumber">2.9</span>> =
|
||||
<p class="inwebparagraph"><a id="SP2_11"></a><b>§2.11. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Expression</span> <span class="cwebmacronumber">2.11</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
|
@ -437,8 +499,8 @@
|
|||
|
||||
<p class="endnote">This code is used in <a href="#SP2">§2</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP2_10"></a><b>§2.10. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Directive</span> <span class="cwebmacronumber">2.10</span>> =
|
||||
<p class="inwebparagraph"><a id="SP2_12"></a><b>§2.12. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Directive</span> <span class="cwebmacronumber">2.12</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
|
@ -515,7 +577,7 @@
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function EmitInterSchemas::find_identifier is used in <a href="#SP2_4">§2.4</a>, <a href="#SP2_9">§2.9</a>.</p>
|
||||
<p class="endnote">The function EmitInterSchemas::find_identifier is used in <a href="#SP2_4">§2.4</a>, <a href="#SP2_11">§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">§3.6.2</a>).</p>
|
||||
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -324,7 +324,7 @@ automatically here:
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function InterNames::to_symbol is used in 15/epv (<a href="15-epv.html#SP4">§4</a>), 21/rl (<a href="21-rl.html#SP11_2">§11.2</a>, <a href="21-rl.html#SP22">§22</a>), 26/iti (<a href="26-iti.html#SP9">§9</a>), 27/hr (<a href="27-hr.html#SP5">§5</a>), 27/eis (<a href="27-eis.html#SP2_9">§2.9</a>, <a href="27-eis.html#SP3">§3</a>), 27/ei (<a href="27-ei.html#SP2">§2</a>, <a href="27-ei.html#SP3">§3</a>, <a href="27-ei.html#SP4">§4</a>, <a href="27-ei.html#SP5">§5</a>).</p>
|
||||
<p class="endnote">The function InterNames::to_symbol is used in 15/epv (<a href="15-epv.html#SP4">§4</a>), 21/rl (<a href="21-rl.html#SP11_2">§11.2</a>, <a href="21-rl.html#SP22">§22</a>), 26/iti (<a href="26-iti.html#SP9">§9</a>), 27/hr (<a href="27-hr.html#SP5">§5</a>), 27/eis (<a href="27-eis.html#SP2_11">§2.11</a>, <a href="27-eis.html#SP3">§3</a>), 27/ei (<a href="27-ei.html#SP2">§2</a>, <a href="27-ei.html#SP3">§3</a>, <a href="27-ei.html#SP4">§4</a>, <a href="27-ei.html#SP5">§5</a>).</p>
|
||||
|
||||
<hr class="tocbar">
|
||||
<ul class="toc"><li><a href="27-pt.html">Back to 'Package Types'</a></li><li><a href="27-eis.html">Continue with 'Emitting Inter Schemas'</a></li></ul><hr class="tocbar">
|
||||
|
|
|
@ -30,6 +30,8 @@ void EmitInterSchemas::emit_inner(inter_schema_node *isn, value_holster *VH,
|
|||
case OPERATION_ISNT: @<Operation@>; break;
|
||||
case ASSEMBLY_ISNT: @<Assembly@>; break;
|
||||
case CALL_ISNT: @<Call@>; break;
|
||||
case MESSAGE_ISNT: @<Message@>; break;
|
||||
case CALLMESSAGE_ISNT: @<Call-message@>; break;
|
||||
case DIRECTIVE_ISNT: @<Directive@>; break;
|
||||
default: internal_error("unknown schema node type");
|
||||
}
|
||||
|
@ -128,6 +130,46 @@ void EmitInterSchemas::emit_inner(inter_schema_node *isn, value_holster *VH,
|
|||
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@> =
|
||||
if ((prim_cat != CODE_PRIM_CAT) && (prim_cat != VAL_PRIM_CAT))
|
||||
internal_error("eval block outside evaluation context");
|
||||
|
|
59
inter/Tests/Units/_Results_Ideal/exp.txt
Normal file
59
inter/Tests/Units/_Results_Ideal/exp.txt
Normal 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
16
inter/Tests/Units/exp.txt
Normal 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
|
|
@ -669,7 +669,7 @@ inter_symbol *CodeGen::Assimilate::computed_constant_symbol(inter_package *pack)
|
|||
int rb_splat_count = 1;
|
||||
void CodeGen::Assimilate::routine_body(inter_reading_state *IRS, inter_symbol *block_name, inter_t offset, text_stream *body) {
|
||||
if (Str::is_whitespace(body)) return;
|
||||
if (Str::len(body) < 100) {
|
||||
if (Str::len(body) < 120) {
|
||||
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);
|
||||
|
||||
|
|
|
@ -89,6 +89,14 @@ inter_symbol *indirect2_interp = NULL;
|
|||
inter_symbol *indirect3_interp = NULL;
|
||||
inter_symbol *indirect4_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 *propertylength_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"!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"!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"!propertylength", I"val val -> val", &propertylength_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 INDIRECT4_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 PROPERTYLENGTH_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"!indirect4")) bip = INDIRECT4_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"!propertylength")) bip = PROPERTYLENGTH_BIP;
|
||||
if (Str::eq(symb->symbol_name, I"!provides")) bip = PROVIDES_BIP;
|
||||
|
|
|
@ -65,6 +65,8 @@ but the need to do this went away.)
|
|||
@e ASSEMBLY_ISNT
|
||||
@e LABEL_ISNT
|
||||
@e CALL_ISNT
|
||||
@e MESSAGE_ISNT
|
||||
@e CALLMESSAGE_ISNT
|
||||
|
||||
=
|
||||
typedef struct inter_schema_node {
|
||||
|
@ -463,6 +465,12 @@ void InterSchemas::log_just(inter_schema_node *isn, int depth) {
|
|||
case CALL_ISNT:
|
||||
LOG("* (call)\n");
|
||||
break;
|
||||
case MESSAGE_ISNT:
|
||||
LOG("* (message)\n");
|
||||
break;
|
||||
case CALLMESSAGE_ISNT:
|
||||
LOG("* (call-message)\n");
|
||||
break;
|
||||
case SUBEXPRESSION_ISNT:
|
||||
LOG("* (subexpression)\n");
|
||||
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));
|
||||
break;
|
||||
case DQUOTED_TOKSTATE:
|
||||
InterSchemas::de_escape_text(current_raw);
|
||||
InterSchemas::add_token(sch, InterSchemas::new_token(DQUOTED_ISTT, current_raw, NULL, 0, -1));
|
||||
break;
|
||||
case SQUOTED_TOKSTATE:
|
||||
|
@ -1429,6 +1438,7 @@ void InterSchemas::unmark(inter_schema_node *isn) {
|
|||
REPEATEDLY_APPLY(InterSchemas::strip_all_spacing);
|
||||
REPEATEDLY_APPLY(InterSchemas::debracket);
|
||||
REPEATEDLY_APPLY(InterSchemas::implied_return_values);
|
||||
REPEATEDLY_APPLY(InterSchemas::message_calls);
|
||||
|
||||
@ =
|
||||
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) {
|
||||
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 *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);
|
||||
C->isn_clarifier = alternativecase_interp;
|
||||
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;
|
||||
if ((n) && (n->ist_type == DQUOTED_ISTT)) {
|
||||
subordinate_to = print_interp;
|
||||
LOOP_THROUGH_TEXT(P, n->material) {
|
||||
if (Str::get(P) == '^')
|
||||
Str::put(P, '\n');
|
||||
if (Str::get(P) == '~')
|
||||
Str::put(P, '\"');
|
||||
}
|
||||
InterSchemas::de_escape_text(n->material);
|
||||
}
|
||||
}
|
||||
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) {
|
||||
new_isn->expression_tokens = InterSchemas::new_token(DQUOTED_ISTT, dangle_text, NULL, 0, -1);
|
||||
new_isn->expression_tokens->owner = new_isn;
|
||||
InterSchemas::de_escape_text(new_isn->expression_tokens->material);
|
||||
}
|
||||
if (operand2) {
|
||||
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;
|
||||
}
|
||||
|
||||
@ =
|
||||
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.
|
||||
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
|
||||
|
|
|
@ -702,6 +702,14 @@ void CodeGen::inv(OUTPUT_STREAM, inter_repository *I, inter_frame P) {
|
|||
case INDIRECT3_BIP: @<Generate primitive for indirect3@>; break;
|
||||
case INDIRECT4_BIP: @<Generate primitive for indirect4@>; 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 PROPERTYLENGTH_BIP: @<Generate primitive for propertylength@>; 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));
|
||||
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@> =
|
||||
WRITE("(");
|
||||
CodeGen::frame(OUT, I, Inter::top_of_frame_list(ifl));
|
||||
|
|
Loading…
Reference in a new issue