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

Simplified GProperty functions

This commit is contained in:
Graham Nelson 2021-10-03 19:49:54 +01:00
parent 6c75736f1b
commit 440794d603
5 changed files with 162 additions and 177 deletions

View file

@ -304,6 +304,10 @@ it doesn't mean it actually does have.
<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">obj</span><span class="plain-syntax"> </span><span class="identifier-syntax">either_or</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">p</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax"> </span><span class="identifier-syntax">textual</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="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">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">&lt;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="identifier-syntax">p</span><span class="plain-syntax"> = </span><span class="identifier-syntax">q</span><span class="plain-syntax">--&gt;1;</span>
@ -412,25 +416,24 @@ 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">obj</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="identifier-syntax">obj</span><span class="plain-syntax"> = </span><span class="identifier-syntax">V</span><span class="plain-syntax">; </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">obj</span><span class="plain-syntax"> = </span><span class="identifier-syntax">value_property_holders</span><span class="plain-syntax">--&gt;</span><span class="identifier-syntax">K</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">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="identifier-syntax">RunTimeProblem</span><span class="plain-syntax">(</span><span class="identifier-syntax">RTP_PROPOFNOTHING</span><span class="plain-syntax">, </span><span class="identifier-syntax">obj</span><span class="plain-syntax">, </span><span class="identifier-syntax">pr</span><span class="plain-syntax">); </span><span class="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">obj</span><span class="plain-syntax"> </span><span class="reserved-syntax">provides</span><span class="plain-syntax"> </span><span class="identifier-syntax">pr</span><span class="plain-syntax">) {</span>
<span class="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"> == </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">obj</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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">WhetherProvides</span><span class="plain-syntax">(</span><span class="identifier-syntax">V</span><span class="plain-syntax">, </span><span class="reserved-syntax">false</span><span class="plain-syntax">, </span><span class="identifier-syntax">pr</span><span class="plain-syntax">, </span><span class="reserved-syntax">true</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">obj</span><span class="plain-syntax">.</span><span class="identifier-syntax">pr</span><span class="plain-syntax">;</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">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">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">WhetherProvides</span><span class="plain-syntax">(</span><span class="identifier-syntax">V</span><span class="plain-syntax">, </span><span class="reserved-syntax">false</span><span class="plain-syntax">, </span><span class="identifier-syntax">pr</span><span class="plain-syntax">, </span><span class="reserved-syntax">true</span><span class="plain-syntax">)) {</span>
<span class="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="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">obj</span><span class="plain-syntax"> </span><span class="reserved-syntax">ofclass</span><span class="plain-syntax"> </span><span class="identifier-syntax">K0_kind</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WhetherProvides</span><span class="plain-syntax">(</span><span class="identifier-syntax">V</span><span class="plain-syntax">, </span><span class="reserved-syntax">false</span><span class="plain-syntax">, </span><span class="identifier-syntax">pr</span><span class="plain-syntax">, </span><span class="reserved-syntax">true</span><span class="plain-syntax">); </span><span class="comment-syntax">to force a run-time problem</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">V</span><span class="plain-syntax"> &lt; </span><span class="constant-syntax">1</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">V</span><span class="plain-syntax"> &gt; </span><span class="identifier-syntax">value_ranges</span><span class="plain-syntax">--&gt;</span><span class="identifier-syntax">K</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">RunTimeProblem</span><span class="plain-syntax">(</span><span class="identifier-syntax">RTP_BADVALUEPROPERTY</span><span class="plain-syntax">); </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax">; }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> (</span><span class="identifier-syntax">obj</span><span class="plain-syntax">.</span><span class="identifier-syntax">pr</span><span class="plain-syntax">)--&gt;(</span><span class="identifier-syntax">V</span><span class="plain-syntax">+</span><span class="identifier-syntax">COL_HSIZE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">obj</span><span class="plain-syntax"> </span><span class="reserved-syntax">ofclass</span><span class="plain-syntax"> </span><span class="identifier-syntax">K0_kind</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WhetherProvides</span><span class="plain-syntax">(</span><span class="identifier-syntax">V</span><span class="plain-syntax">, </span><span class="reserved-syntax">false</span><span class="plain-syntax">, </span><span class="identifier-syntax">pr</span><span class="plain-syntax">, </span><span class="reserved-syntax">true</span><span class="plain-syntax">); </span><span class="comment-syntax">to force a run-time problem</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">V</span><span class="plain-syntax"> &lt; </span><span class="constant-syntax">1</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">V</span><span class="plain-syntax"> &gt; </span><span class="identifier-syntax">value_ranges</span><span class="plain-syntax">--&gt;</span><span class="identifier-syntax">K</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">RunTimeProblem</span><span class="plain-syntax">(</span><span class="identifier-syntax">RTP_BADVALUEPROPERTY</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="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">--&gt;</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">) &amp;&amp; (</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">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">holder</span><span class="plain-syntax">.</span><span class="identifier-syntax">pr</span><span class="plain-syntax">)--&gt;(</span><span class="identifier-syntax">V</span><span class="plain-syntax">+</span><span class="identifier-syntax">COL_HSIZE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">rfalse</span><span class="plain-syntax">;</span>
<span class="plain-syntax">];</span>
</pre>
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>&#167;10. Write Value Property. </b>This routine's name must consist of the read-value-property routine's name
@ -439,15 +442,22 @@ converted from an rvalue to an lvalue.
</p>
<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">obj</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="identifier-syntax">obj</span><span class="plain-syntax"> = </span><span class="identifier-syntax">V</span><span class="plain-syntax">; </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">obj</span><span class="plain-syntax"> = </span><span class="identifier-syntax">value_property_holders</span><span class="plain-syntax">--&gt;</span><span class="identifier-syntax">K</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">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="identifier-syntax">RunTimeProblem</span><span class="plain-syntax">(</span><span class="identifier-syntax">RTP_PROPOFNOTHING</span><span class="plain-syntax">, </span><span class="identifier-syntax">obj</span><span class="plain-syntax">, </span><span class="identifier-syntax">pr</span><span class="plain-syntax">); </span><span class="reserved-syntax">rfalse</span><span class="plain-syntax">; }</span>
<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">K</span><span class="plain-syntax"> == </span><span class="identifier-syntax">OBJECT_TY</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">WhetherProvides</span><span class="plain-syntax">(</span><span class="identifier-syntax">V</span><span class="plain-syntax">, </span><span class="reserved-syntax">false</span><span class="plain-syntax">, </span><span class="identifier-syntax">pr</span><span class="plain-syntax">, </span><span class="reserved-syntax">true</span><span class="plain-syntax">)) </span><span class="identifier-syntax">obj</span><span class="plain-syntax">.</span><span class="identifier-syntax">pr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">val</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">WhetherProvides</span><span class="plain-syntax">(</span><span class="identifier-syntax">V</span><span class="plain-syntax">, </span><span class="reserved-syntax">false</span><span class="plain-syntax">, </span><span class="identifier-syntax">pr</span><span class="plain-syntax">, </span><span class="reserved-syntax">true</span><span class="plain-syntax">)) {</span>
<span class="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="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">V</span><span class="plain-syntax"> &lt; </span><span class="constant-syntax">1</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">V</span><span class="plain-syntax"> &gt; </span><span class="identifier-syntax">value_ranges</span><span class="plain-syntax">--&gt;</span><span class="identifier-syntax">K</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">RunTimeProblem</span><span class="plain-syntax">(</span><span class="identifier-syntax">RTP_BADVALUEPROPERTY</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">obj</span><span class="plain-syntax"> </span><span class="reserved-syntax">provides</span><span class="plain-syntax"> </span><span class="identifier-syntax">pr</span><span class="plain-syntax">) { (</span><span class="identifier-syntax">obj</span><span class="plain-syntax">.</span><span class="identifier-syntax">pr</span><span class="plain-syntax">)--&gt;(</span><span class="identifier-syntax">V</span><span class="plain-syntax">+</span><span class="identifier-syntax">COL_HSIZE</span><span class="plain-syntax">) = </span><span class="identifier-syntax">val</span><span class="plain-syntax">; }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">V</span><span class="plain-syntax"> &lt; </span><span class="constant-syntax">1</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">V</span><span class="plain-syntax"> &gt; </span><span class="identifier-syntax">value_ranges</span><span class="plain-syntax">--&gt;</span><span class="identifier-syntax">K</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">RunTimeProblem</span><span class="plain-syntax">(</span><span class="identifier-syntax">RTP_BADVALUEPROPERTY</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">holder</span><span class="plain-syntax"> = </span><span class="identifier-syntax">value_property_holders</span><span class="plain-syntax">--&gt;</span><span class="identifier-syntax">K</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">holder</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">RunTimeProblem</span><span class="plain-syntax">(</span><span class="identifier-syntax">RTP_PROPOFNOTHING</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="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</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">pr</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">)--&gt;(</span><span class="identifier-syntax">V</span><span class="plain-syntax">+</span><span class="identifier-syntax">COL_HSIZE</span><span class="plain-syntax">) = </span><span class="identifier-syntax">val</span><span class="plain-syntax">; }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax">];</span>
</pre>

