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

Fix for Mantis bug 1904

This commit is contained in:
Graham Nelson 2022-04-12 12:32:28 +01:00
parent 6e394e56da
commit ce8014cfc5
69 changed files with 1419 additions and 1079 deletions

View file

@ -298,59 +298,61 @@ indefinite singular depends on the text of the object's name.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax">[ </span><span class="identifier-syntax">IndefArt</span><span class="plain-syntax"> </span><span class="identifier-syntax">obj</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">;</span>
<span class="plain-syntax">[ </span><span class="identifier-syntax">IndefArt</span><span class="plain-syntax"> </span><span class="identifier-syntax">obj</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax"> </span><span class="identifier-syntax">s</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">LIST_WRITER_INTERNAL_RM</span><span class="plain-syntax">(</span><span class="character-syntax">'Y'</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">i</span><span class="plain-syntax"> = </span><span class="identifier-syntax">indef_mode</span><span class="plain-syntax">; </span><span class="identifier-syntax">indef_mode</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">obj</span><span class="plain-syntax"> </span><span class="reserved-syntax">has</span><span class="plain-syntax"> </span><span class="identifier-syntax">proper</span><span class="plain-syntax">) { </span><span class="identifier-syntax">indef_mode</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="reserved-syntax">print</span><span class="plain-syntax"> (</span><span class="identifier-syntax">PSN__</span><span class="plain-syntax">) </span><span class="identifier-syntax">obj</span><span class="plain-syntax">; </span><span class="identifier-syntax">indef_mode</span><span class="plain-syntax"> = </span><span class="identifier-syntax">i</span><span class="plain-syntax">; </span><span class="reserved-syntax">return</span><span class="plain-syntax">; }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax"> = </span><span class="identifier-syntax">indef_mode</span><span class="plain-syntax">; </span><span class="identifier-syntax">indef_mode</span><span class="plain-syntax"> = </span><span class="reserved-syntax">true</span><span class="plain-syntax">; </span><span class="identifier-syntax">s</span><span class="plain-syntax"> = </span><span class="identifier-syntax">self</span><span class="plain-syntax">; </span><span class="identifier-syntax">self</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">obj</span><span class="plain-syntax"> </span><span class="reserved-syntax">has</span><span class="plain-syntax"> </span><span class="identifier-syntax">proper</span><span class="plain-syntax">) { </span><span class="identifier-syntax">indef_mode</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="reserved-syntax">print</span><span class="plain-syntax"> (</span><span class="identifier-syntax">PSN__</span><span class="plain-syntax">) </span><span class="identifier-syntax">obj</span><span class="plain-syntax">; </span><span class="identifier-syntax">indef_mode</span><span class="plain-syntax"> = </span><span class="identifier-syntax">i</span><span class="plain-syntax">; </span><span class="identifier-syntax">self</span><span class="plain-syntax"> = </span><span class="identifier-syntax">s</span><span class="plain-syntax">; </span><span class="reserved-syntax">return</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">article</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">TEXT_TY_Compare</span><span class="plain-syntax">(</span><span class="identifier-syntax">obj</span><span class="plain-syntax">.</span><span class="identifier-syntax">article</span><span class="plain-syntax">, </span><span class="identifier-syntax">EMPTY_TEXT_VALUE</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">PrintOrRun</span><span class="plain-syntax">(</span><span class="identifier-syntax">obj</span><span class="plain-syntax">, </span><span class="identifier-syntax">article</span><span class="plain-syntax">, </span><span class="reserved-syntax">true</span><span class="plain-syntax">); </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">" "</span><span class="plain-syntax">, (</span><span class="identifier-syntax">PSN__</span><span class="plain-syntax">) </span><span class="identifier-syntax">obj</span><span class="plain-syntax">; </span><span class="identifier-syntax">indef_mode</span><span class="plain-syntax"> = </span><span class="identifier-syntax">i</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PrintOrRun</span><span class="plain-syntax">(</span><span class="identifier-syntax">obj</span><span class="plain-syntax">, </span><span class="identifier-syntax">article</span><span class="plain-syntax">, </span><span class="reserved-syntax">true</span><span class="plain-syntax">); </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">" "</span><span class="plain-syntax">, (</span><span class="identifier-syntax">PSN__</span><span class="plain-syntax">) </span><span class="identifier-syntax">obj</span><span class="plain-syntax">; </span><span class="identifier-syntax">indef_mode</span><span class="plain-syntax"> = </span><span class="identifier-syntax">i</span><span class="plain-syntax">; </span><span class="identifier-syntax">self</span><span class="plain-syntax"> = </span><span class="identifier-syntax">s</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">PrefaceByArticle</span><span class="plain-syntax">(</span><span class="identifier-syntax">obj</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">); </span><span class="identifier-syntax">indef_mode</span><span class="plain-syntax"> = </span><span class="identifier-syntax">i</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PrefaceByArticle</span><span class="plain-syntax">(</span><span class="identifier-syntax">obj</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">); </span><span class="identifier-syntax">indef_mode</span><span class="plain-syntax"> = </span><span class="identifier-syntax">i</span><span class="plain-syntax">; </span><span class="identifier-syntax">self</span><span class="plain-syntax"> = </span><span class="identifier-syntax">s</span><span class="plain-syntax">;</span>
<span class="plain-syntax">];</span>
<span class="plain-syntax">[ </span><span class="identifier-syntax">CIndefArt</span><span class="plain-syntax"> </span><span class="identifier-syntax">obj</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">;</span>
<span class="plain-syntax">[ </span><span class="identifier-syntax">CIndefArt</span><span class="plain-syntax"> </span><span class="identifier-syntax">obj</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax"> </span><span class="identifier-syntax">s</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">LIST_WRITER_INTERNAL_RM</span><span class="plain-syntax">(</span><span class="character-syntax">'X'</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">i</span><span class="plain-syntax"> = </span><span class="identifier-syntax">indef_mode</span><span class="plain-syntax">; </span><span class="identifier-syntax">indef_mode</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">i</span><span class="plain-syntax"> = </span><span class="identifier-syntax">indef_mode</span><span class="plain-syntax">; </span><span class="identifier-syntax">indef_mode</span><span class="plain-syntax"> = </span><span class="reserved-syntax">true</span><span class="plain-syntax">; </span><span class="identifier-syntax">s</span><span class="plain-syntax"> = </span><span class="identifier-syntax">self</span><span class="plain-syntax">; </span><span class="identifier-syntax">self</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">obj</span><span class="plain-syntax"> </span><span class="reserved-syntax">has</span><span class="plain-syntax"> </span><span class="identifier-syntax">proper</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">indef_mode</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">caps_mode</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">print</span><span class="plain-syntax"> (</span><span class="identifier-syntax">PSN__</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">indef_mode</span><span class="plain-syntax"> = </span><span class="identifier-syntax">i</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">caps_mode</span><span class="plain-syntax"> = </span><span class="reserved-syntax">false</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">self</span><span class="plain-syntax"> = </span><span class="identifier-syntax">s</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">obj</span><span class="plain-syntax"> </span><span class="reserved-syntax">provides</span><span class="plain-syntax"> </span><span class="identifier-syntax">article</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">TEXT_TY_Compare</span><span class="plain-syntax">(</span><span class="identifier-syntax">obj</span><span class="plain-syntax">.</span><span class="identifier-syntax">article</span><span class="plain-syntax">, </span><span class="identifier-syntax">EMPTY_TEXT_VALUE</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">TEXT_TY_Say_Capitalised</span><span class="plain-syntax">(</span><span class="identifier-syntax">obj</span><span class="plain-syntax">.</span><span class="identifier-syntax">article</span><span class="plain-syntax">); </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">" "</span><span class="plain-syntax">, (</span><span class="identifier-syntax">PSN__</span><span class="plain-syntax">) </span><span class="identifier-syntax">obj</span><span class="plain-syntax">; </span><span class="identifier-syntax">indef_mode</span><span class="plain-syntax"> = </span><span class="identifier-syntax">i</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEXT_TY_Say_Capitalised</span><span class="plain-syntax">(</span><span class="identifier-syntax">obj</span><span class="plain-syntax">.</span><span class="identifier-syntax">article</span><span class="plain-syntax">); </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">" "</span><span class="plain-syntax">, (</span><span class="identifier-syntax">PSN__</span><span class="plain-syntax">) </span><span class="identifier-syntax">obj</span><span class="plain-syntax">; </span><span class="identifier-syntax">indef_mode</span><span class="plain-syntax"> = </span><span class="identifier-syntax">i</span><span class="plain-syntax">; </span><span class="identifier-syntax">self</span><span class="plain-syntax"> = </span><span class="identifier-syntax">s</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">PrefaceByArticle</span><span class="plain-syntax">(</span><span class="identifier-syntax">obj</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">); </span><span class="identifier-syntax">indef_mode</span><span class="plain-syntax"> = </span><span class="identifier-syntax">i</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PrefaceByArticle</span><span class="plain-syntax">(</span><span class="identifier-syntax">obj</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">); </span><span class="identifier-syntax">indef_mode</span><span class="plain-syntax"> = </span><span class="identifier-syntax">i</span><span class="plain-syntax">; </span><span class="identifier-syntax">self</span><span class="plain-syntax"> = </span><span class="identifier-syntax">s</span><span class="plain-syntax">;</span>
<span class="plain-syntax">];</span>
<span class="plain-syntax">[ </span><span class="identifier-syntax">DefArt</span><span class="plain-syntax"> </span><span class="identifier-syntax">obj</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax"> = </span><span class="identifier-syntax">indef_mode</span><span class="plain-syntax">; </span><span class="identifier-syntax">indef_mode</span><span class="plain-syntax"> = </span><span class="reserved-syntax">false</span><span class="plain-syntax">;</span>
<span class="plain-syntax">[ </span><span class="identifier-syntax">DefArt</span><span class="plain-syntax"> </span><span class="identifier-syntax">obj</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax"> </span><span class="identifier-syntax">s</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax"> = </span><span class="identifier-syntax">indef_mode</span><span class="plain-syntax">; </span><span class="identifier-syntax">indef_mode</span><span class="plain-syntax"> = </span><span class="reserved-syntax">false</span><span class="plain-syntax">; </span><span class="identifier-syntax">s</span><span class="plain-syntax"> = </span><span class="identifier-syntax">self</span><span class="plain-syntax">; </span><span class="identifier-syntax">self</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">obj</span><span class="plain-syntax"> </span><span class="reserved-syntax">ofclass</span><span class="plain-syntax"> </span><span class="identifier-syntax">Object</span><span class="plain-syntax">) || </span><span class="identifier-syntax">obj</span><span class="plain-syntax"> </span><span class="reserved-syntax">has</span><span class="plain-syntax"> </span><span class="identifier-syntax">proper</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">indef_mode</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="reserved-syntax">print</span><span class="plain-syntax"> (</span><span class="identifier-syntax">PSN__</span><span class="plain-syntax">) </span><span class="identifier-syntax">obj</span><span class="plain-syntax">; </span><span class="identifier-syntax">indef_mode</span><span class="plain-syntax"> = </span><span class="identifier-syntax">i</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">indef_mode</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="reserved-syntax">print</span><span class="plain-syntax"> (</span><span class="identifier-syntax">PSN__</span><span class="plain-syntax">) </span><span class="identifier-syntax">obj</span><span class="plain-syntax">; </span><span class="identifier-syntax">indef_mode</span><span class="plain-syntax"> = </span><span class="identifier-syntax">i</span><span class="plain-syntax">; </span><span class="identifier-syntax">self</span><span class="plain-syntax"> = </span><span class="identifier-syntax">s</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">PrefaceByArticle</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">indef_mode</span><span class="plain-syntax"> = </span><span class="identifier-syntax">i</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PrefaceByArticle</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">indef_mode</span><span class="plain-syntax"> = </span><span class="identifier-syntax">i</span><span class="plain-syntax">; </span><span class="identifier-syntax">self</span><span class="plain-syntax"> = </span><span class="identifier-syntax">s</span><span class="plain-syntax">;</span>
<span class="plain-syntax">];</span>
<span class="plain-syntax">[ </span><span class="identifier-syntax">CDefArt</span><span class="plain-syntax"> </span><span class="identifier-syntax">obj</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax"> = </span><span class="identifier-syntax">indef_mode</span><span class="plain-syntax">; </span><span class="identifier-syntax">indef_mode</span><span class="plain-syntax"> = </span><span class="reserved-syntax">false</span><span class="plain-syntax">;</span>
<span class="plain-syntax">[ </span><span class="identifier-syntax">CDefArt</span><span class="plain-syntax"> </span><span class="identifier-syntax">obj</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax"> </span><span class="identifier-syntax">s</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax"> = </span><span class="identifier-syntax">indef_mode</span><span class="plain-syntax">; </span><span class="identifier-syntax">indef_mode</span><span class="plain-syntax"> = </span><span class="reserved-syntax">false</span><span class="plain-syntax">; </span><span class="identifier-syntax">s</span><span class="plain-syntax"> = </span><span class="identifier-syntax">self</span><span class="plain-syntax">; </span><span class="identifier-syntax">self</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">obj</span><span class="plain-syntax"> </span><span class="reserved-syntax">ofclass</span><span class="plain-syntax"> </span><span class="identifier-syntax">Object</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">obj</span><span class="plain-syntax"> </span><span class="reserved-syntax">has</span><span class="plain-syntax"> </span><span class="identifier-syntax">proper</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">indef_mode</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">caps_mode</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">print</span><span class="plain-syntax"> (</span><span class="identifier-syntax">PSN__</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">indef_mode</span><span class="plain-syntax"> = </span><span class="identifier-syntax">i</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">caps_mode</span><span class="plain-syntax"> = </span><span class="reserved-syntax">false</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">self</span><span class="plain-syntax"> = </span><span class="identifier-syntax">s</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">obj</span><span class="plain-syntax"> </span><span class="reserved-syntax">ofclass</span><span class="plain-syntax"> </span><span class="identifier-syntax">Object</span><span class="plain-syntax">) || </span><span class="identifier-syntax">obj</span><span class="plain-syntax"> </span><span class="reserved-syntax">has</span><span class="plain-syntax"> </span><span class="identifier-syntax">proper</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">indef_mode</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="reserved-syntax">print</span><span class="plain-syntax"> (</span><span class="identifier-syntax">PSN__</span><span class="plain-syntax">) </span><span class="identifier-syntax">obj</span><span class="plain-syntax">; </span><span class="identifier-syntax">indef_mode</span><span class="plain-syntax"> = </span><span class="identifier-syntax">i</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">indef_mode</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="reserved-syntax">print</span><span class="plain-syntax"> (</span><span class="identifier-syntax">PSN__</span><span class="plain-syntax">) </span><span class="identifier-syntax">obj</span><span class="plain-syntax">; </span><span class="identifier-syntax">indef_mode</span><span class="plain-syntax"> = </span><span class="identifier-syntax">i</span><span class="plain-syntax">; </span><span class="identifier-syntax">self</span><span class="plain-syntax"> = </span><span class="identifier-syntax">s</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">PrefaceByArticle</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">indef_mode</span><span class="plain-syntax"> = </span><span class="identifier-syntax">i</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PrefaceByArticle</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">indef_mode</span><span class="plain-syntax"> = </span><span class="identifier-syntax">i</span><span class="plain-syntax">; </span><span class="identifier-syntax">self</span><span class="plain-syntax"> = </span><span class="identifier-syntax">s</span><span class="plain-syntax">;</span>
<span class="plain-syntax">];</span>
<span class="plain-syntax">[ </span><span class="identifier-syntax">GetGNAOfObject</span><span class="plain-syntax"> </span><span class="identifier-syntax">obj</span><span class="plain-syntax"> </span><span class="identifier-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">gender</span><span class="plain-syntax">;</span>

View file

@ -1399,10 +1399,15 @@ fake action <span class="extract"><span class="extract-syntax">##NotUnderstood</
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">etype</span><span class="plain-syntax"> == </span><span class="identifier-syntax">STUCK_PE</span><span class="plain-syntax">) { </span><span class="identifier-syntax">PARSER_ERROR_INTERNAL_RM</span><span class="plain-syntax">(</span><span class="character-syntax">'A'</span><span class="plain-syntax">); </span><span class="reserved-syntax">new_line</span><span class="plain-syntax">; </span><span class="identifier-syntax">oops_from</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</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">etype</span><span class="plain-syntax"> == </span><span class="identifier-syntax">UPTO_PE</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">inferred_go</span><span class="plain-syntax">) </span><span class="identifier-syntax">PARSER_ERROR_INTERNAL_RM</span><span class="plain-syntax">(</span><span class="character-syntax">'C'</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">PARSER_ERROR_INTERNAL_RM</span><span class="plain-syntax">(</span><span class="character-syntax">'B'</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">m</span><span class="plain-syntax">=0 : </span><span class="identifier-syntax">m</span><span class="plain-syntax">&lt;32 : </span><span class="identifier-syntax">m</span><span class="plain-syntax">++) </span><span class="identifier-syntax">pattern</span><span class="plain-syntax">--&gt;</span><span class="identifier-syntax">m</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pattern2</span><span class="plain-syntax">--&gt;</span><span class="identifier-syntax">m</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">pcount</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pcount2</span><span class="plain-syntax">; </span><span class="identifier-syntax">PrintCommand</span><span class="plain-syntax">(0);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">pcount</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pcount2</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">inferred_go</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PARSER_ERROR_INTERNAL_RM</span><span class="plain-syntax">(</span><span class="character-syntax">'C'</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">print</span><span class="plain-syntax"> (</span><span class="identifier-syntax">name</span><span class="plain-syntax">) </span><span class="identifier-syntax">parser_results</span><span class="plain-syntax">--&gt;</span><span class="identifier-syntax">INP1_PRES</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">PARSER_ERROR_INTERNAL_RM</span><span class="plain-syntax">(</span><span class="character-syntax">'B'</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PrintCommand</span><span class="plain-syntax">(0);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-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">etype</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NUMBER_PE</span><span class="plain-syntax">) { </span><span class="identifier-syntax">PARSER_ERROR_INTERNAL_RM</span><span class="plain-syntax">(</span><span class="character-syntax">'D'</span><span class="plain-syntax">); </span><span class="reserved-syntax">new_line</span><span class="plain-syntax">; }</span>

View file

@ -530,7 +530,7 @@ objects which in all other circumstances never have children in the tree.
<span class="plain-syntax">#</span><span class="identifier-syntax">Ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">DBLW</span><span class="plain-syntax">;</span>
<span class="plain-syntax">[ </span><span class="identifier-syntax">DiagnoseSortList</span><span class="plain-syntax"> </span><span class="identifier-syntax">obj</span><span class="plain-syntax"> </span><span class="identifier-syntax">memb</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">memb</span><span class="plain-syntax">=</span><span class="reserved-syntax">child</span><span class="plain-syntax">(</span><span class="identifier-syntax">obj</span><span class="plain-syntax">): </span><span class="identifier-syntax">memb</span><span class="plain-syntax">~=</span><span class="reserved-syntax">nothing</span><span class="plain-syntax">: </span><span class="identifier-syntax">memb</span><span class="plain-syntax">=</span><span class="reserved-syntax">sibling</span><span class="plain-syntax">(</span><span class="identifier-syntax">memb</span><span class="plain-syntax">)) </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="identifier-syntax">memb</span><span class="plain-syntax">, </span><span class="string-syntax">" --&gt; "</span><span class="plain-syntax">; </span><span class="reserved-syntax">new_line</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">memb</span><span class="plain-syntax">=</span><span class="identifier-syntax">obj</span><span class="plain-syntax">: </span><span class="identifier-syntax">memb</span><span class="plain-syntax">~=</span><span class="reserved-syntax">nothing</span><span class="plain-syntax">: </span><span class="identifier-syntax">memb</span><span class="plain-syntax">=</span><span class="reserved-syntax">sibling</span><span class="plain-syntax">(</span><span class="identifier-syntax">memb</span><span class="plain-syntax">)) </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="identifier-syntax">memb</span><span class="plain-syntax">, </span><span class="string-syntax">" --&gt; "</span><span class="plain-syntax">; </span><span class="reserved-syntax">new_line</span><span class="plain-syntax">;</span>
<span class="plain-syntax">];</span>
<span class="plain-syntax">#</span><span class="identifier-syntax">Endif</span><span class="plain-syntax">;</span>
</pre>

View file

@ -405,59 +405,61 @@ indefinite singular depends on the text of the object's name.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax">[ </span><span class="identifier-syntax">IndefArt</span><span class="plain-syntax"> </span><span class="identifier-syntax">obj</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">;</span>
<span class="plain-syntax">[ </span><span class="identifier-syntax">IndefArt</span><span class="plain-syntax"> </span><span class="identifier-syntax">obj</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax"> </span><span class="identifier-syntax">s</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">LIST_WRITER_INTERNAL_RM</span><span class="plain-syntax">(</span><span class="character-syntax">'Y'</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">i</span><span class="plain-syntax"> = </span><span class="identifier-syntax">indef_mode</span><span class="plain-syntax">; </span><span class="identifier-syntax">indef_mode</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">obj</span><span class="plain-syntax"> </span><span class="reserved-syntax">has</span><span class="plain-syntax"> </span><span class="identifier-syntax">proper</span><span class="plain-syntax">) { </span><span class="identifier-syntax">indef_mode</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="reserved-syntax">print</span><span class="plain-syntax"> (</span><span class="identifier-syntax">PSN__</span><span class="plain-syntax">) </span><span class="identifier-syntax">obj</span><span class="plain-syntax">; </span><span class="identifier-syntax">indef_mode</span><span class="plain-syntax"> = </span><span class="identifier-syntax">i</span><span class="plain-syntax">; </span><span class="reserved-syntax">return</span><span class="plain-syntax">; }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax"> = </span><span class="identifier-syntax">indef_mode</span><span class="plain-syntax">; </span><span class="identifier-syntax">indef_mode</span><span class="plain-syntax"> = </span><span class="reserved-syntax">true</span><span class="plain-syntax">; </span><span class="identifier-syntax">s</span><span class="plain-syntax"> = </span><span class="identifier-syntax">self</span><span class="plain-syntax">; </span><span class="identifier-syntax">self</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">obj</span><span class="plain-syntax"> </span><span class="reserved-syntax">has</span><span class="plain-syntax"> </span><span class="identifier-syntax">proper</span><span class="plain-syntax">) { </span><span class="identifier-syntax">indef_mode</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="reserved-syntax">print</span><span class="plain-syntax"> (</span><span class="identifier-syntax">PSN__</span><span class="plain-syntax">) </span><span class="identifier-syntax">obj</span><span class="plain-syntax">; </span><span class="identifier-syntax">indef_mode</span><span class="plain-syntax"> = </span><span class="identifier-syntax">i</span><span class="plain-syntax">; </span><span class="identifier-syntax">self</span><span class="plain-syntax"> = </span><span class="identifier-syntax">s</span><span class="plain-syntax">; </span><span class="reserved-syntax">return</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">article</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">TEXT_TY_Compare</span><span class="plain-syntax">(</span><span class="identifier-syntax">obj</span><span class="plain-syntax">.</span><span class="identifier-syntax">article</span><span class="plain-syntax">, </span><span class="identifier-syntax">EMPTY_TEXT_VALUE</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">PrintOrRun</span><span class="plain-syntax">(</span><span class="identifier-syntax">obj</span><span class="plain-syntax">, </span><span class="identifier-syntax">article</span><span class="plain-syntax">, </span><span class="reserved-syntax">true</span><span class="plain-syntax">); </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">" "</span><span class="plain-syntax">, (</span><span class="identifier-syntax">PSN__</span><span class="plain-syntax">) </span><span class="identifier-syntax">obj</span><span class="plain-syntax">; </span><span class="identifier-syntax">indef_mode</span><span class="plain-syntax"> = </span><span class="identifier-syntax">i</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PrintOrRun</span><span class="plain-syntax">(</span><span class="identifier-syntax">obj</span><span class="plain-syntax">, </span><span class="identifier-syntax">article</span><span class="plain-syntax">, </span><span class="reserved-syntax">true</span><span class="plain-syntax">); </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">" "</span><span class="plain-syntax">, (</span><span class="identifier-syntax">PSN__</span><span class="plain-syntax">) </span><span class="identifier-syntax">obj</span><span class="plain-syntax">; </span><span class="identifier-syntax">indef_mode</span><span class="plain-syntax"> = </span><span class="identifier-syntax">i</span><span class="plain-syntax">; </span><span class="identifier-syntax">self</span><span class="plain-syntax"> = </span><span class="identifier-syntax">s</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">PrefaceByArticle</span><span class="plain-syntax">(</span><span class="identifier-syntax">obj</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">); </span><span class="identifier-syntax">indef_mode</span><span class="plain-syntax"> = </span><span class="identifier-syntax">i</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PrefaceByArticle</span><span class="plain-syntax">(</span><span class="identifier-syntax">obj</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">); </span><span class="identifier-syntax">indef_mode</span><span class="plain-syntax"> = </span><span class="identifier-syntax">i</span><span class="plain-syntax">; </span><span class="identifier-syntax">self</span><span class="plain-syntax"> = </span><span class="identifier-syntax">s</span><span class="plain-syntax">;</span>
<span class="plain-syntax">];</span>
<span class="plain-syntax">[ </span><span class="identifier-syntax">CIndefArt</span><span class="plain-syntax"> </span><span class="identifier-syntax">obj</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">;</span>
<span class="plain-syntax">[ </span><span class="identifier-syntax">CIndefArt</span><span class="plain-syntax"> </span><span class="identifier-syntax">obj</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax"> </span><span class="identifier-syntax">s</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">LIST_WRITER_INTERNAL_RM</span><span class="plain-syntax">(</span><span class="character-syntax">'X'</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">i</span><span class="plain-syntax"> = </span><span class="identifier-syntax">indef_mode</span><span class="plain-syntax">; </span><span class="identifier-syntax">indef_mode</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">i</span><span class="plain-syntax"> = </span><span class="identifier-syntax">indef_mode</span><span class="plain-syntax">; </span><span class="identifier-syntax">indef_mode</span><span class="plain-syntax"> = </span><span class="reserved-syntax">true</span><span class="plain-syntax">; </span><span class="identifier-syntax">s</span><span class="plain-syntax"> = </span><span class="identifier-syntax">self</span><span class="plain-syntax">; </span><span class="identifier-syntax">self</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">obj</span><span class="plain-syntax"> </span><span class="reserved-syntax">has</span><span class="plain-syntax"> </span><span class="identifier-syntax">proper</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">indef_mode</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">caps_mode</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">print</span><span class="plain-syntax"> (</span><span class="identifier-syntax">PSN__</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">indef_mode</span><span class="plain-syntax"> = </span><span class="identifier-syntax">i</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">caps_mode</span><span class="plain-syntax"> = </span><span class="reserved-syntax">false</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">self</span><span class="plain-syntax"> = </span><span class="identifier-syntax">s</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">obj</span><span class="plain-syntax"> </span><span class="reserved-syntax">provides</span><span class="plain-syntax"> </span><span class="identifier-syntax">article</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">TEXT_TY_Compare</span><span class="plain-syntax">(</span><span class="identifier-syntax">obj</span><span class="plain-syntax">.</span><span class="identifier-syntax">article</span><span class="plain-syntax">, </span><span class="identifier-syntax">EMPTY_TEXT_VALUE</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">TEXT_TY_Say_Capitalised</span><span class="plain-syntax">(</span><span class="identifier-syntax">obj</span><span class="plain-syntax">.</span><span class="identifier-syntax">article</span><span class="plain-syntax">); </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">" "</span><span class="plain-syntax">, (</span><span class="identifier-syntax">PSN__</span><span class="plain-syntax">) </span><span class="identifier-syntax">obj</span><span class="plain-syntax">; </span><span class="identifier-syntax">indef_mode</span><span class="plain-syntax"> = </span><span class="identifier-syntax">i</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEXT_TY_Say_Capitalised</span><span class="plain-syntax">(</span><span class="identifier-syntax">obj</span><span class="plain-syntax">.</span><span class="identifier-syntax">article</span><span class="plain-syntax">); </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">" "</span><span class="plain-syntax">, (</span><span class="identifier-syntax">PSN__</span><span class="plain-syntax">) </span><span class="identifier-syntax">obj</span><span class="plain-syntax">; </span><span class="identifier-syntax">indef_mode</span><span class="plain-syntax"> = </span><span class="identifier-syntax">i</span><span class="plain-syntax">; </span><span class="identifier-syntax">self</span><span class="plain-syntax"> = </span><span class="identifier-syntax">s</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">PrefaceByArticle</span><span class="plain-syntax">(</span><span class="identifier-syntax">obj</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">); </span><span class="identifier-syntax">indef_mode</span><span class="plain-syntax"> = </span><span class="identifier-syntax">i</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PrefaceByArticle</span><span class="plain-syntax">(</span><span class="identifier-syntax">obj</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">); </span><span class="identifier-syntax">indef_mode</span><span class="plain-syntax"> = </span><span class="identifier-syntax">i</span><span class="plain-syntax">; </span><span class="identifier-syntax">self</span><span class="plain-syntax"> = </span><span class="identifier-syntax">s</span><span class="plain-syntax">;</span>
<span class="plain-syntax">];</span>
<span class="plain-syntax">[ </span><span class="identifier-syntax">DefArt</span><span class="plain-syntax"> </span><span class="identifier-syntax">obj</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax"> = </span><span class="identifier-syntax">indef_mode</span><span class="plain-syntax">; </span><span class="identifier-syntax">indef_mode</span><span class="plain-syntax"> = </span><span class="reserved-syntax">false</span><span class="plain-syntax">;</span>
<span class="plain-syntax">[ </span><span class="identifier-syntax">DefArt</span><span class="plain-syntax"> </span><span class="identifier-syntax">obj</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax"> </span><span class="identifier-syntax">s</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax"> = </span><span class="identifier-syntax">indef_mode</span><span class="plain-syntax">; </span><span class="identifier-syntax">indef_mode</span><span class="plain-syntax"> = </span><span class="reserved-syntax">false</span><span class="plain-syntax">; </span><span class="identifier-syntax">s</span><span class="plain-syntax"> = </span><span class="identifier-syntax">self</span><span class="plain-syntax">; </span><span class="identifier-syntax">self</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">obj</span><span class="plain-syntax"> </span><span class="reserved-syntax">ofclass</span><span class="plain-syntax"> </span><span class="identifier-syntax">Object</span><span class="plain-syntax">) || </span><span class="identifier-syntax">obj</span><span class="plain-syntax"> </span><span class="reserved-syntax">has</span><span class="plain-syntax"> </span><span class="identifier-syntax">proper</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">indef_mode</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="reserved-syntax">print</span><span class="plain-syntax"> (</span><span class="identifier-syntax">PSN__</span><span class="plain-syntax">) </span><span class="identifier-syntax">obj</span><span class="plain-syntax">; </span><span class="identifier-syntax">indef_mode</span><span class="plain-syntax"> = </span><span class="identifier-syntax">i</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">indef_mode</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="reserved-syntax">print</span><span class="plain-syntax"> (</span><span class="identifier-syntax">PSN__</span><span class="plain-syntax">) </span><span class="identifier-syntax">obj</span><span class="plain-syntax">; </span><span class="identifier-syntax">indef_mode</span><span class="plain-syntax"> = </span><span class="identifier-syntax">i</span><span class="plain-syntax">; </span><span class="identifier-syntax">self</span><span class="plain-syntax"> = </span><span class="identifier-syntax">s</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">PrefaceByArticle</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">indef_mode</span><span class="plain-syntax"> = </span><span class="identifier-syntax">i</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PrefaceByArticle</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">indef_mode</span><span class="plain-syntax"> = </span><span class="identifier-syntax">i</span><span class="plain-syntax">; </span><span class="identifier-syntax">self</span><span class="plain-syntax"> = </span><span class="identifier-syntax">s</span><span class="plain-syntax">;</span>
<span class="plain-syntax">];</span>
<span class="plain-syntax">[ </span><span class="identifier-syntax">CDefArt</span><span class="plain-syntax"> </span><span class="identifier-syntax">obj</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax"> = </span><span class="identifier-syntax">indef_mode</span><span class="plain-syntax">; </span><span class="identifier-syntax">indef_mode</span><span class="plain-syntax"> = </span><span class="reserved-syntax">false</span><span class="plain-syntax">;</span>
<span class="plain-syntax">[ </span><span class="identifier-syntax">CDefArt</span><span class="plain-syntax"> </span><span class="identifier-syntax">obj</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax"> </span><span class="identifier-syntax">s</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax"> = </span><span class="identifier-syntax">indef_mode</span><span class="plain-syntax">; </span><span class="identifier-syntax">indef_mode</span><span class="plain-syntax"> = </span><span class="reserved-syntax">false</span><span class="plain-syntax">; </span><span class="identifier-syntax">s</span><span class="plain-syntax"> = </span><span class="identifier-syntax">self</span><span class="plain-syntax">; </span><span class="identifier-syntax">self</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">obj</span><span class="plain-syntax"> </span><span class="reserved-syntax">ofclass</span><span class="plain-syntax"> </span><span class="identifier-syntax">Object</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">obj</span><span class="plain-syntax"> </span><span class="reserved-syntax">has</span><span class="plain-syntax"> </span><span class="identifier-syntax">proper</span><span class="plain-syntax"> || </span><span class="identifier-syntax">obj</span><span class="plain-syntax"> == </span><span class="identifier-syntax">player</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">indef_mode</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">caps_mode</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">print</span><span class="plain-syntax"> (</span><span class="identifier-syntax">PSN__</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">indef_mode</span><span class="plain-syntax"> = </span><span class="identifier-syntax">i</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">caps_mode</span><span class="plain-syntax"> = </span><span class="reserved-syntax">false</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">self</span><span class="plain-syntax"> = </span><span class="identifier-syntax">s</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">obj</span><span class="plain-syntax"> </span><span class="reserved-syntax">ofclass</span><span class="plain-syntax"> </span><span class="identifier-syntax">Object</span><span class="plain-syntax">) || </span><span class="identifier-syntax">obj</span><span class="plain-syntax"> </span><span class="reserved-syntax">has</span><span class="plain-syntax"> </span><span class="identifier-syntax">proper</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">indef_mode</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="reserved-syntax">print</span><span class="plain-syntax"> (</span><span class="identifier-syntax">PSN__</span><span class="plain-syntax">) </span><span class="identifier-syntax">obj</span><span class="plain-syntax">; </span><span class="identifier-syntax">indef_mode</span><span class="plain-syntax"> = </span><span class="identifier-syntax">i</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">indef_mode</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="reserved-syntax">print</span><span class="plain-syntax"> (</span><span class="identifier-syntax">PSN__</span><span class="plain-syntax">) </span><span class="identifier-syntax">obj</span><span class="plain-syntax">; </span><span class="identifier-syntax">indef_mode</span><span class="plain-syntax"> = </span><span class="identifier-syntax">i</span><span class="plain-syntax">; </span><span class="identifier-syntax">self</span><span class="plain-syntax"> = </span><span class="identifier-syntax">s</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">PrefaceByArticle</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">indef_mode</span><span class="plain-syntax"> = </span><span class="identifier-syntax">i</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PrefaceByArticle</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">indef_mode</span><span class="plain-syntax"> = </span><span class="identifier-syntax">i</span><span class="plain-syntax">; </span><span class="identifier-syntax">self</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="SP14" class="paragraph-anchor"></a><b>&#167;14. Standard Response Issuing Rule. </b>To print a response, we trigger off the response issuing activity. The following

View file

@ -76,7 +76,7 @@ moves an object to a new position in the object tree.
<span class="plain-syntax">[ </span><span class="identifier-syntax">XAbstractSub</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">XTestMove</span><span class="plain-syntax">(</span><span class="identifier-syntax">noun</span><span class="plain-syntax">, </span><span class="identifier-syntax">second</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">move</span><span class="plain-syntax"> </span><span class="identifier-syntax">noun</span><span class="plain-syntax"> </span><span class="reserved-syntax">to</span><span class="plain-syntax"> </span><span class="identifier-syntax">second</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="string-syntax">"[Abstracted.]"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">say__p</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax">; </span><span class="string-syntax">"[Abstracted.]"</span><span class="plain-syntax">;</span>
<span class="plain-syntax">];</span>
<span class="plain-syntax">[ </span><span class="identifier-syntax">XTestMove</span><span class="plain-syntax"> </span><span class="identifier-syntax">obj</span><span class="plain-syntax"> </span><span class="identifier-syntax">dest</span><span class="plain-syntax">;</span>

View file

@ -301,6 +301,11 @@ attaching it: it cannot, of course, be the core of the resulting object.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax">[ </span><span class="identifier-syntax">PartOf</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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">P</span><span class="plain-syntax"> </span><span class="reserved-syntax">ofclass</span><span class="plain-syntax"> </span><span class="identifier-syntax">K2_thing</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">P</span><span class="plain-syntax">.</span><span class="identifier-syntax">component_parent</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="reserved-syntax">nothing</span><span class="plain-syntax">;</span>
<span class="plain-syntax">];</span>
<span class="plain-syntax">[ </span><span class="identifier-syntax">MakePart</span><span class="plain-syntax"> </span><span class="identifier-syntax">P</span><span class="plain-syntax"> </span><span class="identifier-syntax">Of</span><span class="plain-syntax"> </span><span class="identifier-syntax">First</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">P</span><span class="plain-syntax"> == </span><span class="identifier-syntax">player</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_CANTMAKEPART</span><span class="plain-syntax">, </span><span class="identifier-syntax">Of</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">parent</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">)) </span><span class="reserved-syntax">remove</span><span class="plain-syntax"> </span><span class="identifier-syntax">P</span><span class="plain-syntax">; </span><span class="reserved-syntax">give</span><span class="plain-syntax"> </span><span class="identifier-syntax">P</span><span class="plain-syntax"> ~</span><span class="identifier-syntax">worn</span><span class="plain-syntax">;</span>

View file

@ -1453,13 +1453,9 @@ annotations to them.
<span class="plain-syntax"> </span><span class="identifier-syntax">TextSubstitutions::it_is_not_worth_adding</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">StandardProblems::sentence_problem</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::syntax_tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_TSWithComma</span><span class="plain-syntax">),</span>
<span class="plain-syntax"> </span><span class="string-syntax">"a substitution contains a comma ','"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="string-syntax">"which is against the rules, because 'say' is a special phrase in which the comma "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"divides items in a list of things to say, and so it loses its ordinary meanings. "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"Because of this, no text substitution can contain a comma. "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"(If you're trying to use a value produced by a phrase with a phrase "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"option - say 'the best route from A to B, using even locked doors' - "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"you'll need to put this in a 'let' variable first and then say that, "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"or else define a better text substitution to do the job for you.)"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="string-syntax">"which is (for obscure reasons) against the rules for text substitutions. "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"(You may be able to get around this by placing the phrase containing the "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"comma in round brackets '(' and ')', which reduces the risk of ambiguity.)"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TextSubstitutions::it_is_worth_adding</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
</pre>

View file

@ -190,13 +190,12 @@ more elaborate:
<span class="Preform-function-syntax">&lt;test-case-circumstance-list&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { lookahead }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;test-case-circumstance-list&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;test-case-circumstance&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { 0, - }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;test-case-circumstance&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { 0, - }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;test-case-circumstance&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { 0, - }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-tr2.html#SP3_5" class="named-paragraph-link"><span class="named-paragraph">Issue PM_TestBadRequirements problem</span><span class="named-paragraph-number">3.5</span></a></span>
<span class="Preform-function-syntax">&lt;test-case-circumstance&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">in</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;instance-of-object&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-tr2.html#SP3_2" class="named-paragraph-link"><span class="named-paragraph">Add in-test requirement</span><span class="named-paragraph-number">3.2</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">in</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-tr2.html#SP3_5" class="named-paragraph-link"><span class="named-paragraph">Issue PM_TestBadRequirements problem</span><span class="named-paragraph-number">3.5</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">holding/and/,</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;instance-of-object&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-tr2.html#SP3_3" class="named-paragraph-link"><span class="named-paragraph">Add holding requirement</span><span class="named-paragraph-number">3.3</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">holding/and/,</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-tr2.html#SP3_5" class="named-paragraph-link"><span class="named-paragraph">Issue PM_TestBadRequirements problem</span><span class="named-paragraph-number">3.5</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">with</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-tr2.html#SP3_4" class="named-paragraph-link"><span class="named-paragraph">Issue PM_TestDoubleWith problem</span><span class="named-paragraph-number">3.4</span></a></span>
</pre>
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
@ -242,7 +241,7 @@ more elaborate:
<span class="plain-syntax"> </span><span class="string-syntax">"which should be 'test ... with ... in ...' or '... "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"holding ...'"</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-tr2.html#SP3">&#167;3</a> (three times).</li></ul>
<ul class="endnotetexts"><li>This code is used in <a href="3-tr2.html#SP3">&#167;3</a> (twice).</li></ul>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="3-uor.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-am.html">1</a></li><li class="progresschapter"><a href="2-bv.html">2</a></li><li class="progresscurrentchapter">3</li><li class="progresssection"><a href="3-dlr.html">dlr</a></li><li class="progresssection"><a href="3-pr.html">pr</a></li><li class="progresssection"><a href="3-tr.html">tr</a></li><li class="progresssection"><a href="3-nuor.html">nuor</a></li><li class="progresssection"><a href="3-uor.html">uor</a></li><li class="progresscurrent">tr2</li><li class="progresssection"><a href="3-dbtr.html">dbtr</a></li><li class="progresssection"><a href="3-rpr.html">rpr</a></li><li class="progresssection"><a href="3-nar.html">nar</a></li><li class="progresssection"><a href="3-nlpr.html">nlpr</a></li><li class="progresssection"><a href="3-nrr.html">nrr</a></li><li class="progresssection"><a href="3-npr.html">npr</a></li><li class="progresssection"><a href="3-nvr.html">nvr</a></li><li class="progresssection"><a href="3-nar2.html">nar2</a></li><li class="progresssection"><a href="3-ir.html">ir</a></li><li class="progresschapter"><a href="4-nr.html">4</a></li><li class="progresschapter"><a href="5-id.html">5</a></li><li class="progresschapter"><a href="6-rls.html">6</a></li><li class="progresschapter"><a href="7-tc.html">7</a></li><li class="progresschapter"><a href="8-kpr.html">8</a></li><li class="progressnext"><a href="3-dbtr.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->

View file

@ -289,7 +289,7 @@ of <span class="extract"><span class="extract-syntax">px</span></span> and <span
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>&#167;6. Splitting into cases. </b></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">Assertions::make_coupling</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">Assertions::make_coupling</span></span>:<br/><a href="4-ass.html#SP6_3_1">&#167;6.3.1</a>, <a href="4-ass.html#SP6_3_2">&#167;6.3.2</a>, <a href="4-ass.html#SP6_3_3">&#167;6.3.3</a>, <a href="4-ass.html#SP6_3_5">&#167;6.3.5</a>, <a href="4-ass.html#SP6_3_11">&#167;6.3.11</a>, <a href="4-ass.html#SP6_3_14">&#167;6.3.14</a>, <a href="4-ass.html#SP6_3_15">&#167;6.3.15</a>, <a href="4-ass.html#SP6_3_20">&#167;6.3.20</a>, <a href="4-ass.html#SP6_3_22">&#167;6.3.22</a>, <a href="4-ass.html#SP6_3_25">&#167;6.3.25</a>, <a href="4-ass.html#SP6_3_28">&#167;6.3.28</a>, <a href="4-ass.html#SP6_3_31">&#167;6.3.31</a>, <a href="4-ass.html#SP6_3_34">&#167;6.3.34</a>, <a href="4-ass.html#SP6_3_34_1">&#167;6.3.34.1</a>, <a href="4-ass.html#SP6_3_34_3">&#167;6.3.34.3</a>, <a href="4-ass.html#SP6_3_34_5">&#167;6.3.34.5</a>, <a href="4-ass.html#SP6_3_35">&#167;6.3.35</a>, <a href="4-ass.html#SP6_3_36">&#167;6.3.36</a>, <a href="4-ass.html#SP6_3_37">&#167;6.3.37</a>, <a href="4-ass.html#SP6_3_41_7">&#167;6.3.41.7</a>, <a href="4-ass.html#SP6_3_42">&#167;6.3.42</a><br/>Passes through Major Nodes - <a href="2-ptmn.html#SP3_1_2_3">&#167;3.1.2.3</a><br/>Define by Table Requests - <a href="3-dbtr.html#SP4_1_3">&#167;4.1.3</a><br/>The Creator - <a href="4-tc.html#SP7_4_1">&#167;7.4.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">px</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">py</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Assertions::make_coupling</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">Assertions::make_coupling</span></span>:<br/><a href="4-ass.html#SP6_3_1">&#167;6.3.1</a>, <a href="4-ass.html#SP6_3_2">&#167;6.3.2</a>, <a href="4-ass.html#SP6_3_3">&#167;6.3.3</a>, <a href="4-ass.html#SP6_3_5">&#167;6.3.5</a>, <a href="4-ass.html#SP6_3_11">&#167;6.3.11</a>, <a href="4-ass.html#SP6_3_14">&#167;6.3.14</a>, <a href="4-ass.html#SP6_3_15">&#167;6.3.15</a>, <a href="4-ass.html#SP6_3_20">&#167;6.3.20</a>, <a href="4-ass.html#SP6_3_22">&#167;6.3.22</a>, <a href="4-ass.html#SP6_3_25">&#167;6.3.25</a>, <a href="4-ass.html#SP6_3_28">&#167;6.3.28</a>, <a href="4-ass.html#SP6_3_29">&#167;6.3.29</a>, <a href="4-ass.html#SP6_3_31">&#167;6.3.31</a>, <a href="4-ass.html#SP6_3_34">&#167;6.3.34</a>, <a href="4-ass.html#SP6_3_34_1">&#167;6.3.34.1</a>, <a href="4-ass.html#SP6_3_34_3">&#167;6.3.34.3</a>, <a href="4-ass.html#SP6_3_34_5">&#167;6.3.34.5</a>, <a href="4-ass.html#SP6_3_35">&#167;6.3.35</a>, <a href="4-ass.html#SP6_3_36">&#167;6.3.36</a>, <a href="4-ass.html#SP6_3_37">&#167;6.3.37</a>, <a href="4-ass.html#SP6_3_41_7">&#167;6.3.41.7</a>, <a href="4-ass.html#SP6_3_42">&#167;6.3.42</a><br/>Passes through Major Nodes - <a href="2-ptmn.html#SP3_1_2_3">&#167;3.1.2.3</a><br/>Define by Table Requests - <a href="3-dbtr.html#SP4_1_3">&#167;4.1.3</a><br/>The Creator - <a href="4-tc.html#SP7_4_1">&#167;7.4.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">px</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">py</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG_INDENT</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="4-ass.html#SP6" class="function-link"><span class="function-syntax">Assertions::make_assertion_recursive_inner</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">px</span><span class="plain-syntax">, </span><span class="identifier-syntax">py</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG_OUTDENT</span><span class="plain-syntax">;</span>
@ -1395,6 +1395,13 @@ in this case.
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><a href="4-rpt.html#SP4" class="function-link"><span class="function-syntax">Refiner::turn_player_to_yourself</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">px</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">Node::get_type</span><span class="plain-syntax">(</span><span class="identifier-syntax">px</span><span class="plain-syntax">) == </span><span class="identifier-syntax">PROPER_NOUN_NT</span><span class="plain-syntax">) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">Lvalues::get_nonlocal_variable_if_any</span><span class="plain-syntax">(</span><span class="identifier-syntax">Node::get_evaluation</span><span class="plain-syntax">(</span><span class="identifier-syntax">px</span><span class="plain-syntax">)))) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="4-rpt.html#SP6" class="function-link"><span class="function-syntax">Refiner::nominalise_adjective</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">py</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><a href="4-ass.html#SP6" class="function-link"><span class="function-syntax">Assertions::make_coupling</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">px</span><span class="plain-syntax">, </span><span class="identifier-syntax">py</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="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">global_pass_state</span><span class="plain-syntax">.</span><span class="element-syntax">pass</span><span class="plain-syntax"> == </span><span class="constant-syntax">2</span><span class="plain-syntax">) </span><a href="4-pk.html#SP2" class="function-link"><span class="function-syntax">Assertions::PropertyKnowledge::assert_property_list</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">px</span><span class="plain-syntax">, </span><span class="identifier-syntax">py</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-ass.html#SP6_3">&#167;6.3</a>.</li></ul>
@ -2467,8 +2474,8 @@ can also be used adjectivally.
<span class="plain-syntax"> </span><span class="identifier-syntax">StandardProblems::handmade_problem</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::syntax_tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_CantUncreate</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::issue_problem_segment</span><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><span class="string-syntax">"In order to act on %2, I seem to need to give "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"a new meaning to '%1', something which was created by the earlier "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"sentence %3. That must be wrong somehow: I'm guessing that there "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"a new meaning to '%1', which currently means something created by the "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"earlier sentence %3. That must be wrong, so I'm guessing that there "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"is an accidental clash of names. This sometimes happens when "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"adjectives are being made after objects whose names include them: "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"for instance, defining 'big' as an adjective after having already "</span>

View file

@ -73,6 +73,7 @@ description only, whereas B could be any subtree of an assertion.
<span class="reserved-syntax">typedef</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">implication</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">pcalc_prop</span><span class="plain-syntax"> *</span><span class="identifier-syntax">if_proposition</span><span class="plain-syntax">; </span><span class="comment-syntax"> which objects are affected</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">then_pn</span><span class="plain-syntax">; </span><span class="comment-syntax"> what assertion is implied about them</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">where_declared</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">implied_likelihood</span><span class="plain-syntax">; </span><span class="comment-syntax"> with what certainty level</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">implication</span><span class="plain-syntax">;</span>
@ -131,6 +132,7 @@ is to store them and sit on them.
<span class="plain-syntax"> </span><span class="identifier-syntax">imp</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">if_proposition</span><span class="plain-syntax"> = </span><span class="identifier-syntax">premiss</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">imp</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">then_pn</span><span class="plain-syntax"> = </span><span class="identifier-syntax">py</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">imp</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">implied_likelihood</span><span class="plain-syntax"> = </span><span class="identifier-syntax">prevailing_mood</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">imp</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">where_declared</span><span class="plain-syntax"> = </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ADD_TO_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">imp</span><span class="plain-syntax">, </span><span class="reserved-syntax">implication</span><span class="plain-syntax">, </span><span class="identifier-syntax">InferenceSubjects::get_implications</span><span class="plain-syntax">(</span><span class="identifier-syntax">premiss_kind</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">IMPLICATIONS</span><span class="plain-syntax">, </span><span class="string-syntax">"Forming implication for $j: $D implies\n $T"</span><span class="plain-syntax">,</span>
@ -380,6 +382,7 @@ no better a certainty level.
<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">prop</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Propositions::concatenate</span><span class="plain-syntax">(</span><span class="identifier-syntax">prop</span><span class="plain-syntax">, </span><a href="8-tap.html#SP2" class="function-link"><span class="function-syntax">AdjectivalPredicates::new_atom_on_x</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">aph</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax"> = </span><span class="identifier-syntax">imp</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">where_declared</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Assert::true_about</span><span class="plain-syntax">(</span><span class="identifier-syntax">prop</span><span class="plain-syntax">, </span><span class="identifier-syntax">candidate</span><span class="plain-syntax">, </span><span class="identifier-syntax">CERTAIN_CE</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>
</pre>

View file

@ -188,7 +188,7 @@ though only if it has a positive sense and has a nominal meaning.
</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">Refiner::nominalise_adjective</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">Refiner::nominalise_adjective</span></span>:<br/>Assertions - <a href="4-ass.html#SP6_3_22">&#167;6.3.22</a>, <a href="4-ass.html#SP6_3_26">&#167;6.3.26</a>, <a href="4-ass.html#SP6_3_42">&#167;6.3.42</a><br/>Property Knowledge - <a href="4-pk.html#SP3_3">&#167;3.3</a><br/>Relation Knowledge - <a href="4-rk.html#SP3_1">&#167;3.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">parse_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="function-syntax">Refiner::nominalise_adjective</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">Refiner::nominalise_adjective</span></span>:<br/>Assertions - <a href="4-ass.html#SP6_3_22">&#167;6.3.22</a>, <a href="4-ass.html#SP6_3_26">&#167;6.3.26</a>, <a href="4-ass.html#SP6_3_29">&#167;6.3.29</a>, <a href="4-ass.html#SP6_3_42">&#167;6.3.42</a><br/>Property Knowledge - <a href="4-pk.html#SP3_3">&#167;3.3</a><br/>Relation Knowledge - <a href="4-rk.html#SP3_1">&#167;3.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">parse_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">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">p</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">Node::get_type</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">) == </span><span class="identifier-syntax">ADJECTIVE_NT</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">unary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pred</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::get_predicate</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">if</span><span class="plain-syntax"> (</span><a href="8-tap.html#SP4" class="function-link"><span class="function-syntax">AdjectivalPredicates::parity</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pred</span><span class="plain-syntax">) == </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">) {</span>

View file

@ -786,10 +786,12 @@ by than name.
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">IDTypeData::make_inline</span><button class="popup" onclick="togglePopup('usagePopup21')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup21">Usage of <span class="code-font"><span class="function-syntax">IDTypeData::make_inline</span></span>:<br/>Imperative Definitions - <a href="5-id.html#SP9">&#167;9</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">id_type_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">idtd</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">idtd</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">"null idtd"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">idtd</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">as_inline</span><span class="plain-syntax">.</span><span class="element-syntax">invoked_inline_not_as_call</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">int</span><span class="plain-syntax"> </span><span class="function-syntax">IDTypeData::invoked_inline</span><button class="popup" onclick="togglePopup('usagePopup22')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup22">Usage of <span class="code-font"><span class="function-syntax">IDTypeData::invoked_inline</span></span>:<br/>To Phrase Family - <a href="5-tpf.html#SP10_3">&#167;10.3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">id_body</span><span class="plain-syntax"> *</span><span class="identifier-syntax">idb</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">idb</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">FALSE</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">idb</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">type_data</span><span class="plain-syntax">.</span><span class="element-syntax">as_inline</span><span class="plain-syntax">.</span><span class="element-syntax">invoked_inline_not_as_call</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
@ -797,16 +799,19 @@ by than name.
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">IDTypeData::is_a_let_assignment</span><span class="plain-syntax">(</span><span class="reserved-syntax">id_body</span><span class="plain-syntax"> *</span><span class="identifier-syntax">idb</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">idb</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">FALSE</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">idb</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">type_data</span><span class="plain-syntax">.</span><span class="element-syntax">as_inline</span><span class="plain-syntax">.</span><span class="identifier-syntax">let_phrase</span><span class="plain-syntax"> == </span><span class="constant-syntax">ASSIGNMENT_LET_PHRASE</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="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">IDTypeData::is_a_let_equation</span><span class="plain-syntax">(</span><span class="reserved-syntax">id_body</span><span class="plain-syntax"> *</span><span class="identifier-syntax">idb</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">idb</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">FALSE</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">idb</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">type_data</span><span class="plain-syntax">.</span><span class="element-syntax">as_inline</span><span class="plain-syntax">.</span><span class="identifier-syntax">let_phrase</span><span class="plain-syntax"> == </span><span class="constant-syntax">EQUATION_LET_PHRASE</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="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">IDTypeData::arithmetic_operation</span><button class="popup" onclick="togglePopup('usagePopup23')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup23">Usage of <span class="code-font"><span class="function-syntax">IDTypeData::arithmetic_operation</span></span>:<br/>To Phrase Family - <a href="5-tpf.html#SP10_2">&#167;10.2</a><br/>Equations - <a href="7-eqt.html#SP39_3">&#167;39.3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">id_body</span><span class="plain-syntax"> *</span><span class="identifier-syntax">idb</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">idb</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"> -1;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">idb</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">type_data</span><span class="plain-syntax">.</span><span class="element-syntax">as_inline</span><span class="plain-syntax">.</span><span class="element-syntax">arithmetical_operation</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
@ -817,6 +822,7 @@ by than name.
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">IDTypeData::is_assignment_phrase</span><span class="plain-syntax">(</span><span class="reserved-syntax">id_body</span><span class="plain-syntax"> *</span><span class="identifier-syntax">idb</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">idb</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">FALSE</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">idb</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">type_data</span><span class="plain-syntax">.</span><span class="element-syntax">as_inline</span><span class="plain-syntax">.</span><span class="element-syntax">assignment_phrase</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
@ -826,6 +832,7 @@ by than name.
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">IDTypeData::block_follows</span><span class="plain-syntax">(</span><span class="reserved-syntax">id_body</span><span class="plain-syntax"> *</span><span class="identifier-syntax">idb</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">idb</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">FALSE</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">idb</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">type_data</span><span class="plain-syntax">.</span><span class="element-syntax">as_inline</span><span class="plain-syntax">.</span><span class="element-syntax">block_follows</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>

View file

@ -271,7 +271,8 @@ what looks like text into grammar for parsing.
<pre class="Preform-displayed-code all-displayed-code code-font">
<span class="Preform-function-syntax">&lt;table-column-heading&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">(</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">***</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">)</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-tc.html#SP9_3" class="named-paragraph-link"><span class="named-paragraph">Issue PM_TableColumnBracketed problem</span><span class="named-paragraph-number">9.3</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">(</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">***</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">)</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-tc.html#SP9_4" class="named-paragraph-link"><span class="named-paragraph">Issue PM_TableColumnBracketed problem</span><span class="named-paragraph-number">9.4</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">topic</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">(</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">)</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-tc.html#SP9_3" class="named-paragraph-link"><span class="named-paragraph">Issue PM_TopicText problem</span><span class="named-paragraph-number">9.3</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;s-table-column-name&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">(</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">{...}</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">)</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { EXISTING_TC, RP[1] }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;table-column-heading-bare&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">(</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">{...}</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">)</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { (R[1] == NEW_TC_PROBLEM)?R[1]:NEW_TC, - }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;s-table-column-name&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { EXISTING_TC_WITHOUT_KIND, RP[1] }</span>
@ -309,7 +310,18 @@ what looks like text into grammar for parsing.
<span class="plain-syntax"> ==&gt; { </span><span class="constant-syntax">NEW_TC_PROBLEM</span><span class="plain-syntax">, - };</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-tc.html#SP9">&#167;9</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP9_3" class="paragraph-anchor"></a><b>&#167;9.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_TableColumnBracketed problem</span><span class="named-paragraph-number">9.3</span></span><span class="comment-syntax"> =</span>
<p class="commentary firstcommentary"><a id="SP9_3" class="paragraph-anchor"></a><b>&#167;9.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_TopicText problem</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">StandardProblems::table_problem</span><span class="plain-syntax">(</span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_TopicText</span><span class="plain-syntax">),</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">table_being_examined</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">table_cell_node</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="string-syntax">"In %1, the column name 'topic' is not allowed to have a clarifying kind "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"in brackets after it. Just say 'topic' and leave it at that."</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> ==&gt; { </span><span class="constant-syntax">NEW_TC_PROBLEM</span><span class="plain-syntax">, - };</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-tc.html#SP9">&#167;9</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP9_4" class="paragraph-anchor"></a><b>&#167;9.4. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_TableColumnBracketed problem</span><span class="named-paragraph-number">9.4</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">

View file

@ -41,7 +41,9 @@ function togglePopup(material_id) {
<li><a href="../inform6.html">inform6</a></li>
<li><a href="../inpolicyn.html">inpolicy</a></li>
<li><a href="../inrtpsn.html">inrtps</a></li>
<li><a href="../extensions.html">extensions and kits</a></li>
</ul><h2>Resources</h2><ul>
<li><a href="../extensions.html">extensions</a></li>
<li><a href="../kits.html">kits</a></li>
</ul><h2>Repository</h2><ul>
<li><a href="https://github.com/ganelson/inform"><img src="../docs-assets/github.png" height=18> github</a></li>
</ul><h2>Related Projects</h2><ul>

View file

@ -41,7 +41,9 @@ function togglePopup(material_id) {
<li><a href="../inform6.html">inform6</a></li>
<li><a href="../inpolicyn.html">inpolicy</a></li>
<li><a href="../inrtpsn.html">inrtps</a></li>
<li><a href="../extensions.html">extensions and kits</a></li>
</ul><h2>Resources</h2><ul>
<li><a href="../extensions.html">extensions</a></li>
<li><a href="../kits.html">kits</a></li>
</ul><h2>Repository</h2><ul>
<li><a href="https://github.com/ganelson/inform"><img src="../docs-assets/github.png" height=18> github</a></li>
</ul><h2>Related Projects</h2><ul>

View file

@ -41,7 +41,9 @@ function togglePopup(material_id) {
<li><a href="../inform6.html">inform6</a></li>
<li><a href="../inpolicyn.html">inpolicy</a></li>
<li><a href="../inrtpsn.html">inrtps</a></li>
<li><a href="../extensions.html">extensions and kits</a></li>
</ul><h2>Resources</h2><ul>
<li><a href="../extensions.html">extensions</a></li>
<li><a href="../kits.html">kits</a></li>
</ul><h2>Repository</h2><ul>
<li><a href="https://github.com/ganelson/inform"><img src="../docs-assets/github.png" height=18> github</a></li>
</ul><h2>Related Projects</h2><ul>

View file

@ -41,7 +41,9 @@ function togglePopup(material_id) {
<li><a href="../inform6.html">inform6</a></li>
<li><a href="../inpolicyn.html">inpolicy</a></li>
<li><a href="../inrtpsn.html">inrtps</a></li>
<li><a href="../extensions.html">extensions and kits</a></li>
</ul><h2>Resources</h2><ul>
<li><a href="../extensions.html">extensions</a></li>
<li><a href="../kits.html">kits</a></li>
</ul><h2>Repository</h2><ul>
<li><a href="https://github.com/ganelson/inform"><img src="../docs-assets/github.png" height=18> github</a></li>
</ul><h2>Related Projects</h2><ul>

View file

@ -60,7 +60,9 @@ function togglePopup(material_id) {
<li><a href="../inform6.html">inform6</a></li>
<li><a href="../inpolicyn.html">inpolicy</a></li>
<li><a href="../inrtpsn.html">inrtps</a></li>
<li><a href="../extensions.html">extensions and kits</a></li>
</ul><h2>Resources</h2><ul>
<li><a href="../extensions.html">extensions</a></li>
<li><a href="../kits.html">kits</a></li>
</ul><h2>Repository</h2><ul>
<li><a href="https://github.com/ganelson/inform"><img src="../docs-assets/github.png" height=18> github</a></li>
</ul><h2>Related Projects</h2><ul>

View file

@ -41,7 +41,9 @@ function togglePopup(material_id) {
<li><a href="../inform6.html">inform6</a></li>
<li><a href="../inpolicyn.html">inpolicy</a></li>
<li><a href="../inrtpsn.html">inrtps</a></li>
<li><a href="../extensions.html">extensions and kits</a></li>
</ul><h2>Resources</h2><ul>
<li><a href="../extensions.html">extensions</a></li>
<li><a href="../kits.html">kits</a></li>
</ul><h2>Repository</h2><ul>
<li><a href="https://github.com/ganelson/inform"><img src="../docs-assets/github.png" height=18> github</a></li>
</ul><h2>Related Projects</h2><ul>

View file

@ -60,7 +60,9 @@ function togglePopup(material_id) {
<li><a href="../inform6.html">inform6</a></li>
<li><a href="../inpolicyn.html">inpolicy</a></li>
<li><a href="../inrtpsn.html">inrtps</a></li>
<li><a href="../extensions.html">extensions and kits</a></li>
</ul><h2>Resources</h2><ul>
<li><a href="../extensions.html">extensions</a></li>
<li><a href="../kits.html">kits</a></li>
</ul><h2>Repository</h2><ul>
<li><a href="https://github.com/ganelson/inform"><img src="../docs-assets/github.png" height=18> github</a></li>
</ul><h2>Related Projects</h2><ul>

View file

@ -41,7 +41,9 @@ function togglePopup(material_id) {
<li><a href="../inform6.html">inform6</a></li>
<li><a href="../inpolicyn.html">inpolicy</a></li>
<li><a href="../inrtpsn.html">inrtps</a></li>
<li><a href="../extensions.html">extensions and kits</a></li>
</ul><h2>Resources</h2><ul>
<li><a href="../extensions.html">extensions</a></li>
<li><a href="../kits.html">kits</a></li>
</ul><h2>Repository</h2><ul>
<li><a href="https://github.com/ganelson/inform"><img src="../docs-assets/github.png" height=18> github</a></li>
</ul><h2>Related Projects</h2><ul>

View file

@ -41,7 +41,9 @@ function togglePopup(material_id) {
<li><a href="../inform6.html">inform6</a></li>
<li><a href="../inpolicyn.html">inpolicy</a></li>
<li><a href="../inrtpsn.html">inrtps</a></li>
<li><a href="../extensions.html">extensions and kits</a></li>
</ul><h2>Resources</h2><ul>
<li><a href="../extensions.html">extensions</a></li>
<li><a href="../kits.html">kits</a></li>
</ul><h2>Repository</h2><ul>
<li><a href="https://github.com/ganelson/inform"><img src="../docs-assets/github.png" height=18> github</a></li>
</ul><h2>Related Projects</h2><ul>

View file

@ -60,7 +60,9 @@ function togglePopup(material_id) {
<li><a href="../inform6.html">inform6</a></li>
<li><a href="../inpolicyn.html">inpolicy</a></li>
<li><a href="../inrtpsn.html">inrtps</a></li>
<li><a href="../extensions.html">extensions and kits</a></li>
</ul><h2>Resources</h2><ul>
<li><a href="../extensions.html">extensions</a></li>
<li><a href="../kits.html">kits</a></li>
</ul><h2>Repository</h2><ul>
<li><a href="https://github.com/ganelson/inform"><img src="../docs-assets/github.png" height=18> github</a></li>
</ul><h2>Related Projects</h2><ul>

View file

@ -55,7 +55,9 @@ function togglePopup(material_id) {
<li><a href="../inform6.html">inform6</a></li>
<li><a href="../inpolicyn.html">inpolicy</a></li>
<li><a href="../inrtpsn.html">inrtps</a></li>
<li><a href="../extensions.html">extensions and kits</a></li>
</ul><h2>Resources</h2><ul>
<li><a href="../extensions.html">extensions</a></li>
<li><a href="../kits.html">kits</a></li>
</ul><h2>Repository</h2><ul>
<li><a href="https://github.com/ganelson/inform"><img src="../docs-assets/github.png" height=18> github</a></li>
</ul><h2>Related Projects</h2><ul>

View file

@ -55,7 +55,9 @@ function togglePopup(material_id) {
<li><a href="../inform6.html">inform6</a></li>
<li><a href="../inpolicyn.html">inpolicy</a></li>
<li><a href="../inrtpsn.html">inrtps</a></li>
<li><a href="../extensions.html">extensions and kits</a></li>
</ul><h2>Resources</h2><ul>
<li><a href="../extensions.html">extensions</a></li>
<li><a href="../kits.html">kits</a></li>
</ul><h2>Repository</h2><ul>
<li><a href="https://github.com/ganelson/inform"><img src="../docs-assets/github.png" height=18> github</a></li>
</ul><h2>Related Projects</h2><ul>

View file

@ -55,7 +55,9 @@ function togglePopup(material_id) {
<li><a href="../inform6.html">inform6</a></li>
<li><a href="../inpolicyn.html">inpolicy</a></li>
<li><a href="../inrtpsn.html">inrtps</a></li>
<li><a href="../extensions.html">extensions and kits</a></li>
</ul><h2>Resources</h2><ul>
<li><a href="../extensions.html">extensions</a></li>
<li><a href="../kits.html">kits</a></li>
</ul><h2>Repository</h2><ul>
<li><a href="https://github.com/ganelson/inform"><img src="../docs-assets/github.png" height=18> github</a></li>
</ul><h2>Related Projects</h2><ul>

View file

@ -60,7 +60,9 @@ function togglePopup(material_id) {
<li><a href="../inform6.html">inform6</a></li>
<li><a href="../inpolicyn.html">inpolicy</a></li>
<li><a href="../inrtpsn.html">inrtps</a></li>
<li><a href="../extensions.html">extensions and kits</a></li>
</ul><h2>Resources</h2><ul>
<li><a href="../extensions.html">extensions</a></li>
<li><a href="../kits.html">kits</a></li>
</ul><h2>Repository</h2><ul>
<li><a href="https://github.com/ganelson/inform"><img src="../docs-assets/github.png" height=18> github</a></li>
</ul><h2>Related Projects</h2><ul>

View file

@ -55,7 +55,9 @@ function togglePopup(material_id) {
<li><a href="../inform6.html">inform6</a></li>
<li><a href="../inpolicyn.html">inpolicy</a></li>
<li><a href="../inrtpsn.html">inrtps</a></li>
<li><a href="../extensions.html">extensions and kits</a></li>
</ul><h2>Resources</h2><ul>
<li><a href="../extensions.html">extensions</a></li>
<li><a href="../kits.html">kits</a></li>
</ul><h2>Repository</h2><ul>
<li><a href="https://github.com/ganelson/inform"><img src="../docs-assets/github.png" height=18> github</a></li>
</ul><h2>Related Projects</h2><ul>

View file

@ -60,7 +60,9 @@ function togglePopup(material_id) {
<li><a href="../inform6.html">inform6</a></li>
<li><a href="../inpolicyn.html">inpolicy</a></li>
<li><a href="../inrtpsn.html">inrtps</a></li>
<li><a href="../extensions.html">extensions and kits</a></li>
</ul><h2>Resources</h2><ul>
<li><a href="../extensions.html">extensions</a></li>
<li><a href="../kits.html">kits</a></li>
</ul><h2>Repository</h2><ul>
<li><a href="https://github.com/ganelson/inform"><img src="../docs-assets/github.png" height=18> github</a></li>
</ul><h2>Related Projects</h2><ul>

View file

@ -33,7 +33,9 @@
<li><a href="../inform6.html">inform6</a></li>
<li><a href="../inpolicyn.html">inpolicy</a></li>
<li><a href="../inrtpsn.html">inrtps</a></li>
<li><a href="../extensions.html">extensions and kits</a></li>
</ul><h2>Resources</h2><ul>
<li><a href="../extensions.html">extensions</a></li>
<li><a href="../kits.html">kits</a></li>
</ul><h2>Repository</h2><ul>
<li><a href="https://github.com/ganelson/inform"><img src="../docs-assets/github.png" height=18> github</a></li>
</ul><h2>Related Projects</h2><ul>

View file

@ -52,7 +52,9 @@ MathJax = {
<li><a href="../inform6.html">inform6</a></li>
<li><a href="../inpolicyn.html">inpolicy</a></li>
<li><a href="../inrtpsn.html">inrtps</a></li>
<li><a href="../extensions.html">extensions and kits</a></li>
</ul><h2>Resources</h2><ul>
<li><a href="../extensions.html">extensions</a></li>
<li><a href="../kits.html">kits</a></li>
</ul><h2>Repository</h2><ul>
<li><a href="https://github.com/ganelson/inform"><img src="../docs-assets/github.png" height=18> github</a></li>
</ul><h2>Related Projects</h2><ul>

View file

@ -31,7 +31,9 @@
<li><a href="../inform6.html">inform6</a></li>
<li><a href="../inpolicyn.html">inpolicy</a></li>
<li><a href="../inrtpsn.html">inrtps</a></li>
<li><a href="../extensions.html">extensions and kits</a></li>
</ul><h2>Resources</h2><ul>
<li><a href="../extensions.html">extensions</a></li>
<li><a href="../kits.html">kits</a></li>
</ul><h2>Repository</h2><ul>
<li><a href="https://github.com/ganelson/inform"><img src="../docs-assets/github.png" height=18> github</a></li>
</ul><h2>Related Projects</h2><ul>

View file

@ -1255,7 +1255,7 @@ the absence of other information.)
<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">portable</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Instances::get_creating_sentence</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax"> = </span><span class="identifier-syntax">SPATIAL_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">)-&gt;</span><span class="element-syntax">progenitor_set_at</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">EitherOrProperties::assert</span><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">P_fixed_in_place</span><span class="plain-syntax">, </span><span class="identifier-syntax">Instances::as_subject</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">), </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">CERTAIN_CE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>

View file

@ -151,7 +151,7 @@ a union of the others, and therefore includes incorporation.)
<span class="plain-syntax"> </span><span class="identifier-syntax">R_incorporation</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">BinaryPredicates::make_pair</span><span class="plain-syntax">(</span><span class="identifier-syntax">spatial_bp_family</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">BPTerms::new_full</span><span class="plain-syntax">(</span><span class="identifier-syntax">infs_thing</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">EMPTY_WORDING</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Calculus::Schemas::new</span><span class="plain-syntax">(</span><span class="string-syntax">"(*1.component_parent)"</span><span class="plain-syntax">)),</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Calculus::Schemas::new</span><span class="plain-syntax">(</span><span class="string-syntax">"PartOf(*1)"</span><span class="plain-syntax">)),</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">BPTerms::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">infs_thing</span><span class="plain-syntax">),</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="string-syntax">"incorporates"</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"is-part-of"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Calculus::Schemas::new</span><span class="plain-syntax">(</span><span class="string-syntax">"MakePart(*2,*1)"</span><span class="plain-syntax">), </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">,</span>

View file

@ -265,6 +265,7 @@ as an instance of "... is an action ...", creating a new action.
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;new-action-sentence-object-unarticled&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { pass 1 }</span>
<span class="Preform-function-syntax">&lt;new-action-sentence-object-unarticled&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">action</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">based</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { FALSE, NULL }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">action</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;nounphrase-actionable&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { TRUE, RP[1] }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">action</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-ap.html#SP8_1" class="named-paragraph-link"><span class="named-paragraph">Issue PM_BadActionDeclaration problem</span><span class="named-paragraph-number">8.1</span></a></span>

View file

@ -277,10 +277,12 @@ at runtime, which extends the range of promotions we can make.
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="function-syntax">CompileValues::cast_nonconstant</span><button class="popup" onclick="togglePopup('usagePopup8')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup8">Usage of <span class="code-font"><span class="function-syntax">CompileValues::cast_nonconstant</span></span>:<br/><a href="2-cv.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">value</span><span class="plain-syntax">, </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K_wanted</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">down</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">value</span><span class="plain-syntax"> = </span><a href="2-cv.html#SP7" class="function-link"><span class="function-syntax">CompileValues::cast_constant</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">value</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_wanted</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_found</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Specifications::to_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">value</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-cv.html#SP9" class="function-link"><span class="function-syntax">CompileValues::note_that_kind_is_used</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K_found</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">EmitCode::casting_call</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_found</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_wanted</span><span class="plain-syntax">, </span><span class="identifier-syntax">down</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">Node::is</span><span class="plain-syntax">(</span><span class="identifier-syntax">value</span><span class="plain-syntax">, </span><span class="identifier-syntax">TABLE_ENTRY_NT</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">value</span><span class="plain-syntax"> = </span><a href="2-cv.html#SP7" class="function-link"><span class="function-syntax">CompileValues::cast_constant</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">value</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_wanted</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_found</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Specifications::to_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">value</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-cv.html#SP9" class="function-link"><span class="function-syntax">CompileValues::note_that_kind_is_used</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K_found</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">EmitCode::casting_call</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_found</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_wanted</span><span class="plain-syntax">, </span><span class="identifier-syntax">down</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="identifier-syntax">value</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>

View file

@ -77,7 +77,7 @@ MathJax = {
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../inform7n.html">Inform7</a></li><li><a href="index.html">imperative</a></li><li><a href="index.html#4">Chapter 4: Propositions</a></li><li><b>Compile Deferred Propositions</b></li></ul></div>
<p class="purpose">To compile the Inter functions needed to perform the tests or tasks deferred as being too difficult in their original contexts.</p>
<ul class="toc"><li><a href="4-cdp.html#SP1">&#167;1. Comment</a></li><li><a href="4-cdp.html#SP2">&#167;2. Preliminaries</a></li><li><a href="4-cdp.html#SP3_6_1_1">&#167;3.6.1.1. The Search</a></li><li><a href="4-cdp.html#SP3_6_1_4_1">&#167;3.6.1.4.1. The R-stack</a></li><li><a href="4-cdp.html#SP3_6_1_4_3">&#167;3.6.1.4.3. Compiling the search</a></li><li><a href="4-cdp.html#SP3_6_1_4_3_1">&#167;3.6.1.4.3.1. Predicate runs and their negations</a></li><li><a href="4-cdp.html#SP3_6_1_4_3_5">&#167;3.6.1.4.3.5. Quantifiers and the Q-stack</a></li><li><a href="4-cdp.html#SP3_6_1_4_3_8">&#167;3.6.1.4.3.8. The C-stack</a></li><li><a href="4-cdp.html#SP3_5_3">&#167;3.5.3. Adaptations</a></li><li><a href="4-cdp.html#SP3_6_1_5">&#167;3.6.1.5. Adaptation to CONDITION</a></li><li><a href="4-cdp.html#SP3_6_1_7">&#167;3.6.1.7. Adaptation to NUMBER</a></li><li><a href="4-cdp.html#SP3_6_1_10">&#167;3.6.1.10. Adaptation to LIST</a></li><li><a href="4-cdp.html#SP3_6_1_12">&#167;3.6.1.12. Adaptation to RANDOM</a></li><li><a href="4-cdp.html#SP3_6_1_14">&#167;3.6.1.14. Adaptation to TOTAL</a></li><li><a href="4-cdp.html#SP3_6_1_16">&#167;3.6.1.16. Adaptation to EXTREMAL</a></li><li><a href="4-cdp.html#SP3_6_1_18">&#167;3.6.1.18. Adaptation to LOOP</a></li><li><a href="4-cdp.html#SP4">&#167;4. Compiling loop headers</a></li></ul><hr class="tocbar">
<ul class="toc"><li><a href="4-cdp.html#SP1">&#167;1. Comment</a></li><li><a href="4-cdp.html#SP2">&#167;2. Preliminaries</a></li><li><a href="4-cdp.html#SP3_6_1_1">&#167;3.6.1.1. The Search</a></li><li><a href="4-cdp.html#SP3_6_1_4_1">&#167;3.6.1.4.1. The R-stack</a></li><li><a href="4-cdp.html#SP3_6_1_4_3">&#167;3.6.1.4.3. Compiling the search</a></li><li><a href="4-cdp.html#SP3_6_1_4_3_1">&#167;3.6.1.4.3.1. Predicate runs and their negations</a></li><li><a href="4-cdp.html#SP3_6_1_4_3_5">&#167;3.6.1.4.3.5. Quantifiers and the Q-stack</a></li><li><a href="4-cdp.html#SP3_6_1_4_3_8">&#167;3.6.1.4.3.8. The C-stack</a></li><li><a href="4-cdp.html#SP3_5_3">&#167;3.5.3. Adaptations</a></li><li><a href="4-cdp.html#SP3_6_1_5">&#167;3.6.1.5. Adaptation to CONDITION</a></li><li><a href="4-cdp.html#SP3_6_1_7">&#167;3.6.1.7. Adaptation to NUMBER</a></li><li><a href="4-cdp.html#SP3_6_1_10">&#167;3.6.1.10. Adaptation to LIST</a></li><li><a href="4-cdp.html#SP3_6_1_12">&#167;3.6.1.12. Adaptation to RANDOM</a></li><li><a href="4-cdp.html#SP3_6_1_14">&#167;3.6.1.14. Adaptation to TOTAL</a></li><li><a href="4-cdp.html#SP3_6_1_18">&#167;3.6.1.18. Adaptation to EXTREMAL</a></li><li><a href="4-cdp.html#SP3_6_1_20">&#167;3.6.1.20. Adaptation to LOOP</a></li><li><a href="4-cdp.html#SP4">&#167;4. Compiling loop headers</a></li></ul><hr class="tocbar">
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. Comment. </b>The following compiles an Inter comment noting the reason for a deferral.
</p>
@ -99,6 +99,8 @@ MathJax = {
<span class="plain-syntax"> </span><span class="identifier-syntax">EmitCode::comment</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"How many x satisfy this?"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</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">TOTAL_DEFER:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">EmitCode::comment</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"Find a total property value over all x satisfying:"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</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">TOTAL_REAL_DEFER:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">EmitCode::comment</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"Find a total real property value over all x satisfying:"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</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">RANDOM_OF_DEFER:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">EmitCode::comment</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"Find a random x satisfying:"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</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">MULTIPURPOSE_DEFER:</span>
@ -359,8 +361,12 @@ possibility.
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">NUMBER_OF_DUSAGE:</span><span class="plain-syntax"> </span><span class="identifier-syntax">reason</span><span class="plain-syntax"> = </span><span class="constant-syntax">NUMBER_OF_DEFER</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</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">RANDOM_OF_DUSAGE:</span><span class="plain-syntax"> </span><span class="identifier-syntax">reason</span><span class="plain-syntax"> = </span><span class="constant-syntax">RANDOM_OF_DEFER</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</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">TOTAL_DUSAGE:</span><span class="plain-syntax"> </span><span class="identifier-syntax">reason</span><span class="plain-syntax"> = </span><span class="constant-syntax">TOTAL_DEFER</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</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">TOTAL_REAL_DUSAGE:</span><span class="plain-syntax"> </span><span class="identifier-syntax">reason</span><span class="plain-syntax"> = </span><span class="constant-syntax">TOTAL_REAL_DEFER</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</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">EXTREMAL_DUSAGE:</span><span class="plain-syntax"> </span><span class="identifier-syntax">reason</span><span class="plain-syntax"> = </span><span class="constant-syntax">EXTREMAL_DEFER</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</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">use</span><span class="plain-syntax"> == </span><span class="constant-syntax">TOTAL_REAL_DUSAGE</span><span class="plain-syntax">) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">TargetVMs::supports_floating_point</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::vm</span><span class="plain-syntax">()) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">continue</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">EmitCode::inv</span><span class="plain-syntax">(</span><span class="identifier-syntax">CASE_BIP</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">EmitCode::down</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">EmitCode::val_number</span><span class="plain-syntax">((</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax">) </span><span class="identifier-syntax">use</span><span class="plain-syntax">);</span>
@ -402,11 +408,12 @@ and at the end of the search it performs <span class="extract"><span class="extr
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax">(</span><span class="identifier-syntax">reason</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">NOW_ASSERTION_DEFER:</span><span class="plain-syntax"> </span><span class="reserved-syntax">break</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">CONDITION_DEFER:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-cdp.html#SP3_6_1_5" class="named-paragraph-link"><span class="named-paragraph">Initialisation before CONDITION search</span><span class="named-paragraph-number">3.6.1.5</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</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">EXTREMAL_DEFER:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-cdp.html#SP3_6_1_16" class="named-paragraph-link"><span class="named-paragraph">Initialisation before EXTREMAL search</span><span class="named-paragraph-number">3.6.1.16</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</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">LOOP_DOMAIN_DEFER:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-cdp.html#SP3_6_1_19" class="named-paragraph-link"><span class="named-paragraph">Initialisation before LOOP search</span><span class="named-paragraph-number">3.6.1.19</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</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">EXTREMAL_DEFER:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-cdp.html#SP3_6_1_18" class="named-paragraph-link"><span class="named-paragraph">Initialisation before EXTREMAL search</span><span class="named-paragraph-number">3.6.1.18</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</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">LOOP_DOMAIN_DEFER:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-cdp.html#SP3_6_1_21" class="named-paragraph-link"><span class="named-paragraph">Initialisation before LOOP search</span><span class="named-paragraph-number">3.6.1.21</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</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">NUMBER_OF_DEFER:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-cdp.html#SP3_6_1_7" class="named-paragraph-link"><span class="named-paragraph">Initialisation before NUMBER search</span><span class="named-paragraph-number">3.6.1.7</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</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">LIST_OF_DEFER:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-cdp.html#SP3_6_1_10" class="named-paragraph-link"><span class="named-paragraph">Initialisation before LIST search</span><span class="named-paragraph-number">3.6.1.10</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</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">TOTAL_DEFER:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-cdp.html#SP3_6_1_14" class="named-paragraph-link"><span class="named-paragraph">Initialisation before TOTAL search</span><span class="named-paragraph-number">3.6.1.14</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</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">TOTAL_REAL_DEFER:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-cdp.html#SP3_6_1_15" class="named-paragraph-link"><span class="named-paragraph">Initialisation before TOTAL REAL search</span><span class="named-paragraph-number">3.6.1.15</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</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">RANDOM_OF_DEFER:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-cdp.html#SP3_6_1_12" class="named-paragraph-link"><span class="named-paragraph">Initialisation before RANDOM search</span><span class="named-paragraph-number">3.6.1.12</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-cdp.html#SP3_6_1_4" class="named-paragraph-link"><span class="named-paragraph">Compile code to search for valid combinations of variables</span><span class="named-paragraph-number">3.6.1.4</span></a></span><span class="plain-syntax">;</span>
@ -419,11 +426,12 @@ and at the end of the search it performs <span class="extract"><span class="extr
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax">(</span><span class="identifier-syntax">reason</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">NOW_ASSERTION_DEFER:</span><span class="plain-syntax"> </span><span class="reserved-syntax">break</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">CONDITION_DEFER:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-cdp.html#SP3_6_1_6" class="named-paragraph-link"><span class="named-paragraph">Winding-up after CONDITION search</span><span class="named-paragraph-number">3.6.1.6</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</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">EXTREMAL_DEFER:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-cdp.html#SP3_6_1_17" class="named-paragraph-link"><span class="named-paragraph">Winding-up after EXTREMAL search</span><span class="named-paragraph-number">3.6.1.17</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</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">LOOP_DOMAIN_DEFER:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-cdp.html#SP3_6_1_20" class="named-paragraph-link"><span class="named-paragraph">Winding-up after LOOP search</span><span class="named-paragraph-number">3.6.1.20</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</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">EXTREMAL_DEFER:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-cdp.html#SP3_6_1_19" class="named-paragraph-link"><span class="named-paragraph">Winding-up after EXTREMAL search</span><span class="named-paragraph-number">3.6.1.19</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</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">LOOP_DOMAIN_DEFER:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-cdp.html#SP3_6_1_22" class="named-paragraph-link"><span class="named-paragraph">Winding-up after LOOP search</span><span class="named-paragraph-number">3.6.1.22</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</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">NUMBER_OF_DEFER:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-cdp.html#SP3_6_1_9" class="named-paragraph-link"><span class="named-paragraph">Winding-up after NUMBER search</span><span class="named-paragraph-number">3.6.1.9</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</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">LIST_OF_DEFER:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-cdp.html#SP3_6_1_11" class="named-paragraph-link"><span class="named-paragraph">Winding-up after LIST search</span><span class="named-paragraph-number">3.6.1.11</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</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">TOTAL_DEFER:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-cdp.html#SP3_6_1_15" class="named-paragraph-link"><span class="named-paragraph">Winding-up after TOTAL search</span><span class="named-paragraph-number">3.6.1.15</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</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">TOTAL_DEFER:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-cdp.html#SP3_6_1_16" class="named-paragraph-link"><span class="named-paragraph">Winding-up after TOTAL search</span><span class="named-paragraph-number">3.6.1.16</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</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">TOTAL_REAL_DEFER:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-cdp.html#SP3_6_1_17" class="named-paragraph-link"><span class="named-paragraph">Winding-up after TOTAL REAL search</span><span class="named-paragraph-number">3.6.1.17</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</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">RANDOM_OF_DEFER:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-cdp.html#SP3_6_1_13" class="named-paragraph-link"><span class="named-paragraph">Winding-up after RANDOM search</span><span class="named-paragraph-number">3.6.1.13</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
</pre>
@ -638,11 +646,12 @@ example. (See below.)
<span class="plain-syntax"> </span><span class="reserved-syntax">break</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">NOW_ASSERTION_DEFER:</span><span class="plain-syntax"> </span><span class="reserved-syntax">break</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">CONDITION_DEFER:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-cdp.html#SP3_6_1_4_2_1" class="named-paragraph-link"><span class="named-paragraph">Act on successful match in CONDITION search</span><span class="named-paragraph-number">3.6.1.4.2.1</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</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">EXTREMAL_DEFER:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-cdp.html#SP3_6_1_4_2_6" class="named-paragraph-link"><span class="named-paragraph">Act on successful match in EXTREMAL search</span><span class="named-paragraph-number">3.6.1.4.2.6</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</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">LOOP_DOMAIN_DEFER:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-cdp.html#SP3_6_1_4_2_7" class="named-paragraph-link"><span class="named-paragraph">Act on successful match in LOOP search</span><span class="named-paragraph-number">3.6.1.4.2.7</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</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">EXTREMAL_DEFER:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-cdp.html#SP3_6_1_4_2_7" class="named-paragraph-link"><span class="named-paragraph">Act on successful match in EXTREMAL search</span><span class="named-paragraph-number">3.6.1.4.2.7</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</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">LOOP_DOMAIN_DEFER:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-cdp.html#SP3_6_1_4_2_8" class="named-paragraph-link"><span class="named-paragraph">Act on successful match in LOOP search</span><span class="named-paragraph-number">3.6.1.4.2.8</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</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">NUMBER_OF_DEFER:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-cdp.html#SP3_6_1_4_2_2" class="named-paragraph-link"><span class="named-paragraph">Act on successful match in NUMBER search</span><span class="named-paragraph-number">3.6.1.4.2.2</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</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">LIST_OF_DEFER:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-cdp.html#SP3_6_1_4_2_3" class="named-paragraph-link"><span class="named-paragraph">Act on successful match in LIST search</span><span class="named-paragraph-number">3.6.1.4.2.3</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</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">TOTAL_DEFER:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-cdp.html#SP3_6_1_4_2_5" class="named-paragraph-link"><span class="named-paragraph">Act on successful match in TOTAL search</span><span class="named-paragraph-number">3.6.1.4.2.5</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</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">TOTAL_REAL_DEFER:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-cdp.html#SP3_6_1_4_2_6" class="named-paragraph-link"><span class="named-paragraph">Act on successful match in TOTAL REAL search</span><span class="named-paragraph-number">3.6.1.4.2.6</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</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">RANDOM_OF_DEFER:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-cdp.html#SP3_6_1_4_2_4" class="named-paragraph-link"><span class="named-paragraph">Act on successful match in RANDOM search</span><span class="named-paragraph-number">3.6.1.4.2.4</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
</pre>
@ -1151,6 +1160,9 @@ of variable values is found; and some winding-up code.
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">TOTAL_DEFER:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">total_s</span><span class="plain-syntax"> = </span><a href="3-lv.html#SP9" class="function-link"><span class="function-syntax">LocalVariables::new_internal_as_symbol</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"total"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">break</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">TOTAL_REAL_DEFER:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">total_s</span><span class="plain-syntax"> = </span><a href="3-lv.html#SP9" class="function-link"><span class="function-syntax">LocalVariables::new_internal_as_symbol</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"total"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">break</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">LIST_OF_DEFER:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">counter_s</span><span class="plain-syntax"> = </span><a href="3-lv.html#SP9" class="function-link"><span class="function-syntax">LocalVariables::new_internal_as_symbol</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"counter"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">total_s</span><span class="plain-syntax"> = </span><a href="3-lv.html#SP9" class="function-link"><span class="function-syntax">LocalVariables::new_internal_as_symbol</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"total"</span><span class="plain-syntax">);</span>
@ -1262,7 +1274,7 @@ syntax to break or continue a loop other than the innermost one.
<span class="plain-syntax"> </span><span class="identifier-syntax">EmitCode::lab</span><span class="plain-syntax">(</span><span class="identifier-syntax">NextOuterLoop_labels</span><span class="plain-syntax">[</span><span class="identifier-syntax">reason</span><span class="plain-syntax">]);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">EmitCode::up</span><span class="plain-syntax">();</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-cdp.html#SP3_6_1_4_2_2">&#167;3.6.1.4.2.2</a>, <a href="4-cdp.html#SP3_6_1_4_2_3">&#167;3.6.1.4.2.3</a>, <a href="4-cdp.html#SP3_6_1_4_2_4">&#167;3.6.1.4.2.4</a>, <a href="4-cdp.html#SP3_6_1_4_2_5">&#167;3.6.1.4.2.5</a>, <a href="4-cdp.html#SP3_6_1_19">&#167;3.6.1.19</a> (twice).</li></ul>
<ul class="endnotetexts"><li>This code is used in <a href="4-cdp.html#SP3_6_1_4_2_2">&#167;3.6.1.4.2.2</a>, <a href="4-cdp.html#SP3_6_1_4_2_3">&#167;3.6.1.4.2.3</a>, <a href="4-cdp.html#SP3_6_1_4_2_4">&#167;3.6.1.4.2.4</a>, <a href="4-cdp.html#SP3_6_1_4_2_5">&#167;3.6.1.4.2.5</a>, <a href="4-cdp.html#SP3_6_1_4_2_6">&#167;3.6.1.4.2.6</a>, <a href="4-cdp.html#SP3_6_1_21">&#167;3.6.1.21</a> (twice).</li></ul>
<p class="commentary firstcommentary"><a id="SP3_6_1_8" class="paragraph-anchor"></a><b>&#167;3.6.1.8. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Place next outer loop label</span><span class="named-paragraph-number">3.6.1.8</span></span><span class="comment-syntax"> =</span>
</p>
@ -1546,6 +1558,14 @@ in the domain \(\lbrace x\mid \phi(x)\rbrace\).
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Initialisation before TOTAL search</span><span class="named-paragraph-number">3.6.1.14</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">proposition</span><span class="plain-syntax"> = </span><a href="4-cdp.html#SP5" class="function-link"><span class="function-syntax">DeferredPropositions::compile_loop_header</span></a><span class="plain-syntax">(0, </span><span class="identifier-syntax">var_ix_lv</span><span class="plain-syntax">[0],</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">proposition</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">pdef</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-cdp.html#SP3_6_1">&#167;3.6.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP3_6_1_15" class="paragraph-anchor"></a><b>&#167;3.6.1.15. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Initialisation before TOTAL REAL search</span><span class="named-paragraph-number">3.6.1.15</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">proposition</span><span class="plain-syntax"> = </span><a href="4-cdp.html#SP5" class="function-link"><span class="function-syntax">DeferredPropositions::compile_loop_header</span></a><span class="plain-syntax">(0, </span><span class="identifier-syntax">var_ix_lv</span><span class="plain-syntax">[0],</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">proposition</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">pdef</span><span class="plain-syntax">);</span>
@ -1587,7 +1607,35 @@ which until runtime &mdash; when its identity will be found in the Inter variabl
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-cdp.html#SP3_6_1_4_2_2_1" class="named-paragraph-link"><span class="named-paragraph">Jump to next outer loop for this reason</span><span class="named-paragraph-number">3.6.1.4.2.2.1</span></a></span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-cdp.html#SP3_6_1_4_2">&#167;3.6.1.4.2</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP3_6_1_15" class="paragraph-anchor"></a><b>&#167;3.6.1.15. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Winding-up after TOTAL search</span><span class="named-paragraph-number">3.6.1.15</span></span><span class="comment-syntax"> =</span>
<p class="commentary firstcommentary"><a id="SP3_6_1_4_2_6" class="paragraph-anchor"></a><b>&#167;3.6.1.4.2.6. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Act on successful match in TOTAL REAL search</span><span class="named-paragraph-number">3.6.1.4.2.6</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">EmitCode::inv</span><span class="plain-syntax">(</span><span class="identifier-syntax">STORE_BIP</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">EmitCode::down</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">EmitCode::ref_symbol</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">total_s</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">EmitCode::call</span><span class="plain-syntax">(</span><span class="identifier-syntax">Hierarchy::find</span><span class="plain-syntax">(</span><span class="identifier-syntax">REAL_NUMBER_TY_PLUS_HL</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">EmitCode::down</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">EmitCode::val_symbol</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">total_s</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">EmitCode::inv</span><span class="plain-syntax">(</span><span class="identifier-syntax">PROPERTYVALUE_BIP</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">EmitCode::down</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">EmitCode::val_iname</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">RTKindIDs::weak_iname</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_object</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">EmitCode::val_symbol</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">var_s</span><span class="plain-syntax">[0]);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">multipurpose_function</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">EmitCode::val_iname</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Hierarchy::find</span><span class="plain-syntax">(</span><span class="identifier-syntax">PROPERTY_TO_BE_TOTALLED_HL</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">prn</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_property</span><span class="plain-syntax">(</span><span class="identifier-syntax">pdef</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">defn_ref</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">EmitCode::val_iname</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">RTProperties::iname</span><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><span class="identifier-syntax">EmitCode::up</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">EmitCode::up</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">EmitCode::up</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-cdp.html#SP3_6_1_4_2_2_1" class="named-paragraph-link"><span class="named-paragraph">Jump to next outer loop for this reason</span><span class="named-paragraph-number">3.6.1.4.2.2.1</span></a></span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-cdp.html#SP3_6_1_4_2">&#167;3.6.1.4.2</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP3_6_1_16" class="paragraph-anchor"></a><b>&#167;3.6.1.16. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Winding-up after TOTAL search</span><span class="named-paragraph-number">3.6.1.16</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -1597,7 +1645,17 @@ which until runtime &mdash; when its identity will be found in the Inter variabl
<span class="plain-syntax"> </span><span class="identifier-syntax">EmitCode::up</span><span class="plain-syntax">();</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-cdp.html#SP3_6_1">&#167;3.6.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP3_6_1_16" class="paragraph-anchor"></a><b>&#167;3.6.1.16. Adaptation to EXTREMAL. </b>This is rather similar. We find the member of \(\lbrace x\mid \phi(x)\rbrace\)
<p class="commentary firstcommentary"><a id="SP3_6_1_17" class="paragraph-anchor"></a><b>&#167;3.6.1.17. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Winding-up after TOTAL REAL search</span><span class="named-paragraph-number">3.6.1.17</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">EmitCode::inv</span><span class="plain-syntax">(</span><span class="identifier-syntax">RETURN_BIP</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">EmitCode::down</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">EmitCode::val_symbol</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">total_s</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">EmitCode::up</span><span class="plain-syntax">();</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-cdp.html#SP3_6_1">&#167;3.6.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP3_6_1_18" class="paragraph-anchor"></a><b>&#167;3.6.1.18. Adaptation to EXTREMAL. </b>This is rather similar. We find the member of \(\lbrace x\mid \phi(x)\rbrace\)
which either minimises, or maximises, the value of some property \(P\). We use
two local variables: <span class="extract"><span class="extract-syntax">best</span></span>, the extreme \(P\) value found so far; and <span class="extract"><span class="extract-syntax">best_with</span></span>,
the member of the domain set which achieves that.
@ -1622,7 +1680,7 @@ maximising or minimising, at compile time; but for a multipurpose function
we don't, and have to look that up at run-time.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Initialisation before EXTREMAL search</span><span class="named-paragraph-number">3.6.1.16</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Initialisation before EXTREMAL search</span><span class="named-paragraph-number">3.6.1.18</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -1678,7 +1736,7 @@ we don't, and have to look that up at run-time.
<span class="plain-syntax"> </span><span class="identifier-syntax">proposition</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">pdef</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-cdp.html#SP3_6_1">&#167;3.6.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP3_6_1_4_2_6" class="paragraph-anchor"></a><b>&#167;3.6.1.4.2.6. </b>It might look as if we could speed up the multipurpose case by
<p class="commentary firstcommentary"><a id="SP3_6_1_4_2_7" class="paragraph-anchor"></a><b>&#167;3.6.1.4.2.7. </b>It might look as if we could speed up the multipurpose case by
multiplying by <span class="extract"><span class="extract-syntax">property_loop_sign</span></span>, thus combining the max and min
versions into one, and saving an <span class="extract"><span class="extract-syntax">if</span></span>. But (a) the multiplication is as
expensive as the <span class="extract"><span class="extract-syntax">if</span></span> (remember that on a VM there's no real branch
@ -1687,7 +1745,7 @@ penalty), and (b) we need to watch out because \(-1\) times \(-32768\), on a
multiplying by \(-1\) is order-reversing.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Act on successful match in EXTREMAL search</span><span class="named-paragraph-number">3.6.1.4.2.6</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Act on successful match in EXTREMAL search</span><span class="named-paragraph-number">3.6.1.4.2.7</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -1706,7 +1764,7 @@ multiplying by \(-1\) is order-reversing.
<span class="plain-syntax"> </span><span class="identifier-syntax">EmitCode::down</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">EmitCode::inv</span><span class="plain-syntax">(</span><span class="identifier-syntax">GE_BIP</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">EmitCode::down</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-cdp.html#SP3_6_1_4_2_6_1" class="named-paragraph-link"><span class="named-paragraph">Emit code for a property lookup</span><span class="named-paragraph-number">3.6.1.4.2.6.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-cdp.html#SP3_6_1_4_2_7_1" class="named-paragraph-link"><span class="named-paragraph">Emit code for a property lookup</span><span class="named-paragraph-number">3.6.1.4.2.7.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">EmitCode::val_symbol</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">best_s</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">EmitCode::up</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">EmitCode::code</span><span class="plain-syntax">();</span>
@ -1714,7 +1772,7 @@ multiplying by \(-1\) is order-reversing.
<span class="plain-syntax"> </span><span class="identifier-syntax">EmitCode::inv</span><span class="plain-syntax">(</span><span class="identifier-syntax">STORE_BIP</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">EmitCode::down</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">EmitCode::ref_symbol</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">best_s</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-cdp.html#SP3_6_1_4_2_6_1" class="named-paragraph-link"><span class="named-paragraph">Emit code for a property lookup</span><span class="named-paragraph-number">3.6.1.4.2.6.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-cdp.html#SP3_6_1_4_2_7_1" class="named-paragraph-link"><span class="named-paragraph">Emit code for a property lookup</span><span class="named-paragraph-number">3.6.1.4.2.7.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">EmitCode::up</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">EmitCode::inv</span><span class="plain-syntax">(</span><span class="identifier-syntax">STORE_BIP</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">EmitCode::down</span><span class="plain-syntax">();</span>
@ -1730,7 +1788,7 @@ multiplying by \(-1\) is order-reversing.
<span class="plain-syntax"> </span><span class="identifier-syntax">EmitCode::down</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">EmitCode::inv</span><span class="plain-syntax">(</span><span class="identifier-syntax">LE_BIP</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">EmitCode::down</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-cdp.html#SP3_6_1_4_2_6_1" class="named-paragraph-link"><span class="named-paragraph">Emit code for a property lookup</span><span class="named-paragraph-number">3.6.1.4.2.6.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-cdp.html#SP3_6_1_4_2_7_1" class="named-paragraph-link"><span class="named-paragraph">Emit code for a property lookup</span><span class="named-paragraph-number">3.6.1.4.2.7.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">EmitCode::val_symbol</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">best_s</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">EmitCode::up</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">EmitCode::code</span><span class="plain-syntax">();</span>
@ -1738,7 +1796,7 @@ multiplying by \(-1\) is order-reversing.
<span class="plain-syntax"> </span><span class="identifier-syntax">EmitCode::inv</span><span class="plain-syntax">(</span><span class="identifier-syntax">STORE_BIP</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">EmitCode::down</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">EmitCode::ref_symbol</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">best_s</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-cdp.html#SP3_6_1_4_2_6_1" class="named-paragraph-link"><span class="named-paragraph">Emit code for a property lookup</span><span class="named-paragraph-number">3.6.1.4.2.6.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-cdp.html#SP3_6_1_4_2_7_1" class="named-paragraph-link"><span class="named-paragraph">Emit code for a property lookup</span><span class="named-paragraph-number">3.6.1.4.2.7.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">EmitCode::up</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">EmitCode::inv</span><span class="plain-syntax">(</span><span class="identifier-syntax">STORE_BIP</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">EmitCode::down</span><span class="plain-syntax">();</span>
@ -1755,7 +1813,7 @@ multiplying by \(-1\) is order-reversing.
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">def_prn_sign</span><span class="plain-syntax"> == </span><span class="constant-syntax">1</span><span class="plain-syntax">) </span><span class="identifier-syntax">EmitCode::inv</span><span class="plain-syntax">(</span><span class="identifier-syntax">GE_BIP</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">EmitCode::inv</span><span class="plain-syntax">(</span><span class="identifier-syntax">LE_BIP</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">EmitCode::down</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-cdp.html#SP3_6_1_4_2_6_1" class="named-paragraph-link"><span class="named-paragraph">Emit code for a property lookup</span><span class="named-paragraph-number">3.6.1.4.2.6.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-cdp.html#SP3_6_1_4_2_7_1" class="named-paragraph-link"><span class="named-paragraph">Emit code for a property lookup</span><span class="named-paragraph-number">3.6.1.4.2.7.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">EmitCode::val_symbol</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">best_s</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">EmitCode::up</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">EmitCode::code</span><span class="plain-syntax">();</span>
@ -1763,7 +1821,7 @@ multiplying by \(-1\) is order-reversing.
<span class="plain-syntax"> </span><span class="identifier-syntax">EmitCode::inv</span><span class="plain-syntax">(</span><span class="identifier-syntax">STORE_BIP</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">EmitCode::down</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">EmitCode::ref_symbol</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">best_s</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-cdp.html#SP3_6_1_4_2_6_1" class="named-paragraph-link"><span class="named-paragraph">Emit code for a property lookup</span><span class="named-paragraph-number">3.6.1.4.2.6.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-cdp.html#SP3_6_1_4_2_7_1" class="named-paragraph-link"><span class="named-paragraph">Emit code for a property lookup</span><span class="named-paragraph-number">3.6.1.4.2.7.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">EmitCode::up</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">EmitCode::inv</span><span class="plain-syntax">(</span><span class="identifier-syntax">STORE_BIP</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">EmitCode::down</span><span class="plain-syntax">();</span>
@ -1775,7 +1833,7 @@ multiplying by \(-1\) is order-reversing.
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-cdp.html#SP3_6_1_4_2">&#167;3.6.1.4.2</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP3_6_1_4_2_6_1" class="paragraph-anchor"></a><b>&#167;3.6.1.4.2.6.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Emit code for a property lookup</span><span class="named-paragraph-number">3.6.1.4.2.6.1</span></span><span class="comment-syntax"> =</span>
<p class="commentary firstcommentary"><a id="SP3_6_1_4_2_7_1" class="paragraph-anchor"></a><b>&#167;3.6.1.4.2.7.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Emit code for a property lookup</span><span class="named-paragraph-number">3.6.1.4.2.7.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -1792,8 +1850,8 @@ multiplying by \(-1\) is order-reversing.
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">EmitCode::up</span><span class="plain-syntax">();</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-cdp.html#SP3_6_1_4_2_6">&#167;3.6.1.4.2.6</a> (6 times).</li></ul>
<p class="commentary firstcommentary"><a id="SP3_6_1_17" class="paragraph-anchor"></a><b>&#167;3.6.1.17. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Winding-up after EXTREMAL search</span><span class="named-paragraph-number">3.6.1.17</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="4-cdp.html#SP3_6_1_4_2_7">&#167;3.6.1.4.2.7</a> (6 times).</li></ul>
<p class="commentary firstcommentary"><a id="SP3_6_1_19" class="paragraph-anchor"></a><b>&#167;3.6.1.19. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Winding-up after EXTREMAL search</span><span class="named-paragraph-number">3.6.1.19</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -1803,7 +1861,7 @@ multiplying by \(-1\) is order-reversing.
<span class="plain-syntax"> </span><span class="identifier-syntax">EmitCode::up</span><span class="plain-syntax">();</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-cdp.html#SP3_6_1">&#167;3.6.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP3_6_1_18" class="paragraph-anchor"></a><b>&#167;3.6.1.18. Adaptation to LOOP. </b>Here the proposition is used to iterate through the members of the domain
<p class="commentary firstcommentary"><a id="SP3_6_1_20" class="paragraph-anchor"></a><b>&#167;3.6.1.20. Adaptation to LOOP. </b>Here the proposition is used to iterate through the members of the domain
set \(\lbrace x\mid \phi(x)\rbrace\). Two local variables exist: <span class="extract"><span class="extract-syntax">x</span></span> and <span class="extract"><span class="extract-syntax">x_ix</span></span>.
One of the following is true:
</p>
@ -1829,7 +1887,7 @@ with <span class="extract"><span class="extract-syntax">x_ix</span></span> equal
domain.
</p>
<p class="commentary firstcommentary"><a id="SP3_6_1_19" class="paragraph-anchor"></a><b>&#167;3.6.1.19. </b>Snarkily, this is how we do it:
<p class="commentary firstcommentary"><a id="SP3_6_1_21" class="paragraph-anchor"></a><b>&#167;3.6.1.21. </b>Snarkily, this is how we do it:
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -1849,7 +1907,7 @@ protected <span class="extract"><span class="extract-syntax">objectloop</span></
nobody ever used <span class="extract"><span class="extract-syntax">jump</span></span> to enter a loop body bypassing its header. But the DM4,
which defines I6, does not forbid this, and nor does Inter.
<a href="#fnref:1" title="return to text"> &#x21A9;</a></p></li></ul>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Initialisation before LOOP search</span><span class="named-paragraph-number">3.6.1.19</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Initialisation before LOOP search</span><span class="named-paragraph-number">3.6.1.21</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -1883,7 +1941,7 @@ which defines I6, does not forbid this, and nor does Inter.
<span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">pdef</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-cdp.html#SP3_6_1">&#167;3.6.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP3_6_1_4_2_7" class="paragraph-anchor"></a><b>&#167;3.6.1.4.2.7. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Act on successful match in LOOP search</span><span class="named-paragraph-number">3.6.1.4.2.7</span></span><span class="comment-syntax"> =</span>
<p class="commentary firstcommentary"><a id="SP3_6_1_4_2_8" class="paragraph-anchor"></a><b>&#167;3.6.1.4.2.8. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Act on successful match in LOOP search</span><span class="named-paragraph-number">3.6.1.4.2.8</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -1893,7 +1951,7 @@ which defines I6, does not forbid this, and nor does Inter.
<span class="plain-syntax"> </span><span class="identifier-syntax">EmitCode::up</span><span class="plain-syntax">();</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-cdp.html#SP3_6_1_4_2">&#167;3.6.1.4.2</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP3_6_1_20" class="paragraph-anchor"></a><b>&#167;3.6.1.20. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Winding-up after LOOP search</span><span class="named-paragraph-number">3.6.1.20</span></span><span class="comment-syntax"> =</span>
<p class="commentary firstcommentary"><a id="SP3_6_1_22" class="paragraph-anchor"></a><b>&#167;3.6.1.22. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Winding-up after LOOP search</span><span class="named-paragraph-number">3.6.1.22</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -1964,7 +2022,7 @@ kinds cannot be changed at run-time.
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">i6_schema</span><span class="plain-syntax"> </span><span class="identifier-syntax">loop_schema</span><span class="plain-syntax">;</span>
<span class="identifier-syntax">pcalc_prop</span><span class="plain-syntax"> *</span><span class="function-syntax">DeferredPropositions::compile_loop_header</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">DeferredPropositions::compile_loop_header</span></span>:<br/><a href="4-cdp.html#SP3_6_1_4_3_5">&#167;3.6.1.4.3.5</a>, <a href="4-cdp.html#SP3_6_1_7">&#167;3.6.1.7</a>, <a href="4-cdp.html#SP3_6_1_10">&#167;3.6.1.10</a>, <a href="4-cdp.html#SP3_6_1_12">&#167;3.6.1.12</a>, <a href="4-cdp.html#SP3_6_1_14">&#167;3.6.1.14</a>, <a href="4-cdp.html#SP3_6_1_16">&#167;3.6.1.16</a>, <a href="4-cdp.html#SP3_6_1_19">&#167;3.6.1.19</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">var</span><span class="plain-syntax">, </span><span class="reserved-syntax">local_variable</span><span class="plain-syntax"> *</span><span class="identifier-syntax">index_var</span><span class="plain-syntax">,</span>
<span class="identifier-syntax">pcalc_prop</span><span class="plain-syntax"> *</span><span class="function-syntax">DeferredPropositions::compile_loop_header</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">DeferredPropositions::compile_loop_header</span></span>:<br/><a href="4-cdp.html#SP3_6_1_4_3_5">&#167;3.6.1.4.3.5</a>, <a href="4-cdp.html#SP3_6_1_7">&#167;3.6.1.7</a>, <a href="4-cdp.html#SP3_6_1_10">&#167;3.6.1.10</a>, <a href="4-cdp.html#SP3_6_1_12">&#167;3.6.1.12</a>, <a href="4-cdp.html#SP3_6_1_14">&#167;3.6.1.14</a>, <a href="4-cdp.html#SP3_6_1_15">&#167;3.6.1.15</a>, <a href="4-cdp.html#SP3_6_1_18">&#167;3.6.1.18</a>, <a href="4-cdp.html#SP3_6_1_21">&#167;3.6.1.21</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">var</span><span class="plain-syntax">, </span><span class="reserved-syntax">local_variable</span><span class="plain-syntax"> *</span><span class="identifier-syntax">index_var</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">pcalc_prop</span><span class="plain-syntax"> *</span><span class="identifier-syntax">proposition</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">avoid_parent_optimisation</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">grouped</span><span class="plain-syntax">, </span><span class="reserved-syntax">pcalc_prop_deferral</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pdef</span><span class="plain-syntax">) {</span>

View file

@ -249,13 +249,16 @@ the idea is roughly:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">StandardProblems::sentence_problem</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::syntax_tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_BadRepeatDomain</span><span class="plain-syntax">),</span>
<span class="plain-syntax"> </span><span class="string-syntax">"this describes a collection of values which can't be repeated through"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="string-syntax">"because the possible range is too large (or has no sensible ordering). "</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_source</span><span class="plain-syntax">(1, </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_kind</span><span class="plain-syntax">(2, </span><span class="identifier-syntax">K</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">StandardProblems::handmade_problem</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::syntax_tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_BadRepeatDomain</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::issue_problem_segment</span><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><span class="string-syntax">"In %1, you seem to want to repeat through all possible values which have "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"the kind '%2', and there are just too many of those. "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"For instance, you can 'repeat with D running through doors' because "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"there are only a small number of doors and they can be put in order "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"of creation. But you can't 'repeat with N running through numbers' "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"because numbers are without end."</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="string-syntax">"there are only a small number of doors, but you can't 'repeat with N "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"running through numbers' because numbers are without end."</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::issue_problem_end</span><span class="plain-syntax">();</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-cl.html#SP1">&#167;1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b>Here we compile code to call <span class="extract"><span class="extract-syntax">D(v)</span></span>, on the variable <span class="extract"><span class="extract-syntax">fromv</span></span>, or <span class="extract"><span class="extract-syntax">D(0)</span></span> if

View file

@ -86,8 +86,9 @@ at runtime.
<span class="definition-keyword">define</span> <span class="constant-syntax">LOOP_DOMAIN_DEFER</span><span class="plain-syntax"> </span><span class="constant-syntax">4</span><span class="plain-syntax"> </span><span class="comment-syntax"> "repeat with I running through X"</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">NUMBER_OF_DEFER</span><span class="plain-syntax"> </span><span class="constant-syntax">5</span><span class="plain-syntax"> </span><span class="comment-syntax"> "the number of X"</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">TOTAL_DEFER</span><span class="plain-syntax"> </span><span class="constant-syntax">6</span><span class="plain-syntax"> </span><span class="comment-syntax"> "the total P of X"</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">RANDOM_OF_DEFER</span><span class="plain-syntax"> </span><span class="constant-syntax">7</span><span class="plain-syntax"> </span><span class="comment-syntax"> "a random X"</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">LIST_OF_DEFER</span><span class="plain-syntax"> </span><span class="constant-syntax">8</span><span class="plain-syntax"> </span><span class="comment-syntax"> "the list of X"</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">TOTAL_REAL_DEFER</span><span class="plain-syntax"> </span><span class="constant-syntax">7</span><span class="plain-syntax"> </span><span class="comment-syntax"> "the total P of X"</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">RANDOM_OF_DEFER</span><span class="plain-syntax"> </span><span class="constant-syntax">8</span><span class="plain-syntax"> </span><span class="comment-syntax"> "a random X"</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">LIST_OF_DEFER</span><span class="plain-syntax"> </span><span class="constant-syntax">9</span><span class="plain-syntax"> </span><span class="comment-syntax"> "the list of X"</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">MULTIPURPOSE_DEFER</span><span class="plain-syntax"> </span><span class="constant-syntax">100</span><span class="plain-syntax"> </span><span class="comment-syntax"> potentially any of the above</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">MAX_CINDERS_PER_DEFERRAL</span><span class="plain-syntax"> </span><span class="constant-syntax">16</span>
</pre>
@ -483,8 +484,9 @@ states, times of day, and so on).
<span class="definition-keyword">define</span> <span class="constant-syntax">NUMBER_OF_DUSAGE</span><span class="plain-syntax"> -3 </span><span class="comment-syntax"> return the number of </span>\(w\)<span class="comment-syntax"> such that </span>\(\phi(w)\)
<span class="definition-keyword">define</span> <span class="constant-syntax">RANDOM_OF_DUSAGE</span><span class="plain-syntax"> -4 </span><span class="comment-syntax"> return a random </span>\(w\)<span class="comment-syntax"> such that </span>\(\phi(w)\)<span class="comment-syntax">, or 0 if none exists</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">TOTAL_DUSAGE</span><span class="plain-syntax"> -5 </span><span class="comment-syntax"> return the total value of a property among </span>\(w\)<span class="comment-syntax"> such that </span>\(\phi(w)\)
<span class="definition-keyword">define</span> <span class="constant-syntax">EXTREMAL_DUSAGE</span><span class="plain-syntax"> -6 </span><span class="comment-syntax"> return the maximal property value among such </span>\(w\)
<span class="definition-keyword">define</span> <span class="constant-syntax">LIST_OF_DUSAGE</span><span class="plain-syntax"> -7 </span><span class="comment-syntax"> return the list of </span>\(w\)<span class="comment-syntax"> such that </span>\(\phi(w)\)
<span class="definition-keyword">define</span> <span class="constant-syntax">TOTAL_REAL_DUSAGE</span><span class="plain-syntax"> -6 </span><span class="comment-syntax"> the same, but using real arithmetic</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">EXTREMAL_DUSAGE</span><span class="plain-syntax"> -7 </span><span class="comment-syntax"> return the maximal property value among such </span>\(w\)
<span class="definition-keyword">define</span> <span class="constant-syntax">LIST_OF_DUSAGE</span><span class="plain-syntax"> -8 </span><span class="comment-syntax"> return the list of </span>\(w\)<span class="comment-syntax"> such that </span>\(\phi(w)\)
</pre>
<p class="commentary firstcommentary"><a id="SP13" class="paragraph-anchor"></a><b>&#167;13. </b>Multi-purpose description routines are pretty dandy, then, but they have
one big drawback: they can't be passed cinders, because they might be called
@ -674,6 +676,15 @@ a loop traverses.
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Deferrals::defer_total_of_matches</span><button class="popup" onclick="togglePopup('usagePopup17')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup17">Usage of <span class="code-font"><span class="function-syntax">Deferrals::defer_total_of_matches</span></span>:<br/>Compile Propositions - <a href="4-cp.html#SP6">&#167;6</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">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">spec</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">"total of on non-property"</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">ValueProperties::kind</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">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">reason</span><span class="plain-syntax">, </span><span class="identifier-syntax">usage</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::FloatingPoint::uses_floating_point</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">reason</span><span class="plain-syntax"> = </span><span class="constant-syntax">TOTAL_REAL_DEFER</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">usage</span><span class="plain-syntax"> = </span><span class="constant-syntax">TOTAL_REAL_DUSAGE</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">reason</span><span class="plain-syntax"> = </span><span class="constant-syntax">TOTAL_DEFER</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">usage</span><span class="plain-syntax"> = </span><span class="constant-syntax">TOTAL_DUSAGE</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><a href="4-dtd.html#SP16" class="function-link"><span class="function-syntax">Deferrals::spec_is_variable_of_kind_description</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">EmitCode::inv</span><span class="plain-syntax">(</span><span class="identifier-syntax">SEQUENTIAL_BIP</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">EmitCode::down</span><span class="plain-syntax">();</span>
@ -686,15 +697,14 @@ a loop traverses.
<span class="plain-syntax"> </span><span class="identifier-syntax">EmitCode::inv</span><span class="plain-syntax">(</span><span class="identifier-syntax">INDIRECT1_BIP</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">EmitCode::down</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><a href="2-cv.html#SP5" class="function-link"><span class="function-syntax">CompileValues::to_code_val</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">EmitCode::val_number</span><span class="plain-syntax">((</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax">) </span><span class="constant-syntax">TOTAL_DUSAGE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">EmitCode::val_number</span><span class="plain-syntax">((</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax">) </span><span class="identifier-syntax">usage</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">EmitCode::up</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">EmitCode::up</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">pcalc_prop</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prop</span><span class="plain-syntax"> = </span><span class="identifier-syntax">SentencePropositions::from_spec</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="4-cp.html#SP7" class="function-link"><span class="function-syntax">CompilePropositions::verify_descriptive</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">prop</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="string-syntax">"a total property value for things matching a description"</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="4-dtd.html#SP11" class="function-link"><span class="function-syntax">Deferrals::call_deferred_fn</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">prop</span><span class="plain-syntax">, </span><span class="constant-syntax">TOTAL_DEFER</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">STORE_POINTER_property</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="plain-syntax"> </span><a href="4-dtd.html#SP11" class="function-link"><span class="function-syntax">Deferrals::call_deferred_fn</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">prop</span><span class="plain-syntax">, </span><span class="identifier-syntax">reason</span><span class="plain-syntax">, </span><span class="identifier-syntax">STORE_POINTER_property</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="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>

View file

@ -62,7 +62,7 @@ function togglePopup(material_id) {
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. Upper level: compiling from whole lists. </b>Here, we are given an invocation list <span class="extract"><span class="extract-syntax">invl</span></span>, and we must generate Inter code
to carry it out. The code in this section does some complicated things; the
test grpup <span class="extract"><span class="extract-syntax">:invocations</span></span> may be helpful when maintaining it.
test group <span class="extract"><span class="extract-syntax">:invocations</span></span> may be helpful when maintaining it.
</p>
<pre class="displayed-code all-displayed-code code-font">

View file

@ -339,7 +339,7 @@ specialised than which other ones, and by making a call, we can find out.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="function-syntax">Instances::to_kind</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">Instances::to_kind</span></span>:<br/><a href="2-ins.html#SP5">&#167;5</a>, <a href="2-ins.html#SP11">&#167;11</a>, <a href="2-ins.html#SP15">&#167;15</a>, <a href="2-ins.html#SP16_1">&#167;16.1</a>, <a href="2-ins.html#SP16_2">&#167;16.2</a><br/>Instances as Adjectives - <a href="2-iaa.html#SP2_1">&#167;2.1</a>, <a href="2-iaa.html#SP3">&#167;3</a><br/>Instance Subjects - <a href="4-is2.html#SP1">&#167;1</a><br/>Conditions of Subjects - <a href="4-cos.html#SP3_1">&#167;3.1</a><br/>The Naming Thicket - <a href="5-tnt.html#SP9_1_2">&#167;9.1.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">instance</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="function-syntax">Instances::to_kind</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">Instances::to_kind</span></span>:<br/><a href="2-ins.html#SP5">&#167;5</a>, <a href="2-ins.html#SP11">&#167;11</a>, <a href="2-ins.html#SP15">&#167;15</a>, <a href="2-ins.html#SP16_1">&#167;16.1</a>, <a href="2-ins.html#SP16_2">&#167;16.2</a><br/>Instances as Adjectives - <a href="2-iaa.html#SP2_1">&#167;2.1</a>, <a href="2-iaa.html#SP3">&#167;3</a><br/>Instance Subjects - <a href="4-is2.html#SP1">&#167;1</a><br/>Conditions of Subjects - <a href="4-cos.html#SP3_1">&#167;3.1</a><br/>The Model World - <a href="5-tmw.html#SP4_3">&#167;4.3</a><br/>The Naming Thicket - <a href="5-tnt.html#SP9_1_2">&#167;9.1.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">instance</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">I</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>
<span class="plain-syntax"> </span><span class="reserved-syntax">inference_subject</span><span class="plain-syntax"> *</span><span class="identifier-syntax">inherits_from</span><span class="plain-syntax"> = </span><a href="4-is.html#SP11" class="function-link"><span class="function-syntax">InferenceSubjects::narrowest_broader_subject</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_subject</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="4-ks.html#SP3" class="function-link"><span class="function-syntax">KindSubjects::to_kind</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">inherits_from</span><span class="plain-syntax">);</span>

View file

@ -94,7 +94,7 @@ a go-between.
<span class="plain-syntax"> </span><a href="4-is2.html#SP1" class="function-link"><span class="function-syntax">InstanceSubjects::family</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">STORE_POINTER_instance</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">), </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">instance</span><span class="plain-syntax"> *</span><span class="function-syntax">InstanceSubjects::to_instance</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">InstanceSubjects::to_instance</span></span>:<br/>Inference Subjects - <a href="4-is.html#SP15">&#167;15</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inference_subject</span><span class="plain-syntax"> *</span><span class="identifier-syntax">infs</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">instance</span><span class="plain-syntax"> *</span><span class="function-syntax">InstanceSubjects::to_instance</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">InstanceSubjects::to_instance</span></span>:<br/>Inference Subjects - <a href="4-is.html#SP15">&#167;15</a><br/>The Model World - <a href="5-tmw.html#SP4_3">&#167;4.3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inference_subject</span><span class="plain-syntax"> *</span><span class="identifier-syntax">infs</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">infs</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">infs</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">infs_family</span><span class="plain-syntax"> == </span><span class="identifier-syntax">instances_family</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">RETRIEVE_POINTER_instance</span><span class="plain-syntax">(</span><span class="identifier-syntax">infs</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">represents</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">NULL</span><span class="plain-syntax">;</span>

View file

@ -85,7 +85,7 @@ function togglePopup(material_id) {
<span class="plain-syntax"> </span><span class="identifier-syntax">STORE_POINTER_binary_predicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">bp</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">binary_predicate</span><span class="plain-syntax"> *</span><span class="function-syntax">RelationSubjects::to_bp</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">RelationSubjects::to_bp</span></span>:<br/><a href="4-rs.html#SP3">&#167;3</a>, <a href="4-rs.html#SP4">&#167;4</a><br/>Inference Subjects - <a href="4-is.html#SP17">&#167;17</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inference_subject</span><span class="plain-syntax"> *</span><span class="identifier-syntax">infs</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="function-syntax">RelationSubjects::to_bp</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">RelationSubjects::to_bp</span></span>:<br/><a href="4-rs.html#SP3">&#167;3</a>, <a href="4-rs.html#SP4">&#167;4</a><br/>Inference Subjects - <a href="4-is.html#SP17">&#167;17</a><br/>The Model World - <a href="5-tmw.html#SP4_3">&#167;4.3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inference_subject</span><span class="plain-syntax"> *</span><span class="identifier-syntax">infs</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">infs</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">infs</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">infs_family</span><span class="plain-syntax"> == </span><span class="identifier-syntax">relations_family</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">RETRIEVE_POINTER_binary_predicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">infs</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">represents</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">NULL</span><span class="plain-syntax">;</span>

View file

@ -108,7 +108,7 @@ allow them to be read.
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">family</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="function-syntax">Inferences::where_inferred</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">Inferences::where_inferred</span></span>:<br/>Properties - <a href="3-prp.html#SP17">&#167;17</a><br/>Variable Subjects - <a href="4-vs.html#SP2">&#167;2</a><br/>Relation Subjects - <a href="4-rs.html#SP4">&#167;4</a><br/>Property Inferences - <a href="5-pi.html#SP10">&#167;10</a>, <a href="5-pi.html#SP14">&#167;14</a><br/>Indefinite Appearance - <a href="5-ia.html#SP1_1">&#167;1.1</a>, <a href="5-ia.html#SP2">&#167;2</a><br/>The Model World - <a href="5-tmw.html#SP4_2_1_1_1">&#167;4.2.1.1.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inference</span><span class="plain-syntax"> *</span><span class="identifier-syntax">i</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="function-syntax">Inferences::where_inferred</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">Inferences::where_inferred</span></span>:<br/>Properties - <a href="3-prp.html#SP17">&#167;17</a><br/>Variable Subjects - <a href="4-vs.html#SP2">&#167;2</a><br/>Relation Subjects - <a href="4-rs.html#SP4">&#167;4</a><br/>Property Inferences - <a href="5-pi.html#SP10">&#167;10</a>, <a href="5-pi.html#SP14">&#167;14</a><br/>Indefinite Appearance - <a href="5-ia.html#SP1_1">&#167;1.1</a>, <a href="5-ia.html#SP2">&#167;2</a><br/>The Model World - <a href="5-tmw.html#SP4_2_1_1_1">&#167;4.2.1.1.1</a>, <a href="5-tmw.html#SP4_3">&#167;4.3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inference</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><span class="identifier-syntax">i</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">inferred_from</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>

View file

@ -169,7 +169,7 @@ knowing both of them elsewhere: the inference machinery can't do so for it.
</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">RelationInferences::get_term_subjects</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">RelationInferences::get_term_subjects</span></span>:<br/>Relation Subjects - <a href="4-rs.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inference</span><span class="plain-syntax"> *</span><span class="identifier-syntax">i</span><span class="plain-syntax">,</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">RelationInferences::get_term_subjects</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">RelationInferences::get_term_subjects</span></span>:<br/>Relation Subjects - <a href="4-rs.html#SP3">&#167;3</a><br/>The Model World - <a href="5-tmw.html#SP4_3">&#167;4.3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inference</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">inference_subject</span><span class="plain-syntax"> **</span><span class="identifier-syntax">subj1</span><span class="plain-syntax">, </span><span class="reserved-syntax">inference_subject</span><span class="plain-syntax"> **</span><span class="identifier-syntax">infs2</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">i</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">i</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">family</span><span class="plain-syntax"> != </span><span class="identifier-syntax">relation_inf</span><span class="plain-syntax">)) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"not a relation inf"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">relation_inference_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">data</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_relation_inference_data</span><span class="plain-syntax">(</span><span class="identifier-syntax">i</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">data</span><span class="plain-syntax">);</span>

View file

@ -139,6 +139,7 @@ may be added.
<span class="plain-syntax"> </span><a href="4-is.html#SP24" class="function-link"><span class="function-syntax">InferenceSubjects::check_model</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">infs</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-tmw.html#SP4_1" class="named-paragraph-link"><span class="named-paragraph">Check that properties are permitted</span><span class="named-paragraph-number">4.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-tmw.html#SP4_2" class="named-paragraph-link"><span class="named-paragraph">Check that properties are not contradictory</span><span class="named-paragraph-number">4.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-tmw.html#SP4_3" class="named-paragraph-link"><span class="named-paragraph">Check that relations are permitted</span><span class="named-paragraph-number">4.3</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><a href="5-tmw.html#SP1" class="function-link"><span class="function-syntax">World::ask_plugins_at_stage</span></a><span class="plain-syntax">(</span><span class="constant-syntax">WORLD_STAGE_IV</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
@ -282,6 +283,67 @@ about the Portal, to stand.
<span class="plain-syntax"> </span><span class="string-syntax">"true, there is no way to override that for particular things of the kind."</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="5-tmw.html#SP4_2_1_1">&#167;4.2.1.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP4_3" class="paragraph-anchor"></a><b>&#167;4.3. </b>This is a last line of defence. Suppose we define "to connect to" as a relation
between things and things, and then write "X connects to Y". Inform must clearly
check that X and Y are both things. It does indeed make some checks along those
lines earlier on in compilation, but there are objects whose kinds are not known
until model completion time &mdash; in particular, there can be objects which might
be things or might be rooms, so that we cannot know if "X connects to Y" is
legal until after the model is completed.
</p>
<p class="commentary">But that's now! And so we make one last check, just in case.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Check that relations are permitted</span><span class="named-paragraph-number">4.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="reserved-syntax">inference</span><span class="plain-syntax"> *</span><span class="identifier-syntax">inf</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">POSITIVE_KNOWLEDGE_LOOP</span><span class="plain-syntax">(</span><span class="identifier-syntax">inf</span><span class="plain-syntax">, </span><span class="identifier-syntax">infs</span><span class="plain-syntax">, </span><span class="identifier-syntax">relation_inf</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bp</span><span class="plain-syntax"> = </span><a href="4-rs.html#SP1" class="function-link"><span class="function-syntax">RelationSubjects::to_bp</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">infs</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inference_subject</span><span class="plain-syntax"> *</span><span class="identifier-syntax">left_infs</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inference_subject</span><span class="plain-syntax"> *</span><span class="identifier-syntax">right_infs</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="5-ri.html#SP7" class="function-link"><span class="function-syntax">RelationInferences::get_term_subjects</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">inf</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">left_infs</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">right_infs</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">instance</span><span class="plain-syntax"> *</span><span class="identifier-syntax">left_instance</span><span class="plain-syntax"> = </span><a href="4-is2.html#SP1" class="function-link"><span class="function-syntax">InstanceSubjects::to_instance</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">left_infs</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">instance</span><span class="plain-syntax"> *</span><span class="identifier-syntax">right_instance</span><span class="plain-syntax"> = </span><a href="4-is2.html#SP1" class="function-link"><span class="function-syntax">InstanceSubjects::to_instance</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">right_infs</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">left_kind</span><span class="plain-syntax"> = </span><a href="2-ins.html#SP10" class="function-link"><span class="function-syntax">Instances::to_kind</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">left_instance</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">right_kind</span><span class="plain-syntax"> = </span><a href="2-ins.html#SP10" class="function-link"><span class="function-syntax">Instances::to_kind</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">right_instance</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">left_needed_kind</span><span class="plain-syntax"> = </span><span class="identifier-syntax">BinaryPredicates::term_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">bp</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">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">right_needed_kind</span><span class="plain-syntax"> = </span><span class="identifier-syntax">BinaryPredicates::term_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">, </span><span class="constant-syntax">1</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">left_instance</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">Kinds::conforms_to</span><span class="plain-syntax">(</span><span class="identifier-syntax">left_kind</span><span class="plain-syntax">, </span><span class="identifier-syntax">left_needed_kind</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax"> = </span><a href="5-inf.html#SP3" class="function-link"><span class="function-syntax">Inferences::where_inferred</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">inf</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_source</span><span class="plain-syntax">(1, </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_object</span><span class="plain-syntax">(2, </span><span class="identifier-syntax">left_instance</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_kind</span><span class="plain-syntax">(3, </span><span class="identifier-syntax">left_kind</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_kind</span><span class="plain-syntax">(4, </span><span class="identifier-syntax">left_needed_kind</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_kind</span><span class="plain-syntax">(5, </span><span class="identifier-syntax">right_needed_kind</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">StandardProblems::handmade_problem</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::syntax_tree</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">PM_LateLeftTermWrongKind</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::issue_problem_segment</span><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><span class="string-syntax">"You wrote %1, but I think the kind of %2 is %3, and not %4, "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"which is what this relationship would need it to be. (It "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"relates %4 to %5.)"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::issue_problem_end</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">right_instance</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">Kinds::conforms_to</span><span class="plain-syntax">(</span><span class="identifier-syntax">right_kind</span><span class="plain-syntax">, </span><span class="identifier-syntax">right_needed_kind</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax"> = </span><a href="5-inf.html#SP3" class="function-link"><span class="function-syntax">Inferences::where_inferred</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">inf</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_source</span><span class="plain-syntax">(1, </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_object</span><span class="plain-syntax">(2, </span><span class="identifier-syntax">right_instance</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_kind</span><span class="plain-syntax">(3, </span><span class="identifier-syntax">right_kind</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_kind</span><span class="plain-syntax">(4, </span><span class="identifier-syntax">left_needed_kind</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_kind</span><span class="plain-syntax">(5, </span><span class="identifier-syntax">right_needed_kind</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">StandardProblems::handmade_problem</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::syntax_tree</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">PM_LateRightTermWrongKind</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::issue_problem_segment</span><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><span class="string-syntax">"You wrote %1, but I think the kind of %2 is %3, and not %5, "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"which is what this relationship would need it to be. (It "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"relates %4 to %5.)"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::issue_problem_end</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="5-tmw.html#SP4">&#167;4</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>&#167;5. Stage V. </b>A final chance to add properties which may assist the run-time implementation
of whatever a plugin is concerned with, but which is not allowed to make
changes to the model as it would be understood by the author.

View file

@ -41,7 +41,9 @@ function togglePopup(material_id) {
<li><a href="../inform6.html">inform6</a></li>
<li><a href="../inpolicyn.html">inpolicy</a></li>
<li><a href="../inrtpsn.html">inrtps</a></li>
<li><a href="../extensions.html">extensions and kits</a></li>
</ul><h2>Resources</h2><ul>
<li><a href="../extensions.html">extensions</a></li>
<li><a href="../kits.html">kits</a></li>
</ul><h2>Repository</h2><ul>
<li><a href="https://github.com/ganelson/inform"><img src="../docs-assets/github.png" height=18> github</a></li>
</ul><h2>Related Projects</h2><ul>
@ -110,7 +112,7 @@ syntax tree.
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">LexiconModule::write_meaning_ANNOT</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">LexiconModule::write_meaning_ANNOT</span></span>:<br/><a href="1-lm.html#SP3_2">&#167;3.2</a></span></button><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">parse_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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Node::get_meaning</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">"{meaning: "</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">" {meaning: "</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-em.html#SP6" class="function-link"><span class="function-syntax">ExcerptMeanings::log</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">Node::get_meaning</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">"}"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>

View file

@ -41,7 +41,9 @@ function togglePopup(material_id) {
<li><a href="../inform6.html">inform6</a></li>
<li><a href="../inpolicyn.html">inpolicy</a></li>
<li><a href="../inrtpsn.html">inrtps</a></li>
<li><a href="../extensions.html">extensions and kits</a></li>
</ul><h2>Resources</h2><ul>
<li><a href="../extensions.html">extensions</a></li>
<li><a href="../kits.html">kits</a></li>
</ul><h2>Repository</h2><ul>
<li><a href="https://github.com/ganelson/inform"><img src="../docs-assets/github.png" height=18> github</a></li>
</ul><h2>Related Projects</h2><ul>

View file

@ -55,7 +55,9 @@ MathJax = {
<li><a href="../inform6.html">inform6</a></li>
<li><a href="../inpolicyn.html">inpolicy</a></li>
<li><a href="../inrtpsn.html">inrtps</a></li>
<li><a href="../extensions.html">extensions and kits</a></li>
</ul><h2>Resources</h2><ul>
<li><a href="../extensions.html">extensions</a></li>
<li><a href="../kits.html">kits</a></li>
</ul><h2>Repository</h2><ul>
<li><a href="https://github.com/ganelson/inform"><img src="../docs-assets/github.png" height=18> github</a></li>
</ul><h2>Related Projects</h2><ul>

View file

@ -41,7 +41,9 @@ function togglePopup(material_id) {
<li><a href="../inform6.html">inform6</a></li>
<li><a href="../inpolicyn.html">inpolicy</a></li>
<li><a href="../inrtpsn.html">inrtps</a></li>
<li><a href="../extensions.html">extensions and kits</a></li>
</ul><h2>Resources</h2><ul>
<li><a href="../extensions.html">extensions</a></li>
<li><a href="../kits.html">kits</a></li>
</ul><h2>Repository</h2><ul>
<li><a href="https://github.com/ganelson/inform"><img src="../docs-assets/github.png" height=18> github</a></li>
</ul><h2>Related Projects</h2><ul>

View file

@ -33,7 +33,9 @@
<li><a href="../inform6.html">inform6</a></li>
<li><a href="../inpolicyn.html">inpolicy</a></li>
<li><a href="../inrtpsn.html">inrtps</a></li>
<li><a href="../extensions.html">extensions and kits</a></li>
</ul><h2>Resources</h2><ul>
<li><a href="../extensions.html">extensions</a></li>
<li><a href="../kits.html">kits</a></li>
</ul><h2>Repository</h2><ul>
<li><a href="https://github.com/ganelson/inform"><img src="../docs-assets/github.png" height=18> github</a></li>
</ul><h2>Related Projects</h2><ul>

View file

@ -33,7 +33,9 @@
<li><a href="../inform6.html">inform6</a></li>
<li><a href="../inpolicyn.html">inpolicy</a></li>
<li><a href="../inrtpsn.html">inrtps</a></li>
<li><a href="../extensions.html">extensions and kits</a></li>
</ul><h2>Resources</h2><ul>
<li><a href="../extensions.html">extensions</a></li>
<li><a href="../kits.html">kits</a></li>
</ul><h2>Repository</h2><ul>
<li><a href="https://github.com/ganelson/inform"><img src="../docs-assets/github.png" height=18> github</a></li>
</ul><h2>Related Projects</h2><ul>
@ -179,14 +181,14 @@ number of successes.
</li></ul>
<pre class="undisplayed-code all-displayed-code code-font">
<span class="plain-syntax">Size of lexicon: 3100 excerpt meanings</span>
<span class="plain-syntax"> Stored among 839 words out of total vocabulary of 10562</span>
<span class="plain-syntax"> Stored among 839 words out of total vocabulary of 10564</span>
<span class="plain-syntax"> 709 words have a start list: longest belongs to report (with 293 meanings)</span>
<span class="plain-syntax"> 15 words have an end list: longest belongs to case (with 6 meanings)</span>
<span class="plain-syntax"> 29 words have a middle list: longest belongs to to (with 4 meanings)</span>
<span class="plain-syntax"> 108 words have a subset list: longest belongs to street (with 4 meanings)</span>
<span class="plain-syntax">Number of attempts to retrieve: 106231</span>
<span class="plain-syntax"> of which unsuccessful: 88619</span>
<span class="plain-syntax">Number of attempts to retrieve: 106257</span>
<span class="plain-syntax"> of which unsuccessful: 88645</span>
<span class="plain-syntax"> of which successful: 17612</span>
<span class="plain-syntax">Total attempts to match against excerpt meanings: 253682</span>

View file

@ -31,7 +31,9 @@
<li><a href="../inform6.html">inform6</a></li>
<li><a href="../inpolicyn.html">inpolicy</a></li>
<li><a href="../inrtpsn.html">inrtps</a></li>
<li><a href="../extensions.html">extensions and kits</a></li>
</ul><h2>Resources</h2><ul>
<li><a href="../extensions.html">extensions</a></li>
<li><a href="../kits.html">kits</a></li>
</ul><h2>Repository</h2><ul>
<li><a href="https://github.com/ganelson/inform"><img src="../docs-assets/github.png" height=18> github</a></li>
</ul><h2>Related Projects</h2><ul>

View file

@ -280,6 +280,7 @@ are used correctly.
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Dash::check_invl</span><span class="plain-syntax">(</span><span class="identifier-syntax">parse_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">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">MATCHING</span><span class="plain-syntax">, </span><span class="string-syntax">"Dash (1): invocation list '%W'\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">Node::get_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">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">MATCHING</span><span class="plain-syntax">, </span><span class="string-syntax">"p = $T\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="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="5-dsh.html#SP8" class="function-link"><span class="function-syntax">Dash::funnel_to_level_2</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
@ -485,7 +486,7 @@ from a text substitution.)
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-dsh.html#SP9_1_1_3_1_2" class="named-paragraph-link"><span class="named-paragraph">Produce the token for a phrase deciding a value</span><span class="named-paragraph-number">9.1.1.3.1.2</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-dsh.html#SP9_1_1_3_1_3" class="named-paragraph-link"><span class="named-paragraph">Produce the token for a constant rvalue</span><span class="named-paragraph-number">9.1.1.3.1.3</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">Problems::issue_problem_segment</span><span class="plain-syntax">(</span><span class="string-syntax">"%1 = &lt;i&gt;%2&lt;/i&gt;"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">Problems::issue_problem_segment</span><span class="plain-syntax">(</span><span class="string-syntax">"%1 = %2"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::issue_problem_end</span><span class="plain-syntax">();</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="5-dsh.html#SP9_1_1_3">&#167;9.1.1.3</a>.</li></ul>
@ -493,27 +494,27 @@ from a text substitution.)
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::issue_problem_segment</span><span class="plain-syntax">(</span><span class="string-syntax">"%1 = &lt;i&gt;%2&lt;/i&gt;, holding &lt;i&gt;%3&lt;/i&gt;"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::issue_problem_segment</span><span class="plain-syntax">(</span><span class="string-syntax">"%1 = %2, holding %3"</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="5-dsh.html#SP9_1_1_3_1">&#167;9.1.1.3.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP9_1_1_3_1_2" class="paragraph-anchor"></a><b>&#167;9.1.1.3.1.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Produce the token for a phrase deciding a value</span><span class="named-paragraph-number">9.1.1.3.1.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">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">seg</span><span class="plain-syntax"> = </span><span class="string-syntax">"%1 = an instruction to work out &lt;i&gt;%3&lt;/i&gt;"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">seg</span><span class="plain-syntax"> = </span><span class="string-syntax">"%1 = an instruction to work out %3"</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">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">seg</span><span class="plain-syntax"> = </span><span class="string-syntax">"%1 = a phrase"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">found_invl</span><span class="plain-syntax"> = </span><span class="identifier-syntax">itpt</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_parsed</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">inv</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_THROUGH_ALTERNATIVES</span><span class="plain-syntax">(</span><span class="identifier-syntax">inv</span><span class="plain-syntax">, </span><span class="identifier-syntax">found_invl</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"$e\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">inv</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-dsh.html#SP21" class="function-link"><span class="function-syntax">Dash::reading_passed</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">inv</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">seg</span><span class="plain-syntax"> = </span><span class="string-syntax">"%1 = an instruction I think should work out &lt;i&gt;%3&lt;/i&gt;, "</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">seg</span><span class="plain-syntax"> = </span><span class="string-syntax">"%1 = an instruction I think should work out %3, "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"but which I can't make sense of"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="plain-syntax">&lt;</span><a href="4-inv.html#SP6" class="function-link"><span class="function-syntax">Invocations::get_no_tokens</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">inv</span><span class="plain-syntax">); </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tok</span><span class="plain-syntax"> = </span><a href="4-inv.html#SP10" class="function-link"><span class="function-syntax">Invocations::get_token_as_parsed</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">inv</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Node::is</span><span class="plain-syntax">(</span><span class="identifier-syntax">tok</span><span class="plain-syntax">, </span><span class="identifier-syntax">UNKNOWN_NT</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_wording</span><span class="plain-syntax">(4, </span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">tok</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">seg</span><span class="plain-syntax"> = </span><span class="string-syntax">"%1 = an instruction I think should work out &lt;i&gt;%3&lt;/i&gt;, "</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">seg</span><span class="plain-syntax"> = </span><span class="string-syntax">"%1 = an instruction I think should work out %3, "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"but which I can't perform because '%4' doesn't make sense here"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
@ -527,13 +528,13 @@ from a text substitution.)
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">seg</span><span class="plain-syntax"> = </span><span class="string-syntax">"%1 = &lt;i&gt;%3&lt;/i&gt;"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">seg</span><span class="plain-syntax"> = </span><span class="string-syntax">"%1 = %3"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="2-rvl.html#SP21" class="function-link"><span class="function-syntax">Rvalues::is_CONSTANT_construction</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">itpt</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_parsed</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">property</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prn</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::get_constant_property</span><span class="plain-syntax">(</span><span class="identifier-syntax">itpt</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_parsed</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_value_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="identifier-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bp</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ValueProperties::get_stored_relation</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">bp</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">seg</span><span class="plain-syntax"> = </span><span class="string-syntax">"%1 = &lt;i&gt;%3&lt;/i&gt;, which is used to store %4, "</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">seg</span><span class="plain-syntax"> = </span><span class="string-syntax">"%1 = %3, which is used to store %4, "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"but is not the same thing as the relation itself"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_relation</span><span class="plain-syntax">(4, </span><span class="identifier-syntax">bp</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
@ -1203,6 +1204,16 @@ checking.
<span class="plain-syntax"> </span><span class="identifier-syntax">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">MATCHING</span><span class="plain-syntax">, </span><span class="string-syntax">"Winnow %s from $T\n"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">invocational</span><span class="plain-syntax">)?</span><span class="string-syntax">"invocationally"</span><span class="plain-syntax">:</span><span class="string-syntax">"regularly"</span><span class="plain-syntax">, </span><span class="identifier-syntax">Dash_ambiguity_list</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">invocational</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">dubious</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">ref</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="identifier-syntax">ref</span><span class="plain-syntax">&lt;</span><span class="identifier-syntax">no_of_possible_readings</span><span class="plain-syntax">; </span><span class="identifier-syntax">ref</span><span class="plain-syntax">++) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">inv</span><span class="plain-syntax"> = </span><span class="identifier-syntax">list_of_possible_readings</span><span class="plain-syntax">[</span><span class="identifier-syntax">ref</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">Node::is</span><span class="plain-syntax">(</span><span class="identifier-syntax">inv</span><span class="plain-syntax">, </span><span class="identifier-syntax">INVOCATION_NT</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">dubious</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><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">dubious</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="5-dsh.html#SP10_9_2_3_1_1" class="named-paragraph-link"><span class="named-paragraph">Issue the dubious ambiguity problem message</span><span class="named-paragraph-number">10.9.2.3.1.1</span></a></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">invocational</span><span class="plain-syntax">) </span><span class="identifier-syntax">Dash_ambiguity_list</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</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">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">last_survivor</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
@ -1235,12 +1246,33 @@ checking.
<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">nfi</span><span class="plain-syntax"> != </span><span class="identifier-syntax">nti</span><span class="plain-syntax">) </span><span class="identifier-syntax">number_ambiguity</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><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">number_ambiguity</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="5-dsh.html#SP10_9_2_3_1_1" class="named-paragraph-link"><span class="named-paragraph">Issue the number ambiguity problem message</span><span class="named-paragraph-number">10.9.2.3.1.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">number_ambiguity</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="5-dsh.html#SP10_9_2_3_1_2" class="named-paragraph-link"><span class="named-paragraph">Issue the number ambiguity problem message</span><span class="named-paragraph-number">10.9.2.3.1.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">MATCHING</span><span class="plain-syntax">, </span><span class="string-syntax">"After winnowing, CS is $T\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="5-dsh.html#SP10_9_2_3">&#167;10.9.2.3</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP10_9_2_3_1_1" class="paragraph-anchor"></a><b>&#167;10.9.2.3.1.1. </b>This is another sort of error which couldn't happen with a conventional
<p class="commentary firstcommentary"><a id="SP10_9_2_3_1_1" class="paragraph-anchor"></a><b>&#167;10.9.2.3.1.1. </b>This is a last-throw-of-the-dice problem message, designed to pick up just
a few really awkward ambiguities which have been missed elsewhere in the parser
or in Dash.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue the dubious ambiguity problem message</span><span class="named-paragraph-number">10.9.2.3.1.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="constant-syntax">THIS_IS_AN_ORDINARY_PROBLEM</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_source</span><span class="plain-syntax">(1, </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_number</span><span class="plain-syntax">(2, &amp;</span><span class="identifier-syntax">no_of_possible_readings</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_wording</span><span class="plain-syntax">(3, </span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">list_of_possible_readings</span><span class="plain-syntax">[0]));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">StandardProblems::handmade_problem</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::syntax_tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_DubiousAmbiguity</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::issue_problem_segment</span><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><span class="string-syntax">"The phrase %1 is ambiguous in a way that I can't sort out. "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"I can see %2 different meanings of '%3', and no good way to choose."</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::issue_problem_end</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">NEVER_MATCH</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="5-dsh.html#SP10_9_2_3_1">&#167;10.9.2.3.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP10_9_2_3_1_2" class="paragraph-anchor"></a><b>&#167;10.9.2.3.1.2. </b>This is another sort of error which couldn't happen with a conventional
programming language &mdash; in C, for instance, it's syntactically obvious
how many arguments a function call has, because the brackets and commas
are unambiguous. But in Inform, there are no reserved tokens of syntax
@ -1249,7 +1281,7 @@ list which have different numbers of arguments to each other, and there's
no way safely to adjudicate that at run-time.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue the number ambiguity problem message</span><span class="named-paragraph-number">10.9.2.3.1.1</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue the number ambiguity problem message</span><span class="named-paragraph-number">10.9.2.3.1.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -2523,6 +2555,24 @@ a property when recovering from other problems.
<span class="plain-syntax"> </span><span class="string-syntax">"since the entry is taken from something which isn't a table."</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">NEVER_MATCH</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">K_snippet</span><span class="plain-syntax">) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">Kinds::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">key_kind</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_snippet</span><span class="plain-syntax">)) &amp;&amp; (</span><span class="identifier-syntax">Kinds::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">col_contents_kind</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_text</span><span class="plain-syntax">))) {</span>
<span class="plain-syntax"> </span><span class="constant-syntax">THIS_IS_A_GROSSER_THAN_GROSS_PROBLEM</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_source</span><span class="plain-syntax">(1, </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_kind</span><span class="plain-syntax">(2, </span><span class="identifier-syntax">col_contents_kind</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_kind</span><span class="plain-syntax">(3, </span><span class="identifier-syntax">key_kind</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_wording</span><span class="plain-syntax">(4, </span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">StandardProblems::handmade_problem</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::syntax_tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_TableCorrFruitless2</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::issue_problem_segment</span><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><span class="string-syntax">"In the sentence %1, you seem to be looking up a corresponding "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"entry in a table: but you're looking up a snippet of a command "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"(%3) in a column of text. Although those look the same, they "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"really aren't, and no match can be made. (You might be able to "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"fix matters by converting the snippet to text, say writing '\"[%4]\"' "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"in place of '%4'.)"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::issue_problem_end</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">NEVER_MATCH</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">Kinds::compatible</span><span class="plain-syntax">(</span><span class="identifier-syntax">key_kind</span><span class="plain-syntax">, </span><span class="identifier-syntax">col_contents_kind</span><span class="plain-syntax">) == </span><span class="identifier-syntax">NEVER_MATCH</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="constant-syntax">THIS_IS_A_GROSSER_THAN_GROSS_PROBLEM</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_source</span><span class="plain-syntax">(1, </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax">);</span>

View file

@ -5048,7 +5048,7 @@
<np-existential> hits 33/108264 nti 21 constraint CS = {21} extremes [1, 1]
English:
there
(hits 33/132) (matched: 'there') constraint CS = {21} extremes [1, 1]
(hits 33/133) (matched: 'there') constraint CS = {21} extremes [1, 1]
<np-articled> hits 2082/4164 nti 14 constraint (none) extremes [1, infinity)
English:
@ -6138,17 +6138,15 @@
constraint DS = {14} extremes [3, infinity)
<test-case-circumstance>
constraint DS = {14} extremes [2, infinity)
{...}
constraint (none) extremes [1, infinity)
<test-case-circumstance> nti 14 constraint DS = {14} extremes [2, infinity)
English:
in <instance-of-object>
constraint DS = {14} extremes [2, infinity)
in {...}
constraint DS = {14} extremes [2, infinity)
holding/and/, <instance-of-object>
constraint DS = {14} extremes [2, infinity)
holding/and/, {...}
constraint DS = {14} extremes [2, infinity)
with {...}
constraint DS = {14} extremes [2, infinity)
@ -7407,6 +7405,8 @@
English:
( {***} )
(hits 0/3) constraint DS = {21} extremes [2, infinity)
topic ( {...} )
(hits 0/2) constraint DS = {21} extremes [4, infinity)
<s-table-column-name> ( {...} )
(hits 0/2) constraint DS = {21} extremes [4, infinity)
<table-column-heading-bare> ( {...} )
@ -7965,9 +7965,9 @@
<s-type-expression-unarticled> hits 3126/7782 nti 23 constraint (none) extremes [1, infinity)
English:
<s-variable-scope> variable/variables
(hits 2/633) (matched: 'text variables') constraint DS = {23} extremes [2, infinity)
(hits 2/636) (matched: 'text variables') constraint DS = {23} extremes [2, infinity)
<s-variable-scope> that/which vary/varies
(hits 59/430) (matched: 'action name based rule producing nothing that varies') constraint DS = {23} extremes [3, infinity)
(hits 59/433) (matched: 'action name based rule producing nothing that varies') constraint DS = {23} extremes [3, infinity)
<k-kind>
(hits 2442/3830) (matched long text) constraint (none) extremes [1, infinity)
<s-literal>
@ -9068,6 +9068,8 @@
<new-action-sentence-object-unarticled> hits 90/920 nti 23 constraint DS = {23} extremes [1, infinity)
English:
action based {...}
(hits 0/397) constraint DS = {23} extremes [3, infinity)
action <nounphrase-actionable>
(hits 90/460) (matched long text) constraint DS = {23} extremes [1, infinity)
action
@ -9842,9 +9844,9 @@
<definite-article> <external-file-sentence-subject>
(hits 0/509) constraint (none) extremes [2, infinity)
text <external-file-name>
(hits 0/231) constraint DS = {20, 21} extremes [3, infinity)
(hits 0/232) constraint DS = {20, 21} extremes [3, infinity)
binary <external-file-name>
(hits 0/231) constraint DS = {20, 21} extremes [3, infinity)
(hits 0/232) constraint DS = {20, 21} extremes [3, infinity)
<external-file-name>
(hits 0/263) constraint DS = {20} extremes [2, infinity)

File diff suppressed because it is too large Load diff

View file

@ -1,6 +1,6 @@
Total memory consumption was 126319K = 123 MB
Total memory consumption was 126253K = 123 MB
---- was used for 2008185 objects, in 360861 frames in 0 x 800K = 0K = 0 MB:
---- was used for 2008180 objects, in 360856 frames in 0 x 800K = 0K = 0 MB:
32.3% inter_tree_node_array 58 x 8192 = 475136 objects, 41813824 bytes
18.9% text_stream_array 4343 x 100 = 434300 objects, 24459776 bytes
@ -26,18 +26,18 @@ Total memory consumption was 126319K = 123 MB
0.8% id_body 941 objects, 1076504 bytes
0.7% adjective_meaning 202 objects, 1000304 bytes
0.7% excerpt_meaning 3100 objects, 967200 bytes
0.6% production 3877 objects, 899464 bytes
0.6% ptoken 8397 objects, 873288 bytes
0.6% production 3876 objects, 899232 bytes
0.6% ptoken 8392 objects, 872768 bytes
0.6% grammatical_usage 3611 objects, 866640 bytes
0.6% individual_form 2561 objects, 860496 bytes
0.6% inter_schema_node 8914 objects, 855744 bytes
0.4% unary_predicate_array 16 x 1000 = 16000 objects, 640512 bytes
0.3% scan_directory 112 objects, 462336 bytes
0.3% local_variable_array 47 x 100 = 4700 objects, 452704 bytes
0.2% verb_usage 1128 objects, 388032 bytes
0.3% verb_usage 1128 objects, 388032 bytes
0.2% rule 469 objects, 367696 bytes
0.2% verb_form 386 objects, 348944 bytes
0.2% dictionary 6619 objects, 317712 bytes
0.2% dictionary 6620 objects, 317760 bytes
0.2% noun 2380 objects, 285600 bytes
0.2% compilation_subtask 3346 objects, 267680 bytes
0.2% inter_annotation_array 2 x 8192 = 16384 objects, 262208 bytes
@ -178,11 +178,11 @@ Total memory consumption was 126319K = 123 MB
---- inbuild_search_result 18 objects, 720 bytes
---- inform_language 6 objects, 672 bytes
---- relation_guard 5 objects, 640 bytes
---- implication 13 objects, 624 bytes
---- code_generation 1 object, 576 bytes
---- inter_warehouse_room 10 objects, 560 bytes
---- rulebook_outcome 17 objects, 544 bytes
---- small_word_set 11 objects, 528 bytes
---- implication 13 objects, 520 bytes
---- inform_kit 5 objects, 520 bytes
---- equation 4 objects, 480 bytes
---- i6_memory_setting 14 objects, 448 bytes
@ -237,8 +237,8 @@ Total memory consumption was 126319K = 123 MB
100.0% was used for memory not allocated for objects:
59.2% text stream storage 76637280 bytes in 452265 claims
3.5% dictionary storage 4544512 bytes in 6619 claims
59.2% text stream storage 76567416 bytes in 452276 claims
3.5% dictionary storage 4546560 bytes in 6620 claims
---- sorting 744 bytes in 3 claims
5.5% source text 7200000 bytes in 3 claims
8.3% source text details 10800000 bytes in 2 claims
@ -255,5 +255,5 @@ Total memory consumption was 126319K = 123 MB
---- code generation workspace for objects 1336 bytes in 4 claims
0.2% emitter array storage 279776 bytes in 1995 claims
-140.-5% was overhead - -181862792 bytes = -177600K = -173 MB
-140.-6% was overhead - -181862192 bytes = -177599K = -173 MB

View file

@ -1024,14 +1024,14 @@ ROOT_NT
X_OF_Y_NT'conversation of a person' {definite 'the' n/m/f s/p nom/acc} {refined}
COMMON_NOUN_NT'person' {indefinite 'a' n/m/f nom/acc s} {refined} {refers: infs'person'} {creation: << kind=person(x) >>} {eval: TEST_VALUE_NT}
PROPER_NOUN_NT'conversation' {refined} {eval: CONSTANT_NT {kind: table names valued property} {property: 'conversation'=table name}}
PROPER_NOUN_NT'table of general chitchat' {refined} {eval: CONSTANT_NT'table of general chitchat' {kind: table name} {table: table_data}{meaning: {table of general chitchat = TABLE_MC}}}
PROPER_NOUN_NT'table of general chitchat' {refined} {eval: CONSTANT_NT'table of general chitchat' {kind: table name} {table: table_data} {meaning: {table of general chitchat = TABLE_MC}}}
TABLE_NT'table of general chitchat topic reply summary turn stamp cha' {unit: 4}
SENTENCE_NT'the conversation of vanessa is the table of vanessa chatter' {unit: 4} {classified} {interpretation of subject: infs'person'}
VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}
X_OF_Y_NT'conversation of vanessa' {definite 'the' n/m/f s/p nom/acc} {refined}
PROPER_NOUN_NT'vanessa' {refined} {refers: infs'vanessa'} {eval: CONSTANT_NT'vanessa' {kind: woman} {instance: I129'vanessa'} {enumeration: 0}}
PROPER_NOUN_NT'conversation' {refined} {eval: CONSTANT_NT {kind: table names valued property} {property: 'conversation'=table name}}
PROPER_NOUN_NT'table of vanessa chatter' {definite 'the' n/m/f s/p nom/acc} {refined} {eval: CONSTANT_NT'table of vanessa chatter' {kind: table name} {table: table_data}{meaning: {table of vanessa chatter = TABLE_MC}}}
PROPER_NOUN_NT'table of vanessa chatter' {definite 'the' n/m/f s/p nom/acc} {refined} {eval: CONSTANT_NT'table of vanessa chatter' {kind: table name} {table: table_data} {meaning: {table of vanessa chatter = TABLE_MC}}}
TABLE_NT'table of vanessa chatter topic reply summary turn stamp char' {unit: 4}
IMPERATIVE_NT'after reading a command' {unit: 4} {imperative definition: 923}
HEADING_NT'section 6 - movement description' {heading 5} {under: H5'section 6 - movement description'} {unit: 4}
@ -1110,7 +1110,7 @@ ROOT_NT
COMMON_NOUN_NT'number that varies' {indefinite 'a' n/m/f nom/acc s} {refined} {refers: infs'values variable-pointer'-k} {creation: << kind=numbers variable-pointer(x) >>} {eval: TEST_VALUE_NT}
SENTENCE_NT'group size is 1' {unit: 4} {classified} {interpretation of subject: infs'door'}
VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}
PROPER_NOUN_NT'group size' {refined} {eval: NONLOCAL_VARIABLE_NT'group size' {nonlocal: 'group size'(var)number}{meaning: {group size = VARIABLE_MC}}}
PROPER_NOUN_NT'group size' {refined} {eval: NONLOCAL_VARIABLE_NT'group size' {nonlocal: 'group size'(var)number} {meaning: {group size = VARIABLE_MC}}}
PROPER_NOUN_NT'1' {refined} {eval: CONSTANT_NT'1' {kind: number} {explicit literal} {number: 1}}
IMPERATIVE_NT'to clear marked people' {unit: 4} {imperative definition: 933}
IMPERATIVE_NT'before listing nondescript items' {unit: 4} {imperative definition: 934}

View file

@ -1,37 +1,33 @@
100.0% in inform7 run
68.0% in compilation to Inter
47.6% in //Sequence::undertake_queued_tasks//
4.6% in //MajorNodes::pre_pass//
3.3% in //MajorNodes::pass_1//
68.8% in compilation to Inter
47.8% in //Sequence::undertake_queued_tasks//
4.5% in //MajorNodes::pre_pass//
3.4% in //MajorNodes::pass_1//
2.4% in //RTPhrasebook::compile_entries//
1.8% in //ImperativeDefinitions::assess_all//
1.5% in //RTKindConstructors::compile//
1.0% in //Sequence::lint_inter//
1.1% in //Sequence::lint_inter//
0.5% in //ImperativeDefinitions::compile_first_block//
0.5% in //MajorNodes::pass_2//
0.5% in //Sequence::undertake_queued_tasks//
0.5% in //World::stage_V//
0.4% in //ImperativeDefinitions::compile_first_block//
0.4% in //Sequence::undertake_queued_tasks//
0.4% in //Sequence::undertake_queued_tasks//
0.2% in //CompletionModule::compile//
0.2% in //RTKindConstructors::compile_permissions//
0.3% in //Sequence::undertake_queued_tasks//
0.1% in //CompletionModule::compile//
0.1% in //InferenceSubjects::emit_all//
0.1% in //RTKindConstructors::compile_permissions//
0.1% in //Task::make_built_in_kind_constructors//
0.1% in //Understand::traverse//
0.1% in //World::stages_II_and_III//
2.0% not specifically accounted for
29.1% in running Inter pipeline
10.1% in step 14/15: generate inform6 -> auto.inf
2.4% not specifically accounted for
28.4% in running Inter pipeline
10.2% in step 14/15: generate inform6 -> auto.inf
7.5% in step 5/15: load-binary-kits
6.8% in step 6/15: make-synoptic-module
1.6% in step 9/15: make-identifiers-unique
0.4% in step 12/15: eliminate-redundant-operations
0.4% in step 4/15: compile-splats
6.4% in step 6/15: make-synoptic-module
1.5% in step 9/15: make-identifiers-unique
0.3% in step 12/15: eliminate-redundant-operations
0.3% in step 4/15: compile-splats
0.3% in step 7/15: shorten-wiring
0.3% in step 8/15: detect-indirect-calls
0.2% in step 11/15: eliminate-redundant-labels
0.1% in step 10/15: reconcile-verbs
0.1% in step 2/15: parse-insertions
0.1% in step 3/15: resolve-conditional-compilation
0.7% not specifically accounted for
0.1% in step 11/15: eliminate-redundant-labels
0.9% not specifically accounted for
2.2% in supervisor
0.5% not specifically accounted for
0.4% not specifically accounted for

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,17 @@
r1 is a room.
when play begins:
showme table of nondup;
showme table of dup1.
table of dup1 - x
rm
r1
table of dup1 - y
rm
r1
table of nondup - z
rm
r1

View file

@ -0,0 +1,14 @@
Inform 7 v10.1.0 has started.
I've now read your source text, which is 36 words long.
I've also read Basic Inform by Graham Nelson, which is 7691 words long.
I've also read English Language by Graham Nelson, which is 2328 words long.
I've also read Standard Rules by Graham Nelson, which is 32092 words long.
Problem__ PM_DubiousAmbiguity
>--> The phrase 'showme table of dup1' (source text, line 5) is ambiguous in
a way that I can't sort out. I can see 2 different meanings of 'table of
dup1', and no good way to choose.
I was trying to match this phrase:
showme (table of dup1 - value)
I recognised:
table of dup1 = a table name
Inform 7 has finished.

View file

@ -1,7 +1,8 @@
Inform 7 build 6L64 has started.
Inform 7 v10.1.0 has started.
I've now read your source text, which is 22 words long.
I've also read Standard Rules by Graham Nelson, which is 42486 words long.
I've also read English Language by Graham Nelson, which is 2288 words long.
I've also read Basic Inform by Graham Nelson, which is 7691 words long.
I've also read English Language by Graham Nelson, which is 2328 words long.
I've also read Standard Rules by Graham Nelson, which is 32092 words long.
Problem__ PM_EitherOrAsValue
>--> In the sentence 'decrease the lighted of the NI School for Typing by 1' (source
text, line 4), it looks as if you intend 'lighted of the NI School for
@ -11,6 +12,6 @@ Problem__ PM_EitherOrAsValue
decrease (lighted of the ni school for typing - a stored value) by (1 -
value)
I recognised:
lighted of the ni school for typing = a property whose value is a
nothing, holding a value
Inform 7 has finished: 48 centiseconds used.
lighted of the ni school for typing = a property whose value is a nothing,
holding a value
Inform 7 has finished.

View file

@ -1,7 +1,8 @@
Inform 7 build 6M05 has started.
Inform 7 v10.1.0 has started.
I've now read your source text, which is 123 words long.
I've also read Standard Rules by Graham Nelson, which is 42485 words long.
I've also read English Language by Graham Nelson, which is 2288 words long.
I've also read Basic Inform by Graham Nelson, which is 7691 words long.
I've also read English Language by Graham Nelson, which is 2328 words long.
I've also read Standard Rules by Graham Nelson, which is 32092 words long.
Problem__ PM_GenericDescription
>--> You wrote 'if a container (called B) carried by the player is larger
than the noun' (source text, line 10), but 'a container (called B) carried
@ -13,7 +14,6 @@ Problem__ PM_GenericDescription
(a container ( called b ) carried by the player - a lit block) is larger
than (noun - block)
I recognised:
a container ( called b ) carried by the player = a description of
containers
a container ( called b ) carried by the player = a description of containers
noun = a non-temporary variable, holding an object
Inform 7 has finished: 51 centiseconds used.
Inform 7 has finished.

View file

@ -1,7 +1,8 @@
Inform 7 build 6M27 has started.
Inform 7 v10.1.0 has started.
I've now read your source text, which is 17 words long.
I've also read Standard Rules by Graham Nelson, which is 42500 words long.
I've also read English Language by Graham Nelson, which is 2288 words long.
I've also read Basic Inform by Graham Nelson, which is 7691 words long.
I've also read English Language by Graham Nelson, which is 2328 words long.
I've also read Standard Rules by Graham Nelson, which is 32092 words long.
Problem__ PM_LookedUpForbiddenProperty
>--> In the sentence 'let M be the carrying capacity of the Entire Game' (source
text, line 4), you seem to be looking up the 'carrying capacity' property,
@ -16,7 +17,7 @@ Problem__ PM_LookedUpForbiddenProperty
4. let (m - a temporary named value) be (carrying capacity of the entire
game - value)
I recognised:
carrying capacity of the entire game = a property whose value is a
number, holding a number
carrying capacity of the entire game = a property whose value is a number,
holding a number
The name 'm' doesn't yet exist.
Inform 7 has finished: 57 centiseconds used.
Inform 7 has finished.

View file

@ -630,25 +630,30 @@ void IDTypeData::log_inline_details(inline_details id) {
@ =
void IDTypeData::make_inline(id_type_data *idtd) {
if (idtd == NULL) internal_error("null idtd");
idtd->as_inline.invoked_inline_not_as_call = TRUE;
}
int IDTypeData::invoked_inline(id_body *idb) {
if (idb == NULL) return FALSE;
return idb->type_data.as_inline.invoked_inline_not_as_call;
}
@ =
int IDTypeData::is_a_let_assignment(id_body *idb) {
if (idb == NULL) return FALSE;
if (idb->type_data.as_inline.let_phrase == ASSIGNMENT_LET_PHRASE) return TRUE;
return FALSE;
}
int IDTypeData::is_a_let_equation(id_body *idb) {
if (idb == NULL) return FALSE;
if (idb->type_data.as_inline.let_phrase == EQUATION_LET_PHRASE) return TRUE;
return FALSE;
}
int IDTypeData::arithmetic_operation(id_body *idb) {
if (idb == NULL) return -1;
return idb->type_data.as_inline.arithmetical_operation;
}
@ -659,6 +664,7 @@ int IDTypeData::is_arithmetic_phrase(id_body *idb) {
}
int IDTypeData::is_assignment_phrase(id_body *idb) {
if (idb == NULL) return FALSE;
return idb->type_data.as_inline.assignment_phrase;
}
@ -668,6 +674,7 @@ wchar_t *IDTypeData::only_in(id_body *idb) {
}
int IDTypeData::block_follows(id_body *idb) {
if (idb == NULL) return FALSE;
return idb->type_data.as_inline.block_follows;
}

View file

@ -5,7 +5,7 @@ Generating code to perform an invocation.
@h Upper level: compiling from whole lists.
Here, we are given an invocation list |invl|, and we must generate Inter code
to carry it out. The code in this section does some complicated things; the
test grpup |:invocations| may be helpful when maintaining it.
test group |:invocations| may be helpful when maintaining it.
=
void CompileInvocations::list(value_holster *VH, parse_node *invl, wording W,

View file

@ -193,6 +193,7 @@ int Dash::check_value_silently(parse_node *p, kind *K) {
int Dash::check_invl(parse_node *p) {
LOGIF(MATCHING, "Dash (1): invocation list '%W'\n", Node::get_text(p));
LOGIF(MATCHING, "p = $T\n", p);
return Dash::funnel_to_level_2(p, FALSE);
}
@ -365,27 +366,27 @@ from a text substitution.)
@<Produce the token for a phrase deciding a value@>
else
@<Produce the token for a constant rvalue@>;
} else Problems::issue_problem_segment("%1 = <i>%2</i>");
} else Problems::issue_problem_segment("%1 = %2");
Problems::issue_problem_end();
@<Produce the token for an lvalue@> =
Problems::issue_problem_segment("%1 = <i>%2</i>, holding <i>%3</i>");
Problems::issue_problem_segment("%1 = %2, holding %3");
@<Produce the token for a phrase deciding a value@> =
char *seg = "%1 = an instruction to work out <i>%3</i>";
char *seg = "%1 = an instruction to work out %3";
if (K == NULL) seg = "%1 = a phrase";
parse_node *found_invl = itpt->as_parsed->down;
parse_node *inv;
LOOP_THROUGH_ALTERNATIVES(inv, found_invl) {
LOG("$e\n", inv);
if (Dash::reading_passed(inv) == FALSE) {
seg = "%1 = an instruction I think should work out <i>%3</i>, "
seg = "%1 = an instruction I think should work out %3, "
"but which I can't make sense of";
for (int i=0; i<Invocations::get_no_tokens(inv); i++) {
parse_node *tok = Invocations::get_token_as_parsed(inv, i);
if (Node::is(tok, UNKNOWN_NT)) {
Problems::quote_wording(4, Node::get_text(tok));
seg = "%1 = an instruction I think should work out <i>%3</i>, "
seg = "%1 = an instruction I think should work out %3, "
"but which I can't perform because '%4' doesn't make sense here";
break;
}
@ -395,13 +396,13 @@ from a text substitution.)
Problems::issue_problem_segment(seg);
@<Produce the token for a constant rvalue@> =
char *seg = "%1 = <i>%3</i>";
char *seg = "%1 = %3";
if (Rvalues::is_CONSTANT_construction(itpt->as_parsed, CON_property)) {
property *prn = Node::get_constant_property(itpt->as_parsed);
if (Properties::is_value_property(prn)) {
binary_predicate *bp = ValueProperties::get_stored_relation(prn);
if (bp) {
seg = "%1 = <i>%3</i>, which is used to store %4, "
seg = "%1 = %3, which is used to store %4, "
"but is not the same thing as the relation itself";
Problems::quote_relation(4, bp);
}
@ -927,6 +928,16 @@ checking.
LOGIF(MATCHING, "Winnow %s from $T\n",
(invocational)?"invocationally":"regularly", Dash_ambiguity_list);
if (invocational) {
int dubious = FALSE;
for (int ref = 0; ref<no_of_possible_readings; ref++) {
parse_node *inv = list_of_possible_readings[ref];
if (Node::is(inv, INVOCATION_NT) == FALSE)
dubious = TRUE;
}
if (dubious) @<Issue the dubious ambiguity problem message@>;
}
if (invocational) Dash_ambiguity_list->down = NULL;
parse_node *last_survivor = NULL;
@ -963,6 +974,21 @@ checking.
}
LOGIF(MATCHING, "After winnowing, CS is $T\n", current_sentence);
@ This is a last-throw-of-the-dice problem message, designed to pick up just
a few really awkward ambiguities which have been missed elsewhere in the parser
or in Dash.
@<Issue the dubious ambiguity problem message@> =
THIS_IS_AN_ORDINARY_PROBLEM;
Problems::quote_source(1, current_sentence);
Problems::quote_number(2, &no_of_possible_readings);
Problems::quote_wording(3, Node::get_text(list_of_possible_readings[0]));
StandardProblems::handmade_problem(Task::syntax_tree(), _p_(PM_DubiousAmbiguity));
Problems::issue_problem_segment(
"The phrase %1 is ambiguous in a way that I can't sort out. "
"I can see %2 different meanings of '%3', and no good way to choose.");
Problems::issue_problem_end();
return NEVER_MATCH;
@ This is another sort of error which couldn't happen with a conventional
programming language -- in C, for instance, it's syntactically obvious

View file

@ -46,7 +46,7 @@ MAKE_ANNOTATION_FUNCTIONS(meaning, excerpt_meaning)
@ =
void LexiconModule::write_meaning_ANNOT(text_stream *OUT, parse_node *p) {
if (Node::get_meaning(p)) {
WRITE("{meaning: ");
WRITE(" {meaning: ");
ExcerptMeanings::log(OUT, Node::get_meaning(p));
WRITE("}");
}