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

Removed value_range pseudoproperty

This commit is contained in:
Graham Nelson 2021-10-03 17:24:39 +01:00
parent ff59659c75
commit 6c75736f1b
16 changed files with 94 additions and 127 deletions

View file

@ -423,7 +423,7 @@ the one which the player is on.
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">obj</span><span class="plain-syntax"> </span><span class="reserved-syntax">ofclass</span><span class="plain-syntax"> </span><span class="identifier-syntax">K0_kind</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WhetherProvides</span><span class="plain-syntax">(</span><span class="identifier-syntax">V</span><span class="plain-syntax">, </span><span class="reserved-syntax">false</span><span class="plain-syntax">, </span><span class="identifier-syntax">pr</span><span class="plain-syntax">, </span><span class="reserved-syntax">true</span><span class="plain-syntax">); </span><span class="comment-syntax">to force a run-time problem</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">V</span><span class="plain-syntax"> &lt; </span><span class="constant-syntax">1</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">V</span><span class="plain-syntax"> &gt; </span><span class="identifier-syntax">obj</span><span class="plain-syntax">.</span><span class="identifier-syntax">value_range</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">V</span><span class="plain-syntax"> &lt; </span><span class="constant-syntax">1</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">V</span><span class="plain-syntax"> &gt; </span><span class="identifier-syntax">value_ranges</span><span class="plain-syntax">--&gt;</span><span class="identifier-syntax">K</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">RunTimeProblem</span><span class="plain-syntax">(</span><span class="identifier-syntax">RTP_BADVALUEPROPERTY</span><span class="plain-syntax">); </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax">; }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> (</span><span class="identifier-syntax">obj</span><span class="plain-syntax">.</span><span class="identifier-syntax">pr</span><span class="plain-syntax">)--&gt;(</span><span class="identifier-syntax">V</span><span class="plain-syntax">+</span><span class="identifier-syntax">COL_HSIZE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
@ -445,7 +445,7 @@ converted from an rvalue to an lvalue.
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">K</span><span class="plain-syntax"> == </span><span class="identifier-syntax">OBJECT_TY</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">WhetherProvides</span><span class="plain-syntax">(</span><span class="identifier-syntax">V</span><span class="plain-syntax">, </span><span class="reserved-syntax">false</span><span class="plain-syntax">, </span><span class="identifier-syntax">pr</span><span class="plain-syntax">, </span><span class="reserved-syntax">true</span><span class="plain-syntax">)) </span><span class="identifier-syntax">obj</span><span class="plain-syntax">.</span><span class="identifier-syntax">pr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">val</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">V</span><span class="plain-syntax"> &lt; </span><span class="constant-syntax">1</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">V</span><span class="plain-syntax"> &gt; </span><span class="identifier-syntax">obj</span><span class="plain-syntax">.</span><span class="identifier-syntax">value_range</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">V</span><span class="plain-syntax"> &lt; </span><span class="constant-syntax">1</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">V</span><span class="plain-syntax"> &gt; </span><span class="identifier-syntax">value_ranges</span><span class="plain-syntax">--&gt;</span><span class="identifier-syntax">K</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">RunTimeProblem</span><span class="plain-syntax">(</span><span class="identifier-syntax">RTP_BADVALUEPROPERTY</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">obj</span><span class="plain-syntax"> </span><span class="reserved-syntax">provides</span><span class="plain-syntax"> </span><span class="identifier-syntax">pr</span><span class="plain-syntax">) { (</span><span class="identifier-syntax">obj</span><span class="plain-syntax">.</span><span class="identifier-syntax">pr</span><span class="plain-syntax">)--&gt;(</span><span class="identifier-syntax">V</span><span class="plain-syntax">+</span><span class="identifier-syntax">COL_HSIZE</span><span class="plain-syntax">) = </span><span class="identifier-syntax">val</span><span class="plain-syntax">; }</span>
<span class="plain-syntax"> }</span>

View file