View file

@ -1,4 +1,4 @@
Total memory consumption was 394269K = 385 MB
Total memory consumption was 394266K = 385 MB
60.6% was used for 2000598 objects, in 371371 frames in 299 x 800K = 239200K = 233 MB:
@ -238,7 +238,7 @@ Total memory consumption was 394269K = 385 MB
39.3% was used for memory not allocated for objects:
20.5% text stream storage 82824764 bytes in 535659 claims
20.5% text stream storage 82822060 bytes in 535657 claims
4.5% dictionary storage 18273792 bytes in 33269 claims
---- sorting 736 bytes in 3 claims
1.7% source text 7200000 bytes in 3 claims

View file

@ -1,6 +1,6 @@
100.0% in inform7 run
54.9% in compilation to Inter
39.5% in //Sequence::undertake_queued_tasks//
55.1% in compilation to Inter
39.9% in //Sequence::undertake_queued_tasks//
3.5% in //MajorNodes::pre_pass//
2.5% in //MajorNodes::pass_1//
2.1% in //RTPhrasebook::compile_entries//
@ -9,29 +9,29 @@
0.4% in //ImperativeDefinitions::compile_first_block//
0.4% in //MajorNodes::pass_2//
0.4% in //Sequence::undertake_queued_tasks//
0.4% in //Sequence::undertake_queued_tasks//
0.4% in //World::stage_V//
0.2% in //CompletionModule::compile//
0.2% in //Sequence::undertake_queued_tasks//
0.1% in //InferenceSubjects::emit_all//
0.1% in //RTKindConstructors::compile_permissions//
0.1% in //Task::make_built_in_kind_constructors//
0.1% in //World::stages_II_and_III//
1.8% not specifically accounted for
43.0% in running Inter pipeline
12.5% in step preparation
9.7% in inter step 7/16: consolidate-text
7.8% in inter step 2/16: link
6.6% in inter step 16/16: generate inform6 -> auto.inf
42.9% in running Inter pipeline
12.4% in step preparation
9.8% in inter step 7/16: consolidate-text
7.9% 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
2.3% not specifically accounted for
1.6% in supervisor
0.3% not specifically accounted for
0.2% not specifically accounted for

