mirror of
https://github.com/ganelson/inform.git
synced 2024-07-05 08:34:22 +03:00
Tentative movement of property storage policy into assembly
This commit is contained in:
parent
db3b345654
commit
8c553d6565
|
@ -303,41 +303,40 @@ it doesn't mean it actually does have.
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax">[ </span><span class="identifier-syntax">WhetherProvides</span><span class="plain-syntax"> </span><span class="identifier-syntax">K</span><span class="plain-syntax"> </span><span class="identifier-syntax">obj</span><span class="plain-syntax"> </span><span class="identifier-syntax">q</span><span class="plain-syntax"> </span><span class="identifier-syntax">issue_rtp</span><span class="plain-syntax"> </span><span class="identifier-syntax">a</span><span class="plain-syntax"> </span><span class="identifier-syntax">l</span><span class="plain-syntax"> </span><span class="identifier-syntax">holder</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">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">obj</span><span class="plain-syntax"> < </span><span class="constant-syntax">1</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">obj</span><span class="plain-syntax"> > </span><span class="identifier-syntax">value_ranges</span><span class="plain-syntax">--></span><span class="identifier-syntax">K</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">issue_rtp</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">rfalse</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">holder</span><span class="plain-syntax"> = </span><span class="identifier-syntax">value_property_holders</span><span class="plain-syntax">--></span><span class="identifier-syntax">K</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">holder</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">holder</span><span class="plain-syntax"> </span><span class="reserved-syntax">provides</span><span class="plain-syntax"> </span><span class="identifier-syntax">q</span><span class="plain-syntax">)) </span><span class="reserved-syntax">rtrue</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">[ </span><span class="identifier-syntax">ProvidesProperty</span><span class="plain-syntax"> </span><span class="identifier-syntax">K</span><span class="plain-syntax"> </span><span class="identifier-syntax">obj</span><span class="plain-syntax"> </span><span class="identifier-syntax">q</span><span class="plain-syntax"> </span><span class="identifier-syntax">issue_rtp</span><span class="plain-syntax"> </span><span class="identifier-syntax">a</span><span class="plain-syntax"> </span><span class="identifier-syntax">l</span><span class="plain-syntax"> </span><span class="identifier-syntax">holder</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">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">ScanPropertyMetadata</span><span class="plain-syntax">(</span><span class="identifier-syntax">obj</span><span class="plain-syntax">, </span><span class="identifier-syntax">q</span><span class="plain-syntax">, </span><span class="constant-syntax">4</span><span class="plain-syntax">)) </span><span class="reserved-syntax">jump</span><span class="plain-syntax"> </span><span class="identifier-syntax">PermissionFound</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">KD_Count</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">l</span><span class="plain-syntax"> = </span><span class="identifier-syntax">obj</span><span class="plain-syntax">.</span><span class="identifier-syntax">KD_Count</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">while</span><span class="plain-syntax"> (</span><span class="identifier-syntax">l</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">a</span><span class="plain-syntax"> = </span><span class="identifier-syntax">l</span><span class="plain-syntax">*2;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ScanPropertyMetadata</span><span class="plain-syntax">(</span><span class="identifier-syntax">KindHierarchy</span><span class="plain-syntax">--></span><span class="identifier-syntax">a</span><span class="plain-syntax">, </span><span class="identifier-syntax">q</span><span class="plain-syntax">, </span><span class="constant-syntax">4</span><span class="plain-syntax">)) </span><span class="reserved-syntax">jump</span><span class="plain-syntax"> </span><span class="identifier-syntax">PermissionFound</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">l</span><span class="plain-syntax"> = </span><span class="identifier-syntax">KindHierarchy</span><span class="plain-syntax">-->(</span><span class="identifier-syntax">a</span><span class="plain-syntax">+1);</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">obj</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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">issue_rtp</span><span class="plain-syntax">) </span><span class="identifier-syntax">RunTimeProblem</span><span class="plain-syntax">(</span><span class="identifier-syntax">RTP_PROPOFNOTHING</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">q</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">ScanPropertyMetadata</span><span class="plain-syntax">(</span><span class="identifier-syntax">K0_kind</span><span class="plain-syntax">, </span><span class="identifier-syntax">q</span><span class="plain-syntax">, </span><span class="constant-syntax">4</span><span class="plain-syntax">)) </span><span class="reserved-syntax">jump</span><span class="plain-syntax"> </span><span class="identifier-syntax">PermissionFound</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">issue_rtp</span><span class="plain-syntax">) </span><span class="identifier-syntax">RunTimeProblem</span><span class="plain-syntax">(</span><span class="identifier-syntax">RTP_UNPROVIDED</span><span class="plain-syntax">, </span><span class="identifier-syntax">obj</span><span class="plain-syntax">, </span><span class="identifier-syntax">q</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">rfalse</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="reserved-syntax">metaclass</span><span class="plain-syntax">(</span><span class="identifier-syntax">obj</span><span class="plain-syntax">) ~= </span><span class="identifier-syntax">Object</span><span class="plain-syntax">) </span><span class="reserved-syntax">rfalse</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">q</span><span class="plain-syntax"><0) </span><span class="identifier-syntax">q</span><span class="plain-syntax"> = ~</span><span class="identifier-syntax">q</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">ScanPropertyMetadata</span><span class="plain-syntax">(</span><span class="identifier-syntax">obj</span><span class="plain-syntax">, </span><span class="identifier-syntax">q</span><span class="plain-syntax">, </span><span class="constant-syntax">4</span><span class="plain-syntax">)) </span><span class="reserved-syntax">jump</span><span class="plain-syntax"> </span><span class="identifier-syntax">PermissionFound</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">KD_Count</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">l</span><span class="plain-syntax"> = </span><span class="identifier-syntax">obj</span><span class="plain-syntax">.</span><span class="identifier-syntax">KD_Count</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">while</span><span class="plain-syntax"> (</span><span class="identifier-syntax">l</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">a</span><span class="plain-syntax"> = </span><span class="identifier-syntax">l</span><span class="plain-syntax">*2;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ScanPropertyMetadata</span><span class="plain-syntax">(</span><span class="identifier-syntax">KindHierarchy</span><span class="plain-syntax">--></span><span class="identifier-syntax">a</span><span class="plain-syntax">, </span><span class="identifier-syntax">q</span><span class="plain-syntax">, </span><span class="constant-syntax">4</span><span class="plain-syntax">)) </span><span class="reserved-syntax">jump</span><span class="plain-syntax"> </span><span class="identifier-syntax">PermissionFound</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">l</span><span class="plain-syntax"> = </span><span class="identifier-syntax">KindHierarchy</span><span class="plain-syntax">-->(</span><span class="identifier-syntax">a</span><span class="plain-syntax">+1);</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">ScanPropertyMetadata</span><span class="plain-syntax">(</span><span class="identifier-syntax">K0_kind</span><span class="plain-syntax">, </span><span class="identifier-syntax">q</span><span class="plain-syntax">, </span><span class="constant-syntax">4</span><span class="plain-syntax">)) </span><span class="reserved-syntax">jump</span><span class="plain-syntax"> </span><span class="identifier-syntax">PermissionFound</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">issue_rtp</span><span class="plain-syntax">) </span><span class="identifier-syntax">RunTimeProblem</span><span class="plain-syntax">(</span><span class="identifier-syntax">RTP_UNPROVIDED</span><span class="plain-syntax">, </span><span class="identifier-syntax">obj</span><span class="plain-syntax">, </span><span class="identifier-syntax">q</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">rfalse</span><span class="plain-syntax">;</span>
|
||||
|
||||
<span class="plain-syntax"> .</span><span class="identifier-syntax">PermissionFound</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">q</span><span class="plain-syntax">-->2) </span><span class="reserved-syntax">rtrue</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">q</span><span class="plain-syntax">) </span><span class="reserved-syntax">rtrue</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">issue_rtp</span><span class="plain-syntax">) </span><span class="identifier-syntax">RunTimeProblem</span><span class="plain-syntax">(</span><span class="identifier-syntax">RTP_UNSET</span><span class="plain-syntax">, </span><span class="identifier-syntax">obj</span><span class="plain-syntax">, </span><span class="identifier-syntax">q</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">rfalse</span><span class="plain-syntax">;</span>
|
||||
|
||||
<span class="plain-syntax"> @</span><span class="identifier-syntax">provides_gprop</span><span class="plain-syntax"> </span><span class="identifier-syntax">K</span><span class="plain-syntax"> </span><span class="identifier-syntax">obj</span><span class="plain-syntax"> </span><span class="identifier-syntax">q</span><span class="plain-syntax"> </span><span class="identifier-syntax">a</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">a</span><span class="plain-syntax">) </span><span class="reserved-syntax">rtrue</span><span class="plain-syntax">;</span>
|
||||
<span class="comment-syntax">if (K ~= OBJECT_TY) {</span>
|
||||
<span class="comment-syntax"> if ((obj >= 1) && (obj <= value_ranges-->K)) {</span>
|
||||
<span class="comment-syntax"> holder = value_property_holders-->K;</span>
|
||||
<span class="comment-syntax"> if ((holder) && (holder provides q)) rtrue;</span>
|
||||
<span class="comment-syntax"> }</span>
|
||||
<span class="comment-syntax">} else {</span>
|
||||
<span class="comment-syntax"> if ((obj) && (metaclass(obj) == Object)) {</span>
|
||||
<span class="comment-syntax"> if (q-->0 == 2) rtrue;</span>
|
||||
<span class="comment-syntax"> if (obj provides q) rtrue;</span>
|
||||
<span class="comment-syntax"> }</span>
|
||||
<span class="comment-syntax">}</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">issue_rtp</span><span class="plain-syntax">) </span><span class="identifier-syntax">RunTimeProblem</span><span class="plain-syntax">(</span><span class="identifier-syntax">RTP_UNSET</span><span class="plain-syntax">, </span><span class="identifier-syntax">obj</span><span class="plain-syntax">, </span><span class="identifier-syntax">q</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">rfalse</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
|
||||
<span class="plain-syntax">[ </span><span class="identifier-syntax">PrintPropertyName</span><span class="plain-syntax"> </span><span class="identifier-syntax">p</span><span class="plain-syntax"> </span><span class="identifier-syntax">textual</span><span class="plain-syntax">;</span>
|
||||
|
@ -375,18 +374,20 @@ the one which the player is on.
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax">[ </span><span class="identifier-syntax">GProperty</span><span class="plain-syntax"> </span><span class="identifier-syntax">K</span><span class="plain-syntax"> </span><span class="identifier-syntax">V</span><span class="plain-syntax"> </span><span class="identifier-syntax">pr</span><span class="plain-syntax"> </span><span class="identifier-syntax">err</span><span class="plain-syntax"> </span><span class="identifier-syntax">holder</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">K</span><span class="plain-syntax">, </span><span class="identifier-syntax">V</span><span class="plain-syntax">, </span><span class="identifier-syntax">pr</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">-</span><span class="identifier-syntax">err</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">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">pr</span><span class="plain-syntax">-->0 == </span><span class="constant-syntax">2</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"> </span><span class="reserved-syntax">has</span><span class="plain-syntax"> </span><span class="identifier-syntax">pr</span><span class="plain-syntax">) </span><span class="reserved-syntax">rtrue</span><span class="plain-syntax">; </span><span class="reserved-syntax">rfalse</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">pr</span><span class="plain-syntax"> == </span><span class="identifier-syntax">door_to</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">V</span><span class="plain-syntax">.</span><span class="identifier-syntax">pr</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">V</span><span class="plain-syntax">.</span><span class="identifier-syntax">pr</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">holder</span><span class="plain-syntax"> = </span><span class="identifier-syntax">value_property_holders</span><span class="plain-syntax">--></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">holder</span><span class="plain-syntax">.</span><span class="identifier-syntax">pr</span><span class="plain-syntax">)-->(</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="plain-syntax">[ </span><span class="identifier-syntax">GProperty</span><span class="plain-syntax"> </span><span class="identifier-syntax">K</span><span class="plain-syntax"> </span><span class="identifier-syntax">V</span><span class="plain-syntax"> </span><span class="identifier-syntax">pr</span><span class="plain-syntax"> </span><span class="identifier-syntax">err</span><span class="plain-syntax"> </span><span class="identifier-syntax">holder</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><span class="identifier-syntax">ProvidesProperty</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">, </span><span class="identifier-syntax">V</span><span class="plain-syntax">, </span><span class="identifier-syntax">pr</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">-</span><span class="identifier-syntax">err</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> @</span><span class="identifier-syntax">read_gprop</span><span class="plain-syntax"> </span><span class="identifier-syntax">K</span><span class="plain-syntax"> </span><span class="identifier-syntax">V</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">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">val</span><span class="plain-syntax">;</span>
|
||||
<span class="comment-syntax"> if (K == OBJECT_TY) {</span>
|
||||
<span class="comment-syntax"> if (pr-->0 == 2) {</span>
|
||||
<span class="comment-syntax"> if (V has pr) rtrue; rfalse;</span>
|
||||
<span class="comment-syntax"> }</span>
|
||||
<span class="comment-syntax"> if (pr == door_to) return V.pr();</span>
|
||||
<span class="comment-syntax"> return V.pr;</span>
|
||||
<span class="comment-syntax"> } else {</span>
|
||||
<span class="comment-syntax"> holder = value_property_holders-->K;</span>
|
||||
<span class="comment-syntax"> return (holder.pr)-->(V+COL_HSIZE);</span>
|
||||
<span class="comment-syntax"> }</span>
|
||||
<span class="plain-syntax"> }</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>
|
||||
|
@ -398,17 +399,18 @@ converted from an rvalue to an lvalue.
|
|||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax">[ </span><span class="identifier-syntax">WriteGProperty</span><span class="plain-syntax"> </span><span class="identifier-syntax">K</span><span class="plain-syntax"> </span><span class="identifier-syntax">V</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="identifier-syntax">holder</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">K</span><span class="plain-syntax">, </span><span class="identifier-syntax">V</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="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">pr</span><span class="plain-syntax">-->0 == </span><span class="constant-syntax">2</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">val</span><span class="plain-syntax">) </span><span class="reserved-syntax">give</span><span class="plain-syntax"> </span><span class="identifier-syntax">V</span><span class="plain-syntax"> </span><span class="identifier-syntax">pr</span><span class="plain-syntax">; </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">give</span><span class="plain-syntax"> </span><span class="identifier-syntax">V</span><span class="plain-syntax"> ~</span><span class="identifier-syntax">pr</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">V</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="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">holder</span><span class="plain-syntax"> = </span><span class="identifier-syntax">value_property_holders</span><span class="plain-syntax">--></span><span class="identifier-syntax">K</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> (</span><span class="identifier-syntax">holder</span><span class="plain-syntax">.</span><span class="identifier-syntax">pr</span><span class="plain-syntax">)-->(</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>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ProvidesProperty</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">, </span><span class="identifier-syntax">V</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="plain-syntax"> @</span><span class="identifier-syntax">write_gprop</span><span class="plain-syntax"> </span><span class="identifier-syntax">K</span><span class="plain-syntax"> </span><span class="identifier-syntax">V</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="comment-syntax"> if (K == OBJECT_TY) {</span>
|
||||
<span class="comment-syntax"> if (pr-->0 == 2) {</span>
|
||||
<span class="comment-syntax"> if (val) give V pr; else give V ~pr;</span>
|
||||
<span class="comment-syntax"> } else {</span>
|
||||
<span class="comment-syntax"> V.pr = val;</span>
|
||||
<span class="comment-syntax"> }</span>
|
||||
<span class="comment-syntax"> } else {</span>
|
||||
<span class="comment-syntax"> holder = value_property_holders-->K;</span>
|
||||
<span class="comment-syntax"> (holder.pr)-->(V+COL_HSIZE) = val;</span>
|
||||
<span class="comment-syntax"> }</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax">];</span>
|
||||
</pre>
|
||||
|
|
|
@ -334,7 +334,7 @@ but for now about 10 layers is plenty.
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">segmentation_pos</span><span class="plain-syntax"> </span><span class="function-syntax">CodeGen::select</span><button class="popup" onclick="togglePopup('usagePopup7')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup7">Usage of <span class="code-font"><span class="function-syntax">CodeGen::select</span></span>:<br/>Generating Inform 6 - <a href="4-fi6.html#SP3">§3</a>, <a href="4-fi6.html#SP7">§7</a>, <a href="4-fi6.html#SP8">§8</a>, <a href="4-fi6.html#SP9">§9</a>, <a href="4-fi6.html#SP10">§10</a><br/>Final C - <a href="5-fnc.html#SP5">§5</a><br/>C Global Variables - <a href="5-cgv.html#SP1">§1</a>, <a href="5-cgv.html#SP2">§2</a><br/>C Memory Model - <a href="5-cmm.html#SP3">§3</a>, <a href="5-cmm.html#SP4">§4</a>, <a href="5-cmm.html#SP10">§10</a>, <a href="5-cmm.html#SP10_2">§10.2</a>, <a href="5-cmm.html#SP11">§11</a>, <a href="5-cmm.html#SP14">§14</a><br/>C Object Model - <a href="5-com.html#SP1_3">§1.3</a>, <a href="5-com.html#SP2">§2</a>, <a href="5-com.html#SP3">§3</a>, <a href="5-com.html#SP4">§4</a>, <a href="5-com.html#SP7">§7</a>, <a href="5-com.html#SP1_4">§1.4</a>, <a href="5-com.html#SP1_5">§1.5</a>, <a href="5-com.html#SP1_6">§1.6</a>, <a href="5-com.html#SP9">§9</a><br/>C Function Model - <a href="5-cfm.html#SP1">§1</a><br/>C Literals - <a href="5-clt.html#SP1">§1</a>, <a href="5-clt.html#SP2">§2</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">i</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">segmentation_pos</span><span class="plain-syntax"> </span><span class="function-syntax">CodeGen::select</span><button class="popup" onclick="togglePopup('usagePopup7')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup7">Usage of <span class="code-font"><span class="function-syntax">CodeGen::select</span></span>:<br/>Generating Inform 6 - <a href="4-fi6.html#SP3">§3</a>, <a href="4-fi6.html#SP7">§7</a>, <a href="4-fi6.html#SP8">§8</a>, <a href="4-fi6.html#SP10">§10</a>, <a href="4-fi6.html#SP11">§11</a><br/>Final C - <a href="5-fnc.html#SP5">§5</a><br/>C Global Variables - <a href="5-cgv.html#SP1">§1</a>, <a href="5-cgv.html#SP2">§2</a><br/>C Memory Model - <a href="5-cmm.html#SP3">§3</a>, <a href="5-cmm.html#SP4">§4</a>, <a href="5-cmm.html#SP10">§10</a>, <a href="5-cmm.html#SP10_2">§10.2</a>, <a href="5-cmm.html#SP11">§11</a>, <a href="5-cmm.html#SP14">§14</a><br/>C Object Model - <a href="5-com.html#SP1_3">§1.3</a>, <a href="5-com.html#SP2">§2</a>, <a href="5-com.html#SP3">§3</a>, <a href="5-com.html#SP4">§4</a>, <a href="5-com.html#SP7">§7</a>, <a href="5-com.html#SP1_4">§1.4</a>, <a href="5-com.html#SP1_5">§1.5</a>, <a href="5-com.html#SP1_6">§1.6</a>, <a href="5-com.html#SP9">§9</a><br/>C Function Model - <a href="5-cfm.html#SP1">§1</a><br/>C Literals - <a href="5-clt.html#SP1">§1</a>, <a href="5-clt.html#SP2">§2</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">i</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="2-cg.html#SP9" class="function-link"><span class="function-syntax">CodeGen::select_layered</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="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
|
@ -351,7 +351,7 @@ but for now about 10 layers is plenty.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">previous_pos</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">CodeGen::deselect</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">CodeGen::deselect</span></span>:<br/>Generating Inform 6 - <a href="4-fi6.html#SP3">§3</a>, <a href="4-fi6.html#SP7">§7</a>, <a href="4-fi6.html#SP8">§8</a>, <a href="4-fi6.html#SP10">§10</a><br/>Final C - <a href="5-fnc.html#SP5">§5</a><br/>C Namespace - <a href="5-cnm.html#SP3">§3</a><br/>C Global Variables - <a href="5-cgv.html#SP1">§1</a>, <a href="5-cgv.html#SP2">§2</a><br/>C Memory Model - <a href="5-cmm.html#SP3">§3</a>, <a href="5-cmm.html#SP4">§4</a>, <a href="5-cmm.html#SP10_2">§10.2</a>, <a href="5-cmm.html#SP11">§11</a>, <a href="5-cmm.html#SP14">§14</a><br/>C Object Model - <a href="5-com.html#SP1_3">§1.3</a>, <a href="5-com.html#SP2">§2</a>, <a href="5-com.html#SP3">§3</a>, <a href="5-com.html#SP4">§4</a>, <a href="5-com.html#SP7">§7</a>, <a href="5-com.html#SP1_4">§1.4</a>, <a href="5-com.html#SP1_5">§1.5</a>, <a href="5-com.html#SP1_6">§1.6</a>, <a href="5-com.html#SP9">§9</a><br/>C Function Model - <a href="5-cfm.html#SP1">§1</a><br/>C Literals - <a href="5-clt.html#SP1">§1</a>, <a href="5-clt.html#SP2">§2</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">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">CodeGen::deselect</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">CodeGen::deselect</span></span>:<br/>Generating Inform 6 - <a href="4-fi6.html#SP3">§3</a>, <a href="4-fi6.html#SP7">§7</a>, <a href="4-fi6.html#SP8">§8</a>, <a href="4-fi6.html#SP11">§11</a><br/>Final C - <a href="5-fnc.html#SP5">§5</a><br/>C Namespace - <a href="5-cnm.html#SP3">§3</a><br/>C Global Variables - <a href="5-cgv.html#SP1">§1</a>, <a href="5-cgv.html#SP2">§2</a><br/>C Memory Model - <a href="5-cmm.html#SP3">§3</a>, <a href="5-cmm.html#SP4">§4</a>, <a href="5-cmm.html#SP10_2">§10.2</a>, <a href="5-cmm.html#SP11">§11</a>, <a href="5-cmm.html#SP14">§14</a><br/>C Object Model - <a href="5-com.html#SP1_3">§1.3</a>, <a href="5-com.html#SP2">§2</a>, <a href="5-com.html#SP3">§3</a>, <a href="5-com.html#SP4">§4</a>, <a href="5-com.html#SP7">§7</a>, <a href="5-com.html#SP1_4">§1.4</a>, <a href="5-com.html#SP1_5">§1.5</a>, <a href="5-com.html#SP1_6">§1.6</a>, <a href="5-com.html#SP9">§9</a><br/>C Function Model - <a href="5-cfm.html#SP1">§1</a><br/>C Literals - <a href="5-clt.html#SP1">§1</a>, <a href="5-clt.html#SP2">§2</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">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">gen</span><span class="plain-syntax">-></span><span class="element-syntax">segmentation</span><span class="plain-syntax">.</span><span class="element-syntax">temporarily_diverted</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"poorly timed deselection"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">gen</span><span class="plain-syntax">-></span><span class="element-syntax">segmentation</span><span class="plain-syntax">.</span><span class="element-syntax">pos</span><span class="plain-syntax"> = </span><span class="identifier-syntax">saved</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
@ -361,13 +361,13 @@ some temporary stream somewhere. For that, use the following pair:
|
|||
</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">CodeGen::select_temporary</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">CodeGen::select_temporary</span></span>:<br/><a href="2-cg.html#SP3">§3</a><br/>Vanilla Constants - <a href="2-vc.html#SP1_7">§1.7</a><br/>Vanilla Objects - <a href="2-vo.html#SP1_2_2_1_1">§1.2.2.1.1</a>, <a href="2-vo.html#SP2_3_4_1_1">§2.3.4.1.1</a>, <a href="2-vo.html#SP8">§8</a><br/>C Global Variables - <a href="5-cgv.html#SP2">§2</a><br/>C Assembly - <a href="5-cas.html#SP3">§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">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">T</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CodeGen::select_temporary</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">CodeGen::select_temporary</span></span>:<br/><a href="2-cg.html#SP3">§3</a><br/>Vanilla Constants - <a href="2-vc.html#SP1_7">§1.7</a><br/>Vanilla Objects - <a href="2-vo.html#SP1_2_2_1_1">§1.2.2.1.1</a>, <a href="2-vo.html#SP2_3_4_1_1">§2.3.4.1.1</a>, <a href="2-vo.html#SP8">§8</a><br/>Generating Inform 6 - <a href="4-fi6.html#SP9_1">§9.1</a>, <a href="4-fi6.html#SP9_2">§9.2</a>, <a href="4-fi6.html#SP9_3">§9.3</a><br/>C Global Variables - <a href="5-cgv.html#SP2">§2</a><br/>C Assembly - <a href="5-cas.html#SP3">§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">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">T</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">gen</span><span class="plain-syntax">-></span><span class="element-syntax">segmentation</span><span class="plain-syntax">.</span><span class="element-syntax">temporarily_diverted</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"nested temporary segments"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">gen</span><span class="plain-syntax">-></span><span class="element-syntax">segmentation</span><span class="plain-syntax">.</span><span class="element-syntax">temporarily_diverted_to</span><span class="plain-syntax"> = </span><span class="identifier-syntax">T</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">gen</span><span class="plain-syntax">-></span><span class="element-syntax">segmentation</span><span class="plain-syntax">.</span><span class="element-syntax">temporarily_diverted</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</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">CodeGen::deselect_temporary</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">CodeGen::deselect_temporary</span></span>:<br/><a href="2-cg.html#SP3">§3</a><br/>Vanilla Constants - <a href="2-vc.html#SP1_7">§1.7</a><br/>Vanilla Objects - <a href="2-vo.html#SP1_2_2_1_1">§1.2.2.1.1</a>, <a href="2-vo.html#SP2_3_4_1_1">§2.3.4.1.1</a>, <a href="2-vo.html#SP8">§8</a><br/>C Global Variables - <a href="5-cgv.html#SP2">§2</a><br/>C Assembly - <a href="5-cas.html#SP3">§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="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CodeGen::deselect_temporary</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">CodeGen::deselect_temporary</span></span>:<br/><a href="2-cg.html#SP3">§3</a><br/>Vanilla Constants - <a href="2-vc.html#SP1_7">§1.7</a><br/>Vanilla Objects - <a href="2-vo.html#SP1_2_2_1_1">§1.2.2.1.1</a>, <a href="2-vo.html#SP2_3_4_1_1">§2.3.4.1.1</a>, <a href="2-vo.html#SP8">§8</a><br/>Generating Inform 6 - <a href="4-fi6.html#SP9_1">§9.1</a>, <a href="4-fi6.html#SP9_2">§9.2</a>, <a href="4-fi6.html#SP9_3">§9.3</a><br/>C Global Variables - <a href="5-cgv.html#SP2">§2</a><br/>C Assembly - <a href="5-cas.html#SP3">§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="plain-syntax"> </span><span class="identifier-syntax">gen</span><span class="plain-syntax">-></span><span class="element-syntax">segmentation</span><span class="plain-syntax">.</span><span class="element-syntax">temporarily_diverted_to</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">gen</span><span class="plain-syntax">-></span><span class="element-syntax">segmentation</span><span class="plain-syntax">.</span><span class="element-syntax">temporarily_diverted</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
@ -377,7 +377,7 @@ if it has been "temporarily diverted" then the regiular selection is ignored.
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="function-syntax">CodeGen::current</span><button class="popup" onclick="togglePopup('usagePopup12')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup12">Usage of <span class="code-font"><span class="function-syntax">CodeGen::current</span></span>:<br/><a href="2-cg.html#SP15_1">§15.1</a><br/>The Vanilla Generator - <a href="2-tvg.html#SP3">§3</a><br/>Vanilla Constants - <a href="2-vc.html#SP2">§2</a><br/>Vanilla Objects - <a href="2-vo.html#SP8">§8</a><br/>Generating Inform 6 - <a href="4-fi6.html#SP3">§3</a>, <a href="4-fi6.html#SP3_4">§3.4</a>, <a href="4-fi6.html#SP4">§4</a>, <a href="4-fi6.html#SP5">§5</a>, <a href="4-fi6.html#SP6">§6</a>, <a href="4-fi6.html#SP7">§7</a>, <a href="4-fi6.html#SP8">§8</a>, <a href="4-fi6.html#SP9">§9</a>, <a href="4-fi6.html#SP10">§10</a><br/>Final C - <a href="5-fnc.html#SP5">§5</a><br/>C Namespace - <a href="5-cnm.html#SP3">§3</a><br/>C References - <a href="5-crf.html#SP4">§4</a><br/>C Global Variables - <a href="5-cgv.html#SP1">§1</a>, <a href="5-cgv.html#SP2">§2</a><br/>C Memory Model - <a href="5-cmm.html#SP3">§3</a>, <a href="5-cmm.html#SP4">§4</a>, <a href="5-cmm.html#SP10_2">§10.2</a>, <a href="5-cmm.html#SP11">§11</a>, <a href="5-cmm.html#SP12">§12</a>, <a href="5-cmm.html#SP14">§14</a>, <a href="5-cmm.html#SP15">§15</a><br/>C Assembly - <a href="5-cas.html#SP3">§3</a><br/>C Program Control - <a href="5-cpc.html#SP1">§1</a>, <a href="5-cpc.html#SP2">§2</a><br/>C Arithmetic - <a href="5-car.html#SP1">§1</a><br/>C Conditions - <a href="5-ccn.html#SP1">§1</a>, <a href="5-ccn.html#SP2">§2</a><br/>C Object Model - <a href="5-com.html#SP1_3">§1.3</a>, <a href="5-com.html#SP4">§4</a>, <a href="5-com.html#SP7">§7</a>, <a href="5-com.html#SP1_4">§1.4</a>, <a href="5-com.html#SP1_5">§1.5</a>, <a href="5-com.html#SP1_6">§1.6</a>, <a href="5-com.html#SP9">§9</a>, <a href="5-com.html#SP10">§10</a><br/>C Function Model - <a href="5-cfm.html#SP1">§1</a><br/>C Literals - <a href="5-clt.html#SP1">§1</a>, <a href="5-clt.html#SP2">§2</a>, <a href="5-clt.html#SP4">§4</a>, <a href="5-clt.html#SP5">§5</a><br/>C Input-Output Model - <a href="5-cim.html#SP2">§2</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="function-syntax">CodeGen::current</span><button class="popup" onclick="togglePopup('usagePopup12')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup12">Usage of <span class="code-font"><span class="function-syntax">CodeGen::current</span></span>:<br/><a href="2-cg.html#SP15_1">§15.1</a><br/>The Vanilla Generator - <a href="2-tvg.html#SP3">§3</a><br/>Vanilla Constants - <a href="2-vc.html#SP2">§2</a><br/>Vanilla Objects - <a href="2-vo.html#SP8">§8</a><br/>Generating Inform 6 - <a href="4-fi6.html#SP3">§3</a>, <a href="4-fi6.html#SP3_4">§3.4</a>, <a href="4-fi6.html#SP4">§4</a>, <a href="4-fi6.html#SP5">§5</a>, <a href="4-fi6.html#SP6">§6</a>, <a href="4-fi6.html#SP7">§7</a>, <a href="4-fi6.html#SP8">§8</a>, <a href="4-fi6.html#SP9">§9</a>, <a href="4-fi6.html#SP10">§10</a>, <a href="4-fi6.html#SP11">§11</a><br/>Final C - <a href="5-fnc.html#SP5">§5</a><br/>C Namespace - <a href="5-cnm.html#SP3">§3</a><br/>C References - <a href="5-crf.html#SP4">§4</a><br/>C Global Variables - <a href="5-cgv.html#SP1">§1</a>, <a href="5-cgv.html#SP2">§2</a><br/>C Memory Model - <a href="5-cmm.html#SP3">§3</a>, <a href="5-cmm.html#SP4">§4</a>, <a href="5-cmm.html#SP10_2">§10.2</a>, <a href="5-cmm.html#SP11">§11</a>, <a href="5-cmm.html#SP12">§12</a>, <a href="5-cmm.html#SP14">§14</a>, <a href="5-cmm.html#SP15">§15</a><br/>C Assembly - <a href="5-cas.html#SP3">§3</a><br/>C Program Control - <a href="5-cpc.html#SP1">§1</a>, <a href="5-cpc.html#SP2">§2</a><br/>C Arithmetic - <a href="5-car.html#SP1">§1</a><br/>C Conditions - <a href="5-ccn.html#SP1">§1</a>, <a href="5-ccn.html#SP2">§2</a><br/>C Object Model - <a href="5-com.html#SP1_3">§1.3</a>, <a href="5-com.html#SP4">§4</a>, <a href="5-com.html#SP7">§7</a>, <a href="5-com.html#SP1_4">§1.4</a>, <a href="5-com.html#SP1_5">§1.5</a>, <a href="5-com.html#SP1_6">§1.6</a>, <a href="5-com.html#SP9">§9</a>, <a href="5-com.html#SP10">§10</a><br/>C Function Model - <a href="5-cfm.html#SP1">§1</a><br/>C Literals - <a href="5-clt.html#SP1">§1</a>, <a href="5-clt.html#SP2">§2</a>, <a href="5-clt.html#SP4">§4</a>, <a href="5-clt.html#SP5">§5</a><br/>C Input-Output Model - <a href="5-cim.html#SP2">§2</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><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">gen</span><span class="plain-syntax">-></span><span class="element-syntax">segmentation</span><span class="plain-syntax">.</span><span class="element-syntax">temporarily_diverted</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">gen</span><span class="plain-syntax">-></span><span class="element-syntax">segmentation</span><span class="plain-syntax">.</span><span class="identifier-syntax">temporarily_diverted_to</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">gen</span><span class="plain-syntax">-></span><span class="element-syntax">segmentation</span><span class="plain-syntax">.</span><span class="element-syntax">pos</span><span class="plain-syntax">.</span><span class="element-syntax">current_segment</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
|
@ -453,7 +453,7 @@ extracted from some Inter instruction.
|
|||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-cg.html#SP15_1" class="named-paragraph-link"><span class="named-paragraph">Generate from a value pair</span><span class="named-paragraph-number">15.1</span></a></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">CodeGen::pair</span><button class="popup" onclick="togglePopup('usagePopup20')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup20">Usage of <span class="code-font"><span class="function-syntax">CodeGen::pair</span></span>:<br/>Vanilla Constants - <a href="2-vc.html#SP1_7">§1.7</a>, <a href="2-vc.html#SP2">§2</a><br/>Vanilla Objects - <a href="2-vo.html#SP2_3_4_1_1">§2.3.4.1.1</a>, <a href="2-vo.html#SP8">§8</a><br/>Vanilla Code - <a href="2-vc2.html#SP4">§4</a><br/>Generating Inform 6 - <a href="4-fi6.html#SP8">§8</a>, <a href="4-fi6.html#SP9">§9</a><br/>C Global Variables - <a href="5-cgv.html#SP2">§2</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_tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax">,</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CodeGen::pair</span><button class="popup" onclick="togglePopup('usagePopup20')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup20">Usage of <span class="code-font"><span class="function-syntax">CodeGen::pair</span></span>:<br/>Vanilla Constants - <a href="2-vc.html#SP1_7">§1.7</a>, <a href="2-vc.html#SP2">§2</a><br/>Vanilla Objects - <a href="2-vo.html#SP2_3_4_1_1">§2.3.4.1.1</a>, <a href="2-vo.html#SP8">§8</a><br/>Vanilla Code - <a href="2-vc2.html#SP4">§4</a><br/>Generating Inform 6 - <a href="4-fi6.html#SP8">§8</a>, <a href="4-fi6.html#SP10">§10</a><br/>C Global Variables - <a href="5-cgv.html#SP2">§2</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_tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">val1</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">val2</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbols_table</span><span class="plain-syntax"> *</span><span class="identifier-syntax">T</span><span class="plain-syntax"> = </span><span class="identifier-syntax">P</span><span class="plain-syntax">?(</span><span class="identifier-syntax">Inter::Packages::scope_of</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">)):</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-cg.html#SP15_1" class="named-paragraph-link"><span class="named-paragraph">Generate from a value pair</span><span class="named-paragraph-number">15.1</span></a></span><span class="plain-syntax">;</span>
|
||||
|
|
|
@ -233,7 +233,7 @@ I6 code. Still, all pragmas are offered to all generators.
|
|||
</pre>
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="identifier-syntax">VOID_METHOD_TYPE</span><span class="plain-syntax">(</span><span class="constant-syntax">MANGLE_IDENTIFIER_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="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">OUT</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">Generators::mangle</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">Generators::mangle</span></span>:<br/><a href="2-cg2.html#SP15">§15</a>, <a href="2-cg2.html#SP18">§18</a><br/>Vanilla Constants - <a href="2-vc.html#SP2">§2</a><br/>Generating Inform 6 - <a href="4-fi6.html#SP9">§9</a><br/>C Memory Model - <a href="5-cmm.html#SP12">§12</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">OUT</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">Generators::mangle</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">Generators::mangle</span></span>:<br/><a href="2-cg2.html#SP15">§15</a>, <a href="2-cg2.html#SP18">§18</a><br/>Vanilla Constants - <a href="2-vc.html#SP2">§2</a><br/>Generating Inform 6 - <a href="4-fi6.html#SP10">§10</a><br/>C Memory Model - <a href="5-cmm.html#SP12">§12</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">OUT</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="identifier-syntax">VOID_METHOD_CALL</span><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">-></span><span class="element-syntax">generator</span><span class="plain-syntax">, </span><span class="constant-syntax">MANGLE_IDENTIFIER_MTID</span><span class="plain-syntax">, </span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">identifier</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
|
|
|
@ -254,7 +254,7 @@ well the entire tree by the end.
|
|||
<span class="definition-keyword">define</span> <span class="constant-syntax">VNODE_ALLC</span><span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_THROUGH_INTER_CHILDREN</span><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><span class="identifier-syntax">P</span><span class="plain-syntax">) </span><a href="2-tvg.html#SP2" class="function-link"><span class="function-syntax">Vanilla::node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">C</span><span class="plain-syntax">)</span>
|
||||
</pre>
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Vanilla::node</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">Vanilla::node</span></span>:<br/><a href="2-tvg.html#SP1_9">§1.9</a><br/>Generating Inform 6 - <a href="4-fi6.html#SP3_4">§3.4</a>, <a href="4-fi6.html#SP3_6">§3.6</a>, <a href="4-fi6.html#SP3_14">§3.14</a>, <a href="4-fi6.html#SP8">§8</a>, <a href="4-fi6.html#SP9">§9</a><br/>C References - <a href="5-crf.html#SP2">§2</a><br/>C Assembly - <a href="5-cas.html#SP3">§3</a><br/>C Program Control - <a href="5-cpc.html#SP1_1">§1.1</a>, <a href="5-cpc.html#SP1_8">§1.8</a>, <a href="5-cpc.html#SP2">§2</a><br/>C Conditions - <a href="5-ccn.html#SP2">§2</a>, <a href="5-ccn.html#SP2_1">§2.1</a>, <a href="5-ccn.html#SP2_2">§2.2</a><br/>C Function Model - <a href="5-cfm.html#SP1">§1</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_tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Vanilla::node</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">Vanilla::node</span></span>:<br/><a href="2-tvg.html#SP1_9">§1.9</a><br/>Generating Inform 6 - <a href="4-fi6.html#SP3_4">§3.4</a>, <a href="4-fi6.html#SP3_6">§3.6</a>, <a href="4-fi6.html#SP3_14">§3.14</a>, <a href="4-fi6.html#SP8">§8</a>, <a href="4-fi6.html#SP9">§9</a>, <a href="4-fi6.html#SP9_1">§9.1</a>, <a href="4-fi6.html#SP9_2">§9.2</a>, <a href="4-fi6.html#SP9_3">§9.3</a><br/>C References - <a href="5-crf.html#SP2">§2</a><br/>C Assembly - <a href="5-cas.html#SP3">§3</a><br/>C Program Control - <a href="5-cpc.html#SP1_1">§1.1</a>, <a href="5-cpc.html#SP1_8">§1.8</a>, <a href="5-cpc.html#SP2">§2</a><br/>C Conditions - <a href="5-ccn.html#SP2">§2</a>, <a href="5-ccn.html#SP2_1">§2.1</a>, <a href="5-ccn.html#SP2_2">§2.2</a><br/>C Function Model - <a href="5-cfm.html#SP1">§1</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_tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">P</span><span class="plain-syntax">-></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">ID_IFLD</span><span class="plain-syntax">]) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">CONSTANT_IST:</span><span class="plain-syntax"> </span><a href="2-vc.html#SP1" class="function-link"><span class="function-syntax">VanillaConstants::constant</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">P</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
|
||||
|
|
|
@ -146,15 +146,15 @@ 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">EVALUATE_LABEL_MTID</span><span class="plain-syntax">, </span><a href="4-fi6.html#SP8" class="function-link"><span class="function-syntax">I6Target::evaluate_label</span></a><span class="plain-syntax">);</span>
|
||||
<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">INVOKE_FUNCTION_MTID</span><span class="plain-syntax">, </span><a href="4-fi6.html#SP9" class="function-link"><span class="function-syntax">I6Target::invoke_function</span></a><span class="plain-syntax">);</span>
|
||||
<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">INVOKE_OPCODE_MTID</span><span class="plain-syntax">, </span><a href="4-fi6.html#SP9" class="function-link"><span class="function-syntax">I6Target::invoke_opcode</span></a><span class="plain-syntax">);</span>
|
||||
<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">BEGIN_ARRAY_MTID</span><span class="plain-syntax">, </span><a href="4-fi6.html#SP9" class="function-link"><span class="function-syntax">I6Target::begin_array</span></a><span class="plain-syntax">);</span>
|
||||
<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">ARRAY_ENTRY_MTID</span><span class="plain-syntax">, </span><a href="4-fi6.html#SP9" class="function-link"><span class="function-syntax">I6Target::array_entry</span></a><span class="plain-syntax">);</span>
|
||||
<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">COMPILE_LITERAL_SYMBOL_MTID</span><span class="plain-syntax">, </span><a href="4-fi6.html#SP9" class="function-link"><span class="function-syntax">I6Target::compile_literal_symbol</span></a><span class="plain-syntax">);</span>
|
||||
<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">ARRAY_ENTRIES_MTID</span><span class="plain-syntax">, </span><a href="4-fi6.html#SP10" class="function-link"><span class="function-syntax">I6Target::array_entries</span></a><span class="plain-syntax">);</span>
|
||||
<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">END_ARRAY_MTID</span><span class="plain-syntax">, </span><a href="4-fi6.html#SP10" class="function-link"><span class="function-syntax">I6Target::end_array</span></a><span class="plain-syntax">);</span>
|
||||
<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">BEGIN_ARRAY_MTID</span><span class="plain-syntax">, </span><a href="4-fi6.html#SP10" class="function-link"><span class="function-syntax">I6Target::begin_array</span></a><span class="plain-syntax">);</span>
|
||||
<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">ARRAY_ENTRY_MTID</span><span class="plain-syntax">, </span><a href="4-fi6.html#SP10" class="function-link"><span class="function-syntax">I6Target::array_entry</span></a><span class="plain-syntax">);</span>
|
||||
<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">COMPILE_LITERAL_SYMBOL_MTID</span><span class="plain-syntax">, </span><a href="4-fi6.html#SP10" class="function-link"><span class="function-syntax">I6Target::compile_literal_symbol</span></a><span class="plain-syntax">);</span>
|
||||
<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">ARRAY_ENTRIES_MTID</span><span class="plain-syntax">, </span><a href="4-fi6.html#SP11" class="function-link"><span class="function-syntax">I6Target::array_entries</span></a><span class="plain-syntax">);</span>
|
||||
<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">END_ARRAY_MTID</span><span class="plain-syntax">, </span><a href="4-fi6.html#SP11" class="function-link"><span class="function-syntax">I6Target::end_array</span></a><span class="plain-syntax">);</span>
|
||||
<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">OFFER_PRAGMA_MTID</span><span class="plain-syntax">, </span><a href="4-fi6.html#SP3" class="function-link"><span class="function-syntax">I6Target::offer_pragma</span></a><span class="plain-syntax">)</span>
|
||||
<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">END_GENERATION_MTID</span><span class="plain-syntax">, </span><a href="4-fi6.html#SP3" class="function-link"><span class="function-syntax">I6Target::end_generation</span></a><span class="plain-syntax">);</span>
|
||||
<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">PSEUDO_OBJECT_MTID</span><span class="plain-syntax">, </span><a href="4-fi6.html#SP10" class="function-link"><span class="function-syntax">I6Target::pseudo_object</span></a><span class="plain-syntax">);</span>
|
||||
<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">NEW_ACTION_MTID</span><span class="plain-syntax">, </span><a href="4-fi6.html#SP10" class="function-link"><span class="function-syntax">I6Target::new_action</span></a><span class="plain-syntax">);</span>
|
||||
<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">PSEUDO_OBJECT_MTID</span><span class="plain-syntax">, </span><a href="4-fi6.html#SP11" class="function-link"><span class="function-syntax">I6Target::pseudo_object</span></a><span class="plain-syntax">);</span>
|
||||
<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">NEW_ACTION_MTID</span><span class="plain-syntax">, </span><a href="4-fi6.html#SP11" class="function-link"><span class="function-syntax">I6Target::new_action</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">inform6_target</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cgt</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
|
@ -1405,6 +1405,9 @@ or implement assembly-language operations like <span class="extract"><span class
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">opcode</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">operand_count</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_tree_node</span><span class="plain-syntax"> **</span><span class="identifier-syntax">operands</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">label</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">label_sense</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">void_context</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">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">opcode</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@provides_gprop"</span><span class="plain-syntax">)) </span><span class="named-paragraph-container code-font"><a href="4-fi6.html#SP9_1" class="named-paragraph-link"><span class="named-paragraph">Invoke special provides_gprop</span><span class="named-paragraph-number">9.1</span></a></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">opcode</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@read_gprop"</span><span class="plain-syntax">)) </span><span class="named-paragraph-container code-font"><a href="4-fi6.html#SP9_2" class="named-paragraph-link"><span class="named-paragraph">Invoke special read_gprop</span><span class="named-paragraph-number">9.2</span></a></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">opcode</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@write_gprop"</span><span class="plain-syntax">)) </span><span class="named-paragraph-container code-font"><a href="4-fi6.html#SP9_3" class="named-paragraph-link"><span class="named-paragraph">Invoke special write_gprop</span><span class="named-paragraph-number">9.3</span></a></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">"%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">opcode</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">opc</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="identifier-syntax">opc</span><span class="plain-syntax"> < </span><span class="identifier-syntax">operand_count</span><span class="plain-syntax">; </span><span class="identifier-syntax">opc</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">" "</span><span class="plain-syntax">);</span>
|
||||
|
@ -1417,7 +1420,133 @@ or implement assembly-language operations like <span class="extract"><span class
|
|||
<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">void_context</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">";\n"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP9_1" class="paragraph-anchor"></a><b>§9.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Invoke special provides_gprop</span><span class="named-paragraph-number">9.1</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</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">obj</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">p</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">K</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-tvg.html#SP2" class="function-link"><span class="function-syntax">Vanilla::node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">operands</span><span class="plain-syntax">[0]);</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-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">obj</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-tvg.html#SP2" class="function-link"><span class="function-syntax">Vanilla::node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">operands</span><span class="plain-syntax">[1]);</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-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">p</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-tvg.html#SP2" class="function-link"><span class="function-syntax">Vanilla::node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">operands</span><span class="plain-syntax">[2]);</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-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><a href="2-tvg.html#SP2" class="function-link"><span class="function-syntax">Vanilla::node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">operands</span><span class="plain-syntax">[3]);</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><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"if (%S == OBJECT_TY) {\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</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">" if ((%S) && (metaclass(%S) == Object)) {\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">obj</span><span class="plain-syntax">, </span><span class="identifier-syntax">obj</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">" if ((%S-->0 == 2) || (%S provides %S-->1)) {\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="identifier-syntax">obj</span><span class="plain-syntax">, </span><span class="identifier-syntax">p</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">" %S = 1;\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="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" } else {\n"</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">" %S = 0;\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="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" }\n"</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">" } else {\n"</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">" %S = 0;\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="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" }\n"</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">"} else {\n"</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">" if ((%S >= 1) && (%S <= value_ranges-->%S)) {\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">obj</span><span class="plain-syntax">, </span><span class="identifier-syntax">obj</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</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">" holder = value_property_holders-->%S;\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</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">" if ((holder) && (holder provides %S-->1)) {\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">p</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">" %S = 1;\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="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" } else {\n"</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">" %S = 0;\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="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" }\n"</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">" } else {\n"</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">" %S = 0;\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="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" }\n"</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">"}\n"</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">K</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">obj</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">p</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="reserved-syntax">return</span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="4-fi6.html#SP9">§9</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP9_2" class="paragraph-anchor"></a><b>§9.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Invoke special read_gprop</span><span class="named-paragraph-number">9.2</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</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">obj</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">p</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">K</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-tvg.html#SP2" class="function-link"><span class="function-syntax">Vanilla::node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">operands</span><span class="plain-syntax">[0]);</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-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">obj</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-tvg.html#SP2" class="function-link"><span class="function-syntax">Vanilla::node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">operands</span><span class="plain-syntax">[1]);</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-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">p</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-tvg.html#SP2" class="function-link"><span class="function-syntax">Vanilla::node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">operands</span><span class="plain-syntax">[2]);</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><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"if (%S == OBJECT_TY) {\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</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">" if (%S-->0 == 2) {\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">p</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">" if (%S has %S-->1) rtrue; rfalse;\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">obj</span><span class="plain-syntax">, </span><span class="identifier-syntax">p</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">" }\n"</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">" if (%S == door_to) return (%S-->1).%S();\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="identifier-syntax">obj</span><span class="plain-syntax">, </span><span class="identifier-syntax">p</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">" return %S.(%S-->1);\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">obj</span><span class="plain-syntax">, </span><span class="identifier-syntax">p</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">"} else {\n"</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">" holder = value_property_holders-->%S;\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</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">" return (holder.(%S-->1))-->(%S+COL_HSIZE);\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="identifier-syntax">obj</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">"}\n"</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">K</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">obj</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">p</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="4-fi6.html#SP9">§9</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP9_3" class="paragraph-anchor"></a><b>§9.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Invoke special write_gprop</span><span class="named-paragraph-number">9.3</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</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">obj</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">p</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">K</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-tvg.html#SP2" class="function-link"><span class="function-syntax">Vanilla::node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">operands</span><span class="plain-syntax">[0]);</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-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">obj</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-tvg.html#SP2" class="function-link"><span class="function-syntax">Vanilla::node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">operands</span><span class="plain-syntax">[1]);</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-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">p</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-tvg.html#SP2" class="function-link"><span class="function-syntax">Vanilla::node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">operands</span><span class="plain-syntax">[2]);</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-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><a href="2-tvg.html#SP2" class="function-link"><span class="function-syntax">Vanilla::node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">operands</span><span class="plain-syntax">[3]);</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><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"if (%S == OBJECT_TY) {\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</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">" if (%S-->0 == 2) {\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">p</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">" if (%S) give %S %S-->1; else give %S ~(%S-->1);\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">val</span><span class="plain-syntax">, </span><span class="identifier-syntax">obj</span><span class="plain-syntax">, </span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="identifier-syntax">obj</span><span class="plain-syntax">, </span><span class="identifier-syntax">p</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">" } else {\n"</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">" %S.(%S-->1) = %S;\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">obj</span><span class="plain-syntax">, </span><span class="identifier-syntax">p</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</span><span class="plain-syntax">(</span><span class="string-syntax">" }\n"</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">"} else {\n"</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">" ((value_property_holders-->%S).(%S-->1))-->(%S+COL_HSIZE) = %S;\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">, </span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="identifier-syntax">obj</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</span><span class="plain-syntax">(</span><span class="string-syntax">"}\n"</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">K</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">obj</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">p</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="reserved-syntax">return</span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="4-fi6.html#SP9">§9</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>§10. </b></p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">I6Target::begin_array</span><button class="popup" onclick="togglePopup('usagePopup30')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup30">Usage of <span class="code-font"><span class="function-syntax">I6Target::begin_array</span></span>:<br/><a href="4-fi6.html#SP2">§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">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">early_matter_I7CGS</span><span class="plain-syntax">;</span>
|
||||
|
@ -1466,7 +1595,7 @@ or implement assembly-language operations like <span class="extract"><span class
|
|||
<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">aliased</span><span class="plain-syntax"> == </span><span class="identifier-syntax">verb_directive_creature_symbol</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"creature"</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">aliased</span><span class="plain-syntax"> == </span><span class="identifier-syntax">verb_directive_topic_symbol</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"topic"</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">aliased</span><span class="plain-syntax"> == </span><span class="identifier-syntax">verb_directive_multiexcept_symbol</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"multiexcept"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><a href="4-fi6.html#SP9" class="function-link"><span class="function-syntax">I6Target::compile_literal_symbol</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">aliased</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><a href="4-fi6.html#SP10" class="function-link"><span class="function-syntax">I6Target::compile_literal_symbol</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">aliased</span><span class="plain-syntax">);</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><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">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">val1</span><span class="plain-syntax">, </span><span class="identifier-syntax">val2</span><span class="plain-syntax">);</span>
|
||||
|
@ -1496,7 +1625,7 @@ or implement assembly-language operations like <span class="extract"><span class
|
|||
<span class="plain-syntax"> </span><a href="2-cg2.html#SP8" class="function-link"><span class="function-syntax">Generators::mangle</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="identifier-syntax">S</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>§10. </b>Alternatively, we can just specify how many entries there will be: they will
|
||||
<p class="commentary firstcommentary"><a id="SP11" class="paragraph-anchor"></a><b>§11. </b>Alternatively, we can just specify how many entries there will be: they will
|
||||
then be initialised to 0.
|
||||
</p>
|
||||
|
||||
|
|
|
@ -126,7 +126,7 @@ package already supplied:
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">prn</span><span class="plain-syntax">-></span><span class="identifier-syntax">compilation_data</span><span class="plain-syntax">.</span><span class="identifier-syntax">prop_package</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="function-syntax">RTProperties::iname</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">RTProperties::iname</span></span>:<br/><a href="5-prp.html#SP5">§5</a>, <a href="5-prp.html#SP7">§7</a>, <a href="5-prp.html#SP7_4">§7.4</a>, <a href="5-prp.html#SP9">§9</a>, <a href="5-prp.html#SP10_1">§10.1</a>, <a href="5-prp.html#SP10_2">§10.2</a><br/>Emit - <a href="2-emt.html#SP17">§17</a>, <a href="2-emt.html#SP18">§18</a><br/>Emit Code - <a href="2-ec.html#SP8">§8</a><br/>Instance Counting - <a href="2-ic.html#SP4">§4</a><br/>Showme Command - <a href="2-sc.html#SP6_1">§6.1</a>, <a href="2-sc.html#SP6_1_1">§6.1.1</a>, <a href="2-sc.html#SP6_1_1_1">§6.1.1.1</a>, <a href="2-sc.html#SP6_2">§6.2</a><br/>Scene Instances - <a href="5-si.html#SP6_1">§6.1</a><br/>Relations - <a href="5-rlt.html#SP7_3_3">§7.3.3</a><br/>Command Grammar Tokens - <a href="7-cgt.html#SP1_2_4">§1.2.4</a>, <a href="7-cgt.html#SP1_2_6">§1.2.6</a>, <a href="7-cgt.html#SP1_2_7">§1.2.7</a>, <a href="7-cgt.html#SP1_2_10_2_1">§1.2.10.2.1</a>, <a href="7-cgt.html#SP1_2_10_2_2">§1.2.10.2.2</a><br/>Parse Name Properties - <a href="7-pnp.html#SP4_3_1">§4.3.1</a>, <a href="7-pnp.html#SP6_2">§6.2</a>, <a href="7-pnp.html#SP8">§8</a>, <a href="7-pnp.html#SP10">§10</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">property</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prn</span><span class="plain-syntax">) {</span>
|
||||
<span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="function-syntax">RTProperties::iname</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">RTProperties::iname</span></span>:<br/><a href="5-prp.html#SP5">§5</a>, <a href="5-prp.html#SP7">§7</a>, <a href="5-prp.html#SP7_4">§7.4</a>, <a href="5-prp.html#SP9">§9</a>, <a href="5-prp.html#SP10">§10</a><br/>Emit - <a href="2-emt.html#SP17">§17</a>, <a href="2-emt.html#SP18">§18</a><br/>Emit Code - <a href="2-ec.html#SP8">§8</a><br/>Instance Counting - <a href="2-ic.html#SP4">§4</a><br/>Showme Command - <a href="2-sc.html#SP6_1">§6.1</a>, <a href="2-sc.html#SP6_1_1">§6.1.1</a>, <a href="2-sc.html#SP6_1_1_1">§6.1.1.1</a>, <a href="2-sc.html#SP6_2">§6.2</a><br/>Scene Instances - <a href="5-si.html#SP6_1">§6.1</a><br/>Relations - <a href="5-rlt.html#SP7_3_3">§7.3.3</a><br/>Command Grammar Tokens - <a href="7-cgt.html#SP1_2_4">§1.2.4</a>, <a href="7-cgt.html#SP1_2_6">§1.2.6</a>, <a href="7-cgt.html#SP1_2_7">§1.2.7</a>, <a href="7-cgt.html#SP1_2_10_2_1">§1.2.10.2.1</a>, <a href="7-cgt.html#SP1_2_10_2_2">§1.2.10.2.2</a><br/>Parse Name Properties - <a href="7-pnp.html#SP4_3_1">§4.3.1</a>, <a href="7-pnp.html#SP6_2">§6.2</a>, <a href="7-pnp.html#SP8">§8</a>, <a href="7-pnp.html#SP10">§10</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">property</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prn</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">prn</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">"tried to find iname for null property"</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">Properties::is_either_or</span><span class="plain-syntax">(</span><span class="identifier-syntax">prn</span><span class="plain-syntax">)) && (</span><span class="identifier-syntax">prn</span><span class="plain-syntax">-></span><span class="identifier-syntax">compilation_data</span><span class="plain-syntax">.</span><span class="element-syntax">store_in_negation</span><span class="plain-syntax">))</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="5-prp.html#SP2" class="function-link"><span class="function-syntax">RTProperties::iname</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">EitherOrProperties::get_negation</span><span class="plain-syntax">(</span><span class="identifier-syntax">prn</span><span class="plain-syntax">));</span>
|
||||
|
@ -188,7 +188,7 @@ kit, we'll have to use that one.
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">RTProperties::stored_in_negation</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">RTProperties::stored_in_negation</span></span>:<br/><a href="5-prp.html#SP10_1">§10.1</a>, <a href="5-prp.html#SP10_2">§10.2</a><br/>Emit Code - <a href="2-ec.html#SP8">§8</a><br/>Showme Command - <a href="2-sc.html#SP6_2">§6.2</a><br/>Property Values - <a href="6-pv.html#SP2_2_1">§2.2.1</a><br/>Parse Name Properties - <a href="7-pnp.html#SP7">§7</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">property</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prn</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">RTProperties::stored_in_negation</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">RTProperties::stored_in_negation</span></span>:<br/><a href="5-prp.html#SP10">§10</a><br/>Emit Code - <a href="2-ec.html#SP8">§8</a><br/>Showme Command - <a href="2-sc.html#SP6_2">§6.2</a><br/>Property Values - <a href="6-pv.html#SP2_2_1">§2.2.1</a><br/>Parse Name Properties - <a href="7-pnp.html#SP7">§7</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">property</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prn</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">prn</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">prn</span><span class="plain-syntax">-></span><span class="identifier-syntax">either_or_data</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">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"non-EO property"</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">prn</span><span class="plain-syntax">-></span><span class="identifier-syntax">compilation_data</span><span class="plain-syntax">.</span><span class="identifier-syntax">store_in_negation</span><span class="plain-syntax">;</span>
|
||||
|
@ -367,89 +367,46 @@ and its analogue for writing, <span class="extract"><span class="extract-syntax"
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>§10. </b>Either-or properties are trickier, though only because they use a different
|
||||
pair of functions at runtime for EO properties of objects than for EO properties
|
||||
of anything else:
|
||||
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>§10. </b>Either-or properties work analogously, though note that on reading, <span class="extract"><span class="extract-syntax">GProperty</span></span>
|
||||
is called slightly differently so that objects are allowed access to read (though
|
||||
not write) either/or properties which they do not possess. The result is always
|
||||
<span class="extract"><span class="extract-syntax">false</span></span>, but run-time errors do not occur. (This all goes back to the way
|
||||
attributes were handled on the Z-machine VM, but is an assumption made by some
|
||||
of the kit code inherited from early days of Inform, and does no actual harm.)
|
||||
</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">RTProperties::write_either_or_schemas</span><span class="plain-syntax">(</span><span class="identifier-syntax">adjective_meaning</span><span class="plain-syntax"> *</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">property</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prn</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">T</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax"> = </span><span class="identifier-syntax">AdjectiveMeaningDomains::get_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</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">Kinds::Behaviour::is_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">))</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-prp.html#SP10_1" class="named-paragraph-link"><span class="named-paragraph">Set the schemata for an either/or property adjective with objects as domain</span><span class="named-paragraph-number">10.1</span></a></span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-prp.html#SP10_2" class="named-paragraph-link"><span class="named-paragraph">Set the schemata for an either/or property adjective with some other domain</span><span class="named-paragraph-number">10.2</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="5-prp.html#SP4" class="function-link"><span class="function-syntax">RTProperties::stored_in_negation</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">prn</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">property</span><span class="plain-syntax"> *</span><span class="identifier-syntax">neg</span><span class="plain-syntax"> = </span><span class="identifier-syntax">EitherOrProperties::get_negation</span><span class="plain-syntax">(</span><span class="identifier-syntax">prn</span><span class="plain-syntax">);</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">i6_schema</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">AdjectiveMeanings::make_schema</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">TEST_ATOM_TASK</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Calculus::Schemas::modify</span><span class="plain-syntax">(</span><span class="identifier-syntax">sch</span><span class="plain-syntax">, </span><span class="string-syntax">"GProperty(%k, *1, %n, 1) == false"</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><a href="5-prp.html#SP2" class="function-link"><span class="function-syntax">RTProperties::iname</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">neg</span><span class="plain-syntax">));</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">sch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">AdjectiveMeanings::make_schema</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">NOW_ATOM_TRUE_TASK</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Calculus::Schemas::modify</span><span class="plain-syntax">(</span><span class="identifier-syntax">sch</span><span class="plain-syntax">, </span><span class="string-syntax">"WriteGProperty(%k, *1, %n, 0)"</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><a href="5-prp.html#SP2" class="function-link"><span class="function-syntax">RTProperties::iname</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">neg</span><span class="plain-syntax">));</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">sch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">AdjectiveMeanings::make_schema</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">NOW_ATOM_FALSE_TASK</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Calculus::Schemas::modify</span><span class="plain-syntax">(</span><span class="identifier-syntax">sch</span><span class="plain-syntax">, </span><span class="string-syntax">"WriteGProperty(%k, *1, %n, 1)"</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><a href="5-prp.html#SP2" class="function-link"><span class="function-syntax">RTProperties::iname</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">neg</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">i6_schema</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">AdjectiveMeanings::make_schema</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">TEST_ATOM_TASK</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Calculus::Schemas::modify</span><span class="plain-syntax">(</span><span class="identifier-syntax">sch</span><span class="plain-syntax">, </span><span class="string-syntax">"GProperty(%k, *1, %n, 1)"</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><a href="5-prp.html#SP2" class="function-link"><span class="function-syntax">RTProperties::iname</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">prn</span><span class="plain-syntax">));</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">sch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">AdjectiveMeanings::make_schema</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">NOW_ATOM_TRUE_TASK</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Calculus::Schemas::modify</span><span class="plain-syntax">(</span><span class="identifier-syntax">sch</span><span class="plain-syntax">, </span><span class="string-syntax">"WriteGProperty(%k, *1, %n, 1)"</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><a href="5-prp.html#SP2" class="function-link"><span class="function-syntax">RTProperties::iname</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">prn</span><span class="plain-syntax">));</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">sch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">AdjectiveMeanings::make_schema</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">NOW_ATOM_FALSE_TASK</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Calculus::Schemas::modify</span><span class="plain-syntax">(</span><span class="identifier-syntax">sch</span><span class="plain-syntax">, </span><span class="string-syntax">"WriteGProperty(%k, *1, %n, 0)"</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><a href="5-prp.html#SP2" class="function-link"><span class="function-syntax">RTProperties::iname</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">prn</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP10_1" class="paragraph-anchor"></a><b>§10.1. </b>The "objects" domain is not really very different, but it's the one used
|
||||
overwhelmingly most often, so we will call the relevant routines directly rather
|
||||
than accessing them via the unifying routines <span class="extract"><span class="extract-syntax">GProperty</span></span> and <span class="extract"><span class="extract-syntax">WriteGProperty</span></span> —
|
||||
which would work just as well, but more slowly.
|
||||
</p>
|
||||
|
||||
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Set the schemata for an either/or property adjective with objects as domain</span><span class="named-paragraph-number">10.1</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="5-prp.html#SP4" class="function-link"><span class="function-syntax">RTProperties::stored_in_negation</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">prn</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">property</span><span class="plain-syntax"> *</span><span class="identifier-syntax">neg</span><span class="plain-syntax"> = </span><span class="identifier-syntax">EitherOrProperties::get_negation</span><span class="plain-syntax">(</span><span class="identifier-syntax">prn</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">identifier</span><span class="plain-syntax"> = </span><a href="5-prp.html#SP2" class="function-link"><span class="function-syntax">RTProperties::iname</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">neg</span><span class="plain-syntax">);</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">i6_schema</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">AdjectiveMeanings::make_schema</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">TEST_ATOM_TASK</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Calculus::Schemas::modify</span><span class="plain-syntax">(</span><span class="identifier-syntax">sch</span><span class="plain-syntax">, </span><span class="string-syntax">"GProperty(OBJECT_TY, *1, %n, true) == false"</span><span class="plain-syntax">, </span><span class="identifier-syntax">identifier</span><span class="plain-syntax">);</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">sch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">AdjectiveMeanings::make_schema</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">NOW_ATOM_TRUE_TASK</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Calculus::Schemas::modify</span><span class="plain-syntax">(</span><span class="identifier-syntax">sch</span><span class="plain-syntax">, </span><span class="string-syntax">"WriteGProperty(OBJECT_TY, *1, %n, 0)"</span><span class="plain-syntax">, </span><span class="identifier-syntax">identifier</span><span class="plain-syntax">);</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">sch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">AdjectiveMeanings::make_schema</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">NOW_ATOM_FALSE_TASK</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Calculus::Schemas::modify</span><span class="plain-syntax">(</span><span class="identifier-syntax">sch</span><span class="plain-syntax">, </span><span class="string-syntax">"WriteGProperty(OBJECT_TY, *1, %n, 1)"</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="plain-syntax"> </span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">identifier</span><span class="plain-syntax"> = </span><a href="5-prp.html#SP2" class="function-link"><span class="function-syntax">RTProperties::iname</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">prn</span><span class="plain-syntax">);</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">i6_schema</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">AdjectiveMeanings::make_schema</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">TEST_ATOM_TASK</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Calculus::Schemas::modify</span><span class="plain-syntax">(</span><span class="identifier-syntax">sch</span><span class="plain-syntax">, </span><span class="string-syntax">"GProperty(OBJECT_TY, *1, %n, true)"</span><span class="plain-syntax">, </span><span class="identifier-syntax">identifier</span><span class="plain-syntax">);</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">sch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">AdjectiveMeanings::make_schema</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">NOW_ATOM_TRUE_TASK</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Calculus::Schemas::modify</span><span class="plain-syntax">(</span><span class="identifier-syntax">sch</span><span class="plain-syntax">, </span><span class="string-syntax">"WriteGProperty(OBJECT_TY, *1, %n, 1)"</span><span class="plain-syntax">, </span><span class="identifier-syntax">identifier</span><span class="plain-syntax">);</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">sch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">AdjectiveMeanings::make_schema</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">NOW_ATOM_FALSE_TASK</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Calculus::Schemas::modify</span><span class="plain-syntax">(</span><span class="identifier-syntax">sch</span><span class="plain-syntax">, </span><span class="string-syntax">"WriteGProperty(OBJECT_TY, *1, %n, 0)"</span><span class="plain-syntax">, </span><span class="identifier-syntax">identifier</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-prp.html#SP10">§10</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP10_2" class="paragraph-anchor"></a><b>§10.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Set the schemata for an either/or property adjective with some other domain</span><span class="named-paragraph-number">10.2</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="5-prp.html#SP4" class="function-link"><span class="function-syntax">RTProperties::stored_in_negation</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">prn</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">property</span><span class="plain-syntax"> *</span><span class="identifier-syntax">neg</span><span class="plain-syntax"> = </span><span class="identifier-syntax">EitherOrProperties::get_negation</span><span class="plain-syntax">(</span><span class="identifier-syntax">prn</span><span class="plain-syntax">);</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">i6_schema</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">AdjectiveMeanings::make_schema</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">TEST_ATOM_TASK</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Calculus::Schemas::modify</span><span class="plain-syntax">(</span><span class="identifier-syntax">sch</span><span class="plain-syntax">, </span><span class="string-syntax">"GProperty(%k, *1, %n) == false"</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><a href="5-prp.html#SP2" class="function-link"><span class="function-syntax">RTProperties::iname</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">neg</span><span class="plain-syntax">));</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">sch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">AdjectiveMeanings::make_schema</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">NOW_ATOM_TRUE_TASK</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Calculus::Schemas::modify</span><span class="plain-syntax">(</span><span class="identifier-syntax">sch</span><span class="plain-syntax">, </span><span class="string-syntax">"WriteGProperty(%k, *1, %n)"</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><a href="5-prp.html#SP2" class="function-link"><span class="function-syntax">RTProperties::iname</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">neg</span><span class="plain-syntax">));</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">sch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">AdjectiveMeanings::make_schema</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">NOW_ATOM_FALSE_TASK</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Calculus::Schemas::modify</span><span class="plain-syntax">(</span><span class="identifier-syntax">sch</span><span class="plain-syntax">, </span><span class="string-syntax">"WriteGProperty(%k, *1, %n, true)"</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><a href="5-prp.html#SP2" class="function-link"><span class="function-syntax">RTProperties::iname</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">neg</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">i6_schema</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">AdjectiveMeanings::make_schema</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">TEST_ATOM_TASK</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Calculus::Schemas::modify</span><span class="plain-syntax">(</span><span class="identifier-syntax">sch</span><span class="plain-syntax">, </span><span class="string-syntax">"GProperty(%k, *1, %n)"</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><a href="5-prp.html#SP2" class="function-link"><span class="function-syntax">RTProperties::iname</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">prn</span><span class="plain-syntax">));</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">sch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">AdjectiveMeanings::make_schema</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">NOW_ATOM_TRUE_TASK</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Calculus::Schemas::modify</span><span class="plain-syntax">(</span><span class="identifier-syntax">sch</span><span class="plain-syntax">, </span><span class="string-syntax">"WriteGProperty(%k, *1, %n, true)"</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><a href="5-prp.html#SP2" class="function-link"><span class="function-syntax">RTProperties::iname</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">prn</span><span class="plain-syntax">));</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">sch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">AdjectiveMeanings::make_schema</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">NOW_ATOM_FALSE_TASK</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Calculus::Schemas::modify</span><span class="plain-syntax">(</span><span class="identifier-syntax">sch</span><span class="plain-syntax">, </span><span class="string-syntax">"WriteGProperty(%k, *1, %n)"</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><a href="5-prp.html#SP2" class="function-link"><span class="function-syntax">RTProperties::iname</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">prn</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-prp.html#SP10">§10</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP11" class="paragraph-anchor"></a><b>§11. </b>And finally, provision of a property can be tested at runtime with the
|
||||
following schemas:
|
||||
</p>
|
||||
|
@ -468,7 +425,7 @@ following schemas:
|
|||
<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">Kinds::Behaviour::is_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">PK</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Cinders::kind_of_term</span><span class="plain-syntax">(</span><span class="identifier-syntax">asch</span><span class="plain-syntax">-></span><span class="identifier-syntax">pt1</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">Kinds::get_construct</span><span class="plain-syntax">(</span><span class="identifier-syntax">PK</span><span class="plain-syntax">) == </span><span class="identifier-syntax">CON_property</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Calculus::Schemas::modify</span><span class="plain-syntax">(</span><span class="identifier-syntax">asch</span><span class="plain-syntax">-></span><span class="identifier-syntax">schema</span><span class="plain-syntax">, </span><span class="string-syntax">"WhetherProvides(%k, *1, *2)"</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Calculus::Schemas::modify</span><span class="plain-syntax">(</span><span class="identifier-syntax">asch</span><span class="plain-syntax">-></span><span class="identifier-syntax">schema</span><span class="plain-syntax">, </span><span class="string-syntax">"ProvidesProperty(%k, *1, *2)"</span><span class="plain-syntax">, </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">TRUE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
|
@ -484,7 +441,7 @@ of object the left operand is, we can only test property provision at run-time:
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Calculus::Schemas::modify</span><span class="plain-syntax">(</span><span class="identifier-syntax">asch</span><span class="plain-syntax">-></span><span class="identifier-syntax">schema</span><span class="plain-syntax">, </span><span class="string-syntax">"WhetherProvides(%k, *1, *2)"</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Calculus::Schemas::modify</span><span class="plain-syntax">(</span><span class="identifier-syntax">asch</span><span class="plain-syntax">-></span><span class="identifier-syntax">schema</span><span class="plain-syntax">, </span><span class="string-syntax">"ProvidesProperty(%k, *1, *2)"</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">);</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-prp.html#SP11">§11</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP11_2" class="paragraph-anchor"></a><b>§11.2. </b>For all other kinds, type-checking is strong enough that we can prove the
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
Total memory consumption was 394323K = 385 MB
|
||||
Total memory consumption was 394317K = 385 MB
|
||||
|
||||
60.6% was used for 2004452 objects, in 372321 frames in 299 x 800K = 239200K = 233 MB:
|
||||
60.6% was used for 2004468 objects, in 372337 frames in 299 x 800K = 239200K = 233 MB:
|
||||
|
||||
10.3% inter_tree_node_array 58 x 8192 = 475136 objects, 41813824 bytes
|
||||
7.2% text_stream_array 5187 x 100 = 518700 objects, 29213184 bytes
|
||||
|
@ -13,7 +13,7 @@ Total memory consumption was 394323K = 385 MB
|
|||
0.8% inter_name_array 69 x 1000 = 69000 objects, 3314208 bytes
|
||||
0.6% kind_array 68 x 1000 = 68000 objects, 2722176 bytes
|
||||
0.5% inter_name_generator_array 53 x 1000 = 53000 objects, 2121696 bytes
|
||||
0.5% inter_schema_token 14185 objects, 2042640 bytes
|
||||
0.5% inter_schema_token 14197 objects, 2044368 bytes
|
||||
0.4% inter_package 26565 objects, 1912680 bytes
|
||||
0.4% package_request 21137 objects, 1860056 bytes
|
||||
0.4% vocabulary_entry_array 161 x 100 = 16100 objects, 1808352 bytes
|
||||
|
@ -30,7 +30,7 @@ Total memory consumption was 394323K = 385 MB
|
|||
0.2% ptoken 8382 objects, 871728 bytes
|
||||
0.2% grammatical_usage 3611 objects, 866640 bytes
|
||||
0.2% individual_form 2561 objects, 860496 bytes
|
||||
0.2% inter_schema_node 8905 objects, 854880 bytes
|
||||
0.2% inter_schema_node 8909 objects, 855264 bytes
|
||||
0.1% unary_predicate_array 16 x 1000 = 16000 objects, 640512 bytes
|
||||
0.1% local_variable_array 47 x 100 = 4700 objects, 452704 bytes
|
||||
---- scan_directory 94 objects, 388032 bytes
|
||||
|
@ -238,7 +238,7 @@ Total memory consumption was 394323K = 385 MB
|
|||
|
||||
39.3% was used for memory not allocated for objects:
|
||||
|
||||
20.5% text stream storage 82882584 bytes in 536688 claims
|
||||
20.5% text stream storage 82876796 bytes in 536689 claims
|
||||
4.5% dictionary storage 18271744 bytes in 33265 claims
|
||||
---- sorting 736 bytes in 3 claims
|
||||
1.7% source text 7200000 bytes in 3 claims
|
||||
|
@ -246,8 +246,8 @@ Total memory consumption was 394323K = 385 MB
|
|||
---- documentation fragments 262144 bytes in 1 claim
|
||||
---- linguistic stock array 81920 bytes in 2 claims
|
||||
---- small word set array 105600 bytes in 22 claims
|
||||
1.0% inter symbols storage 4175072 bytes in 27677 claims
|
||||
4.1% inter bytecode storage 16802732 bytes in 14 claims
|
||||
1.0% inter symbols storage 4174576 bytes in 27676 claims
|
||||
4.1% inter bytecode storage 16802744 bytes in 14 claims
|
||||
4.0% inter links storage 16174208 bytes in 266 claims
|
||||
---- inter tree location list storage 191232 bytes in 32 claims
|
||||
0.4% instance-of-kind counting 1695204 bytes in 1 claim
|
||||
|
@ -256,5 +256,5 @@ Total memory consumption was 394323K = 385 MB
|
|||
---- code generation workspace for objects 4128 bytes in 4 claims
|
||||
---- emitter array storage 161792 bytes in 2062 claims
|
||||
|
||||
18.4% was overhead - 74415928 bytes = 72671K = 70 MB
|
||||
18.4% was overhead - 74413816 bytes = 72669K = 70 MB
|
||||
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
100.0% in inform7 run
|
||||
55.0% in compilation to Inter
|
||||
39.5% in //Sequence::undertake_queued_tasks//
|
||||
55.1% in compilation to Inter
|
||||
39.6% in //Sequence::undertake_queued_tasks//
|
||||
3.5% in //MajorNodes::pre_pass//
|
||||
2.6% in //MajorNodes::pass_1//
|
||||
2.1% in //RTPhrasebook::compile_entries//
|
||||
1.4% in //ImperativeDefinitions::assess_all//
|
||||
1.1% in //RTKindConstructors::compile//
|
||||
2.5% in //MajorNodes::pass_1//
|
||||
2.0% in //RTPhrasebook::compile_entries//
|
||||
1.3% in //ImperativeDefinitions::assess_all//
|
||||
1.2% in //RTKindConstructors::compile//
|
||||
0.4% in //ImperativeDefinitions::compile_first_block//
|
||||
0.4% in //MajorNodes::pass_2//
|
||||
0.4% in //Sequence::undertake_queued_tasks//
|
||||
|
@ -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.1% in running Inter pipeline
|
||||
12.4% in step preparation
|
||||
1.8% not specifically accounted for
|
||||
42.9% in running Inter pipeline
|
||||
12.5% in step preparation
|
||||
9.6% in inter step 7/16: consolidate-text
|
||||
7.8% in inter step 2/16: link
|
||||
6.8% in inter step 16/16: generate inform6 -> auto.inf
|
||||
8.0% in inter step 2/16: link
|
||||
6.5% 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.7% not specifically accounted for
|
||||
1.7% in supervisor
|
||||
0.2% not specifically accounted for
|
||||
2.4% not specifically accounted for
|
||||
1.6% in supervisor
|
||||
0.3% not specifically accounted for
|
||||
|
|
|
@ -260,41 +260,40 @@ have the property in question at an I6 level -- having permission to have
|
|||
it doesn't mean it actually does have.
|
||||
|
||||
=
|
||||
[ WhetherProvides K obj q issue_rtp a l holder;
|
||||
if (K ~= OBJECT_TY) {
|
||||
if ((obj < 1) || (obj > value_ranges-->K)) {
|
||||
if (issue_rtp) RunTimeProblem(RTP_BADVALUEPROPERTY);
|
||||
rfalse;
|
||||
} else {
|
||||
holder = value_property_holders-->K;
|
||||
if ((holder) && (holder provides q)) rtrue;
|
||||
[ ProvidesProperty K obj q issue_rtp a l holder;
|
||||
if (K == OBJECT_TY) {
|
||||
if (ScanPropertyMetadata(obj, q, 4)) jump PermissionFound;
|
||||
if (obj provides KD_Count) {
|
||||
l = obj.KD_Count;
|
||||
while (l > 0) {
|
||||
a = l*2;
|
||||
if (ScanPropertyMetadata(KindHierarchy-->a, q, 4)) jump PermissionFound;
|
||||
l = KindHierarchy-->(a+1);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (obj == 0) {
|
||||
if (issue_rtp) RunTimeProblem(RTP_PROPOFNOTHING, 0, q);
|
||||
if (ScanPropertyMetadata(K0_kind, q, 4)) jump PermissionFound;
|
||||
if (issue_rtp) RunTimeProblem(RTP_UNPROVIDED, obj, q);
|
||||
rfalse;
|
||||
}
|
||||
if (metaclass(obj) ~= Object) rfalse;
|
||||
if (q<0) q = ~q;
|
||||
|
||||
if (ScanPropertyMetadata(obj, q, 4)) jump PermissionFound;
|
||||
if (obj provides KD_Count) {
|
||||
l = obj.KD_Count;
|
||||
while (l > 0) {
|
||||
a = l*2;
|
||||
if (ScanPropertyMetadata(KindHierarchy-->a, q, 4)) jump PermissionFound;
|
||||
l = KindHierarchy-->(a+1);
|
||||
}
|
||||
}
|
||||
if (ScanPropertyMetadata(K0_kind, q, 4)) jump PermissionFound;
|
||||
if (issue_rtp) RunTimeProblem(RTP_UNPROVIDED, obj, q);
|
||||
rfalse;
|
||||
|
||||
.PermissionFound;
|
||||
if (q-->2) rtrue;
|
||||
if (obj provides q) rtrue;
|
||||
if (issue_rtp) RunTimeProblem(RTP_UNSET, obj, q);
|
||||
rfalse;
|
||||
|
||||
@provides_gprop K obj q a;
|
||||
if (a) rtrue;
|
||||
! if (K ~= OBJECT_TY) {
|
||||
! if ((obj >= 1) && (obj <= value_ranges-->K)) {
|
||||
! holder = value_property_holders-->K;
|
||||
! if ((holder) && (holder provides q)) rtrue;
|
||||
! }
|
||||
! } else {
|
||||
! if ((obj) && (metaclass(obj) == Object)) {
|
||||
! if (q-->0 == 2) rtrue;
|
||||
! if (obj provides q) rtrue;
|
||||
! }
|
||||
! }
|
||||
|
||||
if (issue_rtp) RunTimeProblem(RTP_UNSET, obj, q);
|
||||
rfalse;
|
||||
];
|
||||
|
||||
[ PrintPropertyName p textual;
|
||||
|
@ -331,18 +330,20 @@ this enables it to be an I6 routine returning the other side of the door from
|
|||
the one which the player is on.
|
||||
|
||||
=
|
||||
[ GProperty K V pr err holder;
|
||||
if (WhetherProvides(K, V, pr, 1-err)) {
|
||||
if (K == OBJECT_TY) {
|
||||
if (pr-->0 == 2) {
|
||||
if (V has pr) rtrue; rfalse;
|
||||
}
|
||||
if (pr == door_to) return V.pr();
|
||||
return V.pr;
|
||||
} else {
|
||||
holder = value_property_holders-->K;
|
||||
return (holder.pr)-->(V+COL_HSIZE);
|
||||
}
|
||||
[ GProperty K V pr err holder val;
|
||||
if (ProvidesProperty(K, V, pr, 1-err)) {
|
||||
@read_gprop K V pr val;
|
||||
return val;
|
||||
! if (K == OBJECT_TY) {
|
||||
! if (pr-->0 == 2) {
|
||||
! if (V has pr) rtrue; rfalse;
|
||||
! }
|
||||
! if (pr == door_to) return V.pr();
|
||||
! return V.pr;
|
||||
! } else {
|
||||
! holder = value_property_holders-->K;
|
||||
! return (holder.pr)-->(V+COL_HSIZE);
|
||||
! }
|
||||
}
|
||||
return 0;
|
||||
];
|
||||
|
@ -354,17 +355,18 @@ converted from an rvalue to an lvalue.
|
|||
|
||||
=
|
||||
[ WriteGProperty K V pr val holder;
|
||||
if (WhetherProvides(K, V, pr, true)) {
|
||||
if (K == OBJECT_TY) {
|
||||
if (pr-->0 == 2) {
|
||||
if (val) give V pr; else give V ~pr;
|
||||
} else {
|
||||
V.pr = val;
|
||||
}
|
||||
} else {
|
||||
holder = value_property_holders-->K;
|
||||
(holder.pr)-->(V+COL_HSIZE) = val;
|
||||
}
|
||||
if (ProvidesProperty(K, V, pr, true)) {
|
||||
@write_gprop K V pr val;
|
||||
! if (K == OBJECT_TY) {
|
||||
! if (pr-->0 == 2) {
|
||||
! if (val) give V pr; else give V ~pr;
|
||||
! } else {
|
||||
! V.pr = val;
|
||||
! }
|
||||
! } else {
|
||||
! holder = value_property_holders-->K;
|
||||
! (holder.pr)-->(V+COL_HSIZE) = val;
|
||||
! }
|
||||
}
|
||||
];
|
||||
|
||||
|
|
|
@ -6545,9 +6545,9 @@ package main _plain
|
|||
symbol public misc #dictionary_table
|
||||
symbol public misc #grammar_table
|
||||
symbol public misc __assembly_sp `sp`
|
||||
symbol public misc KindHierarchy
|
||||
symbol public misc value_ranges
|
||||
symbol public misc value_property_holders
|
||||
symbol public misc KindHierarchy
|
||||
constant String K_unchecked = 0 __veneer=1
|
||||
constant Routine K_unchecked = 0 __veneer=1
|
||||
constant self K_unchecked = 0 __veneer=1
|
||||
|
@ -6558,9 +6558,9 @@ package main _plain
|
|||
constant #dictionary_table K_unchecked = 0 __veneer=1
|
||||
constant #grammar_table K_unchecked = 0 __veneer=1
|
||||
constant __assembly_sp K_unchecked = 0 __veneer=1
|
||||
constant KindHierarchy K_unchecked = 0 __veneer=1
|
||||
constant value_ranges K_unchecked = 0 __veneer=1
|
||||
constant value_property_holders K_unchecked = 0 __veneer=1
|
||||
constant KindHierarchy 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
|
||||
|
@ -39392,11 +39392,9 @@ package main _plain
|
|||
symbol socket misc RunTimeError --> /main/connectors/RunTimeError
|
||||
symbol socket misc ArgumentTypeFailed --> /main/connectors/ArgumentTypeFailed
|
||||
symbol socket misc CheckKindReturned --> /main/connectors/CheckKindReturned
|
||||
symbol socket misc WhetherProvides --> /main/connectors/WhetherProvides
|
||||
symbol socket misc ProvidesProperty --> /main/connectors/ProvidesProperty
|
||||
symbol socket misc PrintPropertyName --> /main/connectors/PrintPropertyName
|
||||
symbol socket misc ScanPropertyMetadata --> /main/connectors/ScanPropertyMetadata
|
||||
symbol socket misc GetEitherOrProperty --> /main/connectors/GetEitherOrProperty
|
||||
symbol socket misc SetEitherOrProperty --> /main/connectors/SetEitherOrProperty
|
||||
symbol socket misc GProperty --> /main/connectors/GProperty
|
||||
symbol socket misc WriteGProperty --> /main/connectors/WriteGProperty
|
||||
symbol socket misc PROPERTY_TY_Say --> /main/connectors/PROPERTY_TY_Say
|
||||
|
@ -97061,10 +97059,10 @@ package main _plain
|
|||
inv !return
|
||||
val K_unchecked V
|
||||
constant CheckKindReturned K_unchecked_function = CheckKindReturned_B __assimilated=1
|
||||
package WhetherProvides_fn _function
|
||||
symbol public misc WhetherProvides
|
||||
package ProvidesProperty_fn _function
|
||||
symbol public misc ProvidesProperty
|
||||
symbol external misc K_unchecked_function --> /main/generic/kinds/K_unchecked_function
|
||||
package WhetherProvides_B _code
|
||||
package ProvidesProperty_B _code
|
||||
symbol private misc K
|
||||
symbol external misc K_unchecked --> /main/generic/kinds/K_unchecked
|
||||
symbol private misc obj
|
||||
|
@ -97074,19 +97072,17 @@ package main _plain
|
|||
symbol private misc l
|
||||
symbol private misc holder
|
||||
symbol external misc plug_00140 --> /main/generic/kinds/kind1/OBJECT_TY
|
||||
symbol external misc value_ranges --> /main/veneer/value_ranges
|
||||
symbol external misc RunTimeProblem --> /main/BasicInformKit/functions/RunTimeProblem_fn/RunTimeProblem
|
||||
symbol external misc RTP_BADVALUEPROPERTY --> /main/BasicInformKit/constants/RTP_BADVALUEPROPERTY_con/RTP_BADVALUEPROPERTY
|
||||
symbol external misc value_property_holders --> /main/veneer/value_property_holders
|
||||
symbol external misc RTP_PROPOFNOTHING --> /main/BasicInformKit/constants/RTP_PROPOFNOTHING_con/RTP_PROPOFNOTHING
|
||||
symbol external misc metaclass --> /main/veneer/metaclass
|
||||
symbol external misc Object --> /main/veneer/Object
|
||||
symbol external misc ScanPropertyMetadata --> /main/BasicInformKit/functions/ScanPropertyMetadata_fn/ScanPropertyMetadata
|
||||
symbol private label .PermissionFound
|
||||
symbol external misc KD_Count --> /main/BasicInformKit/properties/KD_Count_prop/KD_Count
|
||||
symbol external misc KindHierarchy --> /main/veneer/KindHierarchy
|
||||
symbol external misc plug_00165 --> /main/generic/kinds/kind1/K_object
|
||||
symbol external misc RunTimeProblem --> /main/BasicInformKit/functions/RunTimeProblem_fn/RunTimeProblem
|
||||
symbol external misc RTP_UNPROVIDED --> /main/BasicInformKit/constants/RTP_UNPROVIDED_con/RTP_UNPROVIDED
|
||||
symbol external misc value_ranges --> /main/veneer/value_ranges
|
||||
symbol external misc value_property_holders --> /main/veneer/value_property_holders
|
||||
symbol external misc metaclass --> /main/veneer/metaclass
|
||||
symbol external misc Object --> /main/veneer/Object
|
||||
symbol external misc RTP_UNSET --> /main/BasicInformKit/constants/RTP_UNSET_con/RTP_UNSET
|
||||
local K K_unchecked
|
||||
local obj K_unchecked
|
||||
|
@ -97097,26 +97093,91 @@ package main _plain
|
|||
local holder K_unchecked
|
||||
code
|
||||
inv !if
|
||||
inv !eq
|
||||
val K_unchecked K
|
||||
val K_unchecked OBJECT_TY
|
||||
code
|
||||
inv !if
|
||||
inv ScanPropertyMetadata
|
||||
val K_unchecked obj
|
||||
val K_unchecked q
|
||||
val K_unchecked 4
|
||||
code
|
||||
inv !jump
|
||||
lab .PermissionFound
|
||||
inv !if
|
||||
inv !provides
|
||||
val K_unchecked obj
|
||||
val K_unchecked KD_Count
|
||||
code
|
||||
inv !store
|
||||
reference
|
||||
val K_unchecked l
|
||||
inv !propertyvalue
|
||||
val K_unchecked obj
|
||||
val K_unchecked KD_Count
|
||||
inv !while
|
||||
inv !gt
|
||||
val K_unchecked l
|
||||
val K_unchecked 0
|
||||
code
|
||||
inv !store
|
||||
reference
|
||||
val K_unchecked a
|
||||
inv !times
|
||||
val K_unchecked l
|
||||
val K_unchecked 2
|
||||
inv !if
|
||||
inv ScanPropertyMetadata
|
||||
inv !lookup
|
||||
val K_unchecked KindHierarchy
|
||||
val K_unchecked a
|
||||
val K_unchecked q
|
||||
val K_unchecked 4
|
||||
code
|
||||
inv !jump
|
||||
lab .PermissionFound
|
||||
inv !store
|
||||
reference
|
||||
val K_unchecked l
|
||||
inv !lookup
|
||||
val K_unchecked KindHierarchy
|
||||
inv !plus
|
||||
val K_unchecked a
|
||||
val K_unchecked 1
|
||||
inv !if
|
||||
inv ScanPropertyMetadata
|
||||
val K_unchecked K_object
|
||||
val K_unchecked q
|
||||
val K_unchecked 4
|
||||
code
|
||||
inv !jump
|
||||
lab .PermissionFound
|
||||
inv !if
|
||||
val K_unchecked issue_rtp
|
||||
code
|
||||
inv RunTimeProblem
|
||||
val K_unchecked RTP_UNPROVIDED
|
||||
val K_unchecked obj
|
||||
val K_unchecked q
|
||||
inv !return
|
||||
val K_unchecked 0
|
||||
.PermissionFound
|
||||
inv !ifelse
|
||||
inv !ne
|
||||
val K_unchecked K
|
||||
val K_unchecked OBJECT_TY
|
||||
code
|
||||
inv !ifelse
|
||||
inv !or
|
||||
inv !lt
|
||||
inv !if
|
||||
inv !and
|
||||
inv !ge
|
||||
val K_unchecked obj
|
||||
val K_unchecked 1
|
||||
inv !gt
|
||||
inv !le
|
||||
val K_unchecked obj
|
||||
inv !lookup
|
||||
val K_unchecked value_ranges
|
||||
val K_unchecked K
|
||||
code
|
||||
inv !if
|
||||
val K_unchecked issue_rtp
|
||||
code
|
||||
inv RunTimeProblem
|
||||
val K_unchecked RTP_BADVALUEPROPERTY
|
||||
code
|
||||
inv !store
|
||||
reference
|
||||
|
@ -97133,120 +97194,31 @@ package main _plain
|
|||
code
|
||||
inv !return
|
||||
val K_unchecked 1
|
||||
inv !return
|
||||
val K_unchecked 0
|
||||
inv !if
|
||||
inv !eq
|
||||
val K_unchecked obj
|
||||
val K_unchecked 0
|
||||
code
|
||||
inv !if
|
||||
val K_unchecked issue_rtp
|
||||
code
|
||||
inv RunTimeProblem
|
||||
val K_unchecked RTP_PROPOFNOTHING
|
||||
val K_unchecked 0
|
||||
val K_unchecked q
|
||||
inv !return
|
||||
val K_unchecked 0
|
||||
inv !if
|
||||
inv !ne
|
||||
inv metaclass
|
||||
val K_unchecked obj
|
||||
val K_unchecked Object
|
||||
code
|
||||
inv !return
|
||||
val K_unchecked 0
|
||||
inv !if
|
||||
inv !lt
|
||||
val K_unchecked q
|
||||
val K_unchecked 0
|
||||
code
|
||||
inv !store
|
||||
reference
|
||||
val K_unchecked q
|
||||
inv !bitwisenot
|
||||
val K_unchecked q
|
||||
inv !if
|
||||
inv ScanPropertyMetadata
|
||||
val K_unchecked obj
|
||||
val K_unchecked q
|
||||
val K_unchecked 4
|
||||
code
|
||||
inv !jump
|
||||
lab .PermissionFound
|
||||
inv !if
|
||||
inv !provides
|
||||
val K_unchecked obj
|
||||
val K_unchecked KD_Count
|
||||
code
|
||||
inv !store
|
||||
reference
|
||||
val K_unchecked l
|
||||
inv !propertyvalue
|
||||
inv !and
|
||||
val K_unchecked obj
|
||||
val K_unchecked KD_Count
|
||||
inv !while
|
||||
inv !gt
|
||||
val K_unchecked l
|
||||
val K_unchecked 0
|
||||
inv !eq
|
||||
inv metaclass
|
||||
val K_unchecked obj
|
||||
val K_unchecked Object
|
||||
code
|
||||
inv !store
|
||||
reference
|
||||
val K_unchecked a
|
||||
inv !times
|
||||
val K_unchecked l
|
||||
val K_unchecked 2
|
||||
inv !if
|
||||
inv ScanPropertyMetadata
|
||||
inv !eq
|
||||
inv !lookup
|
||||
val K_unchecked KindHierarchy
|
||||
val K_unchecked a
|
||||
val K_unchecked q
|
||||
val K_unchecked 4
|
||||
val K_unchecked q
|
||||
val K_unchecked 0
|
||||
val K_unchecked 2
|
||||
code
|
||||
inv !jump
|
||||
lab .PermissionFound
|
||||
inv !store
|
||||
reference
|
||||
val K_unchecked l
|
||||
inv !lookup
|
||||
val K_unchecked KindHierarchy
|
||||
inv !plus
|
||||
val K_unchecked a
|
||||
inv !return
|
||||
val K_unchecked 1
|
||||
inv !if
|
||||
inv !provides
|
||||
val K_unchecked obj
|
||||
val K_unchecked q
|
||||
code
|
||||
inv !return
|
||||
val K_unchecked 1
|
||||
inv !if
|
||||
inv ScanPropertyMetadata
|
||||
val K_unchecked K_object
|
||||
val K_unchecked q
|
||||
val K_unchecked 4
|
||||
code
|
||||
inv !jump
|
||||
lab .PermissionFound
|
||||
inv !if
|
||||
val K_unchecked issue_rtp
|
||||
code
|
||||
inv RunTimeProblem
|
||||
val K_unchecked RTP_UNPROVIDED
|
||||
val K_unchecked obj
|
||||
val K_unchecked q
|
||||
inv !return
|
||||
val K_unchecked 0
|
||||
.PermissionFound
|
||||
inv !if
|
||||
inv !lookup
|
||||
val K_unchecked q
|
||||
val K_unchecked 2
|
||||
code
|
||||
inv !return
|
||||
val K_unchecked 1
|
||||
inv !if
|
||||
inv !provides
|
||||
val K_unchecked obj
|
||||
val K_unchecked q
|
||||
code
|
||||
inv !return
|
||||
val K_unchecked 1
|
||||
inv !if
|
||||
val K_unchecked issue_rtp
|
||||
code
|
||||
|
@ -97256,7 +97228,7 @@ package main _plain
|
|||
val K_unchecked q
|
||||
inv !return
|
||||
val K_unchecked 0
|
||||
constant WhetherProvides K_unchecked_function = WhetherProvides_B __assimilated=1
|
||||
constant ProvidesProperty K_unchecked_function = ProvidesProperty_B __assimilated=1
|
||||
package PrintPropertyName_fn _function
|
||||
symbol public misc PrintPropertyName
|
||||
symbol external misc K_unchecked_function --> /main/generic/kinds/K_unchecked_function
|
||||
|
@ -97326,56 +97298,6 @@ package main _plain
|
|||
inv !return
|
||||
val K_unchecked 0
|
||||
constant ScanPropertyMetadata K_unchecked_function = ScanPropertyMetadata_B __assimilated=1
|
||||
package GetEitherOrProperty_fn _function
|
||||
symbol public misc GetEitherOrProperty
|
||||
symbol external misc K_unchecked_function --> /main/generic/kinds/K_unchecked_function
|
||||
package GetEitherOrProperty_B _code
|
||||
symbol private misc o
|
||||
symbol external misc K_unchecked --> /main/generic/kinds/K_unchecked
|
||||
symbol private misc p
|
||||
symbol external misc GProperty --> /main/BasicInformKit/functions/GProperty_fn/GProperty
|
||||
symbol external misc plug_00140 --> /main/generic/kinds/kind1/OBJECT_TY
|
||||
local o K_unchecked
|
||||
local p K_unchecked
|
||||
code
|
||||
inv !return
|
||||
inv GProperty
|
||||
val K_unchecked OBJECT_TY
|
||||
val K_unchecked o
|
||||
val K_unchecked p
|
||||
val K_unchecked 1
|
||||
constant GetEitherOrProperty K_unchecked_function = GetEitherOrProperty_B __assimilated=1
|
||||
package SetEitherOrProperty_fn _function
|
||||
symbol public misc SetEitherOrProperty
|
||||
symbol external misc K_unchecked_function --> /main/generic/kinds/K_unchecked_function
|
||||
package SetEitherOrProperty_B _code
|
||||
symbol private misc o
|
||||
symbol external misc K_unchecked --> /main/generic/kinds/K_unchecked
|
||||
symbol private misc p
|
||||
symbol private misc negate
|
||||
symbol private misc adj
|
||||
symbol external misc WriteGProperty --> /main/BasicInformKit/functions/WriteGProperty_fn/WriteGProperty
|
||||
symbol external misc plug_00140 --> /main/generic/kinds/kind1/OBJECT_TY
|
||||
local o K_unchecked
|
||||
local p K_unchecked
|
||||
local negate K_unchecked
|
||||
local adj K_unchecked
|
||||
code
|
||||
inv !ifelse
|
||||
val K_unchecked negate
|
||||
code
|
||||
inv WriteGProperty
|
||||
val K_unchecked OBJECT_TY
|
||||
val K_unchecked o
|
||||
val K_unchecked p
|
||||
val K_unchecked 0
|
||||
code
|
||||
inv WriteGProperty
|
||||
val K_unchecked OBJECT_TY
|
||||
val K_unchecked o
|
||||
val K_unchecked p
|
||||
val K_unchecked 1
|
||||
constant SetEitherOrProperty K_unchecked_function = SetEitherOrProperty_B __assimilated=1
|
||||
package GProperty_fn _function
|
||||
symbol public misc GProperty
|
||||
symbol external misc K_unchecked_function --> /main/generic/kinds/K_unchecked_function
|
||||
|
@ -97386,7 +97308,7 @@ package main _plain
|
|||
symbol private misc pr
|
||||
symbol private misc err
|
||||
symbol private misc holder
|
||||
symbol external misc WhetherProvides --> /main/BasicInformKit/functions/WhetherProvides_fn/WhetherProvides
|
||||
symbol external misc ProvidesProperty --> /main/BasicInformKit/functions/ProvidesProperty_fn/ProvidesProperty
|
||||
symbol external misc plug_00140 --> /main/generic/kinds/kind1/OBJECT_TY
|
||||
symbol external misc door_to --> /main/BasicInformKit/properties/door_to_prop/door_to
|
||||
symbol external misc value_property_holders --> /main/veneer/value_property_holders
|
||||
|
@ -97398,7 +97320,7 @@ package main _plain
|
|||
local holder K_unchecked
|
||||
code
|
||||
inv !if
|
||||
inv WhetherProvides
|
||||
inv ProvidesProperty
|
||||
val K_unchecked K
|
||||
val K_unchecked V
|
||||
val K_unchecked pr
|
||||
|
@ -97468,7 +97390,7 @@ package main _plain
|
|||
symbol private misc pr
|
||||
symbol private misc val
|
||||
symbol private misc holder
|
||||
symbol external misc WhetherProvides --> /main/BasicInformKit/functions/WhetherProvides_fn/WhetherProvides
|
||||
symbol external misc ProvidesProperty --> /main/BasicInformKit/functions/ProvidesProperty_fn/ProvidesProperty
|
||||
symbol external misc plug_00140 --> /main/generic/kinds/kind1/OBJECT_TY
|
||||
symbol external misc value_property_holders --> /main/veneer/value_property_holders
|
||||
symbol external misc COL_HSIZE --> /main/BasicInformKit/constants/COL_HSIZE_con/COL_HSIZE
|
||||
|
@ -97479,7 +97401,7 @@ package main _plain
|
|||
local holder K_unchecked
|
||||
code
|
||||
inv !if
|
||||
inv WhetherProvides
|
||||
inv ProvidesProperty
|
||||
val K_unchecked K
|
||||
val K_unchecked V
|
||||
val K_unchecked pr
|
||||
|
|
|
@ -268,79 +268,45 @@ int RTProperties::set_property_value_schema(annotated_i6_schema *asch, property
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
@ Either-or properties are trickier, though only because they use a different
|
||||
pair of functions at runtime for EO properties of objects than for EO properties
|
||||
of anything else:
|
||||
@ Either-or properties work analogously, though note that on reading, |GProperty|
|
||||
is called slightly differently so that objects are allowed access to read (though
|
||||
not write) either/or properties which they do not possess. The result is always
|
||||
|false|, but run-time errors do not occur. (This all goes back to the way
|
||||
attributes were handled on the Z-machine VM, but is an assumption made by some
|
||||
of the kit code inherited from early days of Inform, and does no actual harm.)
|
||||
|
||||
=
|
||||
void RTProperties::write_either_or_schemas(adjective_meaning *am, property *prn, int T) {
|
||||
kind *K = AdjectiveMeaningDomains::get_kind(am);
|
||||
if (Kinds::Behaviour::is_object(K))
|
||||
@<Set the schemata for an either/or property adjective with objects as domain@>
|
||||
else
|
||||
@<Set the schemata for an either/or property adjective with some other domain@>;
|
||||
if (RTProperties::stored_in_negation(prn)) {
|
||||
property *neg = EitherOrProperties::get_negation(prn);
|
||||
|
||||
i6_schema *sch = AdjectiveMeanings::make_schema(am, TEST_ATOM_TASK);
|
||||
Calculus::Schemas::modify(sch, "GProperty(%k, *1, %n, 1) == false", K,
|
||||
RTProperties::iname(neg));
|
||||
|
||||
sch = AdjectiveMeanings::make_schema(am, NOW_ATOM_TRUE_TASK);
|
||||
Calculus::Schemas::modify(sch, "WriteGProperty(%k, *1, %n, 0)", K,
|
||||
RTProperties::iname(neg));
|
||||
|
||||
sch = AdjectiveMeanings::make_schema(am, NOW_ATOM_FALSE_TASK);
|
||||
Calculus::Schemas::modify(sch, "WriteGProperty(%k, *1, %n, 1)", K,
|
||||
RTProperties::iname(neg));
|
||||
} else {
|
||||
i6_schema *sch = AdjectiveMeanings::make_schema(am, TEST_ATOM_TASK);
|
||||
Calculus::Schemas::modify(sch, "GProperty(%k, *1, %n, 1)", K,
|
||||
RTProperties::iname(prn));
|
||||
|
||||
sch = AdjectiveMeanings::make_schema(am, NOW_ATOM_TRUE_TASK);
|
||||
Calculus::Schemas::modify(sch, "WriteGProperty(%k, *1, %n, 1)", K,
|
||||
RTProperties::iname(prn));
|
||||
|
||||
sch = AdjectiveMeanings::make_schema(am, NOW_ATOM_FALSE_TASK);
|
||||
Calculus::Schemas::modify(sch, "WriteGProperty(%k, *1, %n, 0)", K,
|
||||
RTProperties::iname(prn));
|
||||
}
|
||||
}
|
||||
|
||||
@ The "objects" domain is not really very different, but it's the one used
|
||||
overwhelmingly most often, so we will call the relevant routines directly rather
|
||||
than accessing them via the unifying routines |GProperty| and |WriteGProperty| --
|
||||
which would work just as well, but more slowly.
|
||||
|
||||
@<Set the schemata for an either/or property adjective with objects as domain@> =
|
||||
if (RTProperties::stored_in_negation(prn)) {
|
||||
property *neg = EitherOrProperties::get_negation(prn);
|
||||
inter_name *identifier = RTProperties::iname(neg);
|
||||
|
||||
i6_schema *sch = AdjectiveMeanings::make_schema(am, TEST_ATOM_TASK);
|
||||
Calculus::Schemas::modify(sch, "GProperty(OBJECT_TY, *1, %n, true) == false", identifier);
|
||||
|
||||
sch = AdjectiveMeanings::make_schema(am, NOW_ATOM_TRUE_TASK);
|
||||
Calculus::Schemas::modify(sch, "WriteGProperty(OBJECT_TY, *1, %n, 0)", identifier);
|
||||
|
||||
sch = AdjectiveMeanings::make_schema(am, NOW_ATOM_FALSE_TASK);
|
||||
Calculus::Schemas::modify(sch, "WriteGProperty(OBJECT_TY, *1, %n, 1)", identifier);
|
||||
} else {
|
||||
inter_name *identifier = RTProperties::iname(prn);
|
||||
|
||||
i6_schema *sch = AdjectiveMeanings::make_schema(am, TEST_ATOM_TASK);
|
||||
Calculus::Schemas::modify(sch, "GProperty(OBJECT_TY, *1, %n, true)", identifier);
|
||||
|
||||
sch = AdjectiveMeanings::make_schema(am, NOW_ATOM_TRUE_TASK);
|
||||
Calculus::Schemas::modify(sch, "WriteGProperty(OBJECT_TY, *1, %n, 1)", identifier);
|
||||
|
||||
sch = AdjectiveMeanings::make_schema(am, NOW_ATOM_FALSE_TASK);
|
||||
Calculus::Schemas::modify(sch, "WriteGProperty(OBJECT_TY, *1, %n, 0)", identifier);
|
||||
}
|
||||
|
||||
@<Set the schemata for an either/or property adjective with some other domain@> =
|
||||
if (RTProperties::stored_in_negation(prn)) {
|
||||
property *neg = EitherOrProperties::get_negation(prn);
|
||||
|
||||
i6_schema *sch = AdjectiveMeanings::make_schema(am, TEST_ATOM_TASK);
|
||||
Calculus::Schemas::modify(sch, "GProperty(%k, *1, %n) == false", K,
|
||||
RTProperties::iname(neg));
|
||||
|
||||
sch = AdjectiveMeanings::make_schema(am, NOW_ATOM_TRUE_TASK);
|
||||
Calculus::Schemas::modify(sch, "WriteGProperty(%k, *1, %n)", K,
|
||||
RTProperties::iname(neg));
|
||||
|
||||
sch = AdjectiveMeanings::make_schema(am, NOW_ATOM_FALSE_TASK);
|
||||
Calculus::Schemas::modify(sch, "WriteGProperty(%k, *1, %n, true)", K,
|
||||
RTProperties::iname(neg));
|
||||
} else {
|
||||
i6_schema *sch = AdjectiveMeanings::make_schema(am, TEST_ATOM_TASK);
|
||||
Calculus::Schemas::modify(sch, "GProperty(%k, *1, %n)", K,
|
||||
RTProperties::iname(prn));
|
||||
|
||||
sch = AdjectiveMeanings::make_schema(am, NOW_ATOM_TRUE_TASK);
|
||||
Calculus::Schemas::modify(sch, "WriteGProperty(%k, *1, %n, true)", K,
|
||||
RTProperties::iname(prn));
|
||||
|
||||
sch = AdjectiveMeanings::make_schema(am, NOW_ATOM_FALSE_TASK);
|
||||
Calculus::Schemas::modify(sch, "WriteGProperty(%k, *1, %n)", K,
|
||||
RTProperties::iname(prn));
|
||||
}
|
||||
|
||||
@ And finally, provision of a property can be tested at runtime with the
|
||||
following schemas:
|
||||
|
||||
|
@ -358,7 +324,7 @@ int RTProperties::test_provision_schema(annotated_i6_schema *asch) {
|
|||
} else if (Kinds::Behaviour::is_object(K)) {
|
||||
kind *PK = Cinders::kind_of_term(asch->pt1);
|
||||
if (Kinds::get_construct(PK) == CON_property) {
|
||||
Calculus::Schemas::modify(asch->schema, "WhetherProvides(%k, *1, *2)", K);
|
||||
Calculus::Schemas::modify(asch->schema, "ProvidesProperty(%k, *1, *2)", K);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
@ -370,7 +336,7 @@ int RTProperties::test_provision_schema(annotated_i6_schema *asch) {
|
|||
of object the left operand is, we can only test property provision at run-time:
|
||||
|
||||
@<Compile a run-time test of property provision@> =
|
||||
Calculus::Schemas::modify(asch->schema, "WhetherProvides(%k, *1, *2)", K);
|
||||
Calculus::Schemas::modify(asch->schema, "ProvidesProperty(%k, *1, *2)", K);
|
||||
|
||||
@ For all other kinds, type-checking is strong enough that we can prove the
|
||||
answer now.
|
||||
|
|
|
@ -1219,6 +1219,9 @@ void I6Target::invoke_opcode(code_generator *cgt, code_generation *gen,
|
|||
text_stream *opcode, int operand_count, inter_tree_node **operands,
|
||||
inter_tree_node *label, int label_sense, int void_context) {
|
||||
text_stream *OUT = CodeGen::current(gen);
|
||||
if (Str::eq(opcode, I"@provides_gprop")) @<Invoke special provides_gprop@>;
|
||||
if (Str::eq(opcode, I"@read_gprop")) @<Invoke special read_gprop@>;
|
||||
if (Str::eq(opcode, I"@write_gprop")) @<Invoke special write_gprop@>;
|
||||
WRITE("%S", opcode);
|
||||
for (int opc = 0; opc < operand_count; opc++) {
|
||||
WRITE(" ");
|
||||
|
@ -1232,6 +1235,118 @@ void I6Target::invoke_opcode(code_generator *cgt, code_generation *gen,
|
|||
if (void_context) WRITE(";\n");
|
||||
}
|
||||
|
||||
@<Invoke special provides_gprop@> =
|
||||
TEMPORARY_TEXT(K)
|
||||
TEMPORARY_TEXT(obj)
|
||||
TEMPORARY_TEXT(p)
|
||||
TEMPORARY_TEXT(val)
|
||||
CodeGen::select_temporary(gen, K);
|
||||
Vanilla::node(gen, operands[0]);
|
||||
CodeGen::deselect_temporary(gen);
|
||||
CodeGen::select_temporary(gen, obj);
|
||||
Vanilla::node(gen, operands[1]);
|
||||
CodeGen::deselect_temporary(gen);
|
||||
CodeGen::select_temporary(gen, p);
|
||||
Vanilla::node(gen, operands[2]);
|
||||
CodeGen::deselect_temporary(gen);
|
||||
CodeGen::select_temporary(gen, val);
|
||||
Vanilla::node(gen, operands[3]);
|
||||
CodeGen::deselect_temporary(gen);
|
||||
|
||||
WRITE("if (%S == OBJECT_TY) {\n", K);
|
||||
WRITE(" if ((%S) && (metaclass(%S) == Object)) {\n", obj, obj);
|
||||
WRITE(" if ((%S-->0 == 2) || (%S provides %S-->1)) {\n", p, obj, p);
|
||||
WRITE(" %S = 1;\n", val);
|
||||
WRITE(" } else {\n");
|
||||
WRITE(" %S = 0;\n", val);
|
||||
WRITE(" }\n");
|
||||
WRITE(" } else {\n");
|
||||
WRITE(" %S = 0;\n", val);
|
||||
WRITE(" }\n");
|
||||
WRITE("} else {\n");
|
||||
WRITE(" if ((%S >= 1) && (%S <= value_ranges-->%S)) {\n", obj, obj, K);
|
||||
WRITE(" holder = value_property_holders-->%S;\n", K);
|
||||
WRITE(" if ((holder) && (holder provides %S-->1)) {\n", p);
|
||||
WRITE(" %S = 1;\n", val);
|
||||
WRITE(" } else {\n");
|
||||
WRITE(" %S = 0;\n", val);
|
||||
WRITE(" }\n");
|
||||
WRITE(" } else {\n");
|
||||
WRITE(" %S = 0;\n", val);
|
||||
WRITE(" }\n");
|
||||
WRITE("}\n");
|
||||
|
||||
DISCARD_TEXT(K)
|
||||
DISCARD_TEXT(obj)
|
||||
DISCARD_TEXT(p)
|
||||
DISCARD_TEXT(val)
|
||||
return;
|
||||
|
||||
@<Invoke special read_gprop@> =
|
||||
TEMPORARY_TEXT(K)
|
||||
TEMPORARY_TEXT(obj)
|
||||
TEMPORARY_TEXT(p)
|
||||
CodeGen::select_temporary(gen, K);
|
||||
Vanilla::node(gen, operands[0]);
|
||||
CodeGen::deselect_temporary(gen);
|
||||
CodeGen::select_temporary(gen, obj);
|
||||
Vanilla::node(gen, operands[1]);
|
||||
CodeGen::deselect_temporary(gen);
|
||||
CodeGen::select_temporary(gen, p);
|
||||
Vanilla::node(gen, operands[2]);
|
||||
CodeGen::deselect_temporary(gen);
|
||||
|
||||
WRITE("if (%S == OBJECT_TY) {\n", K);
|
||||
WRITE(" if (%S-->0 == 2) {\n", p);
|
||||
WRITE(" if (%S has %S-->1) rtrue; rfalse;\n", obj, p);
|
||||
WRITE(" }\n");
|
||||
WRITE(" if (%S == door_to) return (%S-->1).%S();\n", p, obj, p);
|
||||
WRITE(" return %S.(%S-->1);\n", obj, p);
|
||||
WRITE("} else {\n");
|
||||
WRITE(" holder = value_property_holders-->%S;\n", K);
|
||||
WRITE(" return (holder.(%S-->1))-->(%S+COL_HSIZE);\n", p, obj);
|
||||
WRITE("}\n");
|
||||
|
||||
DISCARD_TEXT(K)
|
||||
DISCARD_TEXT(obj)
|
||||
DISCARD_TEXT(p)
|
||||
return;
|
||||
|
||||
@<Invoke special write_gprop@> =
|
||||
TEMPORARY_TEXT(K)
|
||||
TEMPORARY_TEXT(obj)
|
||||
TEMPORARY_TEXT(p)
|
||||
TEMPORARY_TEXT(val)
|
||||
CodeGen::select_temporary(gen, K);
|
||||
Vanilla::node(gen, operands[0]);
|
||||
CodeGen::deselect_temporary(gen);
|
||||
CodeGen::select_temporary(gen, obj);
|
||||
Vanilla::node(gen, operands[1]);
|
||||
CodeGen::deselect_temporary(gen);
|
||||
CodeGen::select_temporary(gen, p);
|
||||
Vanilla::node(gen, operands[2]);
|
||||
CodeGen::deselect_temporary(gen);
|
||||
CodeGen::select_temporary(gen, val);
|
||||
Vanilla::node(gen, operands[3]);
|
||||
CodeGen::deselect_temporary(gen);
|
||||
|
||||
WRITE("if (%S == OBJECT_TY) {\n", K);
|
||||
WRITE(" if (%S-->0 == 2) {\n", p);
|
||||
WRITE(" if (%S) give %S %S-->1; else give %S ~(%S-->1);\n", val, obj, p, obj, p);
|
||||
WRITE(" } else {\n");
|
||||
WRITE(" %S.(%S-->1) = %S;\n", obj, p, val);
|
||||
WRITE(" }\n");
|
||||
WRITE("} else {\n");
|
||||
WRITE(" ((value_property_holders-->%S).(%S-->1))-->(%S+COL_HSIZE) = %S;\n", K, p, obj, val);
|
||||
WRITE("}\n");
|
||||
|
||||
DISCARD_TEXT(K)
|
||||
DISCARD_TEXT(obj)
|
||||
DISCARD_TEXT(p)
|
||||
DISCARD_TEXT(val)
|
||||
return;
|
||||
|
||||
@ =
|
||||
int I6Target::begin_array(code_generator *cgt, code_generation *gen, text_stream *array_name, inter_symbol *array_s, inter_tree_node *P, int format, segmentation_pos *saved) {
|
||||
if (saved) {
|
||||
int choice = early_matter_I7CGS;
|
||||
|
|
Loading…
Reference in a new issue