@ -98,7 +98,7 @@ function togglePopup(material_id) {
<span class="definition-keyword">enum</span> <span class="constant-syntax">ASM_NEG_RTRUE_VSYMB</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">ASM_NEG_RFALSE_VSYMB</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">VALUE_PROPERTY_HOLDERS_VSYMB</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">VALUE_RANGE_VSYMB</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">VALUE_RANGES_VSYMB</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">RESPONSETEXTS_VSYMB</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">CREATEPROPERTYOFFSETS_VSYMB</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">KINDHIERARCHY_VSYMB</span>
@ -133,7 +133,7 @@ function togglePopup(material_id) {
<span class="plain-syntax"> </span><a href="1-tv.html#SP1" class="function-link"><span class="function-syntax">Veneer::index</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="constant-syntax">ASM_NEG_RFALSE_VSYMB</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"__assembly_negated_rfalse_label"</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"?~rfalse"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="1-tv.html#SP1" class="function-link"><span class="function-syntax">Veneer::index</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="constant-syntax">VALUE_PROPERTY_HOLDERS_VSYMB</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"value_property_holders"</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="1-tv.html#SP1" class="function-link"><span class="function-syntax">Veneer::index</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="constant-syntax">VALUE_RANGE_VSYMB</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"value_range"</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="1-tv.html#SP1" class="function-link"><span class="function-syntax">Veneer::index</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="constant-syntax">VALUE_RANGES_VSYMB</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"value_ranges"</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="1-tv.html#SP1" class="function-link"><span class="function-syntax">Veneer::index</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="constant-syntax">RESPONSETEXTS_VSYMB</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"ResponseTexts"</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="1-tv.html#SP1" class="function-link"><span class="function-syntax">Veneer::index</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="constant-syntax">CREATEPROPERTYOFFSETS_VSYMB</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"CreatePropertyOffsets"</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="1-tv.html#SP1" class="function-link"><span class="function-syntax">Veneer::index</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="constant-syntax">KINDHIERARCHY_VSYMB</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"KindHierarchy"</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>

View file

@ -361,7 +361,7 @@ I6 code. Still, all pragmas are offered to all generators.
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">rv</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="identifier-syntax">VOID_METHOD_TYPE</span><span class="plain-syntax">(</span><span class="constant-syntax">ASSIGN_PROPERTY_MTID</span><span class="plain-syntax">, </span><span class="reserved-syntax">code_generator</span><span class="plain-syntax"> *</span><span class="identifier-syntax">generator</span><span class="plain-syntax">, </span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prop_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">val</span><span class="plain-syntax">)</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Generators::assign_property</span><button class="popup" onclick="togglePopup('usagePopup26')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup26">Usage of <span class="code-font"><span class="function-syntax">Generators::assign_property</span></span>:<br/>Vanilla Objects - <a href="2-vo.html#SP1_7">&#167;1.7</a>, <a href="2-vo.html#SP7">&#167;7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prop_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">val</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Generators::assign_property</span><button class="popup" onclick="togglePopup('usagePopup26')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup26">Usage of <span class="code-font"><span class="function-syntax">Generators::assign_property</span></span>:<br/>Vanilla Objects - <a href="2-vo.html#SP7">&#167;7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prop_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">val</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">VOID_METHOD_CALL</span><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">generator</span><span class="plain-syntax">, </span><span class="constant-syntax">ASSIGN_PROPERTY_MTID</span><span class="plain-syntax">, </span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">prop_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">val</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Generators::assign_mangled_property</span><button class="popup" onclick="togglePopup('usagePopup27')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup27">Usage of <span class="code-font"><span class="function-syntax">Generators::assign_mangled_property</span></span>:<br/>Vanilla Objects - <a href="2-vo.html#SP1_7_3">&#167;1.7.3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prop_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">val</span><span class="plain-syntax">) {</span>
@ -430,7 +430,7 @@ I6 code. Still, all pragmas are offered to all generators.
<span class="plain-syntax"> </span><span class="identifier-syntax">INT_METHOD_CALL</span><span class="plain-syntax">(</span><span class="identifier-syntax">rv</span><span class="plain-syntax">, </span><span class="identifier-syntax">gen</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">generator</span><span class="plain-syntax">, </span><span class="constant-syntax">BEGIN_ARRAY_MTID</span><span class="plain-syntax">, </span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">const_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">array_s</span><span class="plain-syntax">, </span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">format</span><span class="plain-syntax">, </span><span class="identifier-syntax">saved</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">rv</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Generators::array_entry</span><button class="popup" onclick="togglePopup('usagePopup32')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup32">Usage of <span class="code-font"><span class="function-syntax">Generators::array_entry</span></span>:<br/>Vanilla Constants - <a href="2-vc.html#SP1_5">&#167;1.5</a>, <a href="2-vc.html#SP1_7">&#167;1.7</a><br/>Vanilla Objects - <a href="2-vo.html#SP1_6">&#167;1.6</a>, <a href="2-vo.html#SP1_7_2">&#167;1.7.2</a>, <a href="2-vo.html#SP1_7_4_1">&#167;1.7.4.1</a>, <a href="2-vo.html#SP1_7_4_1_1">&#167;1.7.4.1.1</a>, <a href="2-vo.html#SP_1">&#167;.1</a><br/>Generating Inform 6 - <a href="4-fi6.html#SP7">&#167;7</a><br/>C Object Model - <a href="5-com.html#SP1">&#167;1</a>, <a href="5-com.html#SP7">&#167;7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">entry</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">format</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Generators::array_entry</span><button class="popup" onclick="togglePopup('usagePopup32')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup32">Usage of <span class="code-font"><span class="function-syntax">Generators::array_entry</span></span>:<br/>Vanilla Constants - <a href="2-vc.html#SP1_5">&#167;1.5</a>, <a href="2-vc.html#SP1_7">&#167;1.7</a><br/>Vanilla Objects - <a href="2-vo.html#SP1_6">&#167;1.6</a>, <a href="2-vo.html#SP1_7_2">&#167;1.7.2</a>, <a href="2-vo.html#SP1_7_4_1">&#167;1.7.4.1</a>, <a href="2-vo.html#SP1_7_4_1_1">&#167;1.7.4.1.1</a>, <a href="2-vo.html#SP_1">&#167;.1</a><br/>Generating Inform 6 - <a href="4-fi6.html#SP7">&#167;7</a><br/>C Object Model - <a href="5-com.html#SP7">&#167;7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">entry</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">format</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">VOID_METHOD_CALL</span><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">generator</span><span class="plain-syntax">, </span><span class="constant-syntax">ARRAY_ENTRY_MTID</span><span class="plain-syntax">, </span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">entry</span><span class="plain-syntax">, </span><span class="identifier-syntax">format</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Generators::array_entries</span><button class="popup" onclick="togglePopup('usagePopup33')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup33">Usage of <span class="code-font"><span class="function-syntax">Generators::array_entries</span></span>:<br/>Vanilla Constants - <a href="2-vc.html#SP1_7">&#167;1.7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">how_many</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">plus_ips</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">format</span><span class="plain-syntax">) {</span>

View file

@ -290,10 +290,6 @@ take lightly in the Z-machine. But speed and flexibility are worth more.
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">instance_name</span><span class="plain-syntax">, </span><span class="string-syntax">"VPH_%d"</span><span class="plain-syntax">, </span><span class="identifier-syntax">w</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">segmentation_pos</span><span class="plain-syntax"> </span><span class="identifier-syntax">saved</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="2-cg2.html#SP15" class="function-link"><span class="function-syntax">Generators::declare_instance</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Object"</span><span class="plain-syntax">, </span><span class="identifier-syntax">instance_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, -1, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">saved</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">N</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">N</span><span class="plain-syntax">, </span><span class="string-syntax">"%d"</span><span class="plain-syntax">, </span><span class="identifier-syntax">Inter::Kind::instance_count</span><span class="plain-syntax">(</span><span class="identifier-syntax">kind_name</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><a href="2-cg2.html#SP15" class="function-link"><span class="function-syntax">Generators::assign_property</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">N</span><span class="plain-syntax">); </span><span class="comment-syntax"> I"value_range"</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">N</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prop_name</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">prop_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax">, </span><span class="identifier-syntax">gen</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">unassimilated_properties</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="2-cg.html#SP14" class="function-link"><span class="function-syntax">CodeGen::unmark</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">prop_name</span><span class="plain-syntax">);</span>
@ -323,11 +319,6 @@ take lightly in the Z-machine. But speed and flexibility are worth more.
the VPH objects used only for kind-property indexing.
</p>
<p class="commentary">The property <span class="extract"><span class="extract-syntax">value_range</span></span> for a VPH object is the number <span class="extract"><span class="extract-syntax">N</span></span> such that the
legal values at run-time for this kind are <span class="extract"><span class="extract-syntax">1, 2, 3, ..., N</span></span>: or in other
words, the number of instances of this kind.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Decide who gets a VPH</span><span class="named-paragraph-number">1.7.1</span></span><span class="comment-syntax"> =</span>
</p>
@ -372,16 +363,35 @@ doesn't have a VPH, or the object number of its VPH if it has.
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="2-vo.html#SP2" class="function-link"><span class="function-syntax">VanillaObjects::weak_id</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">kind_name</span><span class="plain-syntax">) == </span><span class="identifier-syntax">w</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Inter::Symbols::get_flag</span><span class="plain-syntax">(</span><span class="identifier-syntax">kind_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">VPH_MARK_BIT</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">written</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">vph</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">vph</span><span class="plain-syntax">, </span><span class="string-syntax">"VPH_%d"</span><span class="plain-syntax">, </span><span class="identifier-syntax">w</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-cg2.html#SP18" class="function-link"><span class="function-syntax">Generators::mangled_array_entry</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">vph</span><span class="plain-syntax">, </span><span class="constant-syntax">WORD_ARRAY_FORMAT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">vph</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">, </span><span class="string-syntax">"VPH_%d"</span><span class="plain-syntax">, </span><span class="identifier-syntax">w</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-cg2.html#SP18" class="function-link"><span class="function-syntax">Generators::mangled_array_entry</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">, </span><span class="constant-syntax">WORD_ARRAY_FORMAT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">written</span><span class="plain-syntax">) </span><span class="identifier-syntax">vph</span><span class="plain-syntax">++; </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><a href="2-cg2.html#SP18" class="function-link"><span class="function-syntax">Generators::array_entry</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"0"</span><span class="plain-syntax">, </span><span class="constant-syntax">WORD_ARRAY_FORMAT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><a href="2-cg2.html#SP18" class="function-link"><span class="function-syntax">Generators::end_array</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="constant-syntax">WORD_ARRAY_FORMAT</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">saved</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-cg2.html#SP18" class="function-link"><span class="function-syntax">Generators::begin_array</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"value_ranges"</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="constant-syntax">WORD_ARRAY_FORMAT</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">saved</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-cg2.html#SP18" class="function-link"><span class="function-syntax">Generators::array_entry</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"0"</span><span class="plain-syntax">, </span><span class="constant-syntax">WORD_ARRAY_FORMAT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">w</span><span class="plain-syntax">=1; </span><span class="identifier-syntax">w</span><span class="plain-syntax">&lt;</span><span class="identifier-syntax">M</span><span class="plain-syntax">; </span><span class="identifier-syntax">w</span><span class="plain-syntax">++) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">written</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="function-syntax">&lt;LinkedLists::len(gen-&gt;</span><span class="element-syntax">kinds</span><span class="plain-syntax">); </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">kind_name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">gen</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">kinds_in_source_order</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">];</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="2-vo.html#SP2" class="function-link"><span class="function-syntax">VanillaObjects::weak_id</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">kind_name</span><span class="plain-syntax">) == </span><span class="identifier-syntax">w</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Inter::Symbols::get_flag</span><span class="plain-syntax">(</span><span class="identifier-syntax">kind_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">VPH_MARK_BIT</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">written</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">, </span><span class="string-syntax">"%d"</span><span class="plain-syntax">, </span><span class="identifier-syntax">Inter::Kind::instance_count</span><span class="plain-syntax">(</span><span class="identifier-syntax">kind_name</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><a href="2-cg2.html#SP18" class="function-link"><span class="function-syntax">Generators::array_entry</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">E</span><span class="plain-syntax">, </span><span class="constant-syntax">WORD_ARRAY_FORMAT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">written</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) </span><a href="2-cg2.html#SP18" class="function-link"><span class="function-syntax">Generators::array_entry</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"0"</span><span class="plain-syntax">, </span><span class="constant-syntax">WORD_ARRAY_FORMAT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><a href="2-cg2.html#SP18" class="function-link"><span class="function-syntax">Generators::end_array</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="constant-syntax">WORD_ARRAY_FORMAT</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">saved</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="2-vo.html#SP1_7">&#167;1.7</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP1_7_3" class="paragraph-anchor"></a><b>&#167;1.7.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Work through this frame list of permissions</span><span class="named-paragraph-number">1.7.3</span></span><span class="comment-syntax"> =</span>
@ -787,15 +797,15 @@ really make much conceptual sense, and I7 dropped the idea &mdash; it has no
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_THROUGH_INTER_NODE_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">X</span><span class="plain-syntax">, </span><span class="identifier-syntax">FL</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prop_name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">InterSymbolsTables::symbol_from_frame_data</span><span class="plain-syntax">(</span><span class="identifier-syntax">X</span><span class="plain-syntax">, </span><span class="identifier-syntax">PROP_PVAL_IFLD</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">prop_name</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"no property"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="2-cg.html#SP10" class="function-link"><span class="function-syntax">CodeGen::select_temporary</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">OUT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">val</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="2-cg.html#SP10" class="function-link"><span class="function-syntax">CodeGen::select_temporary</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">val</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="2-cg2.html#SP15" class="function-link"><span class="function-syntax">Generators::optimise_property_value</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">prop_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">X</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="2-cg.html#SP15" class="function-link"><span class="function-syntax">CodeGen::pair</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">X</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">X</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">W</span><span class="plain-syntax">.</span><span class="identifier-syntax">data</span><span class="plain-syntax">[</span><span class="identifier-syntax">DVAL1_PVAL_IFLD</span><span class="plain-syntax">], </span><span class="identifier-syntax">X</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">W</span><span class="plain-syntax">.</span><span class="identifier-syntax">data</span><span class="plain-syntax">[</span><span class="identifier-syntax">DVAL2_PVAL_IFLD</span><span class="plain-syntax">]);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><a href="2-cg.html#SP10" class="function-link"><span class="function-syntax">CodeGen::deselect_temporary</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-cg2.html#SP15" class="function-link"><span class="function-syntax">Generators::assign_property</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">prop_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">OUT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="2-cg2.html#SP15" class="function-link"><span class="function-syntax">Generators::assign_property</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">prop_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">val</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">val</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>

View file

@ -956,8 +956,8 @@ trick called "stubbing", these being "stub definitions".)
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i6dpcount</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">attribute_slots_used</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i6dpcount</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">I6Target::declare_property</span><button class="popup" onclick="togglePopup('usagePopup14')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup14">Usage of <span class="code-font"><span class="function-syntax">I6Target::declare_property</span></span>:<br/><a href="4-fi6.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generator</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prop_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">all_forms</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax"> = </span><span class="identifier-syntax">gen</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">from</span><span class="plain-syntax">;</span>
@ -999,9 +999,7 @@ trick called "stubbing", these being "stub definitions".)
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">segmentation_pos</span><span class="plain-syntax"> </span><span class="identifier-syntax">saved</span><span class="plain-syntax"> = </span><a href="2-cg.html#SP9" class="function-link"><span class="function-syntax">CodeGen::select</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="constant-syntax">constants_1_I7CGS</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">i6dpcount</span><span class="plain-syntax">++ == </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><a href="2-cg.html#SP11" class="function-link"><span class="function-syntax">CodeGen::current</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">), </span><span class="string-syntax">"Array value_range --&gt; 1 Xvalue_range 0;\n"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">i6dpcount</span><span class="plain-syntax">++;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><a href="2-cg.html#SP11" class="function-link"><span class="function-syntax">CodeGen::current</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">), </span><span class="string-syntax">"Constant subterfuge_%d = %S;\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">i6dpcount</span><span class="plain-syntax">, </span><span class="identifier-syntax">inner_name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-cg.html#SP9" class="function-link"><span class="function-syntax">CodeGen::deselect</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">saved</span><span class="plain-syntax">);</span>
@ -1206,12 +1204,6 @@ to be frequently used.
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">I6Target::assign_property</span><button class="popup" onclick="togglePopup('usagePopup23')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup23">Usage of <span class="code-font"><span class="function-syntax">I6Target::assign_property</span></span>:<br/><a href="4-fi6.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generator</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prop_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">val</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">OUT</span><span class="plain-syntax"> = </span><a href="2-cg.html#SP11" class="function-link"><span class="function-syntax">CodeGen::current</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">prop_name</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" with Xvalue_range %S\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">val</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">property_name</span><span class="plain-syntax"> = </span><a href="2-vo.html#SP11" class="function-link"><span class="function-syntax">VanillaObjects::inner_property_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">prop_name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Inter::Symbols::get_flag</span><span class="plain-syntax">(</span><span class="identifier-syntax">prop_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">ATTRIBUTE_MARK_BIT</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">val</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"0"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" has ~%S\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">property_name</span><span class="plain-syntax">);</span>