View file

@ -261,6 +261,10 @@ it doesn't mean it actually does have.
=
[ WhetherProvides obj either_or q issue_rtp p i textual a l;
if (obj == 0) {
if (issue_rtp) RunTimeProblem(RTP_PROPOFNOTHING, 0, q);
rfalse;
}
if (metaclass(obj) ~= Object) rfalse;
if (q<0) q = ~q;
p = q-->1;
@ -366,25 +370,24 @@ 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 obj;
if (K == OBJECT_TY) obj = V; else obj = value_property_holders-->K;
if (obj == 0) { RunTimeProblem(RTP_PROPOFNOTHING, obj, pr); rfalse; }
if (obj provides pr) {
if (K == OBJECT_TY) {
if (pr == door_to) return obj.pr();
if (WhetherProvides(V, false, pr, true)) return obj.pr;
rfalse;
[ GProperty K V pr holder;
if (K == OBJECT_TY) {
if (WhetherProvides(V, false, pr, true)) {
if (pr == door_to) return V.pr();
return V.pr;
}
if (obj ofclass K0_kind)
WhetherProvides(V, false, pr, true); ! to force a run-time problem
if ((V < 1) || (V > value_ranges-->K)) {
RunTimeProblem(RTP_BADVALUEPROPERTY); return 0; }
return (obj.pr)-->(V+COL_HSIZE);
return 0;
} else {
if (obj ofclass K0_kind)
WhetherProvides(V, false, pr, true); ! to force a run-time problem
if ((V < 1) || (V > value_ranges-->K)) {
RunTimeProblem(RTP_BADVALUEPROPERTY);
return 0;
}
holder = value_property_holders-->K;
if ((holder) && (holder provides pr)) {
return (holder.pr)-->(V+COL_HSIZE);
}
return 0;
}
rfalse;
];
@h Write Value Property.
@ -393,15 +396,22 @@ with the prefix |Write|, as that is how a reference to such a property is
converted from an rvalue to an lvalue.
=
[ WriteGProperty K V pr val obj;
if (K == OBJECT_TY) obj = V; else obj = value_property_holders-->K;
if (obj == 0) { RunTimeProblem(RTP_PROPOFNOTHING, obj, pr); rfalse; }
[ WriteGProperty K V pr val holder;
if (K == OBJECT_TY) {
if (WhetherProvides(V, false, pr, true)) obj.pr = val;
if (WhetherProvides(V, false, pr, true)) {
V.pr = val;
}
} else {
if ((V < 1) || (V > value_ranges-->K))
return RunTimeProblem(RTP_BADVALUEPROPERTY);
if (obj provides pr) { (obj.pr)-->(V+COL_HSIZE) = val; }
if ((V < 1) || (V > value_ranges-->K)) {
RunTimeProblem(RTP_BADVALUEPROPERTY);
return;
}
holder = value_property_holders-->K;
if (holder == 0) {
RunTimeProblem(RTP_PROPOFNOTHING, holder, pr);
return;
}
if (holder provides pr) { (holder.pr)-->(V+COL_HSIZE) = val; }
}
];

View file

@ -6546,8 +6546,8 @@ package main _plain
symbol public misc #grammar_table
symbol public misc __assembly_sp `sp`
symbol public misc KindHierarchy
symbol public misc value_property_holders
symbol public misc value_ranges
symbol public misc value_property_holders
constant String K_unchecked = 0 __veneer=1
constant Routine K_unchecked = 0 __veneer=1
constant self K_unchecked = 0 __veneer=1
@ -6559,8 +6559,8 @@ package main _plain
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_property_holders K_unchecked = 0 __veneer=1
constant value_ranges K_unchecked = 0 __veneer=1
constant value_property_holders 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
@ -97040,6 +97040,8 @@ package main _plain
symbol private misc textual
symbol private misc a
symbol private misc l
symbol external misc RunTimeProblem --> /main/BasicInformKit/functions/RunTimeProblem_fn/RunTimeProblem
symbol external misc RTP_PROPOFNOTHING --> /main/BasicInformKit/constants/RTP_PROPOFNOTHING_con/RTP_PROPOFNOTHING
symbol external misc metaclass --> /main/veneer/metaclass
symbol external misc Object --> /main/veneer/Object
symbol external misc ScanPropertyMetadata --> /main/BasicInformKit/functions/ScanPropertyMetadata_fn/ScanPropertyMetadata
@ -97047,7 +97049,6 @@ package main _plain
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 RTP_UNSET --> /main/BasicInformKit/constants/RTP_UNSET_con/RTP_UNSET
local obj K_unchecked
@ -97060,6 +97061,20 @@ package main _plain
local a K_unchecked
local l K_unchecked
code
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
@ -97357,58 +97372,31 @@ package main _plain
symbol external misc K_unchecked --> /main/generic/kinds/K_unchecked
symbol private misc V
symbol private misc pr
symbol private misc obj
symbol private misc holder
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 RunTimeProblem --> /main/BasicInformKit/functions/RunTimeProblem_fn/RunTimeProblem
symbol external misc RTP_PROPOFNOTHING --> /main/BasicInformKit/constants/RTP_PROPOFNOTHING_con/RTP_PROPOFNOTHING
symbol external misc door_to --> /main/BasicInformKit/properties/door_to_prop/door_to
symbol external misc WhetherProvides --> /main/BasicInformKit/functions/WhetherProvides_fn/WhetherProvides
symbol external misc plug_00165 --> /main/generic/kinds/kind1/K_object
symbol external misc door_to --> /main/BasicInformKit/properties/door_to_prop/door_to
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 COL_HSIZE --> /main/BasicInformKit/constants/COL_HSIZE_con/COL_HSIZE
local K K_unchecked
local V K_unchecked
local pr K_unchecked
local obj K_unchecked
local holder K_unchecked
code
inv !ifelse
inv !eq
val K_unchecked K
val K_unchecked OBJECT_TY
code
inv !store
reference
val K_unchecked obj
val K_unchecked V
code
inv !store
reference
val K_unchecked obj
inv !lookup
val K_unchecked value_property_holders
val K_unchecked K
inv !if
inv !eq
val K_unchecked obj
val K_unchecked 0
code
inv RunTimeProblem
val K_unchecked RTP_PROPOFNOTHING
val K_unchecked obj
val K_unchecked pr
inv !return
val K_unchecked 0
inv !ifelse
inv !provides
val K_unchecked obj
val K_unchecked pr
code
inv !if
inv !eq
val K_unchecked K
val K_unchecked OBJECT_TY
inv WhetherProvides
val K_unchecked V
val K_unchecked 0
val K_unchecked pr
val K_unchecked 1
code
inv !if
inv !eq
@ -97417,31 +97405,15 @@ package main _plain
code
inv !return
inv !message0
val K_unchecked obj
val K_unchecked pr
inv !if
inv WhetherProvides
val K_unchecked V
val K_unchecked 0
val K_unchecked pr
val K_unchecked 1
code
inv !return
inv !propertyvalue
val K_unchecked obj
val K_unchecked V
val K_unchecked pr
inv !return
val K_unchecked 0
inv !if
inv !ofclass
val K_unchecked obj
val K_unchecked K_object
code
inv WhetherProvides
val K_unchecked V
val K_unchecked 0
val K_unchecked pr
val K_unchecked 1
inv !propertyvalue
val K_unchecked V
val K_unchecked pr
inv !return
val K_unchecked 0
code
inv !if
inv !or
inv !lt
@ -97457,27 +97429,29 @@ package main _plain
val K_unchecked RTP_BADVALUEPROPERTY
inv !return
val K_unchecked 0
inv !return
inv !store
reference
val K_unchecked holder
inv !lookup
inv !propertyvalue
val K_unchecked obj
val K_unchecked pr
inv !plus
val K_unchecked V
val K_unchecked COL_HSIZE
code
val K_unchecked value_property_holders
val K_unchecked K
inv !if
inv !ofclass
val K_unchecked obj
val K_unchecked K_object
code
inv WhetherProvides
val K_unchecked V
val K_unchecked 0
inv !and
val K_unchecked holder
inv !provides
val K_unchecked holder
val K_unchecked pr
val K_unchecked 1
inv !return
val K_unchecked 0
code
inv !return
inv !lookup
inv !propertyvalue
val K_unchecked holder
val K_unchecked pr
inv !plus
val K_unchecked V
val K_unchecked COL_HSIZE
inv !return
val K_unchecked 0
constant GProperty K_unchecked_function = GProperty_B __assimilated=1
package WriteGProperty_fn _function
symbol public misc WriteGProperty
@ -97488,48 +97462,21 @@ package main _plain
symbol private misc V
symbol private misc pr
symbol private misc val
symbol private misc obj
symbol private misc holder
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 RunTimeProblem --> /main/BasicInformKit/functions/RunTimeProblem_fn/RunTimeProblem
symbol external misc RTP_PROPOFNOTHING --> /main/BasicInformKit/constants/RTP_PROPOFNOTHING_con/RTP_PROPOFNOTHING
symbol external misc WhetherProvides --> /main/BasicInformKit/functions/WhetherProvides_fn/WhetherProvides
symbol external misc value_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 COL_HSIZE --> /main/BasicInformKit/constants/COL_HSIZE_con/COL_HSIZE
local K K_unchecked
local V K_unchecked
local pr K_unchecked
local val K_unchecked
local obj K_unchecked
local holder K_unchecked
code
inv !ifelse
inv !eq
val K_unchecked K
val K_unchecked OBJECT_TY
code
inv !store
reference
val K_unchecked obj
val K_unchecked V
code
inv !store
reference
val K_unchecked obj
inv !lookup
val K_unchecked value_property_holders
val K_unchecked K
inv !if
inv !eq
val K_unchecked obj
val K_unchecked 0
code
inv RunTimeProblem
val K_unchecked RTP_PROPOFNOTHING
val K_unchecked obj
val K_unchecked pr
inv !return
val K_unchecked 0
inv !ifelse
inv !eq
val K_unchecked K
@ -97545,7 +97492,7 @@ package main _plain
inv !store
reference
inv !propertyvalue
val K_unchecked obj
val K_unchecked V
val K_unchecked pr
val K_unchecked val
code
@ -97560,19 +97507,37 @@ package main _plain
val K_unchecked value_ranges
val K_unchecked K
code
inv RunTimeProblem
val K_unchecked RTP_BADVALUEPROPERTY
inv !return
inv RunTimeProblem
val K_unchecked RTP_BADVALUEPROPERTY
val K_unchecked 1
inv !store
reference
val K_unchecked holder
inv !lookup
val K_unchecked value_property_holders
val K_unchecked K
inv !if
inv !eq
val K_unchecked holder
val K_unchecked 0
code
inv RunTimeProblem
val K_unchecked RTP_PROPOFNOTHING
val K_unchecked holder
val K_unchecked pr
inv !return
val K_unchecked 1
inv !if
inv !provides
val K_unchecked obj
val K_unchecked holder
val K_unchecked pr
code
inv !store
reference
inv !lookup
inv !propertyvalue
val K_unchecked obj
val K_unchecked holder
val K_unchecked pr
inv !plus
val K_unchecked V