View file

@ -362,7 +362,7 @@ express a packed word in constant context, which we will need later.
<span class="plain-syntax">-------------+-------------------------------+-----------------------------------------------</span>
</pre>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">CMemoryModel::begin_array</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">CMemoryModel::begin_array</span></span>:<br/><a href="5-cmm.html#SP1">&#167;1</a><br/>C Object Model - <a href="5-com.html#SP1">&#167;1</a><br/>C Literals - <a href="5-clt.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generator</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">,</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">CMemoryModel::begin_array</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">CMemoryModel::begin_array</span></span>:<br/><a href="5-cmm.html#SP1">&#167;1</a><br/>C Literals - <a href="5-clt.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generator</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">array_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">array_s</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">format</span><span class="plain-syntax">, </span><span class="reserved-syntax">segmentation_pos</span><span class="plain-syntax"> *</span><span class="identifier-syntax">saved</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">saved</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">choice</span><span class="plain-syntax"> = </span><span class="constant-syntax">c_early_matter_I7CGS</span><span class="plain-syntax">;</span>
@ -510,7 +510,7 @@ except to predeclare the extent constant, if one was used.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CMemoryModel::end_array</span><button class="popup" onclick="togglePopup('usagePopup9')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup9">Usage of <span class="code-font"><span class="function-syntax">CMemoryModel::end_array</span></span>:<br/><a href="5-cmm.html#SP1">&#167;1</a><br/>C Object Model - <a href="5-com.html#SP1">&#167;1</a><br/>C Literals - <a href="5-clt.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generator</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">format</span><span class="plain-syntax">, </span><span class="reserved-syntax">segmentation_pos</span><span class="plain-syntax"> *</span><span class="identifier-syntax">saved</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CMemoryModel::end_array</span><button class="popup" onclick="togglePopup('usagePopup9')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup9">Usage of <span class="code-font"><span class="function-syntax">CMemoryModel::end_array</span></span>:<br/><a href="5-cmm.html#SP1">&#167;1</a><br/>C Literals - <a href="5-clt.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generator</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">format</span><span class="plain-syntax">, </span><span class="reserved-syntax">segmentation_pos</span><span class="plain-syntax"> *</span><span class="identifier-syntax">saved</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">segmentation_pos</span><span class="plain-syntax"> </span><span class="identifier-syntax">x_saved</span><span class="plain-syntax"> = </span><a href="2-cg.html#SP9" class="function-link"><span class="function-syntax">CodeGen::select</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="constant-syntax">c_predeclarations_I7CGS</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">OUT</span><span class="plain-syntax"> = </span><a href="2-cg.html#SP11" class="function-link"><span class="function-syntax">CodeGen::current</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"#define xt_"</span><span class="plain-syntax">);</span>

View file

@ -81,7 +81,7 @@ function togglePopup(material_id) {
<span class="plain-syntax"> </span><span class="identifier-syntax">METHOD_ADD</span><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="constant-syntax">DECLARE_CONSTANT_MTID</span><span class="plain-syntax">, </span><a href="5-cnm.html#SP3" class="function-link"><span class="function-syntax">CNamespace::declare_constant</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CNamespace::mangle</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">CNamespace::mangle</span></span>:<br/><a href="5-cnm.html#SP3">&#167;3</a><br/>C Memory Model - <a href="5-cmm.html#SP10_2">&#167;10.2</a>, <a href="5-cmm.html#SP10_3">&#167;10.3</a>, <a href="5-cmm.html#SP14">&#167;14</a><br/>C Object Model - <a href="5-com.html#SP1">&#167;1</a>, <a href="5-com.html#SP1_1">&#167;1.1</a>, <a href="5-com.html#SP1_3">&#167;1.3</a>, <a href="5-com.html#SP4">&#167;4</a>, <a href="5-com.html#SP7">&#167;7</a>, <a href="5-com.html#SP9">&#167;9</a><br/>C Function Model - <a href="5-cfm.html#SP1">&#167;1</a><br/>C Literals - <a href="5-clt.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generator</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">identifier</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CNamespace::mangle</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">CNamespace::mangle</span></span>:<br/><a href="5-cnm.html#SP3">&#167;3</a><br/>C Memory Model - <a href="5-cmm.html#SP10_2">&#167;10.2</a>, <a href="5-cmm.html#SP10_3">&#167;10.3</a>, <a href="5-cmm.html#SP14">&#167;14</a><br/>C Object Model - <a href="5-com.html#SP1_1">&#167;1.1</a>, <a href="5-com.html#SP1_3">&#167;1.3</a>, <a href="5-com.html#SP4">&#167;4</a>, <a href="5-com.html#SP7">&#167;7</a>, <a href="5-com.html#SP9">&#167;9</a><br/>C Function Model - <a href="5-cfm.html#SP1">&#167;1</a><br/>C Literals - <a href="5-clt.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generator</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">identifier</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::get_first_char</span><span class="plain-syntax">(</span><span class="identifier-syntax">identifier</span><span class="plain-syntax">) == </span><span class="character-syntax">'('</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">identifier</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::get_first_char</span><span class="plain-syntax">(</span><span class="identifier-syntax">identifier</span><span class="plain-syntax">) == </span><span class="character-syntax">'#'</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_ss_"</span><span class="plain-syntax">);</span>

View file

@ -134,20 +134,6 @@ function togglePopup(material_id) {
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CObjectModel::begin</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">CObjectModel::begin</span></span>:<br/>Final C - <a href="5-fnc.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="5-com.html#SP1" class="function-link"><span class="function-syntax">CObjectModel::initialise_data</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-com.html#SP1_5" class="named-paragraph-link"><span class="named-paragraph">Begin the initialiser function</span><span class="named-paragraph-number">1.5</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="5-com.html#SP7" class="function-link"><span class="function-syntax">CObjectModel::property_by_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Xvalue_range"</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"value_range"</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">segmentation_pos</span><span class="plain-syntax"> </span><span class="identifier-syntax">saved</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="5-cmm.html#SP10" class="function-link"><span class="function-syntax">CMemoryModel::begin_array</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">generator</span><span class="plain-syntax">, </span><span class="identifier-syntax">gen</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="string-syntax">"Xvalue_range"</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="constant-syntax">WORD_ARRAY_FORMAT</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">saved</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">val</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">val</span><span class="plain-syntax">, </span><span class="string-syntax">"%d"</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-cg2.html#SP18" class="function-link"><span class="function-syntax">Generators::array_entry</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">val</span><span class="plain-syntax">, </span><span class="constant-syntax">WORD_ARRAY_FORMAT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::clear</span><span class="plain-syntax">(</span><span class="identifier-syntax">val</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="5-cnm.html#SP1" class="function-link"><span class="function-syntax">CNamespace::mangle</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">val</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"value_range"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-cg2.html#SP18" class="function-link"><span class="function-syntax">Generators::array_entry</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">val</span><span class="plain-syntax">, </span><span class="constant-syntax">WORD_ARRAY_FORMAT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-cg2.html#SP18" class="function-link"><span class="function-syntax">Generators::array_entry</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"0"</span><span class="plain-syntax">, </span><span class="constant-syntax">WORD_ARRAY_FORMAT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-cg2.html#SP18" class="function-link"><span class="function-syntax">Generators::array_entry</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"0"</span><span class="plain-syntax">, </span><span class="constant-syntax">WORD_ARRAY_FORMAT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-cg2.html#SP18" class="function-link"><span class="function-syntax">Generators::array_entry</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"i7_mgl_NULL"</span><span class="plain-syntax">, </span><span class="constant-syntax">WORD_ARRAY_FORMAT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="5-cmm.html#SP14" class="function-link"><span class="function-syntax">CMemoryModel::end_array</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">generator</span><span class="plain-syntax">, </span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="constant-syntax">WORD_ARRAY_FORMAT</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">saved</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CObjectModel::end</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">CObjectModel::end</span></span>:<br/>Final C - <a href="5-fnc.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">) {</span>
@ -532,7 +518,7 @@ only need to be unique, so the order is not significant.
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">C_property</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">C_property</span><span class="plain-syntax"> *</span><span class="function-syntax">CObjectModel::property_by_name</span><button class="popup" onclick="togglePopup('usagePopup22')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup22">Usage of <span class="code-font"><span class="function-syntax">CObjectModel::property_by_name</span></span>:<br/><a href="5-com.html#SP1">&#167;1</a>, <a href="5-com.html#SP6">&#167;6</a>, <a href="5-com.html#SP9">&#167;9</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">inner_name</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">attr</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">C_property</span><span class="plain-syntax"> *</span><span class="function-syntax">CObjectModel::property_by_name</span><button class="popup" onclick="togglePopup('usagePopup22')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup22">Usage of <span class="code-font"><span class="function-syntax">CObjectModel::property_by_name</span></span>:<br/><a href="5-com.html#SP6">&#167;6</a>, <a href="5-com.html#SP9">&#167;9</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">inner_name</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">attr</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">dictionary</span><span class="plain-syntax"> *</span><span class="identifier-syntax">D</span><span class="plain-syntax"> = </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">objdata</span><span class="plain-syntax">.</span><span class="element-syntax">declared_properties</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">C_property</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cp</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Dictionaries::find</span><span class="plain-syntax">(</span><span class="identifier-syntax">D</span><span class="plain-syntax">, </span><span class="identifier-syntax">name</span><span class="plain-syntax">) == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) {</span>
@ -675,13 +661,8 @@ the next owner is declared.
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prop_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">val</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">property_name</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">inner_name</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">prop_name</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">property_name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Inter::Symbols::name</span><span class="plain-syntax">(</span><span class="identifier-syntax">prop_name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inner_name</span><span class="plain-syntax"> = </span><a href="2-vo.html#SP11" class="function-link"><span class="function-syntax">VanillaObjects::inner_property_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">prop_name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">property_name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">I</span><span class="string-syntax">"Xvalue_range"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inner_name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">I</span><span class="string-syntax">"value_range"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">property_name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Inter::Symbols::name</span><span class="plain-syntax">(</span><span class="identifier-syntax">prop_name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inner_name</span><span class="plain-syntax"> = </span><a href="2-vo.html#SP11" class="function-link"><span class="function-syntax">VanillaObjects::inner_property_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">prop_name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">C_property_owner</span><span class="plain-syntax"> *</span><span class="identifier-syntax">owner</span><span class="plain-syntax"> = </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">objdata</span><span class="plain-syntax">.</span><span class="element-syntax">current_owner</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">C_property</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prop</span><span class="plain-syntax"> = </span><a href="5-com.html#SP7" class="function-link"><span class="function-syntax">CObjectModel::property_by_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">property_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">inner_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">C_pv_pair</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pair</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">C_pv_pair</span><span class="plain-syntax">);</span>

View file

@ -238,7 +238,7 @@ Total memory consumption was 394269K = 385 MB
39.3% was used for memory not allocated for objects:
20.5% text stream storage 82825136 bytes in 535663 claims
20.5% text stream storage 82824764 bytes in 535659 claims
4.5% dictionary storage 18273792 bytes in 33269 claims
---- sorting 736 bytes in 3 claims
1.7% source text 7200000 bytes in 3 claims

View file

@ -1,5 +1,5 @@
100.0% in inform7 run
54.8% in compilation to Inter
54.9% in compilation to Inter
39.5% in //Sequence::undertake_queued_tasks//
3.5% in //MajorNodes::pre_pass//
2.5% in //MajorNodes::pass_1//
@ -16,22 +16,22 @@
0.1% in //RTKindConstructors::compile_permissions//
0.1% in //Task::make_built_in_kind_constructors//
0.1% in //World::stages_II_and_III//
1.6% not specifically accounted for
43.2% in running Inter pipeline
1.8% not specifically accounted for
43.0% in running Inter pipeline
12.5% in step preparation
9.7% in inter step 7/16: consolidate-text
7.9% in inter step 2/16: link
7.8% in inter step 2/16: link
6.6% in inter step 16/16: generate inform6 -> auto.inf
1.5% in inter step 11/16: make-identifiers-unique
0.4% in inter step 12/16: reconcile-verbs
0.2% in inter step 10/16: detect-indirect-calls
0.2% in inter step 14/16: eliminate-redundant-operations
0.2% in inter step 6/16: assimilate
0.2% in inter step 8/16: resolve-external-symbols
0.2% in inter step 9/16: inspect-plugs
0.1% in inter step 10/16: detect-indirect-calls
0.1% in inter step 13/16: eliminate-redundant-labels
0.1% in inter step 4/16: parse-linked-matter
0.1% in inter step 5/16: resolve-conditional-compilation
2.6% not specifically accounted for
2.7% not specifically accounted for
1.6% in supervisor
0.3% not specifically accounted for

View file

@ -377,7 +377,7 @@ the one which the player is on.
}
if (obj ofclass K0_kind)
WhetherProvides(V, false, pr, true); ! to force a run-time problem
if ((V < 1) || (V > obj.value_range)) {
if ((V < 1) || (V > value_ranges-->K)) {
RunTimeProblem(RTP_BADVALUEPROPERTY); return 0; }
return (obj.pr)-->(V+COL_HSIZE);
} else {
@ -399,7 +399,7 @@ converted from an rvalue to an lvalue.
if (K == OBJECT_TY) {
if (WhetherProvides(V, false, pr, true)) obj.pr = val;
} else {
if ((V < 1) || (V > obj.value_range))
if ((V < 1) || (V > value_ranges-->K))
return RunTimeProblem(RTP_BADVALUEPROPERTY);
if (obj provides pr) { (obj.pr)-->(V+COL_HSIZE) = val; }
}

View file

@ -6547,7 +6547,7 @@ package main _plain
symbol public misc __assembly_sp `sp`
symbol public misc KindHierarchy
symbol public misc value_property_holders
symbol public misc value_range
symbol public misc value_ranges
constant String K_unchecked = 0 __veneer=1
constant Routine K_unchecked = 0 __veneer=1
constant self K_unchecked = 0 __veneer=1
@ -6560,7 +6560,7 @@ package main _plain
constant __assembly_sp K_unchecked = 0 __veneer=1
constant KindHierarchy K_unchecked = 0 __veneer=1
constant value_property_holders K_unchecked = 0 __veneer=1
constant value_range K_unchecked = 0 __veneer=1
constant value_ranges K_unchecked = 0 __veneer=1
package basic_inform_by_graham_nelson _module
symbol private misc ^category `^category_U1`
symbol external misc K_typeless_int --> /main/generic/kinds/K_typeless_int
@ -34790,7 +34790,7 @@ package main _plain
constant KIT_CONFIGURATION_BITMAP K_typeless_int = 0
constant KIT_CONFIGURATION_LOOKMODE K_typeless_int = 2
constant I7_VERSION_NUMBER K_typeless_string = "10.1.0"
constant I7_FULL_VERSION_NUMBER K_typeless_string = "10.1.0-alpha.1+6T41"
constant I7_FULL_VERSION_NUMBER K_typeless_string = "10.1.0-alpha.1+6T42"
constant ^virtual_machine K_typeless_string = "C/32d/v1/no-main"
constant ^virtual_machine_icon K_typeless_string = "vm_glulx.png"
constant ^language_elements_used K_typeless_string = "core, naming, instance counting, glulx external files"
@ -97365,7 +97365,7 @@ package main _plain
symbol external misc door_to --> /main/BasicInformKit/properties/door_to_prop/door_to
symbol external misc WhetherProvides --> /main/BasicInformKit/functions/WhetherProvides_fn/WhetherProvides
symbol external misc plug_00165 --> /main/generic/kinds/kind1/K_object
symbol external misc value_range --> /main/veneer/value_range
symbol external misc value_ranges --> /main/veneer/value_ranges
symbol external misc RTP_BADVALUEPROPERTY --> /main/BasicInformKit/constants/RTP_BADVALUEPROPERTY_con/RTP_BADVALUEPROPERTY
symbol external misc COL_HSIZE --> /main/BasicInformKit/constants/COL_HSIZE_con/COL_HSIZE
local K K_unchecked
@ -97449,9 +97449,9 @@ package main _plain
val K_unchecked 1
inv !gt
val K_unchecked V
inv !propertyvalue
val K_unchecked obj
val K_unchecked value_range
inv !lookup
val K_unchecked value_ranges
val K_unchecked K
code
inv RunTimeProblem
val K_unchecked RTP_BADVALUEPROPERTY
@ -97494,7 +97494,7 @@ package main _plain
symbol external misc RunTimeProblem --> /main/BasicInformKit/functions/RunTimeProblem_fn/RunTimeProblem
symbol external misc RTP_PROPOFNOTHING --> /main/BasicInformKit/constants/RTP_PROPOFNOTHING_con/RTP_PROPOFNOTHING
symbol external misc WhetherProvides --> /main/BasicInformKit/functions/WhetherProvides_fn/WhetherProvides
symbol external misc value_range --> /main/veneer/value_range
symbol external misc value_ranges --> /main/veneer/value_ranges
symbol external misc RTP_BADVALUEPROPERTY --> /main/BasicInformKit/constants/RTP_BADVALUEPROPERTY_con/RTP_BADVALUEPROPERTY
symbol external misc COL_HSIZE --> /main/BasicInformKit/constants/COL_HSIZE_con/COL_HSIZE
local K K_unchecked
@ -97556,9 +97556,9 @@ package main _plain
val K_unchecked 1
inv !gt
val K_unchecked V
inv !propertyvalue
val K_unchecked obj
val K_unchecked value_range
inv !lookup
val K_unchecked value_ranges
val K_unchecked K
code
inv !return
inv RunTimeProblem

View file

@ -32,7 +32,7 @@
@e ASM_NEG_RFALSE_VSYMB
@e VALUE_PROPERTY_HOLDERS_VSYMB
@e VALUE_RANGE_VSYMB
@e VALUE_RANGES_VSYMB
@e RESPONSETEXTS_VSYMB
@e CREATEPROPERTYOFFSETS_VSYMB
@e KINDHIERARCHY_VSYMB
@ -67,7 +67,7 @@ void Veneer::create_indexes(inter_tree *I) {
Veneer::index(I, ASM_NEG_RFALSE_VSYMB, I"__assembly_negated_rfalse_label", I"?~rfalse");
Veneer::index(I, VALUE_PROPERTY_HOLDERS_VSYMB, I"value_property_holders", NULL);
Veneer::index(I, VALUE_RANGE_VSYMB, I"value_range", NULL);
Veneer::index(I, VALUE_RANGES_VSYMB, I"value_ranges", NULL);
Veneer::index(I, RESPONSETEXTS_VSYMB, I"ResponseTexts", NULL);
Veneer::index(I, CREATEPROPERTYOFFSETS_VSYMB, I"CreatePropertyOffsets", NULL);
Veneer::index(I, KINDHIERARCHY_VSYMB, I"KindHierarchy", NULL);

View file

@ -172,10 +172,6 @@ take lightly in the Z-machine. But speed and flexibility are worth more.
WRITE_TO(instance_name, "VPH_%d", w);
segmentation_pos saved;
Generators::declare_instance(gen, I"Object", instance_name, NULL, -1, FALSE, &saved);
TEMPORARY_TEXT(N)
WRITE_TO(N, "%d", Inter::Kind::instance_count(kind_name));
Generators::assign_property(gen, NULL, N); /* I"value_range" */
DISCARD_TEXT(N)
inter_symbol *prop_name;
LOOP_OVER_LINKED_LIST(prop_name, inter_symbol, gen->unassimilated_properties)
CodeGen::unmark(prop_name);
@ -203,10 +199,6 @@ take lightly in the Z-machine. But speed and flexibility are worth more.
@ It's convenient to be able to distinguish, at run-time, which objects are
the VPH objects used only for kind-property indexing.
The property |value_range| for a VPH object is the number |N| such that the
legal values at run-time for this kind are |1, 2, 3, ..., N|: or in other
words, the number of instances of this kind.
@<Decide who gets a VPH@> =
for (int i=0; i<LinkedLists::len(gen->kinds); i++) {
inter_symbol *kind_name = gen->kinds_in_source_order[i];
@ -243,16 +235,35 @@ doesn't have a VPH, or the object number of its VPH if it has.
if (VanillaObjects::weak_id(kind_name) == w) {
if (Inter::Symbols::get_flag(kind_name, VPH_MARK_BIT)) {
written = TRUE;
TEMPORARY_TEXT(vph)
WRITE_TO(vph, "VPH_%d", w);
Generators::mangled_array_entry(gen, vph, WORD_ARRAY_FORMAT);
DISCARD_TEXT(vph)
TEMPORARY_TEXT(E)
WRITE_TO(E, "VPH_%d", w);
Generators::mangled_array_entry(gen, E, WORD_ARRAY_FORMAT);
DISCARD_TEXT(E)
}
}
}
if (written) vph++; else Generators::array_entry(gen, I"0", WORD_ARRAY_FORMAT);
}
Generators::end_array(gen, WORD_ARRAY_FORMAT, &saved);
Generators::begin_array(gen, I"value_ranges", NULL, NULL, WORD_ARRAY_FORMAT, &saved);
Generators::array_entry(gen, I"0", WORD_ARRAY_FORMAT);
for (int w=1; w<M; w++) {
int written = FALSE;
for (int i=0; i<LinkedLists::len(gen->kinds); i++) {
inter_symbol *kind_name = gen->kinds_in_source_order[i];
if (VanillaObjects::weak_id(kind_name) == w) {
if (Inter::Symbols::get_flag(kind_name, VPH_MARK_BIT)) {
written = TRUE;
TEMPORARY_TEXT(E)
WRITE_TO(E, "%d", Inter::Kind::instance_count(kind_name));
Generators::array_entry(gen, E, WORD_ARRAY_FORMAT);
DISCARD_TEXT(E)
}
}
}
if (written == FALSE) Generators::array_entry(gen, I"0", WORD_ARRAY_FORMAT);
}
Generators::end_array(gen, WORD_ARRAY_FORMAT, &saved);
@<Work through this frame list of permissions@> =
inter_tree_node *X;
@ -605,15 +616,15 @@ void VanillaObjects::plist(code_generation *gen, inter_node_list *FL) {
LOOP_THROUGH_INTER_NODE_LIST(X, FL) {
inter_symbol *prop_name = InterSymbolsTables::symbol_from_frame_data(X, PROP_PVAL_IFLD);
if (prop_name == NULL) internal_error("no property");
TEMPORARY_TEXT(OUT)
CodeGen::select_temporary(gen, OUT);
TEMPORARY_TEXT(val)
CodeGen::select_temporary(gen, val);
if (Generators::optimise_property_value(gen, prop_name, X) == FALSE) {
CodeGen::pair(gen, X,
X->W.data[DVAL1_PVAL_IFLD], X->W.data[DVAL2_PVAL_IFLD]);
}
CodeGen::deselect_temporary(gen);
Generators::assign_property(gen, prop_name, OUT);
DISCARD_TEXT(OUT)
Generators::assign_property(gen, prop_name, val);
DISCARD_TEXT(val)
}
}

View file

@ -793,8 +793,8 @@ property names which don't exist as constant symbols with the harmless value
trick called "stubbing", these being "stub definitions".)
=
int i6dpcount = 0;
int attribute_slots_used = 0;
int i6dpcount = 0;
void I6Target::declare_property(code_generator *cgt, code_generation *gen, inter_symbol *prop_name, linked_list *all_forms) {
inter_tree *I = gen->from;
@ -836,9 +836,7 @@ void I6Target::declare_property(code_generator *cgt, code_generation *gen, inter
}
segmentation_pos saved = CodeGen::select(gen, constants_1_I7CGS);
if (i6dpcount++ == 0) {
WRITE_TO(CodeGen::current(gen), "Array value_range --> 1 Xvalue_range 0;\n");
}
i6dpcount++;
WRITE_TO(CodeGen::current(gen), "Constant subterfuge_%d = %S;\n", i6dpcount, inner_name);
CodeGen::deselect(gen, saved);
@ -1021,12 +1019,6 @@ int I6Target::optimise_property_value(code_generator *cgt, code_generation *gen,
void I6Target::assign_property(code_generator *cgt, code_generation *gen, inter_symbol *prop_name, text_stream *val) {
text_stream *OUT = CodeGen::current(gen);
if (prop_name == NULL) {
WRITE(" with Xvalue_range %S\n", val);
return;
}
text_stream *property_name = VanillaObjects::inner_property_name(gen, prop_name);
if (Inter::Symbols::get_flag(prop_name, ATTRIBUTE_MARK_BIT)) {
if (Str::eq(val, I"0")) WRITE(" has ~%S\n", property_name);

View file

@ -60,20 +60,6 @@ void CObjectModel::initialise_data(code_generation *gen) {
void CObjectModel::begin(code_generation *gen) {
CObjectModel::initialise_data(gen);
@<Begin the initialiser function@>;
CObjectModel::property_by_name(gen, I"Xvalue_range", I"value_range", FALSE);
segmentation_pos saved;
CMemoryModel::begin_array(gen->generator, gen,
I"Xvalue_range", NULL, NULL, WORD_ARRAY_FORMAT, &saved);
TEMPORARY_TEXT(val)
WRITE_TO(val, "%d", 1);
Generators::array_entry(gen, val, WORD_ARRAY_FORMAT);
Str::clear(val);
CNamespace::mangle(NULL, val, I"value_range");
Generators::array_entry(gen, val, WORD_ARRAY_FORMAT);
Generators::array_entry(gen, I"0", WORD_ARRAY_FORMAT);
Generators::array_entry(gen, I"0", WORD_ARRAY_FORMAT);
Generators::array_entry(gen, I"i7_mgl_NULL", WORD_ARRAY_FORMAT);
CMemoryModel::end_array(gen->generator, gen, WORD_ARRAY_FORMAT, &saved);
}
void CObjectModel::end(code_generation *gen) {
@ -563,13 +549,8 @@ void CObjectModel::assign_property(code_generator *cgt, code_generation *gen,
inter_symbol *prop_name, text_stream *val) {
text_stream *property_name;
text_stream *inner_name;
if (prop_name) {
property_name = Inter::Symbols::name(prop_name);
inner_name = VanillaObjects::inner_property_name(gen, prop_name);
} else {
property_name = I"Xvalue_range";
inner_name = I"value_range";
}
property_name = Inter::Symbols::name(prop_name);
inner_name = VanillaObjects::inner_property_name(gen, prop_name);
C_property_owner *owner = C_GEN_DATA(objdata.current_owner);
C_property *prop = CObjectModel::property_by_name(gen, property_name, inner_name, FALSE);
C_pv_pair *pair = CREATE(C_pv_pair);