1
0
Fork 0
mirror of https://github.com/ganelson/inform.git synced 2024-07-02 23:14:57 +03:00

Further work on plugin calls for actions

This commit is contained in:
Graham Nelson 2021-03-05 23:36:25 +00:00
parent 6fa0f5381b
commit 23cb64fdd2
82 changed files with 1913 additions and 1386 deletions

View file

@ -380,7 +380,7 @@ have occurred, but if it does then the creation has worked.
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">evaluation</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">Node::is</span><span class="plain-syntax">(</span><span class="identifier-syntax">evaluation</span><span class="plain-syntax">, </span><span class="identifier-syntax">UNKNOWN_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="named-paragraph-container code-font"><a href="3-dbtr.html#SP4_1_3_3" class="named-paragraph-link"><span class="named-paragraph">Issue a problem for trying to create any existing meaning as a new instance</span><span class="named-paragraph-number">4.1.3.3</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="4-tc.html#SP5" class="function-link"><span class="function-syntax">Assertions::Creator::tabular_definitions</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">t</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="4-tc.html#SP4" class="function-link"><span class="function-syntax">Assertions::Creator::tabular_definitions</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">t</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">NounPhrases::annotate_by_articles</span><span class="plain-syntax">(</span><span class="identifier-syntax">name_entry</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ProblemBuffer::redirect_problem_sentence</span><span class="plain-syntax">(</span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax">, </span><span class="identifier-syntax">name_entry</span><span class="plain-syntax">, </span><span class="identifier-syntax">V</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="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="4-rpt.html#SP8" class="function-link"><span class="function-syntax">Refiner::refine_coupling</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">name_entry</span><span class="plain-syntax">, </span><span class="identifier-syntax">V</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">))</span>
@ -393,7 +393,7 @@ have occurred, but if it does then the creation has worked.
<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="function-syntax">&lt;s-type-expression&gt;</span><span class="plain-syntax">(</span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">name_entry</span><span class="plain-syntax">)))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">evaluation</span><span class="plain-syntax"> = </span><span class="function-syntax">&lt;&lt;rp&gt;&gt;</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="4-rpt.html#SP1" class="function-link"><span class="function-syntax">Refiner::give_spec_to_noun</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">name_entry</span><span class="plain-syntax">, </span><span class="identifier-syntax">evaluation</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="4-tc.html#SP5" class="function-link"><span class="function-syntax">Assertions::Creator::tabular_definitions</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="4-tc.html#SP4" class="function-link"><span class="function-syntax">Assertions::Creator::tabular_definitions</span></a><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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Node::get_subject</span><span class="plain-syntax">(</span><span class="identifier-syntax">name_entry</span><span class="plain-syntax">) == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-dbtr.html#SP4_1_3_4" class="named-paragraph-link"><span class="named-paragraph">Issue a problem to say that the creation failed</span><span class="named-paragraph-number">4.1.3.4</span></a></span><span class="plain-syntax">;</span>

View file

@ -109,7 +109,7 @@ end well.
<span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">S</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">V</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">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">P</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">V</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="named-paragraph-container code-font"><a href="3-pr.html#SP2_1" class="named-paragraph-link"><span class="named-paragraph">Forbid plural declarations containing quoted text</span><span class="named-paragraph-number">2.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><a href="4-tc.html#SP11" class="function-link"><span class="function-syntax">Assertions::Creator::vet_name_for_noun</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="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">if</span><span class="plain-syntax"> (</span><a href="4-tc.html#SP10" class="function-link"><span class="function-syntax">Assertions::Creator::vet_name_for_noun</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="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="identifier-syntax">Pluralisation::register</span><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">DefaultLanguage::get</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">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

@ -108,7 +108,7 @@ example, the subtree for "an open door".
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">COMMON_NOUN_NT:</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">InferenceSubjects::is_a_kind_of_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">Node::get_subject</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">Kinds::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_object</span><span class="plain-syntax">, </span><span class="identifier-syntax">KindSubjects::to_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">Node::get_subject</span><span class="plain-syntax">(</span><span class="identifier-syntax">py</span><span class="plain-syntax">)))))</span>
<span class="plain-syntax"> </span><a href="4-tc.html#SP8" class="function-link"><span class="function-syntax">Assertions::Creator::convert_instance_to_nounphrase</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">py</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-tc.html#SP7" class="function-link"><span class="function-syntax">Assertions::Creator::convert_instance_to_nounphrase</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">py</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">else</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_ThereIsVague</span><span class="plain-syntax">),</span>
<span class="plain-syntax"> </span><span class="string-syntax">"'there is...' can only be used to create objects"</span><span class="plain-syntax">,</span>
@ -303,7 +303,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#SP8_4_1">&#167;8.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_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>
@ -809,19 +809,10 @@ further sub-cases later.
<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="plain-syntax"> }</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">IF_MODULE</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">py</span><span class="plain-syntax">) == </span><span class="identifier-syntax">ACTION_NT</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ap</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::get_action_meaning</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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ap</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">val</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Rvalues::from_action_pattern</span><span class="plain-syntax">(</span><span class="identifier-syntax">ap</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">Rvalues::is_CONSTANT_of_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">val</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_stored_action</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><a href="4-rpt.html#SP1" class="function-link"><span class="function-syntax">Refiner::give_spec_to_noun</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">py</span><span class="plain-syntax">, </span><span class="identifier-syntax">val</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">PluginCalls::unusual_property_value</span><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="identifier-syntax">endif</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::Using::assertion_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_PeculiarProperty</span><span class="plain-syntax">),</span>
<span class="plain-syntax"> </span><span class="string-syntax">"that is a very peculiar property value"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="string-syntax">"and ought to be something more definite and explicit."</span><span class="plain-syntax">);</span>
@ -1605,7 +1596,7 @@ in general.
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Annotations::read_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">px</span><span class="plain-syntax">, </span><span class="identifier-syntax">multiplicity_ANNOT</span><span class="plain-syntax">) &gt;= </span><span class="constant-syntax">1</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="4-tc.html#SP8" class="function-link"><span class="function-syntax">Assertions::Creator::convert_instance_to_nounphrase</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">px</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-tc.html#SP7" class="function-link"><span class="function-syntax">Assertions::Creator::convert_instance_to_nounphrase</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">px</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-ass.html#SP6" class="function-link"><span class="function-syntax">Assertions::make_coupling</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">py</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">return</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
@ -1642,7 +1633,7 @@ in general.
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Annotations::read_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</span><span class="plain-syntax">, </span><span class="identifier-syntax">sentence_is_existential_ANNOT</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><a href="4-tc.html#SP8" class="function-link"><span class="function-syntax">Assertions::Creator::convert_instance_to_nounphrase</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">px</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-tc.html#SP7" class="function-link"><span class="function-syntax">Assertions::Creator::convert_instance_to_nounphrase</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">px</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-ass.html#SP6" class="function-link"><span class="function-syntax">Assertions::make_coupling</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">py</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">return</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
@ -1661,7 +1652,7 @@ in general.
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">px</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</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">px</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</span><span class="plain-syntax">) == </span><span class="identifier-syntax">EVERY_NT</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">1</span><span class="plain-syntax">) </span><a href="4-ass2.html#SP8" class="function-link"><span class="function-syntax">Assertions::Assemblies::make_generalisation</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">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><a href="4-tc.html#SP8" class="function-link"><span class="function-syntax">Assertions::Creator::convert_instance_to_nounphrase</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">py</span><span class="plain-syntax">, </span><span class="identifier-syntax">Node::get_relationship</span><span class="plain-syntax">(</span><span class="identifier-syntax">px</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><a href="4-tc.html#SP7" class="function-link"><span class="function-syntax">Assertions::Creator::convert_instance_to_nounphrase</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">py</span><span class="plain-syntax">, </span><span class="identifier-syntax">Node::get_relationship</span><span class="plain-syntax">(</span><span class="identifier-syntax">px</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>
</pre>
@ -2536,7 +2527,7 @@ can also be used adjectivally.
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Assertions::instantiate_related_common_nouns_r</span><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">from</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">at</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">at</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="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">at</span><span class="plain-syntax">) == </span><span class="identifier-syntax">COMMON_NOUN_NT</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="4-tc.html#SP8" class="function-link"><span class="function-syntax">Assertions::Creator::convert_instance_to_nounphrase</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">at</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><a href="4-tc.html#SP7" class="function-link"><span class="function-syntax">Assertions::Creator::convert_instance_to_nounphrase</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">at</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Node::get_relationship</span><span class="plain-syntax">(</span><span class="identifier-syntax">from</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">at</span><span class="plain-syntax">) == </span><span class="identifier-syntax">AND_NT</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="4-ass.html#SP9" class="function-link"><span class="function-syntax">Assertions::instantiate_related_common_nouns_r</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">from</span><span class="plain-syntax">, </span><span class="identifier-syntax">at</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</span><span class="plain-syntax">);</span>

View file

@ -170,7 +170,7 @@ each inference subject:
</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::Assemblies::name_object_after</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">Assertions::Assemblies::name_object_after</span></span>:<br/>The Creator - <a href="4-tc.html#SP8_4_1">&#167;8.4.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">inference_subject</span><span class="plain-syntax"> *</span><span class="identifier-syntax">infs</span><span class="plain-syntax">, </span><span class="identifier-syntax">inference_subject</span><span class="plain-syntax"> *</span><span class="identifier-syntax">after</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Assertions::Assemblies::name_object_after</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">Assertions::Assemblies::name_object_after</span></span>:<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">inference_subject</span><span class="plain-syntax"> *</span><span class="identifier-syntax">infs</span><span class="plain-syntax">, </span><span class="identifier-syntax">inference_subject</span><span class="plain-syntax"> *</span><span class="identifier-syntax">after</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">assemblies_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ad</span><span class="plain-syntax"> = </span><span class="identifier-syntax">InferenceSubjects::get_assemblies_data</span><span class="plain-syntax">(</span><span class="identifier-syntax">infs</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ad</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">named_after</span><span class="plain-syntax"> = </span><span class="identifier-syntax">after</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ad</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">named_after_text</span><span class="plain-syntax"> = </span><span class="identifier-syntax">W</span><span class="plain-syntax">;</span>

View file

@ -102,7 +102,7 @@ either as an object, a value or a subtree &mdash; should have
<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">owner</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="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Assertions::PropertyKnowledge::assert_property_list</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">Assertions::PropertyKnowledge::assert_property_list</span></span>:<br/>The Creator - <a href="4-tc.html#SP5_2_1">&#167;5.2.1</a><br/>Assertions - <a href="4-ass.html#SP6_3_18">&#167;6.3.18</a>, <a href="4-ass.html#SP6_3_29">&#167;6.3.29</a>, <a href="4-ass.html#SP9">&#167;9</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">owner_subtree</span><span class="plain-syntax">,</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Assertions::PropertyKnowledge::assert_property_list</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">Assertions::PropertyKnowledge::assert_property_list</span></span>:<br/>The Creator - <a href="4-tc.html#SP4_2_1">&#167;4.2.1</a><br/>Assertions - <a href="4-ass.html#SP6_3_18">&#167;6.3.18</a>, <a href="4-ass.html#SP6_3_29">&#167;6.3.29</a>, <a href="4-ass.html#SP9">&#167;9</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">owner_subtree</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">list_subtree</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-pk.html#SP2_2" class="named-paragraph-link"><span class="named-paragraph">Check that the owner subtree isn't dangerously elaborate</span><span class="named-paragraph-number">2.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inference_subject</span><span class="plain-syntax"> *</span><span class="identifier-syntax">owner</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::get_subject</span><span class="plain-syntax">(</span><span class="identifier-syntax">owner_subtree</span><span class="plain-syntax">);</span>

View file

@ -91,12 +91,12 @@ true &mdash; "an open door", say, or "a woman in London" &mdash; these are recor
in a <span class="extract"><span class="extract-syntax">creation_proposition</span></span> annotation.
</li></ul>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Refiner::give_subject_to_noun</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">Refiner::give_subject_to_noun</span></span>:<br/><a href="4-rpt.html#SP4">&#167;4</a>, <a href="4-rpt.html#SP7_1">&#167;7.1</a>, <a href="4-rpt.html#SP11_5_1">&#167;11.5.1</a>, <a href="4-rpt.html#SP11_7">&#167;11.7</a><br/>The Creator - <a href="4-tc.html#SP5_4">&#167;5.4</a>, <a href="4-tc.html#SP8_4">&#167;8.4</a>, <a href="4-tc.html#SP8_4_1">&#167;8.4.1</a><br/>Assemblies - <a href="4-ass2.html#SP13">&#167;13</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="identifier-syntax">inference_subject</span><span class="plain-syntax"> *</span><span class="identifier-syntax">infs</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Refiner::give_subject_to_noun</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">Refiner::give_subject_to_noun</span></span>:<br/><a href="4-rpt.html#SP4">&#167;4</a>, <a href="4-rpt.html#SP7_1">&#167;7.1</a>, <a href="4-rpt.html#SP11_5_1">&#167;11.5.1</a>, <a href="4-rpt.html#SP11_7">&#167;11.7</a><br/>The Creator - <a href="4-tc.html#SP4_4">&#167;4.4</a>, <a href="4-tc.html#SP7_4">&#167;7.4</a>, <a href="4-tc.html#SP7_4_1">&#167;7.4.1</a><br/>Assemblies - <a href="4-ass2.html#SP13">&#167;13</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="identifier-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="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">eval</span><span class="plain-syntax"> = </span><span class="identifier-syntax">InferenceSubjects::as_constant</span><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="4-rpt.html#SP1_1" class="named-paragraph-link"><span class="named-paragraph">Make a common or proper noun as appropriate</span><span class="named-paragraph-number">1.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Refiner::give_spec_to_noun</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">Refiner::give_spec_to_noun</span></span>:<br/><a href="4-rpt.html#SP6">&#167;6</a>, <a href="4-rpt.html#SP11_8_2">&#167;11.8.2</a>, <a href="4-rpt.html#SP11_8_2_5">&#167;11.8.2.5</a><br/>Define by Table Requests - <a href="3-dbtr.html#SP4_1_3">&#167;4.1.3</a>, <a href="3-dbtr.html#SP4_2_3_1">&#167;4.2.3.1</a><br/>The Creator - <a href="4-tc.html#SP5_4">&#167;5.4</a>, <a href="4-tc.html#SP5_4_1_1">&#167;5.4.1.1</a><br/>Assertions - <a href="4-ass.html#SP6_3_11">&#167;6.3.11</a><br/>Relation Knowledge - <a href="4-rk.html#SP2">&#167;2</a><br/>Tables - <a href="5-tbl.html#SP22_1">&#167;22.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="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">eval</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Refiner::give_spec_to_noun</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">Refiner::give_spec_to_noun</span></span>:<br/><a href="4-rpt.html#SP6">&#167;6</a>, <a href="4-rpt.html#SP11_8_2">&#167;11.8.2</a>, <a href="4-rpt.html#SP11_8_2_5">&#167;11.8.2.5</a><br/>Define by Table Requests - <a href="3-dbtr.html#SP4_1_3">&#167;4.1.3</a>, <a href="3-dbtr.html#SP4_2_3_1">&#167;4.2.3.1</a><br/>The Creator - <a href="4-tc.html#SP4_4">&#167;4.4</a>, <a href="4-tc.html#SP4_4_1_1">&#167;4.4.1.1</a><br/>Relation Knowledge - <a href="4-rk.html#SP2">&#167;2</a><br/>Tables - <a href="5-tbl.html#SP22_1">&#167;22.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="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">eval</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inference_subject</span><span class="plain-syntax"> *</span><span class="identifier-syntax">infs</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Specifications::to_subject</span><span class="plain-syntax">(</span><span class="identifier-syntax">eval</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-rpt.html#SP1_1" class="named-paragraph-link"><span class="named-paragraph">Make a common or proper noun as appropriate</span><span class="named-paragraph-number">1.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
@ -431,7 +431,7 @@ is allowed to stand.
<span class="plain-syntax"> </span><span class="identifier-syntax">Wordings::last_wn</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">-&gt;</span><span class="identifier-syntax">down</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="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Wordings::nonempty</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="function-syntax">&lt;action-pattern&gt;</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ActionPatterns::make_ACTION_node</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="function-syntax">&lt;&lt;rp&gt;&gt;</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ActionsNodes::convert_to_ACTION_node</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="function-syntax">&lt;&lt;rp&gt;&gt;</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Node::set_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
@ -799,7 +799,7 @@ here, given that we know we are looking for a noun.
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">IF_MODULE</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Node::get_article</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">) == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="function-syntax">&lt;action-pattern&gt;</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">ActionPatterns::make_ACTION_node</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="function-syntax">&lt;&lt;rp&gt;&gt;</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ActionsNodes::convert_to_ACTION_node</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="function-syntax">&lt;&lt;rp&gt;&gt;</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>

View file

@ -73,7 +73,7 @@ function togglePopup(material_id) {
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../compiler.html">Inform7</a></li><li><a href="index.html">assertions</a></li><li><a href="index.html#4">Chapter 4: Assertions</a></li><li><b>The Creator</b></li></ul></div>
<p class="purpose">This is where all objects, kinds of object, named values, kinds of value and global variables are made.</p>
<ul class="toc"><li><a href="4-tc.html#SP1">&#167;1. Creations to match unrecognised names</a></li><li><a href="4-tc.html#SP5">&#167;5. Acting on creations</a></li><li><a href="4-tc.html#SP8">&#167;8. Creations to instantiate</a></li><li><a href="4-tc.html#SP12">&#167;12. The natural language kind</a></li></ul><hr class="tocbar">
<ul class="toc"><li><a href="4-tc.html#SP1">&#167;1. Creations to match unrecognised names</a></li><li><a href="4-tc.html#SP4">&#167;4. Acting on creations</a></li><li><a href="4-tc.html#SP7">&#167;7. Creations to instantiate</a></li><li><a href="4-tc.html#SP11">&#167;11. The natural language kind</a></li></ul><hr class="tocbar">
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. Creations to match unrecognised names. </b>The model contains objects, their properties and their relationships, and
this section is where all of the objects are created &mdash; not only world
@ -140,7 +140,7 @@ room."
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><a href="4-tc.html#SP5" class="function-link"><span class="function-syntax">Assertions::Creator::noun_creator</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">py</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="4-tc.html#SP4" class="function-link"><span class="function-syntax">Assertions::Creator::noun_creator</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">py</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP1">&#167;1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP1_2" class="paragraph-anchor"></a><b>&#167;1.2. </b>More generally we need to work out what <span class="extract"><span class="extract-syntax">px</span></span> tells us about creations in <span class="extract"><span class="extract-syntax">py</span></span>,
@ -164,55 +164,15 @@ in <span class="extract"><span class="extract-syntax">py</span></span>, which (i
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-tc.html#SP1_2_1" class="named-paragraph-link"><span class="named-paragraph">Take care of two ambiguities to do with actions</span><span class="named-paragraph-number">1.2.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::creation</span><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">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">govx</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, *</span><span class="identifier-syntax">govy</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">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">kindx</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, *</span><span class="identifier-syntax">kindy</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-tc.html#SP1_2_2" class="named-paragraph-link"><span class="named-paragraph">Work out the kinds of value expressed by each side, and find their governing nodes</span><span class="named-paragraph-number">1.2.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="4-tc.html#SP5" class="function-link"><span class="function-syntax">Assertions::Creator::noun_creator</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">px</span><span class="plain-syntax">, </span><span class="identifier-syntax">kindy</span><span class="plain-syntax">, </span><span class="identifier-syntax">govy</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="4-tc.html#SP5" class="function-link"><span class="function-syntax">Assertions::Creator::noun_creator</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">py</span><span class="plain-syntax">, </span><span class="identifier-syntax">kindx</span><span class="plain-syntax">, </span><span class="identifier-syntax">govx</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-tc.html#SP1_2_1" class="named-paragraph-link"><span class="named-paragraph">Work out the kinds of value expressed by each side, and find their governing nodes</span><span class="named-paragraph-number">1.2.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="4-tc.html#SP4" class="function-link"><span class="function-syntax">Assertions::Creator::noun_creator</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">px</span><span class="plain-syntax">, </span><span class="identifier-syntax">kindy</span><span class="plain-syntax">, </span><span class="identifier-syntax">govy</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="4-tc.html#SP4" class="function-link"><span class="function-syntax">Assertions::Creator::noun_creator</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">py</span><span class="plain-syntax">, </span><span class="identifier-syntax">kindx</span><span class="plain-syntax">, </span><span class="identifier-syntax">govx</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP1">&#167;1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP1_2_1" class="paragraph-anchor"></a><b>&#167;1.2.1. </b>The first case here is to take care of a sentence like:
</p>
<blockquote>
<p>Taking something is proactive behaviour.</p>
</blockquote>
<p class="commentary">Here <span class="extract"><span class="extract-syntax">Refiner::refine</span></span> will correctly report that "proactive behaviour" is
a new term, and give it a <span class="extract"><span class="extract-syntax">CREATED_NT</span></span> node. But we don't want it to become an
object or a value &mdash; it will become a named kind of action instead. So we
amend the node to <span class="extract"><span class="extract-syntax">ACTION_NT</span></span>.
</p>
<p class="commentary">The second case occurs much less often &mdash; for instance, the only time it comes
up in the test suite is in the example "Chronic Hinting Syndrome":
</p>
<blockquote>
<p>Setting is a kind of value. The settings are bright and dull.</p>
</blockquote>
<p class="commentary">Here the first sentence wants to create something called "setting", which
ought to have a <span class="extract"><span class="extract-syntax">CREATED_NT</span></span> node type, but doesn't because it has been read
as an action instead. We correct the spurious <span class="extract"><span class="extract-syntax">ACTION_NT</span></span> to a <span class="extract"><span class="extract-syntax">CREATED_NT</span></span>.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Take care of two ambiguities to do with actions</span><span class="named-paragraph-number">1.2.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><a href="4-tc.html#SP2" class="function-link"><span class="function-syntax">Assertions::Creator::actionlike</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">px</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">py</span><span class="plain-syntax">) == </span><span class="identifier-syntax">CREATED_NT</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Node::set_type</span><span class="plain-syntax">(</span><span class="identifier-syntax">py</span><span class="plain-syntax">, </span><span class="identifier-syntax">ACTION_NT</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-tc.html#SP2" class="function-link"><span class="function-syntax">Assertions::Creator::actionlike</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">px</span><span class="plain-syntax">)) &amp;&amp; (</span><a href="4-tc.html#SP2" class="function-link"><span class="function-syntax">Assertions::Creator::actionlike</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-tc.html#SP2" class="function-link"><span class="function-syntax">Assertions::Creator::to_action_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">px</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="4-tc.html#SP2" class="function-link"><span class="function-syntax">Assertions::Creator::to_action_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">py</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">Node::get_type</span><span class="plain-syntax">(</span><span class="identifier-syntax">px</span><span class="plain-syntax">) == </span><span class="identifier-syntax">ACTION_NT</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">py</span><span class="plain-syntax">) == </span><span class="identifier-syntax">KIND_NT</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Node::set_type</span><span class="plain-syntax">(</span><span class="identifier-syntax">px</span><span class="plain-syntax">, </span><span class="identifier-syntax">CREATED_NT</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP1_2">&#167;1.2</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP1_2_2" class="paragraph-anchor"></a><b>&#167;1.2.2. </b>There are two ways to know the kind being expressed. One is that the sentence
<p class="commentary firstcommentary"><a id="SP1_2_1" class="paragraph-anchor"></a><b>&#167;1.2.1. </b>There are two ways to know the kind being expressed. One is that the sentence
makes unambiguous use of a relation which forces the kinds on each side. For
example,
</p>
@ -242,12 +202,12 @@ kind of its second term. So we do so on its behalf.
<p>Green is a colour.</p>
</blockquote>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Work out the kinds of value expressed by each side, and find their governing nodes</span><span class="named-paragraph-number">1.2.2</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Work out the kinds of value expressed by each side, and find their governing nodes</span><span class="named-paragraph-number">1.2.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bp</span><span class="plain-syntax"> = </span><a href="4-tc.html#SP3" class="function-link"><span class="function-syntax">Assertions::Creator::bp_of_subtree</span></a><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">if</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="identifier-syntax">bp</span><span class="plain-syntax"> = </span><a href="4-tc.html#SP3" class="function-link"><span class="function-syntax">Assertions::Creator::bp_of_subtree</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="identifier-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bp</span><span class="plain-syntax"> = </span><a href="4-tc.html#SP2" class="function-link"><span class="function-syntax">Assertions::Creator::bp_of_subtree</span></a><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">if</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="identifier-syntax">bp</span><span class="plain-syntax"> = </span><a href="4-tc.html#SP2" class="function-link"><span class="function-syntax">Assertions::Creator::bp_of_subtree</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">bp</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">kindx</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Kinds::weaken</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="identifier-syntax">K_object</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">kindy</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Kinds::weaken</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="identifier-syntax">K_object</span><span class="plain-syntax">);</span>
@ -257,97 +217,67 @@ kind of its second term. So we do so on its behalf.
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</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">kindx</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">kindy</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">kindx</span><span class="plain-syntax"> = </span><a href="4-tc.html#SP4" class="function-link"><span class="function-syntax">Assertions::Creator::kind_of_subtree</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">px</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">govx</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">kindy</span><span class="plain-syntax"> = </span><a href="4-tc.html#SP4" class="function-link"><span class="function-syntax">Assertions::Creator::kind_of_subtree</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">py</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">govy</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">kindx</span><span class="plain-syntax"> = </span><a href="4-tc.html#SP3" class="function-link"><span class="function-syntax">Assertions::Creator::kind_of_subtree</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">px</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">govx</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">kindy</span><span class="plain-syntax"> = </span><a href="4-tc.html#SP3" class="function-link"><span class="function-syntax">Assertions::Creator::kind_of_subtree</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">py</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">govy</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP1_2">&#167;1.2</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Assertions::Creator::actionlike</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">Assertions::Creator::actionlike</span></span>:<br/><a href="4-tc.html#SP1_2_1">&#167;1.2.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="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">IF_MODULE</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">p</span><span class="plain-syntax">) == </span><span class="identifier-syntax">ACTION_NT</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">if</span><span class="plain-syntax"> (</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">PROPER_NOUN_NT</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">spec</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::get_evaluation</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">Rvalues::is_CONSTANT_of_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_stored_action</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</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">void</span><span class="plain-syntax"> </span><span class="function-syntax">Assertions::Creator::to_action_node</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">Assertions::Creator::to_action_node</span></span>:<br/><a href="4-tc.html#SP1_2_1">&#167;1.2.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="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">IF_MODULE</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">p</span><span class="plain-syntax">) == </span><span class="identifier-syntax">ACTION_NT</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">Node::get_type</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">) == </span><span class="identifier-syntax">PROPER_NOUN_NT</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">spec</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::get_evaluation</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">Rvalues::is_CONSTANT_of_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_stored_action</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">explicit_action</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ea</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::get_constant_explicit_action</span><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">ActionPatterns::make_ACTION_node</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="identifier-syntax">ea</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">as_described</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="identifier-syntax">endif</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"misapplied to_action_node"</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b>So that just leaves the algorithms for finding the relation of a subtree:
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b>So that just leaves the algorithms for finding the relation of a subtree:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="function-syntax">Assertions::Creator::bp_of_subtree</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::Creator::bp_of_subtree</span></span>:<br/><a href="4-tc.html#SP1_2_2">&#167;1.2.2</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="identifier-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="function-syntax">Assertions::Creator::bp_of_subtree</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">Assertions::Creator::bp_of_subtree</span></span>:<br/><a href="4-tc.html#SP1_2_1">&#167;1.2.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">RELATIONSHIP_NT</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">Node::get_relationship</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><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. </b>And the kind of a subtree.
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b>And the kind of a subtree.
</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">Assertions::Creator::kind_of_subtree</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">Assertions::Creator::kind_of_subtree</span></span>:<br/><a href="4-tc.html#SP1_2_2">&#167;1.2.2</a>, <a href="4-tc.html#SP4_1">&#167;4.1</a>, <a href="4-tc.html#SP5_2">&#167;5.2</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="identifier-syntax">parse_node</span><span class="plain-syntax"> **</span><span class="identifier-syntax">governing</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="function-syntax">Assertions::Creator::kind_of_subtree</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">Assertions::Creator::kind_of_subtree</span></span>:<br/><a href="4-tc.html#SP1_2_1">&#167;1.2.1</a>, <a href="4-tc.html#SP3_1">&#167;3.1</a>, <a href="4-tc.html#SP4_2">&#167;4.2</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="identifier-syntax">parse_node</span><span class="plain-syntax"> **</span><span class="identifier-syntax">governing</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">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">switch</span><span class="plain-syntax"> (</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="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">AND_NT:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-tc.html#SP4_1" class="named-paragraph-link"><span class="named-paragraph">Recurse downwards, preferring the leftmost item in a list</span><span class="named-paragraph-number">4.1</span></a></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">WITH_NT:</span><span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="4-tc.html#SP4" class="function-link"><span class="function-syntax">Assertions::Creator::kind_of_subtree</span></a><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">, </span><span class="identifier-syntax">governing</span><span class="plain-syntax">); </span><span class="comment-syntax"> the owner, not the property</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">KIND_NT:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-tc.html#SP4_2" class="named-paragraph-link"><span class="named-paragraph">Handle the kind of a "kind of..." clause</span><span class="named-paragraph-number">4.2</span></a></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">AND_NT:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-tc.html#SP3_1" class="named-paragraph-link"><span class="named-paragraph">Recurse downwards, preferring the leftmost item in a list</span><span class="named-paragraph-number">3.1</span></a></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">WITH_NT:</span><span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="4-tc.html#SP3" class="function-link"><span class="function-syntax">Assertions::Creator::kind_of_subtree</span></a><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">, </span><span class="identifier-syntax">governing</span><span class="plain-syntax">); </span><span class="comment-syntax"> the owner, not the property</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">KIND_NT:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-tc.html#SP3_2" class="named-paragraph-link"><span class="named-paragraph">Handle the kind of a "kind of..." clause</span><span class="named-paragraph-number">3.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">default:</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">spec</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::get_evaluation</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-tc.html#SP4_3" class="named-paragraph-link"><span class="named-paragraph">Kinds of variable and of value produce the obvious kind as result</span><span class="named-paragraph-number">4.3</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-tc.html#SP4_4" class="named-paragraph-link"><span class="named-paragraph">Initially values produce their own weakened kind</span><span class="named-paragraph-number">4.4</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-tc.html#SP4_6" class="named-paragraph-link"><span class="named-paragraph">Descriptions produce the kind of whatever's described</span><span class="named-paragraph-number">4.6</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-tc.html#SP4_5" class="named-paragraph-link"><span class="named-paragraph">Property names coinciding with kinds are considered with their kind meanings</span><span class="named-paragraph-number">4.5</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-tc.html#SP3_3" class="named-paragraph-link"><span class="named-paragraph">Kinds of variable and of value produce the obvious kind as result</span><span class="named-paragraph-number">3.3</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-tc.html#SP3_4" class="named-paragraph-link"><span class="named-paragraph">Initially values produce their own weakened kind</span><span class="named-paragraph-number">3.4</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-tc.html#SP3_6" class="named-paragraph-link"><span class="named-paragraph">Descriptions produce the kind of whatever's described</span><span class="named-paragraph-number">3.6</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-tc.html#SP3_5" class="named-paragraph-link"><span class="named-paragraph">Property names coinciding with kinds are considered with their kind meanings</span><span class="named-paragraph-number">3.5</span></a></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">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP4_1" class="paragraph-anchor"></a><b>&#167;4.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Recurse downwards, preferring the leftmost item in a list</span><span class="named-paragraph-number">4.1</span></span><span class="comment-syntax"> =</span>
<p class="commentary firstcommentary"><a id="SP3_1" class="paragraph-anchor"></a><b>&#167;3.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Recurse downwards, preferring the leftmost item in a list</span><span class="named-paragraph-number">3.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">left</span><span class="plain-syntax"> = </span><a href="4-tc.html#SP4" class="function-link"><span class="function-syntax">Assertions::Creator::kind_of_subtree</span></a><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">, </span><span class="identifier-syntax">governing</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</span><span class="plain-syntax"> = </span><a href="4-tc.html#SP4" class="function-link"><span class="function-syntax">Assertions::Creator::kind_of_subtree</span></a><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">, </span><span class="identifier-syntax">governing</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</span><span class="plain-syntax"> = </span><a href="4-tc.html#SP3" class="function-link"><span class="function-syntax">Assertions::Creator::kind_of_subtree</span></a><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">, </span><span class="identifier-syntax">governing</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</span><span class="plain-syntax"> = </span><a href="4-tc.html#SP3" class="function-link"><span class="function-syntax">Assertions::Creator::kind_of_subtree</span></a><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">, </span><span class="identifier-syntax">governing</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</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">left</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">right</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP4">&#167;4</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP4_2" class="paragraph-anchor"></a><b>&#167;4.2. </b>Refinement has already parsed a KIND subtree and left the resulting domain
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP3">&#167;3</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP3_2" class="paragraph-anchor"></a><b>&#167;3.2. </b>Refinement has already parsed a KIND subtree and left the resulting domain
in the node's subject, so this case is easy.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Handle the kind of a "kind of..." clause</span><span class="named-paragraph-number">4.2</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Handle the kind of a "kind of..." clause</span><span class="named-paragraph-number">3.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> *</span><span class="identifier-syntax">governing</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><span class="identifier-syntax">KindSubjects::to_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">Node::get_subject</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">));</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP4">&#167;4</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP4_3" class="paragraph-anchor"></a><b>&#167;4.3. </b>Less surprisingly, "number that varies" and "number" return <span class="extract"><span class="extract-syntax">K_number</span></span>.
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP3">&#167;3</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP3_3" class="paragraph-anchor"></a><b>&#167;3.3. </b>Less surprisingly, "number that varies" and "number" return <span class="extract"><span class="extract-syntax">K_number</span></span>.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Kinds of variable and of value produce the obvious kind as result</span><span class="named-paragraph-number">4.3</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Kinds of variable and of value produce the obvious kind as result</span><span class="named-paragraph-number">3.3</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -364,8 +294,8 @@ in the node's subject, so this case is easy.
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">found</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP4">&#167;4</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP4_4" class="paragraph-anchor"></a><b>&#167;4.4. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Initially values produce their own weakened kind</span><span class="named-paragraph-number">4.4</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP3">&#167;3</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP3_4" class="paragraph-anchor"></a><b>&#167;3.4. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Initially values produce their own weakened kind</span><span class="named-paragraph-number">3.4</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -377,8 +307,8 @@ in the node's subject, so this case is easy.
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP4">&#167;4</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP4_5" class="paragraph-anchor"></a><b>&#167;4.5. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Property names coinciding with kinds are considered with their kind meanings</span><span class="named-paragraph-number">4.5</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP3">&#167;3</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP3_5" class="paragraph-anchor"></a><b>&#167;3.5. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Property names coinciding with kinds are considered with their kind meanings</span><span class="named-paragraph-number">3.5</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -389,11 +319,11 @@ in the node's subject, so this case is easy.
<span class="plain-syntax"> </span><span class="reserved-syntax">return</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>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP4">&#167;4</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP4_6" class="paragraph-anchor"></a><b>&#167;4.6. </b>And similarly "even number" returns <span class="extract"><span class="extract-syntax">K_number</span></span>.
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP3">&#167;3</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP3_6" class="paragraph-anchor"></a><b>&#167;3.6. </b>And similarly "even number" returns <span class="extract"><span class="extract-syntax">K_number</span></span>.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Descriptions produce the kind of whatever's described</span><span class="named-paragraph-number">4.6</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Descriptions produce the kind of whatever's described</span><span class="named-paragraph-number">3.6</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -402,8 +332,8 @@ in the node's subject, so this case is easy.
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">Specifications::to_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP4">&#167;4</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>&#167;5. Acting on creations. </b>Building and refining the parse tree was a compositional process, in a linguistic
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP3">&#167;3</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. Acting on creations. </b>Building and refining the parse tree was a compositional process, in a linguistic
sense: what you do at any given position depends only on the current phrase and
its contents, or equivalently, on the current node and its children.
</p>
@ -432,20 +362,20 @@ both of which are excised and replaced with <span class="extract"><span class="e
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">table</span><span class="plain-syntax"> *</span><span class="identifier-syntax">allow_tabular_definitions_from</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Assertions::Creator::tabular_definitions</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">Assertions::Creator::tabular_definitions</span></span>:<br/>Define by Table Requests - <a href="3-dbtr.html#SP4_1_3">&#167;4.1.3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">table</span><span class="plain-syntax"> *</span><span class="identifier-syntax">t</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Assertions::Creator::tabular_definitions</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::Creator::tabular_definitions</span></span>:<br/>Define by Table Requests - <a href="3-dbtr.html#SP4_1_3">&#167;4.1.3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">table</span><span class="plain-syntax"> *</span><span class="identifier-syntax">t</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">allow_tabular_definitions_from</span><span class="plain-syntax"> = </span><span class="identifier-syntax">t</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Assertions::Creator::noun_creator</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">Assertions::Creator::noun_creator</span></span>:<br/><a href="4-tc.html#SP1_1">&#167;1.1</a>, <a href="4-tc.html#SP1_2">&#167;1.2</a>, <a href="4-tc.html#SP5_2">&#167;5.2</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="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">create_as</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">governor</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Assertions::Creator::noun_creator</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">Assertions::Creator::noun_creator</span></span>:<br/><a href="4-tc.html#SP1_1">&#167;1.1</a>, <a href="4-tc.html#SP1_2">&#167;1.2</a>, <a href="4-tc.html#SP4_2">&#167;4.2</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="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">create_as</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">governor</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Node::get_type</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">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">CALLED_NT:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-tc.html#SP5_1" class="named-paragraph-link"><span class="named-paragraph">Check we are sure about this</span><span class="named-paragraph-number">5.1</span></a></span><span class="plain-syntax">; </span><span class="named-paragraph-container code-font"><a href="4-tc.html#SP5_2" class="named-paragraph-link"><span class="named-paragraph">Perform creation on a CALLED node</span><span class="named-paragraph-number">5.2</span></a></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">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">CREATED_NT:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-tc.html#SP5_1" class="named-paragraph-link"><span class="named-paragraph">Check we are sure about this</span><span class="named-paragraph-number">5.1</span></a></span><span class="plain-syntax">; </span><span class="named-paragraph-container code-font"><a href="4-tc.html#SP5_4" class="named-paragraph-link"><span class="named-paragraph">Perform creation on a CREATED node</span><span class="named-paragraph-number">5.4</span></a></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">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">CALLED_NT:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-tc.html#SP4_1" class="named-paragraph-link"><span class="named-paragraph">Check we are sure about this</span><span class="named-paragraph-number">4.1</span></a></span><span class="plain-syntax">; </span><span class="named-paragraph-container code-font"><a href="4-tc.html#SP4_2" class="named-paragraph-link"><span class="named-paragraph">Perform creation on a CALLED node</span><span class="named-paragraph-number">4.2</span></a></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">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">CREATED_NT:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-tc.html#SP4_1" class="named-paragraph-link"><span class="named-paragraph">Check we are sure about this</span><span class="named-paragraph-number">4.1</span></a></span><span class="plain-syntax">; </span><span class="named-paragraph-container code-font"><a href="4-tc.html#SP4_4" class="named-paragraph-link"><span class="named-paragraph">Perform creation on a CREATED node</span><span class="named-paragraph-number">4.4</span></a></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">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ch</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">ch</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">; </span><span class="identifier-syntax">ch</span><span class="plain-syntax">; </span><span class="identifier-syntax">ch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ch</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next</span><span class="plain-syntax">) </span><a href="4-tc.html#SP5" class="function-link"><span class="function-syntax">Assertions::Creator::noun_creator</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ch</span><span class="plain-syntax">, </span><span class="identifier-syntax">create_as</span><span class="plain-syntax">, </span><span class="identifier-syntax">governor</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">ch</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">; </span><span class="identifier-syntax">ch</span><span class="plain-syntax">; </span><span class="identifier-syntax">ch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ch</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next</span><span class="plain-syntax">) </span><a href="4-tc.html#SP4" class="function-link"><span class="function-syntax">Assertions::Creator::noun_creator</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ch</span><span class="plain-syntax">, </span><span class="identifier-syntax">create_as</span><span class="plain-syntax">, </span><span class="identifier-syntax">governor</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP5_1" class="paragraph-anchor"></a><b>&#167;5.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Check we are sure about this</span><span class="named-paragraph-number">5.1</span></span><span class="comment-syntax"> =</span>
<p class="commentary firstcommentary"><a id="SP4_1" class="paragraph-anchor"></a><b>&#167;4.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Check we are sure about this</span><span class="named-paragraph-number">4.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -455,8 +385,8 @@ both of which are excised and replaced with <span class="extract"><span class="e
<span class="plain-syntax"> </span><span class="string-syntax">"not that they don't."</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP5">&#167;5</a> (twice), <a href="4-tc.html#SP8">&#167;8</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5_2" class="paragraph-anchor"></a><b>&#167;5.2. </b>CALLED nodes allow a much more generous range of names to be used &mdash; that's
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP4">&#167;4</a> (twice), <a href="4-tc.html#SP7">&#167;7</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP4_2" class="paragraph-anchor"></a><b>&#167;4.2. </b>CALLED nodes allow a much more generous range of names to be used &mdash; that's
the whole point of them. Really they contain the whole language in miniature,
because a "called" clause can specify not only the name but also its kind,
some properties which it has, and so forth. For example:
@ -479,7 +409,7 @@ is important for sentences like:
an object, but we know locally that Peter must further have the kind "man".
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Perform creation on a CALLED node</span><span class="named-paragraph-number">5.2</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Perform creation on a CALLED node</span><span class="named-paragraph-number">4.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -488,25 +418,25 @@ an object, but we know locally that Peter must further have the kind "man".
<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">what_to_make_node</span><span class="plain-syntax">) != </span><span class="identifier-syntax">COMMON_NOUN_NT</span><span class="plain-syntax">) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">Node::get_type</span><span class="plain-syntax">(</span><span class="identifier-syntax">what_to_make_node</span><span class="plain-syntax">) != </span><span class="identifier-syntax">WITH_NT</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-tc.html#SP5_2_3" class="named-paragraph-link"><span class="named-paragraph">Complain that nothing else can be called</span><span class="named-paragraph-number">5.2.3</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-tc.html#SP4_2_3" class="named-paragraph-link"><span class="named-paragraph">Complain that nothing else can be called</span><span class="named-paragraph-number">4.2.3</span></a></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">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">local_governor</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">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">local_create_as</span><span class="plain-syntax"> = </span><a href="4-tc.html#SP4" class="function-link"><span class="function-syntax">Assertions::Creator::kind_of_subtree</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">what_to_make_node</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">local_governor</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">local_create_as</span><span class="plain-syntax"> = </span><a href="4-tc.html#SP3" class="function-link"><span class="function-syntax">Assertions::Creator::kind_of_subtree</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">what_to_make_node</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">local_governor</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">local_create_as</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) { </span><span class="identifier-syntax">local_create_as</span><span class="plain-syntax"> = </span><span class="identifier-syntax">create_as</span><span class="plain-syntax">; </span><span class="identifier-syntax">local_governor</span><span class="plain-syntax"> = </span><span class="identifier-syntax">governor</span><span class="plain-syntax">; }</span>
<span class="plain-syntax"> </span><a href="4-tc.html#SP5" class="function-link"><span class="function-syntax">Assertions::Creator::noun_creator</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">called_name_node</span><span class="plain-syntax">, </span><span class="identifier-syntax">local_create_as</span><span class="plain-syntax">, </span><span class="identifier-syntax">local_governor</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="4-tc.html#SP4" class="function-link"><span class="function-syntax">Assertions::Creator::noun_creator</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">called_name_node</span><span class="plain-syntax">, </span><span class="identifier-syntax">local_create_as</span><span class="plain-syntax">, </span><span class="identifier-syntax">local_governor</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-tc.html#SP5_2_1" class="named-paragraph-link"><span class="named-paragraph">Replace the CALLED subtree with the new creation, mutatis mutandis</span><span class="named-paragraph-number">5.2.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-tc.html#SP5_2_2" class="named-paragraph-link"><span class="named-paragraph">If the CALLED name used the definite article, make a note of that</span><span class="named-paragraph-number">5.2.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-tc.html#SP4_2_1" class="named-paragraph-link"><span class="named-paragraph">Replace the CALLED subtree with the new creation, mutatis mutandis</span><span class="named-paragraph-number">4.2.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-tc.html#SP4_2_2" class="named-paragraph-link"><span class="named-paragraph">If the CALLED name used the definite article, make a note of that</span><span class="named-paragraph-number">4.2.2</span></a></span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP5">&#167;5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5_2_1" class="paragraph-anchor"></a><b>&#167;5.2.1. </b>This is where we act on the miniature sentence implied by the CALLED
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP4">&#167;4</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP4_2_1" class="paragraph-anchor"></a><b>&#167;4.2.1. </b>This is where we act on the miniature sentence implied by the CALLED
subtree. We replace the subtree with a single node &mdash; the result of creation
on the <span class="extract"><span class="extract-syntax">called_name_node</span></span> side &mdash; but then apply to it any kind, proposition
or adjectives specified in the <span class="extract"><span class="extract-syntax">what_to_make_node</span></span> side.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Replace the CALLED subtree with the new creation, mutatis mutandis</span><span class="named-paragraph-number">5.2.1</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Replace the CALLED subtree with the new creation, mutatis mutandis</span><span class="named-paragraph-number">4.2.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -523,8 +453,8 @@ or adjectives specified in the <span class="extract"><span class="extract-syntax
<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">what_to_make_node</span><span class="plain-syntax">) == </span><span class="identifier-syntax">WITH_NT</span><span class="plain-syntax">)</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">p</span><span class="plain-syntax">, </span><span class="identifier-syntax">what_to_make_node</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">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP5_2">&#167;5.2</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5_2_2" class="paragraph-anchor"></a><b>&#167;5.2.2. </b>Ordinarily the use of the definite article doesn't tell us much, but
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP4_2">&#167;4.2</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP4_2_2" class="paragraph-anchor"></a><b>&#167;4.2.2. </b>Ordinarily the use of the definite article doesn't tell us much, but
consider the following two sentences:
</p>
@ -537,7 +467,7 @@ consider the following two sentences:
is why the following only applies to those.)
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">If the CALLED name used the definite article, make a note of that</span><span class="named-paragraph-number">5.2.2</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">If the CALLED name used the definite article, make a note of that</span><span class="named-paragraph-number">4.2.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -551,12 +481,12 @@ is why the following only applies to those.)
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP5_2">&#167;5.2</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5_2_3" class="paragraph-anchor"></a><b>&#167;5.2.3. </b>Note that even in this problem case, the <span class="extract"><span class="extract-syntax">CALLED_NT</span></span> node is removed. It
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP4_2">&#167;4.2</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP4_2_3" class="paragraph-anchor"></a><b>&#167;4.2.3. </b>Note that even in this problem case, the <span class="extract"><span class="extract-syntax">CALLED_NT</span></span> node is removed. It
disappears from the tree entirely when the creator has finished work.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Complain that nothing else can be called</span><span class="named-paragraph-number">5.2.3</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Complain that nothing else can be called</span><span class="named-paragraph-number">4.2.3</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -573,8 +503,8 @@ disappears from the tree entirely when the creator has finished work.
<span class="plain-syntax"> </span><span class="identifier-syntax">Node::set_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">called_name_node</span><span class="plain-syntax">));</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"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP5_2">&#167;5.2</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5_3" class="paragraph-anchor"></a><b>&#167;5.3. </b>Names are not permitted to contain brackets, but we do allow them as an indicator
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP4_2">&#167;4.2</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP4_3" class="paragraph-anchor"></a><b>&#167;4.3. </b>Names are not permitted to contain brackets, but we do allow them as an indicator
of grammatical gender for languages other than English.
</p>
@ -588,14 +518,14 @@ of grammatical gender for languages other than English.
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">f</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>
<p class="commentary firstcommentary"><a id="SP5_4" class="paragraph-anchor"></a><b>&#167;5.4. </b>That's it for callings; on to the main case, where we have a <span class="extract"><span class="Preform-extract-syntax">CREATED_NT</span></span>
<p class="commentary firstcommentary"><a id="SP4_4" class="paragraph-anchor"></a><b>&#167;4.4. </b>That's it for callings; on to the main case, where we have a <span class="extract"><span class="Preform-extract-syntax">CREATED_NT</span></span>
node which invites us to make something of it. In every case it becomes one
of <span class="extract"><span class="Preform-extract-syntax">COMMON_NOUN_NT</span></span> (e.g., "Colour is a kind of value"); or <span class="extract"><span class="Preform-extract-syntax">PROPER_NOUN_NT</span></span>
(e.g., "Miss Bianca is an animal"). Thus every <span class="extract"><span class="Preform-extract-syntax">CREATED_NT</span></span> node disappears
from the tree.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Perform creation on a CREATED node</span><span class="named-paragraph-number">5.4</span></span><span class="Preform-comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Perform creation on a CREATED node</span><span class="named-paragraph-number">4.4</span></span><span class="Preform-comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -611,52 +541,52 @@ from the tree.
<span class="plain-syntax"> (</span><span class="identifier-syntax">prevailing_mood</span><span class="plain-syntax"> != </span><span class="identifier-syntax">INITIALLY_CE</span><span class="plain-syntax">) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">prevailing_mood</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="identifier-syntax">instance</span><span class="plain-syntax"> *</span><span class="identifier-syntax">recent_creation</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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Wordings::nonempty</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">)) </span><span class="named-paragraph-container code-font"><a href="4-tc.html#SP5_4_1" class="named-paragraph-link"><span class="named-paragraph">Create an object or kind of object rather than a value</span><span class="named-paragraph-number">5.4.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">Wordings::nonempty</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">)) </span><span class="named-paragraph-container code-font"><a href="4-tc.html#SP4_4_1" class="named-paragraph-link"><span class="named-paragraph">Create an object or kind of object rather than a value</span><span class="named-paragraph-number">4.4.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">recent_creation</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="4-rpt.html#SP1" class="function-link"><span class="function-syntax">Refiner::give_subject_to_noun</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="identifier-syntax">Instances::as_subject</span><span class="plain-syntax">(</span><span class="identifier-syntax">recent_creation</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::write_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="identifier-syntax">creation_site_ANNOT</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">else</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">val</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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Wordings::nonempty</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">)) </span><span class="named-paragraph-container code-font"><a href="4-tc.html#SP5_4_2" class="named-paragraph-link"><span class="named-paragraph">Create a value rather than an object</span><span class="named-paragraph-number">5.4.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Wordings::nonempty</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">)) </span><span class="named-paragraph-container code-font"><a href="4-tc.html#SP4_4_2" class="named-paragraph-link"><span class="named-paragraph">Create a value rather than an object</span><span class="named-paragraph-number">4.4.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="4-rpt.html#SP1" class="function-link"><span class="function-syntax">Refiner::give_spec_to_noun</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="identifier-syntax">val</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">val</span><span class="plain-syntax">) </span><span class="identifier-syntax">Annotations::write_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="identifier-syntax">creation_site_ANNOT</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP5">&#167;5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>&#167;6. </b>There now follows a pretty tedious trawl through reasons to object to names.
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP4">&#167;4</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>&#167;5. </b>There now follows a pretty tedious trawl through reasons to object to names.
The crash hieroglyphs exist only so that the Inform test suite can verify that
it handles crashes correctly.
</p>
<pre class="Preform-displayed-code all-displayed-code code-font">
<span class="Preform-function-syntax">&lt;creation-problem-diagnosis&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;article&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="4-tc.html#SP6_1" class="named-paragraph-link"><span class="named-paragraph">Issue PM_NameIsArticle problem</span><span class="named-paragraph-number">6.1</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-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">==&gt;</span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-tc.html#SP6_2" class="named-paragraph-link"><span class="named-paragraph">Issue PM_NameWithBrackets problem</span><span class="named-paragraph-number">6.2</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-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">==&gt;</span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-tc.html#SP6_2" class="named-paragraph-link"><span class="named-paragraph">Issue PM_NameWithBrackets problem</span><span class="named-paragraph-number">6.2</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="4-tc.html#SP6_2" class="named-paragraph-link"><span class="named-paragraph">Issue PM_NameWithBrackets problem</span><span class="named-paragraph-number">6.2</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">ni--crash--1</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="4-tc.html#SP6_3" class="named-paragraph-link"><span class="named-paragraph">Issue PM_Crash1 problem</span><span class="named-paragraph-number">6.3</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">ni--crash--10</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="4-tc.html#SP6_4" class="named-paragraph-link"><span class="named-paragraph">Issue PM_Crash10 problem</span><span class="named-paragraph-number">6.4</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">ni--crash--11</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="4-tc.html#SP6_5" class="named-paragraph-link"><span class="named-paragraph">Issue PM_Crash11 problem</span><span class="named-paragraph-number">6.5</span></a></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="4-tc.html#SP6_6" class="named-paragraph-link"><span class="named-paragraph">Issue PM_StartsWithComma problem</span><span class="named-paragraph-number">6.6</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">==&gt;</span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-tc.html#SP6_7" class="named-paragraph-link"><span class="named-paragraph">Issue PM_EndsWithComma problem</span><span class="named-paragraph-number">6.7</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">when/while</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="4-tc.html#SP6_8" class="named-paragraph-link"><span class="named-paragraph">Issue PM_ObjectIncWhen problem</span><span class="named-paragraph-number">6.8</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">***</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;quoted-text&gt;</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">==&gt;</span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-tc.html#SP6_9" class="named-paragraph-link"><span class="named-paragraph">Issue PM_NameWithText problem</span><span class="named-paragraph-number">6.9</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">condition</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="4-tc.html#SP6_10" class="named-paragraph-link"><span class="named-paragraph">Issue PM_NameReserved problem</span><span class="named-paragraph-number">6.10</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">conditions</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="4-tc.html#SP6_10" class="named-paragraph-link"><span class="named-paragraph">Issue PM_NameReserved problem</span><span class="named-paragraph-number">6.10</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">storage</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="4-tc.html#SP6_10" class="named-paragraph-link"><span class="named-paragraph">Issue PM_NameReserved problem</span><span class="named-paragraph-number">6.10</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">storages</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="4-tc.html#SP6_10" class="named-paragraph-link"><span class="named-paragraph">Issue PM_NameReserved problem</span><span class="named-paragraph-number">6.10</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">variable</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="4-tc.html#SP6_10" class="named-paragraph-link"><span class="named-paragraph">Issue PM_NameReserved problem</span><span class="named-paragraph-number">6.10</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">variables</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="4-tc.html#SP6_10" class="named-paragraph-link"><span class="named-paragraph">Issue PM_NameReserved problem</span><span class="named-paragraph-number">6.10</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">property-value</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="4-tc.html#SP6_10" class="named-paragraph-link"><span class="named-paragraph">Issue PM_NameReserved problem</span><span class="named-paragraph-number">6.10</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">property-values</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="4-tc.html#SP6_10" class="named-paragraph-link"><span class="named-paragraph">Issue PM_NameReserved problem</span><span class="named-paragraph-number">6.10</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">table-reference</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="4-tc.html#SP6_10" class="named-paragraph-link"><span class="named-paragraph">Issue PM_NameReserved problem</span><span class="named-paragraph-number">6.10</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">table-references</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="4-tc.html#SP6_10" class="named-paragraph-link"><span class="named-paragraph">Issue PM_NameReserved problem</span><span class="named-paragraph-number">6.10</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">list-entry</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="4-tc.html#SP6_10" class="named-paragraph-link"><span class="named-paragraph">Issue PM_NameReserved problem</span><span class="named-paragraph-number">6.10</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">list-entries</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-tc.html#SP6_10" class="named-paragraph-link"><span class="named-paragraph">Issue PM_NameReserved problem</span><span class="named-paragraph-number">6.10</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;article&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="4-tc.html#SP5_1" class="named-paragraph-link"><span class="named-paragraph">Issue PM_NameIsArticle problem</span><span class="named-paragraph-number">5.1</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-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">==&gt;</span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-tc.html#SP5_2" class="named-paragraph-link"><span class="named-paragraph">Issue PM_NameWithBrackets problem</span><span class="named-paragraph-number">5.2</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-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">==&gt;</span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-tc.html#SP5_2" class="named-paragraph-link"><span class="named-paragraph">Issue PM_NameWithBrackets problem</span><span class="named-paragraph-number">5.2</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="4-tc.html#SP5_2" class="named-paragraph-link"><span class="named-paragraph">Issue PM_NameWithBrackets problem</span><span class="named-paragraph-number">5.2</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">ni--crash--1</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="4-tc.html#SP5_3" class="named-paragraph-link"><span class="named-paragraph">Issue PM_Crash1 problem</span><span class="named-paragraph-number">5.3</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">ni--crash--10</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="4-tc.html#SP5_4" class="named-paragraph-link"><span class="named-paragraph">Issue PM_Crash10 problem</span><span class="named-paragraph-number">5.4</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">ni--crash--11</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="4-tc.html#SP5_5" class="named-paragraph-link"><span class="named-paragraph">Issue PM_Crash11 problem</span><span class="named-paragraph-number">5.5</span></a></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="4-tc.html#SP5_6" class="named-paragraph-link"><span class="named-paragraph">Issue PM_StartsWithComma problem</span><span class="named-paragraph-number">5.6</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">==&gt;</span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-tc.html#SP5_7" class="named-paragraph-link"><span class="named-paragraph">Issue PM_EndsWithComma problem</span><span class="named-paragraph-number">5.7</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">when/while</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="4-tc.html#SP5_8" class="named-paragraph-link"><span class="named-paragraph">Issue PM_ObjectIncWhen problem</span><span class="named-paragraph-number">5.8</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">***</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;quoted-text&gt;</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">==&gt;</span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-tc.html#SP5_9" class="named-paragraph-link"><span class="named-paragraph">Issue PM_NameWithText problem</span><span class="named-paragraph-number">5.9</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">condition</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="4-tc.html#SP5_10" class="named-paragraph-link"><span class="named-paragraph">Issue PM_NameReserved problem</span><span class="named-paragraph-number">5.10</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">conditions</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="4-tc.html#SP5_10" class="named-paragraph-link"><span class="named-paragraph">Issue PM_NameReserved problem</span><span class="named-paragraph-number">5.10</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">storage</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="4-tc.html#SP5_10" class="named-paragraph-link"><span class="named-paragraph">Issue PM_NameReserved problem</span><span class="named-paragraph-number">5.10</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">storages</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="4-tc.html#SP5_10" class="named-paragraph-link"><span class="named-paragraph">Issue PM_NameReserved problem</span><span class="named-paragraph-number">5.10</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">variable</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="4-tc.html#SP5_10" class="named-paragraph-link"><span class="named-paragraph">Issue PM_NameReserved problem</span><span class="named-paragraph-number">5.10</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">variables</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="4-tc.html#SP5_10" class="named-paragraph-link"><span class="named-paragraph">Issue PM_NameReserved problem</span><span class="named-paragraph-number">5.10</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">property-value</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="4-tc.html#SP5_10" class="named-paragraph-link"><span class="named-paragraph">Issue PM_NameReserved problem</span><span class="named-paragraph-number">5.10</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">property-values</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="4-tc.html#SP5_10" class="named-paragraph-link"><span class="named-paragraph">Issue PM_NameReserved problem</span><span class="named-paragraph-number">5.10</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">table-reference</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="4-tc.html#SP5_10" class="named-paragraph-link"><span class="named-paragraph">Issue PM_NameReserved problem</span><span class="named-paragraph-number">5.10</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">table-references</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="4-tc.html#SP5_10" class="named-paragraph-link"><span class="named-paragraph">Issue PM_NameReserved problem</span><span class="named-paragraph-number">5.10</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">list-entry</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="4-tc.html#SP5_10" class="named-paragraph-link"><span class="named-paragraph">Issue PM_NameReserved problem</span><span class="named-paragraph-number">5.10</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">list-entries</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-tc.html#SP5_10" class="named-paragraph-link"><span class="named-paragraph">Issue PM_NameReserved problem</span><span class="named-paragraph-number">5.10</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>
<p class="commentary firstcommentary"><a id="SP6_1" class="paragraph-anchor"></a><b>&#167;6.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_NameIsArticle problem</span><span class="named-paragraph-number">6.1</span></span><span class="Preform-comment-syntax"> =</span>
<p class="commentary firstcommentary"><a id="SP5_1" class="paragraph-anchor"></a><b>&#167;5.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_NameIsArticle problem</span><span class="named-paragraph-number">5.1</span></span><span class="Preform-comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -667,8 +597,8 @@ it handles crashes correctly.
<span class="plain-syntax"> </span><span class="string-syntax">"the player sees as just 'A', you can get this effect with: 'A-Room is "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"a room with printed name \"A\".')"</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP6">&#167;6</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6_2" class="paragraph-anchor"></a><b>&#167;6.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_NameWithBrackets problem</span><span class="named-paragraph-number">6.2</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP5">&#167;5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5_2" class="paragraph-anchor"></a><b>&#167;5.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_NameWithBrackets problem</span><span class="named-paragraph-number">5.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -680,8 +610,8 @@ it handles crashes correctly.
<span class="plain-syntax"> </span><span class="string-syntax">"effect with: 'Fillmore West is a room with printed name \"Fillmore "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"(West)\".')"</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP6">&#167;6</a> (three times).</li></ul>
<p class="commentary firstcommentary"><a id="SP6_3" class="paragraph-anchor"></a><b>&#167;6.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_Crash1 problem</span><span class="named-paragraph-number">6.3</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP5">&#167;5</a> (three times).</li></ul>
<p class="commentary firstcommentary"><a id="SP5_3" class="paragraph-anchor"></a><b>&#167;5.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_Crash1 problem</span><span class="named-paragraph-number">5.3</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -693,8 +623,8 @@ it handles crashes correctly.
<span class="plain-syntax"> </span><span class="string-syntax">"If this is a genuine inconvenience to you, get in touch with my authors.)"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ProblemSigils::exit</span><span class="plain-syntax">(1);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP6">&#167;6</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6_4" class="paragraph-anchor"></a><b>&#167;6.4. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_Crash10 problem</span><span class="named-paragraph-number">6.4</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP5">&#167;5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5_4" class="paragraph-anchor"></a><b>&#167;5.4. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_Crash10 problem</span><span class="named-paragraph-number">5.4</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -706,8 +636,8 @@ it handles crashes correctly.
<span class="plain-syntax"> </span><span class="string-syntax">"If this is a genuine inconvenience to you, get in touch with my authors.)"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ProblemSigils::exit</span><span class="plain-syntax">(10);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP6">&#167;6</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6_5" class="paragraph-anchor"></a><b>&#167;6.5. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_Crash11 problem</span><span class="named-paragraph-number">6.5</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP5">&#167;5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5_5" class="paragraph-anchor"></a><b>&#167;5.5. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_Crash11 problem</span><span class="named-paragraph-number">5.5</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -719,8 +649,8 @@ it handles crashes correctly.
<span class="plain-syntax"> </span><span class="string-syntax">"If this is a genuine inconvenience to you, get in touch with my authors.)"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ProblemSigils::exit</span><span class="plain-syntax">(11);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP6">&#167;6</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6_6" class="paragraph-anchor"></a><b>&#167;6.6. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_StartsWithComma problem</span><span class="named-paragraph-number">6.6</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP5">&#167;5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5_6" class="paragraph-anchor"></a><b>&#167;5.6. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_StartsWithComma problem</span><span class="named-paragraph-number">5.6</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -731,8 +661,8 @@ it handles crashes correctly.
<span class="plain-syntax"> </span><span class="string-syntax">"Inform generally doesn't like this because it reserves commas for "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"specific purposes such as dividing rules or 'if' phrases."</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP6">&#167;6</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6_7" class="paragraph-anchor"></a><b>&#167;6.7. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_EndsWithComma problem</span><span class="named-paragraph-number">6.7</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP5">&#167;5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5_7" class="paragraph-anchor"></a><b>&#167;5.7. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_EndsWithComma problem</span><span class="named-paragraph-number">5.7</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -742,8 +672,8 @@ it handles crashes correctly.
<span class="plain-syntax"> </span><span class="string-syntax">"Inform generally doesn't like this because it reserves commas for "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"specific purposes such as dividing rules or 'if' phrases."</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP6">&#167;6</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6_8" class="paragraph-anchor"></a><b>&#167;6.8. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_ObjectIncWhen problem</span><span class="named-paragraph-number">6.8</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP5">&#167;5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5_8" class="paragraph-anchor"></a><b>&#167;5.8. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_ObjectIncWhen problem</span><span class="named-paragraph-number">5.8</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -766,8 +696,8 @@ it handles crashes correctly.
<span class="plain-syntax"> </span><span class="string-syntax">"try something like: 'In the box is a thing called When worlds collide.'"</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-tc.html#SP6">&#167;6</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6_9" class="paragraph-anchor"></a><b>&#167;6.9. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_NameWithText problem</span><span class="named-paragraph-number">6.9</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP5">&#167;5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5_9" class="paragraph-anchor"></a><b>&#167;5.9. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_NameWithText problem</span><span class="named-paragraph-number">5.9</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -782,8 +712,8 @@ it handles crashes correctly.
<span class="plain-syntax"> </span><span class="string-syntax">"because it finished with sentence-ending punctuation, when in "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"fact it didn't, so that I read the next words as following on."</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP6">&#167;6</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6_10" class="paragraph-anchor"></a><b>&#167;6.10. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_NameReserved problem</span><span class="named-paragraph-number">6.10</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP5">&#167;5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5_10" class="paragraph-anchor"></a><b>&#167;5.10. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_NameReserved problem</span><span class="named-paragraph-number">5.10</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -795,8 +725,8 @@ it handles crashes correctly.
<span class="plain-syntax"> </span><span class="string-syntax">"whatever you were making here, you'll need to call it something "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"else."</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP6">&#167;6</a> (12 times).</li></ul>
<p class="commentary firstcommentary"><a id="SP5_4_1" class="paragraph-anchor"></a><b>&#167;5.4.1. </b>At this point we do something that might look odd: we check to see if the
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP5">&#167;5</a> (12 times).</li></ul>
<p class="commentary firstcommentary"><a id="SP4_4_1" class="paragraph-anchor"></a><b>&#167;4.4.1. </b>At this point we do something that might look odd: we check to see if the
text of the <span class="extract"><span class="extract-syntax">CREATED_NT</span></span> node is the name of an object already. That seems
pointless, since <span class="extract"><span class="extract-syntax">CREATED_NT</span></span> nodes are only made when a name is meaningless.
But that was a little while ago, before we started to make creations within
@ -828,7 +758,7 @@ to the same object.
to abbreviated forms of object names are normally allowed.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Create an object or kind of object rather than a value</span><span class="named-paragraph-number">5.4.1</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Create an object or kind of object rather than a value</span><span class="named-paragraph-number">4.4.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -840,10 +770,10 @@ to abbreviated forms of object names are normally allowed.
<span class="plain-syntax"> </span><span class="identifier-syntax">recent_creation</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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">recent_creation</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="4-tc.html#SP5_4_1_1" class="named-paragraph-link"><span class="named-paragraph">Actually create a fresh object</span><span class="named-paragraph-number">5.4.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">recent_creation</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="4-tc.html#SP4_4_1_1" class="named-paragraph-link"><span class="named-paragraph">Actually create a fresh object</span><span class="named-paragraph-number">4.4.1.1</span></a></span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP5_4">&#167;5.4</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5_4_1_1" class="paragraph-anchor"></a><b>&#167;5.4.1.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Actually create a fresh object</span><span class="named-paragraph-number">5.4.1.1</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP4_4">&#167;4.4</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP4_4_1_1" class="paragraph-anchor"></a><b>&#167;4.4.1.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Actually create a fresh object</span><span class="named-paragraph-number">4.4.1.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -887,40 +817,40 @@ to abbreviated forms of object names are normally allowed.
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::write_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="identifier-syntax">creation_site_ANNOT</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP5_4_1">&#167;5.4.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5_4_2" class="paragraph-anchor"></a><b>&#167;5.4.2. </b>Something of a rag-bag, this: it's everything else that can be created.
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP4_4_1">&#167;4.4.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP4_4_2" class="paragraph-anchor"></a><b>&#167;4.4.2. </b>Something of a rag-bag, this: it's everything else that can be created.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Create a value rather than an object</span><span class="named-paragraph-number">5.4.2</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Create a value rather than an object</span><span class="named-paragraph-number">4.4.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">governing_spec</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::get_evaluation</span><span class="plain-syntax">(</span><span class="identifier-syntax">governor</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">governor</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">governor</span><span class="plain-syntax">) == </span><span class="identifier-syntax">KIND_NT</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-tc.html#SP5_4_2_1" class="named-paragraph-link"><span class="named-paragraph">Create a new kind of value</span><span class="named-paragraph-number">5.4.2.1</span></a></span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-tc.html#SP4_4_2_1" class="named-paragraph-link"><span class="named-paragraph">Create a new kind of value</span><span class="named-paragraph-number">4.4.2.1</span></a></span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">Specifications::is_new_variable_like</span><span class="plain-syntax">(</span><span class="identifier-syntax">governing_spec</span><span class="plain-syntax">)) ||</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">prevailing_mood</span><span class="plain-syntax"> == </span><span class="identifier-syntax">INITIALLY_CE</span><span class="plain-syntax">) ||</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">prevailing_mood</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="named-paragraph-container code-font"><a href="4-tc.html#SP5_4_2_2" class="named-paragraph-link"><span class="named-paragraph">Create a new variable</span><span class="named-paragraph-number">5.4.2.2</span></a></span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-tc.html#SP4_4_2_2" class="named-paragraph-link"><span class="named-paragraph">Create a new variable</span><span class="named-paragraph-number">4.4.2.2</span></a></span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Kinds::get_construct</span><span class="plain-syntax">(</span><span class="identifier-syntax">create_as</span><span class="plain-syntax">) == </span><span class="identifier-syntax">CON_rulebook</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-tc.html#SP5_4_2_4" class="named-paragraph-link"><span class="named-paragraph">Create a new rulebook</span><span class="named-paragraph-number">5.4.2.4</span></a></span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-tc.html#SP4_4_2_4" class="named-paragraph-link"><span class="named-paragraph">Create a new rulebook</span><span class="named-paragraph-number">4.4.2.4</span></a></span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Kinds::get_construct</span><span class="plain-syntax">(</span><span class="identifier-syntax">create_as</span><span class="plain-syntax">) == </span><span class="identifier-syntax">CON_activity</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-tc.html#SP5_4_2_5" class="named-paragraph-link"><span class="named-paragraph">Create a new activity</span><span class="named-paragraph-number">5.4.2.5</span></a></span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-tc.html#SP4_4_2_5" class="named-paragraph-link"><span class="named-paragraph">Create a new activity</span><span class="named-paragraph-number">4.4.2.5</span></a></span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">Kinds::Behaviour::definite</span><span class="plain-syntax">(</span><span class="identifier-syntax">create_as</span><span class="plain-syntax">)) &amp;&amp; (</span><span class="identifier-syntax">Kinds::Behaviour::is_quasinumerical</span><span class="plain-syntax">(</span><span class="identifier-syntax">create_as</span><span class="plain-syntax">)))</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-tc.html#SP5_4_2_6" class="named-paragraph-link"><span class="named-paragraph">Issue a problem for trying to create an instance of a unit</span><span class="named-paragraph-number">5.4.2.6</span></a></span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-tc.html#SP4_4_2_6" class="named-paragraph-link"><span class="named-paragraph">Issue a problem for trying to create an instance of a unit</span><span class="named-paragraph-number">4.4.2.6</span></a></span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">Kinds::Behaviour::definite</span><span class="plain-syntax">(</span><span class="identifier-syntax">create_as</span><span class="plain-syntax">)) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">RTKinds::defined_by_table</span><span class="plain-syntax">(</span><span class="identifier-syntax">create_as</span><span class="plain-syntax">)) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">RTKinds::defined_by_table</span><span class="plain-syntax">(</span><span class="identifier-syntax">create_as</span><span class="plain-syntax">) != </span><span class="identifier-syntax">allow_tabular_definitions_from</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-tc.html#SP5_4_2_7" class="named-paragraph-link"><span class="named-paragraph">Issue a problem for trying to create an instance of a table-defined kind</span><span class="named-paragraph-number">5.4.2.7</span></a></span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-tc.html#SP4_4_2_7" class="named-paragraph-link"><span class="named-paragraph">Issue a problem for trying to create an instance of a table-defined kind</span><span class="named-paragraph-number">4.4.2.7</span></a></span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">Kinds::Behaviour::definite</span><span class="plain-syntax">(</span><span class="identifier-syntax">create_as</span><span class="plain-syntax">)) &amp;&amp; (</span><span class="identifier-syntax">Kinds::Behaviour::has_named_constant_values</span><span class="plain-syntax">(</span><span class="identifier-syntax">create_as</span><span class="plain-syntax">)))</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-tc.html#SP5_4_2_3" class="named-paragraph-link"><span class="named-paragraph">Create an instance of an enumerated kind</span><span class="named-paragraph-number">5.4.2.3</span></a></span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-tc.html#SP4_4_2_3" class="named-paragraph-link"><span class="named-paragraph">Create an instance of an enumerated kind</span><span class="named-paragraph-number">4.4.2.3</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="4-tc.html#SP5_4_2_8" class="named-paragraph-link"><span class="named-paragraph">Issue an unable-to-create problem message</span><span class="named-paragraph-number">5.4.2.8</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-tc.html#SP4_4_2_8" class="named-paragraph-link"><span class="named-paragraph">Issue an unable-to-create problem message</span><span class="named-paragraph-number">4.4.2.8</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Index::DocReferences::position_of_symbol</span><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Node::set_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP5_4">&#167;5.4</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5_4_2_1" class="paragraph-anchor"></a><b>&#167;5.4.2.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Create a new kind of value</span><span class="named-paragraph-number">5.4.2.1</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP4_4">&#167;4.4</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP4_4_2_1" class="paragraph-anchor"></a><b>&#167;4.4.2.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Create a new kind of value</span><span class="named-paragraph-number">4.4.2.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -929,8 +859,8 @@ to abbreviated forms of object names are normally allowed.
<span class="plain-syntax"> </span><span class="identifier-syntax">Assert::true</span><span class="plain-syntax">(</span><span class="identifier-syntax">prop</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">val</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Specifications::from_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">latest_base_kind_of_value</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP5_4_2">&#167;5.4.2</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5_4_2_2" class="paragraph-anchor"></a><b>&#167;5.4.2.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Create a new variable</span><span class="named-paragraph-number">5.4.2.2</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP4_4_2">&#167;4.4.2</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP4_4_2_2" class="paragraph-anchor"></a><b>&#167;4.4.2.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Create a new variable</span><span class="named-paragraph-number">4.4.2.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -940,7 +870,7 @@ to abbreviated forms of object names are normally allowed.
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Specifications::is_new_variable_like</span><span class="plain-syntax">(</span><span class="identifier-syntax">governing_spec</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">domain</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Specifications::kind_of_new_variable_like</span><span class="plain-syntax">(</span><span class="identifier-syntax">governing_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">K_understanding</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">Kinds::contains</span><span class="plain-syntax">(</span><span class="identifier-syntax">domain</span><span class="plain-syntax">, </span><span class="identifier-syntax">Kinds::get_construct</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_understanding</span><span class="plain-syntax">))))</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-tc.html#SP5_4_2_2_1" class="named-paragraph-link"><span class="named-paragraph">Issue a problem for topics that vary</span><span class="named-paragraph-number">5.4.2.2.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-tc.html#SP4_4_2_2_1" class="named-paragraph-link"><span class="named-paragraph">Issue a problem for topics that vary</span><span class="named-paragraph-number">4.4.2.2.1</span></a></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><a href="6-cu.html#SP1" class="function-link"><span class="function-syntax">Propositions::Abstract::to_create_something</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">domain</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">prevailing_mood</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="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="6-cu.html#SP1" class="function-link"><span class="function-syntax">Propositions::Abstract::to_make_a_const</span></a><span class="plain-syntax">());</span>
@ -950,8 +880,8 @@ to abbreviated forms of object names are normally allowed.
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">NonlocalVariables::get_latest</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">"failed to create"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">val</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Lvalues::new_actual_NONLOCAL_VARIABLE</span><span class="plain-syntax">(</span><span class="identifier-syntax">NonlocalVariables::get_latest</span><span class="plain-syntax">());</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP5_4_2">&#167;5.4.2</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5_4_2_3" class="paragraph-anchor"></a><b>&#167;5.4.2.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Create an instance of an enumerated kind</span><span class="named-paragraph-number">5.4.2.3</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP4_4_2">&#167;4.4.2</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP4_4_2_3" class="paragraph-anchor"></a><b>&#167;4.4.2.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Create an instance of an enumerated kind</span><span class="named-paragraph-number">4.4.2.3</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -961,14 +891,14 @@ to abbreviated forms of object names are normally allowed.
<span class="plain-syntax"> </span><span class="identifier-syntax">Assert::true</span><span class="plain-syntax">(</span><span class="identifier-syntax">prop</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">val</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Rvalues::from_instance</span><span class="plain-syntax">(</span><span class="identifier-syntax">Instances::latest</span><span class="plain-syntax">());</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP5_4_2">&#167;5.4.2</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5_4_2_4" class="paragraph-anchor"></a><b>&#167;5.4.2.4. </b>Lastly: rulebooks and activities are not part of the model, because they would
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP4_4_2">&#167;4.4.2</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP4_4_2_4" class="paragraph-anchor"></a><b>&#167;4.4.2.4. </b>Lastly: rulebooks and activities are not part of the model, because they would
make it enormously larger, and because they describe only the run-time evolution
of the state of play and have no effect on the initial state. So we don't create
them by asserting propositions to be true; we act directly.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Create a new rulebook</span><span class="named-paragraph-number">5.4.2.4</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Create a new rulebook</span><span class="named-paragraph-number">4.4.2.4</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -986,8 +916,8 @@ them by asserting propositions to be true; we act directly.
<span class="plain-syntax"> </span><span class="identifier-syntax">val</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Rvalues::from_rulebook</span><span class="plain-syntax">(</span><span class="identifier-syntax">rb</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::write_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax">, </span><span class="identifier-syntax">clears_pronouns_ANNOT</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP5_4_2">&#167;5.4.2</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5_4_2_5" class="paragraph-anchor"></a><b>&#167;5.4.2.5. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Create a new activity</span><span class="named-paragraph-number">5.4.2.5</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP4_4_2">&#167;4.4.2</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP4_4_2_5" class="paragraph-anchor"></a><b>&#167;4.4.2.5. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Create a new activity</span><span class="named-paragraph-number">4.4.2.5</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -995,11 +925,11 @@ them by asserting propositions to be true; we act directly.
<span class="plain-syntax"> </span><span class="identifier-syntax">val</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Rvalues::from_activity</span><span class="plain-syntax">(</span><span class="identifier-syntax">av</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::write_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax">, </span><span class="identifier-syntax">clears_pronouns_ANNOT</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP5_4_2">&#167;5.4.2</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5_4_2_2_1" class="paragraph-anchor"></a><b>&#167;5.4.2.2.1. </b>And to wind up, sundry problem messages.
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP4_4_2">&#167;4.4.2</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP4_4_2_2_1" class="paragraph-anchor"></a><b>&#167;4.4.2.2.1. </b>And to wind up, sundry problem messages.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue a problem for topics that vary</span><span class="named-paragraph-number">5.4.2.2.1</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue a problem for topics that vary</span><span class="named-paragraph-number">4.4.2.2.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -1009,8 +939,8 @@ them by asserting propositions to be true; we act directly.
<span class="plain-syntax"> </span><span class="string-syntax">"(This would cause too much ambiguity with text variables, whose values "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"look exactly the same.)"</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP5_4_2_2">&#167;5.4.2.2</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5_4_2_6" class="paragraph-anchor"></a><b>&#167;5.4.2.6. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue a problem for trying to create an instance of a unit</span><span class="named-paragraph-number">5.4.2.6</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP4_4_2_2">&#167;4.4.2.2</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP4_4_2_6" class="paragraph-anchor"></a><b>&#167;4.4.2.6. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue a problem for trying to create an instance of a unit</span><span class="named-paragraph-number">4.4.2.6</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -1039,8 +969,8 @@ them by asserting propositions to be true; we act directly.
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::issue_problem_end</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP5_4_2">&#167;5.4.2</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5_4_2_7" class="paragraph-anchor"></a><b>&#167;5.4.2.7. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue a problem for trying to create an instance of a table-defined kind</span><span class="named-paragraph-number">5.4.2.7</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP4_4_2">&#167;4.4.2</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP4_4_2_7" class="paragraph-anchor"></a><b>&#167;4.4.2.7. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue a problem for trying to create an instance of a table-defined kind</span><span class="named-paragraph-number">4.4.2.7</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -1057,12 +987,12 @@ them by asserting propositions to be true; we act directly.
<span class="plain-syntax"> </span><span class="string-syntax">"of a table (%4), not in isolated sentences like this one."</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-tc.html#SP5_4_2">&#167;5.4.2</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5_4_2_8" class="paragraph-anchor"></a><b>&#167;5.4.2.8. </b>This is often a problem already reported, so we issue a fresh message only
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP4_4_2">&#167;4.4.2</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP4_4_2_8" class="paragraph-anchor"></a><b>&#167;4.4.2.8. </b>This is often a problem already reported, so we issue a fresh message only
if nothing has already been said:
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue an unable-to-create problem message</span><span class="named-paragraph-number">5.4.2.8</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue an unable-to-create problem message</span><span class="named-paragraph-number">4.4.2.8</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -1089,17 +1019,17 @@ if nothing has already been said:
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::issue_problem_end</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP5_4_2">&#167;5.4.2</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>&#167;7. </b>It turns out to be useful to have the same policing rules elsewhere:
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP4_4_2">&#167;4.4.2</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>&#167;6. </b>It turns out to be useful to have the same policing rules elsewhere:
</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">Assertions::Creator::vet_name</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">Assertions::Creator::vet_name</span></span>:<br/>Table Columns - <a href="5-tc.html#SP11_2">&#167;11.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Assertions::Creator::vet_name</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">Assertions::Creator::vet_name</span></span>:<br/>Table Columns - <a href="5-tc.html#SP11_2">&#167;11.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="function-syntax">&lt;creation-problem-diagnosis&gt;</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</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">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>&#167;8. Creations to instantiate. </b>The <span class="extract"><span class="extract-syntax">COMMON_NOUN_NT</span></span> node sometimes means to talk about things in general,
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>&#167;7. Creations to instantiate. </b>The <span class="extract"><span class="extract-syntax">COMMON_NOUN_NT</span></span> node sometimes means to talk about things in general,
sometimes things in particular; consider the two sentences
</p>
@ -1126,8 +1056,8 @@ object.
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">name_stubs_count</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Assertions::Creator::convert_instance_to_nounphrase</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">Assertions::Creator::convert_instance_to_nounphrase</span></span>:<br/>Assertions - <a href="4-ass.html#SP1">&#167;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#SP9">&#167;9</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="identifier-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">hinge_relation</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-tc.html#SP5_1" class="named-paragraph-link"><span class="named-paragraph">Check we are sure about this</span><span class="named-paragraph-number">5.1</span></a></span><span class="plain-syntax">;</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Assertions::Creator::convert_instance_to_nounphrase</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">Assertions::Creator::convert_instance_to_nounphrase</span></span>:<br/>Assertions - <a href="4-ass.html#SP1">&#167;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#SP9">&#167;9</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="identifier-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">hinge_relation</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-tc.html#SP4_1" class="named-paragraph-link"><span class="named-paragraph">Check we are sure about this</span><span class="named-paragraph-number">4.1</span></a></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">confect_name_flag</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">hinge_relation</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">BinaryPredicates::is_the_wrong_way_round</span><span class="plain-syntax">(</span><span class="identifier-syntax">hinge_relation</span><span class="plain-syntax">)))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">hinge_relation</span><span class="plain-syntax"> = </span><span class="identifier-syntax">BinaryPredicates::get_reversal</span><span class="plain-syntax">(</span><span class="identifier-syntax">hinge_relation</span><span class="plain-syntax">);</span>
@ -1140,7 +1070,7 @@ object.
<span class="plain-syntax"> </span><span class="identifier-syntax">Node::set_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="identifier-syntax">GET_RW</span><span class="plain-syntax">(</span><span class="function-syntax">&lt;text-ending-with-a-calling&gt;</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">)); </span><span class="comment-syntax"> the text before the bracketed clause</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CW</span><span class="plain-syntax"> = </span><span class="identifier-syntax">GET_RW</span><span class="plain-syntax">(</span><span class="function-syntax">&lt;text-ending-with-a-calling&gt;</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">); </span><span class="comment-syntax"> the bracketed text</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="function-syntax">&lt;article&gt;</span><span class="plain-syntax">(</span><span class="identifier-syntax">CW</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-tc.html#SP8_2" class="named-paragraph-link"><span class="named-paragraph">Issue a problem for calling something an article</span><span class="named-paragraph-number">8.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-tc.html#SP7_2" class="named-paragraph-link"><span class="named-paragraph">Issue a problem for calling something an article</span><span class="named-paragraph-number">7.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CW</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="plain-syntax"> }</span>
@ -1149,16 +1079,16 @@ object.
<span class="plain-syntax"> </span><span class="identifier-syntax">instance_kind</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Specifications::to_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">Node::get_evaluation</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">Kinds::Behaviour::is_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">instance_kind</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">Kinds::Behaviour::has_named_constant_values</span><span class="plain-syntax">(</span><span class="identifier-syntax">instance_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="named-paragraph-container code-font"><a href="4-tc.html#SP8_1" class="named-paragraph-link"><span class="named-paragraph">Point out that it's impossible to create values implicitly for this kind</span><span class="named-paragraph-number">8.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-tc.html#SP8_3" class="named-paragraph-link"><span class="named-paragraph">Calculate the instance count, that is, the number of duplicates to be made</span><span class="named-paragraph-number">8.3</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-tc.html#SP7_1" class="named-paragraph-link"><span class="named-paragraph">Point out that it's impossible to create values implicitly for this kind</span><span class="named-paragraph-number">7.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-tc.html#SP7_3" class="named-paragraph-link"><span class="named-paragraph">Calculate the instance count, that is, the number of duplicates to be made</span><span class="named-paragraph-number">7.3</span></a></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">list_subtree</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">COMMON_NOUN_NT</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">original_next</span><span class="plain-syntax"> = </span><span class="identifier-syntax">p</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="named-paragraph-container code-font"><a href="4-tc.html#SP8_4" class="named-paragraph-link"><span class="named-paragraph">Construct a list subtree containing the right number of duplicates</span><span class="named-paragraph-number">8.4</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-tc.html#SP7_4" class="named-paragraph-link"><span class="named-paragraph">Construct a list subtree containing the right number of duplicates</span><span class="named-paragraph-number">7.4</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Node::copy</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="identifier-syntax">list_subtree</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">p</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next</span><span class="plain-syntax"> = </span><span class="identifier-syntax">original_next</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP8_1" class="paragraph-anchor"></a><b>&#167;8.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Point out that it's impossible to create values implicitly for this kind</span><span class="named-paragraph-number">8.1</span></span><span class="comment-syntax"> =</span>
<p class="commentary firstcommentary"><a id="SP7_1" class="paragraph-anchor"></a><b>&#167;7.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Point out that it's impossible to create values implicitly for this kind</span><span class="named-paragraph-number">7.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -1173,8 +1103,8 @@ object.
<span class="plain-syntax"> </span><span class="identifier-syntax">instance_kind</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">Annotations::write_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="identifier-syntax">multiplicity_ANNOT</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP8">&#167;8</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP8_2" class="paragraph-anchor"></a><b>&#167;8.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue a problem for calling something an article</span><span class="named-paragraph-number">8.2</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP7">&#167;7</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP7_2" class="paragraph-anchor"></a><b>&#167;7.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue a problem for calling something an article</span><span class="named-paragraph-number">7.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -1186,8 +1116,8 @@ object.
<span class="plain-syntax"> </span><span class="string-syntax">"name, '%2', is just an article - this isn't allowed."</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-tc.html#SP8">&#167;8</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP8_3" class="paragraph-anchor"></a><b>&#167;8.3. </b>Usually the instance count is 1, but noun phrases such as "six vehicles"
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP7">&#167;7</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP7_3" class="paragraph-anchor"></a><b>&#167;7.3. </b>Usually the instance count is 1, but noun phrases such as "six vehicles"
will raise it. The problem message here is almost a bit of social engineering:
we just don't think you're implementing it right if you think you need more
than 100 duplicate objects in one go. (Though it is true what the problem
@ -1196,7 +1126,7 @@ message says about performance, too.)
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">MAX_DUPLICATES_AT_ONCE</span><span class="plain-syntax"> </span><span class="constant-syntax">100</span><span class="plain-syntax"> </span><span class="comment-syntax"> change the problem message below if this is changed</span>
</pre>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Calculate the instance count, that is, the number of duplicates to be made</span><span class="named-paragraph-number">8.3</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Calculate the instance count, that is, the number of duplicates to be made</span><span class="named-paragraph-number">7.3</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -1211,13 +1141,13 @@ message says about performance, too.)
<span class="plain-syntax"> </span><span class="identifier-syntax">instance_count</span><span class="plain-syntax"> = </span><span class="constant-syntax">MAX_DUPLICATES_AT_ONCE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP8">&#167;8</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP8_4" class="paragraph-anchor"></a><b>&#167;8.4. </b>For instance, "six vehicles" would make a binary tree here in which the
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP7">&#167;7</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP7_4" class="paragraph-anchor"></a><b>&#167;7.4. </b>For instance, "six vehicles" would make a binary tree here in which the
intermediate nodes are <span class="extract"><span class="extract-syntax">AND_NT</span></span> and the leaves <span class="extract"><span class="extract-syntax">PROPER_NOUN_NT</span></span>, each referring
to a different vehicle object.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Construct a list subtree containing the right number of duplicates</span><span class="named-paragraph-number">8.4</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Construct a list subtree containing the right number of duplicates</span><span class="named-paragraph-number">7.4</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -1225,7 +1155,7 @@ to a different vehicle object.
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">i</span><span class="plain-syntax">=1; </span><span class="identifier-syntax">i</span><span class="plain-syntax">&lt;=</span><span class="identifier-syntax">instance_count</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">inference_subject</span><span class="plain-syntax"> *</span><span class="identifier-syntax">new_instance</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-tc.html#SP8_4_1" class="named-paragraph-link"><span class="named-paragraph">Fashion a new object matching the description in the COMMON NOUN node</span><span class="named-paragraph-number">8.4.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-tc.html#SP7_4_1" class="named-paragraph-link"><span class="named-paragraph">Fashion a new object matching the description in the COMMON NOUN node</span><span class="named-paragraph-number">7.4.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">i</span><span class="plain-syntax"> &lt; </span><span class="identifier-syntax">instance_count</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Node::set_type_and_clear_annotations</span><span class="plain-syntax">(</span><span class="identifier-syntax">attach_to</span><span class="plain-syntax">, </span><span class="identifier-syntax">AND_NT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">attach_to</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">PROPER_NOUN_NT</span><span class="plain-syntax">);</span>
@ -1239,17 +1169,17 @@ to a different vehicle object.
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP8">&#167;8</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP8_4_1" class="paragraph-anchor"></a><b>&#167;8.4.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Fashion a new object matching the description in the COMMON NOUN node</span><span class="named-paragraph-number">8.4.1</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP7">&#167;7</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP7_4_1" class="paragraph-anchor"></a><b>&#167;7.4.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Fashion a new object matching the description in the COMMON NOUN node</span><span class="named-paragraph-number">7.4.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">inference_subject</span><span class="plain-syntax"> *</span><span class="identifier-syntax">named_after</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">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">NW</span><span class="plain-syntax"> = </span><span class="identifier-syntax">EMPTY_WORDING</span><span class="plain-syntax">, </span><span class="identifier-syntax">NAW</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="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">propriety</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-tc.html#SP8_4_1_1" class="named-paragraph-link"><span class="named-paragraph">Confect a name for the new object, if that's the bag we're into</span><span class="named-paragraph-number">8.4.1.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-tc.html#SP7_4_1_1" class="named-paragraph-link"><span class="named-paragraph">Confect a name for the new object, if that's the bag we're into</span><span class="named-paragraph-number">7.4.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">Kinds::Behaviour::is_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">instance_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="named-paragraph-container code-font"><a href="4-tc.html#SP8_4_1_2" class="named-paragraph-link"><span class="named-paragraph">Check that the new name is non-empty and distinct from all existing ones</span><span class="named-paragraph-number">8.4.1.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-tc.html#SP7_4_1_2" class="named-paragraph-link"><span class="named-paragraph">Check that the new name is non-empty and distinct from all existing ones</span><span class="named-paragraph-number">7.4.1.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">NW</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Wordings::truncate</span><span class="plain-syntax">(</span><span class="identifier-syntax">NW</span><span class="plain-syntax">, </span><span class="constant-syntax">32</span><span class="plain-syntax">); </span><span class="comment-syntax"> truncate to the maximum length</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pz</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">PROPER_NOUN_NT</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><a href="6-cu.html#SP1" class="function-link"><span class="function-syntax">Propositions::Abstract::to_create_something</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">instance_kind</span><span class="plain-syntax">, </span><span class="identifier-syntax">NW</span><span class="plain-syntax">);</span>
@ -1270,13 +1200,13 @@ to a different vehicle object.
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::write_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">pz</span><span class="plain-syntax">, </span><span class="identifier-syntax">creation_site_ANNOT</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</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">pz</span><span class="plain-syntax">, </span><span class="identifier-syntax">p</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP8_4">&#167;8.4</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP8_4_1_1" class="paragraph-anchor"></a><b>&#167;8.4.1.1. </b>The following is used only in assemblies, where the instance count is always
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP7_4">&#167;7.4</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP7_4_1_1" class="paragraph-anchor"></a><b>&#167;7.4.1.1. </b>The following is used only in assemblies, where the instance count is always
1, and confects a name like "Cleopatra's nose" from an owner object, "Cleopatra",
and an <span class="extract"><span class="extract-syntax">COMMON_NOUN_NT</span></span> node, "nose".
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Confect a name for the new object, if that's the bag we're into</span><span class="named-paragraph-number">8.4.1.1</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Confect a name for the new object, if that's the bag we're into</span><span class="named-paragraph-number">7.4.1.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -1302,9 +1232,9 @@ and an <span class="extract"><span class="extract-syntax">COMMON_NOUN_NT</span><
<span class="plain-syntax"> </span><span class="identifier-syntax">feed_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">id</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Feeds::begin</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_THROUGH_WORDING</span><span class="plain-syntax">(</span><span class="identifier-syntax">j</span><span class="plain-syntax">, </span><span class="identifier-syntax">CW</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="function-syntax">&lt;possessive-third-person&gt;</span><span class="plain-syntax">(</span><span class="identifier-syntax">Wordings::one_word</span><span class="plain-syntax">(</span><span class="identifier-syntax">j</span><span class="plain-syntax">)))</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-tc.html#SP8_4_1_1_1" class="named-paragraph-link"><span class="named-paragraph">Insert the appropriate possessive</span><span class="named-paragraph-number">8.4.1.1.1</span></a></span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-tc.html#SP7_4_1_1_1" class="named-paragraph-link"><span class="named-paragraph">Insert the appropriate possessive</span><span class="named-paragraph-number">7.4.1.1.1</span></a></span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="function-syntax">&lt;agent-pronoun&gt;</span><span class="plain-syntax">(</span><span class="identifier-syntax">Wordings::one_word</span><span class="plain-syntax">(</span><span class="identifier-syntax">j</span><span class="plain-syntax">)))</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-tc.html#SP8_4_1_1_2" class="named-paragraph-link"><span class="named-paragraph">Insert the appropriate name</span><span class="named-paragraph-number">8.4.1.1.2</span></a></span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-tc.html#SP7_4_1_1_2" class="named-paragraph-link"><span class="named-paragraph">Insert the appropriate name</span><span class="named-paragraph-number">7.4.1.1.2</span></a></span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">Feeds::feed_wording</span><span class="plain-syntax">(</span><span class="identifier-syntax">Wordings::one_word</span><span class="plain-syntax">(</span><span class="identifier-syntax">j</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">NW</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Feeds::end</span><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">);</span>
@ -1314,8 +1244,8 @@ and an <span class="extract"><span class="extract-syntax">COMMON_NOUN_NT</span><
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP8_4_1">&#167;8.4.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP8_4_1_1_1" class="paragraph-anchor"></a><b>&#167;8.4.1.1.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Insert the appropriate possessive</span><span class="named-paragraph-number">8.4.1.1.1</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP7_4_1">&#167;7.4.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP7_4_1_1_1" class="paragraph-anchor"></a><b>&#167;7.4.1.1.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Insert the appropriate possessive</span><span class="named-paragraph-number">7.4.1.1.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -1330,15 +1260,15 @@ and an <span class="extract"><span class="extract-syntax">COMMON_NOUN_NT</span><
<span class="plain-syntax"> </span><span class="identifier-syntax">Feeds::feed_text_expanding_strings</span><span class="plain-syntax">(</span><span class="identifier-syntax">genitive_form</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">genitive_form</span><span class="plain-syntax">)</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP8_4_1_1">&#167;8.4.1.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP8_4_1_1_2" class="paragraph-anchor"></a><b>&#167;8.4.1.1.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Insert the appropriate name</span><span class="named-paragraph-number">8.4.1.1.2</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP7_4_1_1">&#167;7.4.1.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP7_4_1_1_2" class="paragraph-anchor"></a><b>&#167;7.4.1.1.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Insert the appropriate name</span><span class="named-paragraph-number">7.4.1.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="identifier-syntax">Feeds::feed_wording</span><span class="plain-syntax">(</span><span class="identifier-syntax">OW</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP8_4_1_1">&#167;8.4.1.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP8_4_1_2" class="paragraph-anchor"></a><b>&#167;8.4.1.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Check that the new name is non-empty and distinct from all existing ones</span><span class="named-paragraph-number">8.4.1.2</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP7_4_1_1">&#167;7.4.1.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP7_4_1_2" class="paragraph-anchor"></a><b>&#167;7.4.1.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Check that the new name is non-empty and distinct from all existing ones</span><span class="named-paragraph-number">7.4.1.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -1356,8 +1286,8 @@ and an <span class="extract"><span class="extract-syntax">COMMON_NOUN_NT</span><
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">textual_count</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP8_4_1">&#167;8.4.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>&#167;9. </b>This is how callings are parsed, both in assertions and conditions: that is,
<ul class="endnotetexts"><li>This code is used in <a href="4-tc.html#SP7_4_1">&#167;7.4.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>&#167;8. </b>This is how callings are parsed, both in assertions and conditions: that is,
names occurring in noun phrases with the shape "blah blah (called the rhubarb
rhubarb)". (For tedious reasons it would be inefficient to parse the second
of these using the first.)
@ -1372,7 +1302,7 @@ of these using the first.)
<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">called</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>
</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>
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>&#167;10. </b>Many names are rejected because they clash unfortunately with other things,
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>&#167;9. </b>Many names are rejected because they clash unfortunately with other things,
or for other high-level reasons, but there are also some basic syntactic
blunders. Most of the time those are caught by the Creator above, but in a few
cases (declaring new figures, for instance) it's possible to get around
@ -1399,11 +1329,11 @@ For example, property names can't be unsuitable, but they can be unfortunate.
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;unsuitable-name&gt;</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>
<p class="commentary firstcommentary"><a id="SP11" class="paragraph-anchor"></a><b>&#167;11. </b>Which powers:
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>&#167;10. </b>Which powers:
</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">Assertions::Creator::vet_name_for_noun</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">Assertions::Creator::vet_name_for_noun</span></span>:<br/>Pluralisation Requests - <a href="3-pr.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Assertions::Creator::vet_name_for_noun</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">Assertions::Creator::vet_name_for_noun</span></span>:<br/>Pluralisation Requests - <a href="3-pr.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="function-syntax">&lt;unfortunate-name&gt;</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</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_NameBestAvoided</span><span class="plain-syntax">),</span>
<span class="plain-syntax"> </span><span class="string-syntax">"this is a name which is best avoided"</span><span class="plain-syntax">,</span>
@ -1416,14 +1346,14 @@ For example, property names can't be unsuitable, but they can be unfortunate.
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP12" class="paragraph-anchor"></a><b>&#167;12. The natural language kind. </b>Inform has a kind built in called "natural language", whose values are
<p class="commentary firstcommentary"><a id="SP11" class="paragraph-anchor"></a><b>&#167;11. The natural language kind. </b>Inform has a kind built in called "natural language", whose values are
enumerated names: English language, French language, German language and so on.
When the kind is created, the following routine makes these instances. We do
this exactly as we would to create any other instance &mdash; we write a logical
proposition claiming its existence, then assert it to be true.
</p>
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">NOTIFY_NATURAL_LANGUAGE_KINDS_CALLBACK</span><span class="plain-syntax"> </span><a href="4-tc.html#SP12" class="function-link"><span class="function-syntax">Assertions::Creator::stock_nl_kind</span></a>
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">NOTIFY_NATURAL_LANGUAGE_KINDS_CALLBACK</span><span class="plain-syntax"> </span><a href="4-tc.html#SP11" class="function-link"><span class="function-syntax">Assertions::Creator::stock_nl_kind</span></a>
</pre>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Assertions::Creator::stock_nl_kind</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>

View file

@ -398,7 +398,7 @@ hasn't been created yet; but we'll catch it later.
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax"> = </span><span class="identifier-syntax">GET_RW</span><span class="plain-syntax">(</span><span class="function-syntax">&lt;table-column-heading-bare&gt;</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><a href="4-tc.html#SP7" class="function-link"><span class="function-syntax">Assertions::Creator::vet_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">)) </span><span class="identifier-syntax">tc</span><span class="plain-syntax"> = </span><a href="5-tc.html#SP4" class="function-link"><span class="function-syntax">Tables::Columns::new_table_column</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="4-tc.html#SP6" class="function-link"><span class="function-syntax">Assertions::Creator::vet_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">)) </span><span class="identifier-syntax">tc</span><span class="plain-syntax"> = </span><a href="5-tc.html#SP4" class="function-link"><span class="function-syntax">Tables::Columns::new_table_column</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</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>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="5-tc.html#SP11">&#167;11</a>.</li></ul>

View file

@ -79,19 +79,19 @@ their existence.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">pcalc_prop</span><span class="plain-syntax"> *</span><span class="function-syntax">Propositions::Abstract::to_make_a_kind</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">Propositions::Abstract::to_make_a_kind</span></span>:<br/>The Creator - <a href="4-tc.html#SP5_4_1_1">&#167;5.4.1.1</a>, <a href="4-tc.html#SP5_4_2_1">&#167;5.4.2.1</a></span></button><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">pcalc_prop</span><span class="plain-syntax"> *</span><span class="function-syntax">Propositions::Abstract::to_make_a_kind</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">Propositions::Abstract::to_make_a_kind</span></span>:<br/>The Creator - <a href="4-tc.html#SP4_4_1_1">&#167;4.4.1.1</a>, <a href="4-tc.html#SP4_4_2_1">&#167;4.4.2.1</a></span></button><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="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="6-tcp.html#SP4" class="function-link"><span class="function-syntax">CreationPredicates::is_a_kind_up</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">Terms::new_variable</span><span class="plain-syntax">(0), </span><span class="identifier-syntax">K</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="function-syntax">Propositions::Abstract::to_make_a_var</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">Propositions::Abstract::to_make_a_var</span></span>:<br/>The Creator - <a href="4-tc.html#SP5_4_2_2">&#167;5.4.2.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">pcalc_prop</span><span class="plain-syntax"> *</span><span class="function-syntax">Propositions::Abstract::to_make_a_var</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">Propositions::Abstract::to_make_a_var</span></span>:<br/>The Creator - <a href="4-tc.html#SP4_4_2_2">&#167;4.4.2.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="6-tcp.html#SP4" class="function-link"><span class="function-syntax">CreationPredicates::is_a_var_up</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">Terms::new_variable</span><span class="plain-syntax">(0));</span>
<span class="plain-syntax">}</span>
<span class="identifier-syntax">pcalc_prop</span><span class="plain-syntax"> *</span><span class="function-syntax">Propositions::Abstract::to_make_a_const</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">Propositions::Abstract::to_make_a_const</span></span>:<br/>The Creator - <a href="4-tc.html#SP5_4_2_2">&#167;5.4.2.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">pcalc_prop</span><span class="plain-syntax"> *</span><span class="function-syntax">Propositions::Abstract::to_make_a_const</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">Propositions::Abstract::to_make_a_const</span></span>:<br/>The Creator - <a href="4-tc.html#SP4_4_2_2">&#167;4.4.2.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="6-tcp.html#SP4" class="function-link"><span class="function-syntax">CreationPredicates::is_a_const_up</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">Terms::new_variable</span><span class="plain-syntax">(0));</span>
<span class="plain-syntax">}</span>
<span class="identifier-syntax">pcalc_prop</span><span class="plain-syntax"> *</span><span class="function-syntax">Propositions::Abstract::to_create_something</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">Propositions::Abstract::to_create_something</span></span>:<br/>New Property Requests - <a href="3-npr.html#SP5_11">&#167;5.11</a><br/>The Creator - <a href="4-tc.html#SP5_4_1_1">&#167;5.4.1.1</a>, <a href="4-tc.html#SP5_4_2_1">&#167;5.4.2.1</a>, <a href="4-tc.html#SP5_4_2_2">&#167;5.4.2.2</a>, <a href="4-tc.html#SP5_4_2_3">&#167;5.4.2.3</a>, <a href="4-tc.html#SP8_4_1">&#167;8.4.1</a>, <a href="4-tc.html#SP12">&#167;12</a></span></button><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">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">pcalc_prop</span><span class="plain-syntax"> *</span><span class="function-syntax">Propositions::Abstract::to_create_something</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">Propositions::Abstract::to_create_something</span></span>:<br/>New Property Requests - <a href="3-npr.html#SP5_11">&#167;5.11</a><br/>The Creator - <a href="4-tc.html#SP4_4_1_1">&#167;4.4.1.1</a>, <a href="4-tc.html#SP4_4_2_1">&#167;4.4.2.1</a>, <a href="4-tc.html#SP4_4_2_2">&#167;4.4.2.2</a>, <a href="4-tc.html#SP4_4_2_3">&#167;4.4.2.3</a>, <a href="4-tc.html#SP7_4_1">&#167;7.4.1</a>, <a href="4-tc.html#SP11">&#167;11</a></span></button><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">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</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">Atoms::QUANTIFIER_new</span><span class="plain-syntax">(</span><span class="identifier-syntax">exists_quantifier</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">K</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">Kinds::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_object</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">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>
@ -120,7 +120,7 @@ their existence.
<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">prevailing_mood</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Propositions::Abstract::assert_kind_of_subject</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">Propositions::Abstract::assert_kind_of_subject</span></span>:<br/>The Creator - <a href="4-tc.html#SP5_2_1">&#167;5.2.1</a><br/>Assertions - <a href="4-ass.html#SP6_3_8">&#167;6.3.8</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">inference_subject</span><span class="plain-syntax"> *</span><span class="identifier-syntax">inst</span><span class="plain-syntax">,</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Propositions::Abstract::assert_kind_of_subject</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">Propositions::Abstract::assert_kind_of_subject</span></span>:<br/>The Creator - <a href="4-tc.html#SP4_2_1">&#167;4.2.1</a><br/>Assertions - <a href="4-ass.html#SP6_3_8">&#167;6.3.8</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">inference_subject</span><span class="plain-syntax"> *</span><span class="identifier-syntax">inst</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inference_subject</span><span class="plain-syntax"> *</span><span class="identifier-syntax">new</span><span class="plain-syntax">, </span><span class="identifier-syntax">pcalc_prop</span><span class="plain-syntax"> *</span><span class="identifier-syntax">subject_to</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">KindSubjects::to_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">new</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">KindPredicates::new_atom</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">, </span><span class="identifier-syntax">Terms::new_variable</span><span class="plain-syntax">(0));</span>

View file

@ -1142,9 +1142,9 @@ accordingly.
<span class="plain-syntax"> </span><span class="identifier-syntax">TRAVERSE_PROPOSITION</span><span class="plain-syntax">(</span><span class="identifier-syntax">pl</span><span class="plain-syntax">, </span><span class="identifier-syntax">prop</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">pl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">element</span><span class="plain-syntax"> == </span><span class="constant-syntax">PREDICATE_ATOM</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">pl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">arity</span><span class="plain-syntax"> == </span><span class="constant-syntax">2</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;2; </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">Conditions::is_TEST_ACTION</span><span class="plain-syntax">(</span><span class="identifier-syntax">pl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">terms</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">].</span><span class="element-syntax">constant</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">AConditions::is_action_TEST_VALUE</span><span class="plain-syntax">(</span><span class="identifier-syntax">pl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">terms</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">].</span><span class="element-syntax">constant</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">pl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">terms</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">].</span><span class="identifier-syntax">constant</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Conditions::action_tested</span><span class="plain-syntax">(</span><span class="identifier-syntax">pl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">terms</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">].</span><span class="element-syntax">constant</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">AConditions::action_tested</span><span class="plain-syntax">(</span><span class="identifier-syntax">pl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">terms</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">].</span><span class="element-syntax">constant</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">prop</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="plain-syntax">#</span><span class="identifier-syntax">endif</span>

View file

@ -72,7 +72,7 @@ function togglePopup(material_id) {
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../compiler.html">Inform7</a></li><li><a href="index.html">core</a></li><li><a href="index.html#3">Chapter 3: Plugins</a></li><li><b>Plugin Calls</b></li></ul></div>
<p class="purpose">The interface between the main compiler and its plugins.</p>
<ul class="toc"><li><a href="3-pc.html#SP2">&#167;2. Influencing core</a></li><li><a href="3-pc.html#SP3">&#167;3. Influencing assertions</a></li><li><a href="3-pc.html#SP14">&#167;14. Influencing values</a></li><li><a href="3-pc.html#SP17">&#167;17. Influencing knowledge</a></li><li><a href="3-pc.html#SP30">&#167;30. Influencing index</a></li></ul><hr class="tocbar">
<ul class="toc"><li><a href="3-pc.html#SP2">&#167;2. Influencing core</a></li><li><a href="3-pc.html#SP3">&#167;3. Influencing assertions</a></li><li><a href="3-pc.html#SP16">&#167;16. Influencing values</a></li><li><a href="3-pc.html#SP20">&#167;20. Influencing knowledge</a></li><li><a href="3-pc.html#SP33">&#167;33. Influencing index</a></li></ul><hr class="tocbar">
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. </b>The following set of functions is an API for the main compiler to consult
with the plugins; put another way, it is also an API for the plugins to
@ -154,7 +154,32 @@ with the sentence.
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALL</span><span class="plain-syntax">(</span><span class="constant-syntax">INTERVENE_IN_ASSERTION_PLUG</span><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>
</pre>
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>&#167;6. </b>Called from <a href="../assertions-module/4-tc.html" class="internal">The Creator (in assertions)</a> when an instance is being made in
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>&#167;6. </b>Called from <a href="../assertions-module/4-tc.html" class="internal">The Creator (in assertions)</a> when a copular sentence may be
creating something. For example, the actions plugin needs this.
</p>
<pre class="definitions code-font"><span class="definition-keyword">enum</span> <span class="constant-syntax">CREATION_PLUG</span>
</pre>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">PluginCalls::creation</span><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">PLUGINS_CALL</span><span class="plain-syntax">(</span><span class="constant-syntax">CREATION_PLUG</span><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>
</pre>
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>&#167;7. </b>Called from <a href="../assertions-module/4-ass.html" class="internal">Assertions (in assertions)</a> when an unfamiliar node type appears
where a property value might be expected. For example, the actions plugin
uses this to deal with setting a property to an <span class="extract"><span class="extract-syntax">ACTION_NT</span></span> node. To
intervene, set the node specification using <a href="../assertions-module/4-rpt.html" class="internal">Refine Parse Tree (in assertions)</a>
and return <span class="extract"><span class="extract-syntax">TRUE</span></span>; or return <span class="extract"><span class="extract-syntax">FALSE</span></span> to let nature take its course.
</p>
<pre class="definitions code-font"><span class="definition-keyword">enum</span> <span class="constant-syntax">UNUSUAL_PROPERTY_VALUE_PLUG</span>
</pre>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">PluginCalls::unusual_property_value</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">PLUGINS_CALL</span><span class="plain-syntax">(</span><span class="constant-syntax">UNUSUAL_PROPERTY_VALUE_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">py</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>&#167;8. </b>Called from <a href="../assertions-module/4-tc.html" class="internal">The Creator (in assertions)</a> when an instance is being made in
an assembly, and its name may involve a genitive. For example, if the
assembly says "every person has a nose", then normally this would be called
something like "Mr Rogers's nose"; but the player plugin uses the following
@ -169,7 +194,7 @@ to have "your nose" in the case of the player instance.
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALL</span><span class="plain-syntax">(</span><span class="constant-syntax">IRREGULAR_GENITIVE_IN_ASSEMBLY_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">owner</span><span class="plain-syntax">, </span><span class="identifier-syntax">genitive</span><span class="plain-syntax">, </span><span class="identifier-syntax">propriety</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>&#167;7. </b>Called from <a href="../assertions-module/2-bv.html" class="internal">Booting Verbs (in assertions)</a> to give each plugin a chance to
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>&#167;9. </b>Called from <a href="../assertions-module/2-bv.html" class="internal">Booting Verbs (in assertions)</a> to give each plugin a chance to
create any special sentence meanings it would like to. For example, the
sounds plugin defines a special form of assertion sentence this way. The
plugin should always return <span class="extract"><span class="extract-syntax">FALSE</span></span>, since otherwise it may gazump other
@ -183,7 +208,7 @@ plugins and cause them to stop working.
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALLV</span><span class="plain-syntax">(</span><span class="constant-syntax">MAKE_SPECIAL_MEANINGS_PLUG</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>&#167;8. </b>Called from <a href="../assertions-module/4-ass.html" class="internal">Assertions (in assertions)</a> when it seems that the author wants
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>&#167;10. </b>Called from <a href="../assertions-module/4-ass.html" class="internal">Assertions (in assertions)</a> when it seems that the author wants
to create a property of something with a sentence like "A container has a
number called security rating." A plugin can intervene and act on that,
returning <span class="extract"><span class="extract-syntax">TRUE</span></span> to stop the usual machinery. For example, the actions
@ -198,7 +223,7 @@ can be intercepted to create an action variable, not a property.
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALL</span><span class="plain-syntax">(</span><span class="constant-syntax">OFFERED_PROPERTY_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">, </span><span class="identifier-syntax">owner</span><span class="plain-syntax">, </span><span class="identifier-syntax">what</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>&#167;9. </b>Called from <a href="../assertions-module/4-ass.html" class="internal">Assertions (in assertions)</a> when the specification pseudo-variable
<p class="commentary firstcommentary"><a id="SP11" class="paragraph-anchor"></a><b>&#167;11. </b>Called from <a href="../assertions-module/4-ass.html" class="internal">Assertions (in assertions)</a> when the specification pseudo-variable
is about to be set for something; the plugin can then intercept this.
</p>
@ -209,7 +234,7 @@ is about to be set for something; the plugin can then intercept this.
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALL</span><span class="plain-syntax">(</span><span class="constant-syntax">OFFERED_SPECIFICATION_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">owner</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>&#167;10. </b>Called from <a href="../assertions-module/4-rpt.html" class="internal">Refine Parse Tree (in assertions)</a> to ask plugins if a noun phrase
<p class="commentary firstcommentary"><a id="SP12" class="paragraph-anchor"></a><b>&#167;12. </b>Called from <a href="../assertions-module/4-rpt.html" class="internal">Refine Parse Tree (in assertions)</a> to ask plugins if a noun phrase
has a noun implicit within it, even though none is explicitly given. For
example, the player plugin uses this to say that "initially carried" means
"...by the player", and sets the subject of the node to be the player character
@ -223,7 +248,7 @@ instance.
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALL</span><span class="plain-syntax">(</span><span class="constant-syntax">REFINE_IMPLICIT_NOUN_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">p</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP11" class="paragraph-anchor"></a><b>&#167;11. </b>Called from <a href="../assertions-module/2-cs.html" class="internal">Classifying Sentences (in assertions)</a> to give plugins the chance
<p class="commentary firstcommentary"><a id="SP13" class="paragraph-anchor"></a><b>&#167;13. </b>Called from <a href="../assertions-module/2-cs.html" class="internal">Classifying Sentences (in assertions)</a> to give plugins the chance
of an early look at a newly-read assertion. For example, the map plugin uses
this to spot that a sentence will create a new direction.
</p>
@ -235,7 +260,7 @@ this to spot that a sentence will create a new direction.
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALL</span><span class="plain-syntax">(</span><span class="constant-syntax">NEW_ASSERTION_NOTIFY_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">p</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP12" class="paragraph-anchor"></a><b>&#167;12. </b>Called from <a href="../assertions-module/6-terr.html" class="internal">The Equality Relation Revisited (in assertions)</a> when we have
<p class="commentary firstcommentary"><a id="SP14" class="paragraph-anchor"></a><b>&#167;14. </b>Called from <a href="../assertions-module/6-terr.html" class="internal">The Equality Relation Revisited (in assertions)</a> when we have
to decide if it's valid to ask or declare that two things are the same.
Returning <span class="extract"><span class="extract-syntax">TRUE</span></span> says that it is always valid; returning <span class="extract"><span class="extract-syntax">FALSE</span></span> leaves
it to the regular machinery. This plug can therefore only be used to permit
@ -249,7 +274,7 @@ additional usages, not to restrict existing ones.
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALL</span><span class="plain-syntax">(</span><span class="constant-syntax">TYPECHECK_EQUALITY_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">K1</span><span class="plain-syntax">, </span><span class="identifier-syntax">K2</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP13" class="paragraph-anchor"></a><b>&#167;13. </b>Called from <a href="../assertions-module/4-ass.html" class="internal">Assertions (in assertions)</a> to warn plugins that a variable
<p class="commentary firstcommentary"><a id="SP15" class="paragraph-anchor"></a><b>&#167;15. </b>Called from <a href="../assertions-module/4-ass.html" class="internal">Assertions (in assertions)</a> to warn plugins that a variable
is now being assigned a value by an explicit assertion sentence.
</p>
@ -260,7 +285,21 @@ is now being assigned a value by an explicit assertion sentence.
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALL</span><span class="plain-syntax">(</span><span class="constant-syntax">VARIABLE_VALUE_NOTIFY_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">q</span><span class="plain-syntax">, </span><span class="identifier-syntax">val</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. Influencing values. </b>Called from <a href="../values-module/2-rvl.html" class="internal">Rvalues (in values)</a> to allow plugins to compile rvalues in
<p class="commentary firstcommentary"><a id="SP16" class="paragraph-anchor"></a><b>&#167;16. Influencing values. </b>Called from <a href="../values-module/2-rvl.html" class="internal">Rvalues (in values)</a> to allow plugins to help decide whether values
of the same kind would be equal if evaluated at runtime. For example, the
"scenes" plugin uses this to determine if two <span class="extract"><span class="extract-syntax">K_scene</span></span> constants are equal.
To make a decision, set <span class="extract"><span class="extract-syntax">rv</span></span> to either <span class="extract"><span class="extract-syntax">TRUE</span></span> or <span class="extract"><span class="extract-syntax">FALSE</span></span> and return <span class="extract"><span class="extract-syntax">TRUE</span></span>.
To make no decision, return <span class="extract"><span class="extract-syntax">FALSE</span></span>.
</p>
<pre class="definitions code-font"><span class="definition-keyword">enum</span> <span class="constant-syntax">COMPARE_CONSTANT_PLUG</span>
</pre>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">PluginCalls::compare_constant</span><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">c1</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">c2</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> *</span><span class="identifier-syntax">rv</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALL</span><span class="plain-syntax">(</span><span class="constant-syntax">COMPARE_CONSTANT_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">c1</span><span class="plain-syntax">, </span><span class="identifier-syntax">c2</span><span class="plain-syntax">, </span><span class="identifier-syntax">rv</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP17" class="paragraph-anchor"></a><b>&#167;17. </b>Called from <a href="../values-module/2-rvl.html" class="internal">Rvalues (in values)</a> to allow plugins to compile rvalues in
eccentric ways of their own: not in fact just for the whimsy of it, but to
make it possible for plugins to support base kinds of their own. For example,
the "actions" plugin needs this to deal with the "stored action" kind.
@ -273,7 +312,7 @@ the "actions" plugin needs this to deal with the "stored action" kind.
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALL</span><span class="plain-syntax">(</span><span class="constant-syntax">COMPILE_CONSTANT_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">VH</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP15" class="paragraph-anchor"></a><b>&#167;15. </b>Called from <a href="../values-module/2-spc.html" class="internal">Specifications (in values)</a> to ask if there is some reason why
<p class="commentary firstcommentary"><a id="SP18" class="paragraph-anchor"></a><b>&#167;18. </b>Called from <a href="../values-module/2-spc.html" class="internal">Specifications (in values)</a> to ask if there is some reason why
a rule about <span class="extract"><span class="extract-syntax">I1</span></span> should be thought broader in scope than one about <span class="extract"><span class="extract-syntax">I2</span></span>. This
is used by the regions plugin when one is a sub-region of the other. This is
expected to behave as a <span class="extract"><span class="extract-syntax">strcmp</span></span>-like sorting function, with a positive
@ -287,7 +326,7 @@ return value saying <span class="extract"><span class="extract-syntax">I1</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALL</span><span class="plain-syntax">(</span><span class="constant-syntax">MORE_SPECIFIC_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">I1</span><span class="plain-syntax">, </span><span class="identifier-syntax">I2</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP16" class="paragraph-anchor"></a><b>&#167;16. </b>Called from <a href="../values-module/4-cad.html" class="internal">Constants and Descriptions (in values)</a> to give plugins a chance
<p class="commentary firstcommentary"><a id="SP19" class="paragraph-anchor"></a><b>&#167;19. </b>Called from <a href="../values-module/4-cad.html" class="internal">Constants and Descriptions (in values)</a> to give plugins a chance
to parse text which might otherwise be meaningless (or mean something different)
and make it a "composite noun-quantifier" such as "everywhere" or "nothing".
The main compiler does not recognise "everywhere" because it has no concept
@ -302,7 +341,7 @@ of space, but the spatial plugin does, and this is how.
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALL</span><span class="plain-syntax">(</span><span class="constant-syntax">PARSE_COMPOSITE_NQS_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">DW</span><span class="plain-syntax">, </span><span class="identifier-syntax">quantifier_used</span><span class="plain-syntax">, </span><span class="identifier-syntax">some_kind</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP17" class="paragraph-anchor"></a><b>&#167;17. Influencing knowledge. </b>Called from <a href="../knowledge-module/5-tmw.html" class="internal">The Model World (in knowledge)</a> to invite the plugin to participate
<p class="commentary firstcommentary"><a id="SP20" class="paragraph-anchor"></a><b>&#167;20. Influencing knowledge. </b>Called from <a href="../knowledge-module/5-tmw.html" class="internal">The Model World (in knowledge)</a> to invite the plugin to participate
in stages I to V of the completion process. This may involve using contextual
reasoning to draw further inferences.
</p>
@ -314,7 +353,7 @@ reasoning to draw further inferences.
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALL</span><span class="plain-syntax">(</span><span class="constant-syntax">COMPLETE_MODEL_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">stage</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP18" class="paragraph-anchor"></a><b>&#167;18. </b>Called from <a href="../knowledge-module/4-is.html" class="internal">Inference Subjects (in knowledge)</a> to invite the plugin to
<p class="commentary firstcommentary"><a id="SP21" class="paragraph-anchor"></a><b>&#167;21. </b>Called from <a href="../knowledge-module/4-is.html" class="internal">Inference Subjects (in knowledge)</a> to invite the plugin to
create any additional inference subjects it might want to reason about. In
practice, this tends to be used to create preliminary subjects to stand in
for significant kinds before those kinds are ready to be created.
@ -327,7 +366,7 @@ for significant kinds before those kinds are ready to be created.
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALLV</span><span class="plain-syntax">(</span><span class="constant-syntax">CREATE_INFERENCE_SUBJECTS_PLUG</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP19" class="paragraph-anchor"></a><b>&#167;19. </b>Called from <a href="../knowledge-module/5-ia.html" class="internal">Indefinite Appearance (in knowledge)</a> to ask the plugins what
<p class="commentary firstcommentary"><a id="SP22" class="paragraph-anchor"></a><b>&#167;22. </b>Called from <a href="../knowledge-module/5-ia.html" class="internal">Indefinite Appearance (in knowledge)</a> to ask the plugins what
inferences, if any, to draw from a double-quoted text standing as an entire
sentence. The <span class="extract"><span class="extract-syntax">infs</span></span> is the subject which was being talked about at the time
the text was quoted, and therefore presumably is what the text should describe.
@ -340,7 +379,7 @@ the text was quoted, and therefore presumably is what the text should describe.
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALL</span><span class="plain-syntax">(</span><span class="constant-syntax">DEFAULT_APPEARANCE_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">infs</span><span class="plain-syntax">, </span><span class="identifier-syntax">txt</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP20" class="paragraph-anchor"></a><b>&#167;20. </b>Called from <a href="../knowledge-module/5-inf.html" class="internal">Inferences (in knowledge)</a> when an inference is drawn about
<p class="commentary firstcommentary"><a id="SP23" class="paragraph-anchor"></a><b>&#167;23. </b>Called from <a href="../knowledge-module/5-inf.html" class="internal">Inferences (in knowledge)</a> when an inference is drawn about
something. This does not, of course, necessarily mean that this will actually
be the property of something: the inference might turn out to be mistaken. The
mapping plugin uses this to infer further that if something is said to be a
@ -354,7 +393,7 @@ map connection to somewhere else, then it is probably a room.
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALL</span><span class="plain-syntax">(</span><span class="constant-syntax">INFERENCE_DRAWN_NOTIFY_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">subj</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP21" class="paragraph-anchor"></a><b>&#167;21. </b>Called from <a href="../knowledge-module/4-ks.html" class="internal">Kind Subjects (in knowledge)</a>. Early in the run, before some kinds
<p class="commentary firstcommentary"><a id="SP24" class="paragraph-anchor"></a><b>&#167;24. </b>Called from <a href="../knowledge-module/4-ks.html" class="internal">Kind Subjects (in knowledge)</a>. Early in the run, before some kinds
are created, placeholder inference subjects are created to stand in for them;
this call enables plugins to recognise certain texts as referring to those.
</p>
@ -366,7 +405,7 @@ this call enables plugins to recognise certain texts as referring to those.
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALL</span><span class="plain-syntax">(</span><span class="constant-syntax">NAME_TO_EARLY_INFS_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">infs</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP22" class="paragraph-anchor"></a><b>&#167;22. </b>Called from <a href="../knowledge-module/4-ks.html" class="internal">Kind Subjects (in knowledge)</a> to warn plugins about a new kind,
<p class="commentary firstcommentary"><a id="SP25" class="paragraph-anchor"></a><b>&#167;25. </b>Called from <a href="../knowledge-module/4-ks.html" class="internal">Kind Subjects (in knowledge)</a> to warn plugins about a new kind,
which in practice enables them to spot from the name that it is actually a kind
they want to provide built-in support for: thus the actions plugin reacts to
the name "stored action", for example. <span class="extract"><span class="extract-syntax">K</span></span> is the newcomer, <span class="extract"><span class="extract-syntax">super</span></span> its super-kind,
@ -382,7 +421,7 @@ source text (such as "container").
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALL</span><span class="plain-syntax">(</span><span class="constant-syntax">NEW_BASE_KIND_NOTIFY_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">, </span><span class="identifier-syntax">d</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP23" class="paragraph-anchor"></a><b>&#167;23. </b>Called from <a href="../knowledge-module/2-ins.html" class="internal">Instances (in knowledge)</a> to warn plugins that a new instance has
<p class="commentary firstcommentary"><a id="SP26" class="paragraph-anchor"></a><b>&#167;26. </b>Called from <a href="../knowledge-module/2-ins.html" class="internal">Instances (in knowledge)</a> to warn plugins that a new instance has
been created. For example, the figures plugin needs to know this so that it
can see when a new illustration has been created.
</p>
@ -399,7 +438,7 @@ sure you're not dealing with an object.
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALL</span><span class="plain-syntax">(</span><span class="constant-syntax">NEW_INSTANCE_NOTIFY_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">nc</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP24" class="paragraph-anchor"></a><b>&#167;24. </b>Called from <a href="../knowledge-module/4-pp.html" class="internal">Property Permissions (in knowledge)</a> to warn plugins that a subject
<p class="commentary firstcommentary"><a id="SP27" class="paragraph-anchor"></a><b>&#167;27. </b>Called from <a href="../knowledge-module/4-pp.html" class="internal">Property Permissions (in knowledge)</a> to warn plugins that a subject
has been given permission to hold a property; the parsing plugin, for example,
uses this to attach a visibility flag.
</p>
@ -411,7 +450,7 @@ uses this to attach a visibility flag.
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALL</span><span class="plain-syntax">(</span><span class="constant-syntax">NEW_PERMISSION_NOTIFY_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">pp</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP25" class="paragraph-anchor"></a><b>&#167;25. </b>Called from <a href="../knowledge-module/3-prp.html" class="internal">Properties (in knowledge)</a> to warn plugins that a property has
<p class="commentary firstcommentary"><a id="SP28" class="paragraph-anchor"></a><b>&#167;28. </b>Called from <a href="../knowledge-module/3-prp.html" class="internal">Properties (in knowledge)</a> to warn plugins that a property has
been created, which they can use to spot properties with special significance
to them.
</p>
@ -423,7 +462,7 @@ to them.
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALL</span><span class="plain-syntax">(</span><span class="constant-syntax">NEW_PROPERTY_NOTIFY_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">prn</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP26" class="paragraph-anchor"></a><b>&#167;26. </b>Called from <a href="../knowledge-module/4-is.html" class="internal">Inference Subjects (in knowledge)</a> to warn plugins that a subject
<p class="commentary firstcommentary"><a id="SP29" class="paragraph-anchor"></a><b>&#167;29. </b>Called from <a href="../knowledge-module/4-is.html" class="internal">Inference Subjects (in knowledge)</a> to warn plugins that a subject
has been created, which they can use to spot subjects with special significance
to them.
</p>
@ -435,7 +474,7 @@ to them.
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALL</span><span class="plain-syntax">(</span><span class="constant-syntax">NEW_SUBJECT_NOTIFY_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">subj</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP27" class="paragraph-anchor"></a><b>&#167;27. </b>Called from <a href="../knowledge-module/2-nv.html" class="internal">Nonlocal Variables (in knowledge)</a> to warn plugins that a new
<p class="commentary firstcommentary"><a id="SP30" class="paragraph-anchor"></a><b>&#167;30. </b>Called from <a href="../knowledge-module/2-nv.html" class="internal">Nonlocal Variables (in knowledge)</a> to warn plugins that a new
variable has been created, which they can use to spot variables with special
significance to them.
</p>
@ -447,7 +486,7 @@ significance to them.
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALL</span><span class="plain-syntax">(</span><span class="constant-syntax">NEW_VARIABLE_NOTIFY_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">q</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP28" class="paragraph-anchor"></a><b>&#167;28. </b>Called from <a href="../knowledge-module/2-ins.html" class="internal">Instances (in knowledge)</a> to warn plugins that the kind of an
<p class="commentary firstcommentary"><a id="SP31" class="paragraph-anchor"></a><b>&#167;31. </b>Called from <a href="../knowledge-module/2-ins.html" class="internal">Instances (in knowledge)</a> to warn plugins that the kind of an
instance is about to be set. This happens most often when the instance is
created, but can also happen again, refining the kind to a subkind, when
the instance is an object.
@ -460,7 +499,7 @@ the instance is an object.
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALL</span><span class="plain-syntax">(</span><span class="constant-syntax">SET_KIND_NOTIFY_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">k</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP29" class="paragraph-anchor"></a><b>&#167;29. </b>Called from <a href="../knowledge-module/4-ks.html" class="internal">Kind Subjects (in knowledge)</a> when one kind of object is made a
<p class="commentary firstcommentary"><a id="SP32" class="paragraph-anchor"></a><b>&#167;32. </b>Called from <a href="../knowledge-module/4-ks.html" class="internal">Kind Subjects (in knowledge)</a> when one kind of object is made a
subkind of another, as for example when "container" is a made a subkind of
"thing". The plugin should return <span class="extract"><span class="extract-syntax">TRUE</span></span> if it wishes to forbid this,
and if so, it had better throw a problem message, or the user will be
@ -478,7 +517,7 @@ regions plugin does with the "region" kind.
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALL</span><span class="plain-syntax">(</span><span class="constant-syntax">SET_SUBKIND_NOTIFY_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">sub</span><span class="plain-syntax">, </span><span class="identifier-syntax">super</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP30" class="paragraph-anchor"></a><b>&#167;30. Influencing index. </b>Called from <a href="../index-module/2-ipw.html" class="internal">Index Physical World (in index)</a> to add something (if it wishes)
<p class="commentary firstcommentary"><a id="SP33" class="paragraph-anchor"></a><b>&#167;33. Influencing index. </b>Called from <a href="../index-module/2-ipw.html" class="internal">Index Physical World (in index)</a> to add something (if it wishes)
to the index description of an instance in the spatial model. For example,
the regions plugin uses this to put colour chips next to names of regions.
</p>
@ -490,7 +529,7 @@ the regions plugin uses this to put colour chips next to names of regions.
<span class="plain-syntax"> </span><span class="identifier-syntax">PLUGINS_CALL</span><span class="plain-syntax">(</span><span class="constant-syntax">ADD_TO_WORLD_INDEX_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">O</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP31" class="paragraph-anchor"></a><b>&#167;31. </b>Called from <a href="../index-module/2-ipw.html" class="internal">Index Physical World (in index)</a> to add something (if it wishes)
<p class="commentary firstcommentary"><a id="SP34" class="paragraph-anchor"></a><b>&#167;34. </b>Called from <a href="../index-module/2-ipw.html" class="internal">Index Physical World (in index)</a> to add something (if it wishes)
to the textual description of an instance in the spatial model. For example,
the mapping plugin uses this to say where a door leads.
</p>

View file

@ -89,6 +89,7 @@ to non-trivial functions as well as tables of data.
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_PROPERTY_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="3-scn.html#SP9" class="function-link"><span class="function-syntax">Scenes::new_property_notify</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_INSTANCE_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="3-scn.html#SP6" class="function-link"><span class="function-syntax">Scenes::new_named_instance_notify</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_BASE_KIND_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="3-scn.html#SP5" class="function-link"><span class="function-syntax">Scenes::new_base_kind_notify</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">COMPARE_CONSTANT_PLUG</span><span class="plain-syntax">, </span><a href="3-scn.html#SP5" class="function-link"><span class="function-syntax">Scenes::compare_CONSTANT</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">MAKE_SPECIAL_MEANINGS_PLUG</span><span class="plain-syntax">, </span><a href="3-scn.html#SP16" class="function-link"><span class="function-syntax">Scenes::make_special_meanings</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
@ -140,13 +141,25 @@ Inter identifier <span class="extract"><span class="extract-syntax">SCENE_TY</sp
<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">Scenes::compare_CONSTANT</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">Scenes::compare_CONSTANT</span></span>:<br/><a href="3-scn.html#SP1">&#167;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">spec1</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">spec2</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> *</span><span class="identifier-syntax">rv</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::get_kind_of_value</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec1</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::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_scene</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-ak.html#SP7" class="function-link"><span class="function-syntax">ARvalues::to_scene</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">spec1</span><span class="plain-syntax">) == </span><a href="4-ak.html#SP7" class="function-link"><span class="function-syntax">ARvalues::to_scene</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">spec2</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> *</span><span class="identifier-syntax">rv</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="identifier-syntax">rv</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">TRUE</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">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>&#167;6. </b><a href="3-scn.html#SP10" class="internal">scene</a> structures are automatically created whenever a new instance of the
kind "scene" is created, and this is where that happens.
</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">Scenes::new_named_instance_notify</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">Scenes::new_named_instance_notify</span></span>:<br/><a href="3-scn.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">instance</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Scenes::new_named_instance_notify</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">Scenes::new_named_instance_notify</span></span>:<br/><a href="3-scn.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="identifier-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">K_scene</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">Kinds::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">Instances::to_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">), </span><span class="identifier-syntax">K_scene</span><span class="plain-syntax">))) {</span>
<span class="plain-syntax"> </span><a href="3-scn.html#SP12" class="function-link"><span class="function-syntax">Scenes::new_scene</span></a><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">TRUE</span><span class="plain-syntax">;</span>
@ -173,7 +186,7 @@ Standard Rules. (So there is no need to translate this to other languages.)
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>&#167;9. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Scenes::new_property_notify</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">Scenes::new_property_notify</span></span>:<br/><a href="3-scn.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">property</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prn</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Scenes::new_property_notify</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">Scenes::new_property_notify</span></span>:<br/><a href="3-scn.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">property</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prn</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="function-syntax">&lt;notable-scene-properties&gt;(prn-&gt;</span><span class="element-syntax">name</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><span class="function-syntax">&lt;&lt;r&gt;&gt;</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax">: </span><span class="identifier-syntax">P_recurring</span><span class="plain-syntax"> = </span><span class="identifier-syntax">prn</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
@ -227,7 +240,7 @@ scenes &mdash; to express which, the <a href="3-scn.html#SP10" class="internal">
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">Instances::get_name</span><span class="plain-syntax">(</span><span class="identifier-syntax">sc</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_instance</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<ul class="endnotetexts"><li>The structure scene is private to this section.</li><li>The structure scene_end is private to this section.</li><li>The structure scene_connector is accessed in 2/ri, 3/tm, 3/ts, 4/ap, 4/av, 4/ap2, 4/apc, 5/tfg, 5/gl and here.</li></ul>
<ul class="endnotetexts"><li>The structure scene is private to this section.</li><li>The structure scene_end is private to this section.</li><li>The structure scene_connector is accessed in 2/ri, 3/tm, 3/ts, 4/ap, 4/av, 4/ap2, 4/ea, 4/apc, 5/tfg, 5/gl and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP11" class="paragraph-anchor"></a><b>&#167;11. </b>A plugin called <span class="extract"><span class="extract-syntax">xyzzy</span></span> generally has a hunk of subject data called <span class="extract"><span class="extract-syntax">xyzzy_data</span></span>,
so we would normally have a structure called <span class="extract"><span class="extract-syntax">scenes_data</span></span>, but in fact that
structure is just going to be <a href="3-scn.html#SP10" class="internal">scene</a>. So:
@ -241,7 +254,7 @@ is created:
</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">Scenes::new_scene</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">Scenes::new_scene</span></span>:<br/><a href="3-scn.html#SP6">&#167;6</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">instance</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">Scenes::new_scene</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">Scenes::new_scene</span></span>:<br/><a href="3-scn.html#SP6">&#167;6</a></span></button><span class="plain-syntax">(</span><span class="identifier-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">scene</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sc</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">scene</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-scn.html#SP12_3" class="named-paragraph-link"><span class="named-paragraph">Connect the scene structure to the instance</span><span class="named-paragraph-number">12.3</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-scn.html#SP12_1" class="named-paragraph-link"><span class="named-paragraph">Initialise the scene structure</span><span class="named-paragraph-number">12.1</span></a></span><span class="plain-syntax">;</span>
@ -289,7 +302,7 @@ to translate this to other languages.)
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">scene</span><span class="plain-syntax"> *</span><span class="function-syntax">Scenes::from_named_constant</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">Scenes::from_named_constant</span></span>:<br/><a href="3-scn.html#SP23_1">&#167;23.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">instance</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">scene</span><span class="plain-syntax"> *</span><span class="function-syntax">Scenes::from_named_constant</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">Scenes::from_named_constant</span></span>:<br/><a href="3-scn.html#SP23_1">&#167;23.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-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">K_scene</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="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Instances::to_kind</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">Kinds::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_scene</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">PLUGIN_DATA_ON_SUBJECT</span><span class="plain-syntax">(</span><span class="identifier-syntax">scenes</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">as_subject</span><span class="plain-syntax">);</span>
@ -299,7 +312,7 @@ to translate this to other languages.)
<p class="commentary firstcommentary"><a id="SP14" class="paragraph-anchor"></a><b>&#167;14. Creating and parsing ends. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Scenes::parse_scene_end_name</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">Scenes::parse_scene_end_name</span></span>:<br/><a href="3-scn.html#SP24">&#167;24</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">scene</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sc</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">EW</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">create</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Scenes::parse_scene_end_name</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">Scenes::parse_scene_end_name</span></span>:<br/><a href="3-scn.html#SP24">&#167;24</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">scene</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sc</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">EW</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">create</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">=2; </span><span class="identifier-syntax">i</span><span class="function-syntax">&lt;sc-&gt;</span><span class="element-syntax">no_ends</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">Wordings::match</span><span class="plain-syntax">(</span><span class="identifier-syntax">EW</span><span class="plain-syntax">, </span><span class="identifier-syntax">sc</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">ends</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">].</span><span class="element-syntax">end_names</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">;</span>
@ -333,7 +346,7 @@ to translate this to other languages.)
<p class="commentary firstcommentary"><a id="SP15" class="paragraph-anchor"></a><b>&#167;15. Scene end rulebooks. </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">Scenes::new_scene_rulebook</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">Scenes::new_scene_rulebook</span></span>:<br/><a href="3-scn.html#SP12_1">&#167;12.1</a>, <a href="3-scn.html#SP14">&#167;14</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">scene</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sc</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">end</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Scenes::new_scene_rulebook</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">Scenes::new_scene_rulebook</span></span>:<br/><a href="3-scn.html#SP12_1">&#167;12.1</a>, <a href="3-scn.html#SP14">&#167;14</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">scene</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sc</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">end</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">RW</span><span class="plain-syntax"> = </span><span class="identifier-syntax">EMPTY_WORDING</span><span class="plain-syntax">, </span><span class="identifier-syntax">AW</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="named-paragraph-container code-font"><a href="3-scn.html#SP15_1" class="named-paragraph-link"><span class="named-paragraph">Compose a name and alternate name for the new scene end rulebook</span><span class="named-paragraph-number">15.1</span></a></span><span class="plain-syntax">;</span>
@ -415,7 +428,7 @@ assertion sentences to create them:
</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">Scenes::make_special_meanings</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">Scenes::make_special_meanings</span></span>:<br/><a href="3-scn.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Scenes::make_special_meanings</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">Scenes::make_special_meanings</span></span>:<br/><a href="3-scn.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">SpecialMeanings::declare</span><span class="plain-syntax">(</span><a href="3-scn.html#SP17" class="function-link"><span class="function-syntax">Scenes::begins_when_SMF</span></a><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"scene-begins-when"</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">SpecialMeanings::declare</span><span class="plain-syntax">(</span><a href="3-scn.html#SP18" class="function-link"><span class="function-syntax">Scenes::ends_when_SMF</span></a><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"scene-ends-when"</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">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
@ -425,7 +438,7 @@ assertion sentences to create them:
</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">Scenes::begins_when_SMF</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">Scenes::begins_when_SMF</span></span>:<br/><a href="3-scn.html#SP16">&#167;16</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">task</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">V</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> *</span><span class="identifier-syntax">NPs</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Scenes::begins_when_SMF</span><button class="popup" onclick="togglePopup('usagePopup12')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup12">Usage of <span class="code-font"><span class="function-syntax">Scenes::begins_when_SMF</span></span>:<br/><a href="3-scn.html#SP16">&#167;16</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">task</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">V</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> *</span><span class="identifier-syntax">NPs</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">SW</span><span class="plain-syntax"> = (</span><span class="identifier-syntax">NPs</span><span class="plain-syntax">)?(</span><span class="identifier-syntax">NPs</span><span class="plain-syntax">[0]):</span><span class="identifier-syntax">EMPTY_WORDING</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">OW</span><span class="plain-syntax"> = (</span><span class="identifier-syntax">NPs</span><span class="plain-syntax">)?(</span><span class="identifier-syntax">NPs</span><span class="plain-syntax">[1]):</span><span class="identifier-syntax">EMPTY_WORDING</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">task</span><span class="plain-syntax">) { </span><span class="comment-syntax"> "The Ballroom Scene begins when..."</span>
@ -451,7 +464,7 @@ two noun phrases and sometimes three.
</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">Scenes::ends_when_SMF</span><button class="popup" onclick="togglePopup('usagePopup12')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup12">Usage of <span class="code-font"><span class="function-syntax">Scenes::ends_when_SMF</span></span>:<br/><a href="3-scn.html#SP16">&#167;16</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">task</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">V</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> *</span><span class="identifier-syntax">NPs</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Scenes::ends_when_SMF</span><button class="popup" onclick="togglePopup('usagePopup13')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup13">Usage of <span class="code-font"><span class="function-syntax">Scenes::ends_when_SMF</span></span>:<br/><a href="3-scn.html#SP16">&#167;16</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">task</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">V</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> *</span><span class="identifier-syntax">NPs</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">SW</span><span class="plain-syntax"> = (</span><span class="identifier-syntax">NPs</span><span class="plain-syntax">)?(</span><span class="identifier-syntax">NPs</span><span class="plain-syntax">[0]):</span><span class="identifier-syntax">EMPTY_WORDING</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">OW</span><span class="plain-syntax"> = (</span><span class="identifier-syntax">NPs</span><span class="plain-syntax">)?(</span><span class="identifier-syntax">NPs</span><span class="plain-syntax">[1]):</span><span class="identifier-syntax">EMPTY_WORDING</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">O2W</span><span class="plain-syntax"> = (</span><span class="identifier-syntax">NPs</span><span class="plain-syntax">)?(</span><span class="identifier-syntax">NPs</span><span class="plain-syntax">[2]):</span><span class="identifier-syntax">EMPTY_WORDING</span><span class="plain-syntax">;</span>
@ -641,7 +654,7 @@ ends" the other end.
</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">Scenes::new_scene_anchor</span><button class="popup" onclick="togglePopup('usagePopup13')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup13">Usage of <span class="code-font"><span class="function-syntax">Scenes::new_scene_anchor</span></span>:<br/><a href="3-scn.html#SP17">&#167;17</a>, <a href="3-scn.html#SP18">&#167;18</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="identifier-syntax">phase</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">given_end</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Scenes::new_scene_anchor</span><button class="popup" onclick="togglePopup('usagePopup14')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup14">Usage of <span class="code-font"><span class="function-syntax">Scenes::new_scene_anchor</span></span>:<br/><a href="3-scn.html#SP17">&#167;17</a>, <a href="3-scn.html#SP18">&#167;18</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="identifier-syntax">phase</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">given_end</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">scene</span><span class="plain-syntax"> *</span><span class="identifier-syntax">this_scene</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="comment-syntax"> scene whose end is being caused: must be set</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">end</span><span class="plain-syntax"> = -1; </span><span class="comment-syntax"> end which is being anchored: must be set</span>

106
docs/if-module/4-ac.html Normal file
View file

@ -0,0 +1,106 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Action Conditions</title>
<link href="../docs-assets/Breadcrumbs.css" rel="stylesheet" rev="stylesheet" type="text/css">
<meta name="viewport" content="width=device-width initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Content-Language" content="en-gb">
<link href="../docs-assets/Contents.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Progress.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Navigation.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Fonts.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Base.css" rel="stylesheet" rev="stylesheet" type="text/css">
<script>
function togglePopup(material_id) {
var popup = document.getElementById(material_id);
popup.classList.toggle("show");
}
</script>
<link href="../docs-assets/Popups.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
</head>
<body class="commentary-font">
<nav role="navigation">
<h1><a href="../index.html">
<img src="../docs-assets/Inform.png" height=72">
</a></h1>
<ul><li><a href="../compiler.html">compiler tools</a></li>
<li><a href="../other.html">other tools</a></li>
<li><a href="../extensions.html">extensions and kits</a></li>
<li><a href="../units.html">unit test tools</a></li>
</ul><h2>Compiler Webs</h2><ul>
<li><a href="../inbuild/index.html">inbuild</a></li>
<li><a href="../inform7/index.html">inform7</a></li>
<li><a href="../inter/index.html">inter</a></li>
</ul><h2>Inbuild Modules</h2><ul>
<li><a href="../supervisor-module/index.html">supervisor</a></li>
</ul><h2>Inform7 Modules</h2><ul>
<li><a href="../core-module/index.html">core</a></li>
<li><a href="../assertions-module/index.html">assertions</a></li>
<li><a href="../values-module/index.html">values</a></li>
<li><a href="../knowledge-module/index.html">knowledge</a></li>
<li><a href="../imperative-module/index.html">imperative</a></li>
<li><a href="../runtime-module/index.html">runtime</a></li>
<li><a href="index.html"><span class="selectedlink">if</span></a></li>
<li><a href="../multimedia-module/index.html">multimedia</a></li>
<li><a href="../index-module/index.html">index</a></li>
</ul><h2>Inter Modules</h2><ul>
<li><a href="../bytecode-module/index.html">bytecode</a></li>
<li><a href="../building-module/index.html">building</a></li>
<li><a href="../codegen-module/index.html">codegen</a></li>
</ul><h2>Services</h2><ul>
<li><a href="../arch-module/index.html">arch</a></li>
<li><a href="../calculus-module/index.html">calculus</a></li>
<li><a href="../html-module/index.html">html</a></li>
<li><a href="../inflections-module/index.html">inflections</a></li>
<li><a href="../kinds-module/index.html">kinds</a></li>
<li><a href="../linguistics-module/index.html">linguistics</a></li>
<li><a href="../problems-module/index.html">problems</a></li>
<li><a href="../syntax-module/index.html">syntax</a></li>
<li><a href="../words-module/index.html">words</a></li>
<li><a href="../../../inweb/docs/foundation-module/index.html">foundation</a></li>
</ul>
</nav>
<main role="main">
<!--Weave of 'Action Conditions' generated by Inweb-->
<div class="breadcrumbs">
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../compiler.html">Inform7</a></li><li><a href="index.html">if</a></li><li><a href="index.html#4">Chapter 4: Actions</a></li><li><b>Action Conditions</b></li></ul></div>
<p class="purpose">A special condition for testing against action patterns.</p>
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. </b></p>
<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">AConditions::new_action_TEST_VALUE</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">AConditions::new_action_TEST_VALUE</span></span>:<br/>Parse Action Patterns - <a href="4-pap.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ap</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ap</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 action pattern"</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">spec</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::new_with_words</span><span class="plain-syntax">(</span><span class="identifier-syntax">TEST_VALUE_NT</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">spec</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</span><span class="plain-syntax"> = </span><a href="4-ak.html#SP6" class="function-link"><span class="function-syntax">ARvalues::from_action_pattern</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ap</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Node::set_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</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">int</span><span class="plain-syntax"> </span><span class="function-syntax">AConditions::is_action_TEST_VALUE</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">AConditions::is_action_TEST_VALUE</span></span>:<br/>Action Patterns - <a href="4-ap2.html#SP4">&#167;4</a></span></button><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">Node::is</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">, </span><span class="identifier-syntax">TEST_VALUE_NT</span><span class="plain-syntax">)) &amp;&amp;</span>
<span class="plain-syntax"> ((</span><a href="4-ak.html#SP6" class="function-link"><span class="function-syntax">ARvalues::to_action_pattern</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</span><span class="plain-syntax">)) ||</span>
<span class="plain-syntax"> (</span><a href="4-ak.html#SP6" class="function-link"><span class="function-syntax">ARvalues::to_explicit_action</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</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="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="function-syntax">AConditions::action_tested</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">AConditions::action_tested</span></span>:<br/>Action Patterns - <a href="4-ap2.html#SP4">&#167;4</a></span></button><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><a href="4-ac.html#SP1" class="function-link"><span class="function-syntax">AConditions::is_action_TEST_VALUE</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">spec</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">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"action improperly extracted"</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">spec</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="4-ak.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-im.html">1</a></li><li class="progresschapter"><a href="2-bd.html">2</a></li><li class="progresschapter"><a href="3-sm.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresssection"><a href="4-ap.html">ap</a></li><li class="progresssection"><a href="4-anaa.html">anaa</a></li><li class="progresssection"><a href="4-ak.html">ak</a></li><li class="progresscurrent">ac</li><li class="progresssection"><a href="4-act.html">act</a></li><li class="progresssection"><a href="4-as.html">as</a></li><li class="progresssection"><a href="4-av.html">av</a></li><li class="progresssection"><a href="4-ann.html">ann</a></li><li class="progresssection"><a href="4-anl.html">anl</a></li><li class="progresssection"><a href="4-ap2.html">ap2</a></li><li class="progresssection"><a href="4-ea.html">ea</a></li><li class="progresssection"><a href="4-apc.html">apc</a></li><li class="progresssection"><a href="4-gng.html">gng</a></li><li class="progresssection"><a href="4-pap.html">pap</a></li><li class="progresssection"><a href="4-nap.html">nap</a></li><li class="progresschapter"><a href="5-pp.html">5</a></li><li class="progressnext"><a href="4-act.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>
</body>
</html>

View file

@ -113,7 +113,7 @@ which had not actually been done since around 2008.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="function-syntax">PL::Actions::act_new</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">PL::Actions::act_new</span></span>:<br/>Actions Plugin - <a href="4-ap.html#SP12">&#167;12</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="function-syntax">PL::Actions::act_new</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">PL::Actions::act_new</span></span>:<br/>Actions Plugin - <a href="4-ap.html#SP8">&#167;8</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">action_name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Kinds::Behaviour::new_enumerated_value</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_action_name</span><span class="plain-syntax">);</span>
@ -214,7 +214,7 @@ have to correspond to names referenced in <a href="../WorldModelKit/index.html"
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="4-anaa.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-im.html">1</a></li><li class="progresschapter"><a href="2-bd.html">2</a></li><li class="progresschapter"><a href="3-sm.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresssection"><a href="4-ap.html">ap</a></li><li class="progresssection"><a href="4-anaa.html">anaa</a></li><li class="progresscurrent">act</li><li class="progresssection"><a href="4-as.html">as</a></li><li class="progresssection"><a href="4-av.html">av</a></li><li class="progresssection"><a href="4-ann.html">ann</a></li><li class="progresssection"><a href="4-anl.html">anl</a></li><li class="progresssection"><a href="4-ap2.html">ap2</a></li><li class="progresssection"><a href="4-apc.html">apc</a></li><li class="progresssection"><a href="4-gng.html">gng</a></li><li class="progresssection"><a href="4-pap.html">pap</a></li><li class="progresssection"><a href="4-nap.html">nap</a></li><li class="progresschapter"><a href="5-pp.html">5</a></li><li class="progressnext"><a href="4-as.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="4-ac.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-im.html">1</a></li><li class="progresschapter"><a href="2-bd.html">2</a></li><li class="progresschapter"><a href="3-sm.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresssection"><a href="4-ap.html">ap</a></li><li class="progresssection"><a href="4-anaa.html">anaa</a></li><li class="progresssection"><a href="4-ak.html">ak</a></li><li class="progresssection"><a href="4-ac.html">ac</a></li><li class="progresscurrent">act</li><li class="progresssection"><a href="4-as.html">as</a></li><li class="progresssection"><a href="4-av.html">av</a></li><li class="progresssection"><a href="4-ann.html">ann</a></li><li class="progresssection"><a href="4-anl.html">anl</a></li><li class="progresssection"><a href="4-ap2.html">ap2</a></li><li class="progresssection"><a href="4-ea.html">ea</a></li><li class="progresssection"><a href="4-apc.html">apc</a></li><li class="progresssection"><a href="4-gng.html">gng</a></li><li class="progresssection"><a href="4-pap.html">pap</a></li><li class="progresssection"><a href="4-nap.html">nap</a></li><li class="progresschapter"><a href="5-pp.html">5</a></li><li class="progressnext"><a href="4-as.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

206
docs/if-module/4-ak.html Normal file
View file

@ -0,0 +1,206 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Action Kinds</title>
<link href="../docs-assets/Breadcrumbs.css" rel="stylesheet" rev="stylesheet" type="text/css">
<meta name="viewport" content="width=device-width initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Content-Language" content="en-gb">
<link href="../docs-assets/Contents.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Progress.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Navigation.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Fonts.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Base.css" rel="stylesheet" rev="stylesheet" type="text/css">
<script>
function togglePopup(material_id) {
var popup = document.getElementById(material_id);
popup.classList.toggle("show");
}
</script>
<link href="../docs-assets/Popups.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
</head>
<body class="commentary-font">
<nav role="navigation">
<h1><a href="../index.html">
<img src="../docs-assets/Inform.png" height=72">
</a></h1>
<ul><li><a href="../compiler.html">compiler tools</a></li>
<li><a href="../other.html">other tools</a></li>
<li><a href="../extensions.html">extensions and kits</a></li>
<li><a href="../units.html">unit test tools</a></li>
</ul><h2>Compiler Webs</h2><ul>
<li><a href="../inbuild/index.html">inbuild</a></li>
<li><a href="../inform7/index.html">inform7</a></li>
<li><a href="../inter/index.html">inter</a></li>
</ul><h2>Inbuild Modules</h2><ul>
<li><a href="../supervisor-module/index.html">supervisor</a></li>
</ul><h2>Inform7 Modules</h2><ul>
<li><a href="../core-module/index.html">core</a></li>
<li><a href="../assertions-module/index.html">assertions</a></li>
<li><a href="../values-module/index.html">values</a></li>
<li><a href="../knowledge-module/index.html">knowledge</a></li>
<li><a href="../imperative-module/index.html">imperative</a></li>
<li><a href="../runtime-module/index.html">runtime</a></li>
<li><a href="index.html"><span class="selectedlink">if</span></a></li>
<li><a href="../multimedia-module/index.html">multimedia</a></li>
<li><a href="../index-module/index.html">index</a></li>
</ul><h2>Inter Modules</h2><ul>
<li><a href="../bytecode-module/index.html">bytecode</a></li>
<li><a href="../building-module/index.html">building</a></li>
<li><a href="../codegen-module/index.html">codegen</a></li>
</ul><h2>Services</h2><ul>
<li><a href="../arch-module/index.html">arch</a></li>
<li><a href="../calculus-module/index.html">calculus</a></li>
<li><a href="../html-module/index.html">html</a></li>
<li><a href="../inflections-module/index.html">inflections</a></li>
<li><a href="../kinds-module/index.html">kinds</a></li>
<li><a href="../linguistics-module/index.html">linguistics</a></li>
<li><a href="../problems-module/index.html">problems</a></li>
<li><a href="../syntax-module/index.html">syntax</a></li>
<li><a href="../words-module/index.html">words</a></li>
<li><a href="../../../inweb/docs/foundation-module/index.html">foundation</a></li>
</ul>
</nav>
<main role="main">
<!--Weave of 'Action Kinds' generated by Inweb-->
<div class="breadcrumbs">
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../compiler.html">Inform7</a></li><li><a href="index.html">if</a></li><li><a href="index.html#4">Chapter 4: Actions</a></li><li><b>Action Kinds</b></li></ul></div>
<p class="purpose">Three action-related kinds of value.</p>
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. </b>The following represent action names, stored actions and descriptions of
actions respectively: see <a href="4-ap.html" class="internal">Actions Plugin</a> for what these terms mean.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K_action_name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K_stored_action</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K_description_of_action</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
</pre>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b>These are created by a Neptune file inside <a href="../WorldModelKit/index.html" class="internal">WorldModelKit</a>, and are
recognised by their Inter identifiers:
</p>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ARvalues::new_base_kind_notify</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">ARvalues::new_base_kind_notify</span></span>:<br/>Actions Plugin - <a href="4-ap.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">new_base</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq_wide_string</span><span class="plain-syntax">(</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"ACTION_NAME_TY"</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">K_action_name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">new_base</span><span class="plain-syntax">; </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq_wide_string</span><span class="plain-syntax">(</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"DESCRIPTION_OF_ACTION_TY"</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">K_description_of_action</span><span class="plain-syntax"> = </span><span class="identifier-syntax">new_base</span><span class="plain-syntax">; </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq_wide_string</span><span class="plain-syntax">(</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"STORED_ACTION_TY"</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">K_stored_action</span><span class="plain-syntax"> = </span><span class="identifier-syntax">new_base</span><span class="plain-syntax">; </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><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>
</pre>
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. </b>A stored action can always be compared to a gerund: for instance,
</p>
<blockquote>
<p>if the current action is taking something...</p>
</blockquote>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ARvalues::actions_typecheck_equality</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">ARvalues::actions_typecheck_equality</span></span>:<br/>Actions Plugin - <a href="4-ap.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K1</span><span class="plain-syntax">, </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K2</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::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">K1</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_stored_action</span><span class="plain-syntax">)) &amp;&amp; (</span><span class="identifier-syntax">Kinds::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">K2</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_description_of_action</span><span class="plain-syntax">)))</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="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>
</pre>
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>&#167;5. </b>All three of these kinds can have constant values. For an action name, these
correspond simply to <a href="4-act.html#SP1" class="internal">action_name</a> objects:
</p>
<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">ARvalues::from_action_name</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">ARvalues::from_action_name</span></span>:<br/>Action Name Names - <a href="4-ann.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">val</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CONV_FROM</span><span class="plain-syntax">(</span><span class="reserved-syntax">action_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_action_name</span><span class="plain-syntax">) }</span>
<span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="function-syntax">ARvalues::to_action_name</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">ARvalues::to_action_name</span></span>:<br/><a href="4-ak.html#SP8">&#167;8</a><br/>Actions Plugin - <a href="4-ap.html#SP5">&#167;5</a><br/>Action Variables - <a href="4-av.html#SP1">&#167;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">spec</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CONV_TO</span><span class="plain-syntax">(</span><span class="reserved-syntax">action_name</span><span class="plain-syntax">) }</span>
</pre>
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>&#167;6. </b>When text is parsed to an action pattern, the result can be stored as a
constant in two ways. If the pattern unambiguously describes a single explicit
action, the result has the kind "stored action" and corresponds to an
<a href="4-ea.html#SP1" class="internal">explicit_action</a> object; if the pattern is looser than that, the result
is a "description of action" and correspond to an <a href="4-ap2.html#SP1" class="internal">action_pattern</a>.
</p>
<p class="commentary">For example, "taking the golden telephone" might be a <span class="extract"><span class="extract-syntax">K_stored_action</span></span>
constant, but "doing something to the golden telephone" or "taking something"
or "taking the golden telephone in the presence of Mr Wu" would all be
<span class="extract"><span class="extract-syntax">K_description_of_action</span></span>.
</p>
<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">ARvalues::from_action_pattern</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">ARvalues::from_action_pattern</span></span>:<br/>Actions-Only Nodes and Annotations - <a href="4-anaa.html#SP4">&#167;4</a><br/>Action Conditions - <a href="4-ac.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">val</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">failure_code</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">explicit_action</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ea</span><span class="plain-syntax"> = </span><a href="4-ea.html#SP2" class="function-link"><span class="function-syntax">ExplicitActions::from_action_pattern</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">val</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">failure_code</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">ea</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">spec</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">CONSTANT_NT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Node::set_kind_of_value</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_stored_action</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Node::set_constant_explicit_action</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">, </span><span class="identifier-syntax">ea</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">spec</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">CONV_FROM</span><span class="plain-syntax">(</span><span class="reserved-syntax">action_pattern</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_description_of_action</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="function-syntax">ARvalues::to_action_pattern</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">ARvalues::to_action_pattern</span></span>:<br/>Action Conditions - <a href="4-ac.html#SP1">&#167;1</a><br/>Action Patterns - <a href="4-ap2.html#SP4">&#167;4</a></span></button><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="identifier-syntax">CONV_TO</span><span class="plain-syntax">(</span><span class="reserved-syntax">action_pattern</span><span class="plain-syntax">) }</span>
<span class="reserved-syntax">explicit_action</span><span class="plain-syntax"> *</span><span class="function-syntax">ARvalues::to_explicit_action</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">ARvalues::to_explicit_action</span></span>:<br/>Action Conditions - <a href="4-ac.html#SP1">&#167;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">spec</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CONV_TO</span><span class="plain-syntax">(</span><span class="reserved-syntax">explicit_action</span><span class="plain-syntax">) }</span>
</pre>
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>&#167;7. </b>Finally, for a named action pattern, constant values correspond to
<a href="4-nap.html#SP1" class="internal">named_action_pattern</a> objects. These are actually never used at run-time
and do not appear as rvalues in any permanent way inside the compiler, so
the kind <span class="extract"><span class="extract-syntax">K_description_of_action</span></span> is given to them only on principle. If
they were used as values, this is the kind we would probably give them.
</p>
<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">ARvalues::from_named_action_pattern</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">ARvalues::from_named_action_pattern</span></span>:<br/>Named Action Patterns - <a href="4-nap.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">named_action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">val</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CONV_FROM</span><span class="plain-syntax">(</span><span class="reserved-syntax">named_action_pattern</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_description_of_action</span><span class="plain-syntax"> ) }</span>
<span class="reserved-syntax">named_action_pattern</span><span class="plain-syntax"> *</span><span class="function-syntax">ARvalues::to_named_action_pattern</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">ARvalues::to_named_action_pattern</span></span>:<br/>Named Action Patterns - <a href="4-nap.html#SP3">&#167;3</a></span></button><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="identifier-syntax">CONV_TO</span><span class="plain-syntax">(</span><span class="reserved-syntax">named_action_pattern</span><span class="plain-syntax">) }</span>
<span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="function-syntax">ARvalues::from_grammar_verb</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">ARvalues::from_grammar_verb</span></span>:<br/>Parse Action Patterns - <a href="4-pap.html#SP24_5_4">&#167;24.5.4</a><br/>Grammar Tokens - <a href="5-gt2.html#SP10_1">&#167;10.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">grammar_verb</span><span class="plain-syntax"> *</span><span class="identifier-syntax">val</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CONV_FROM</span><span class="plain-syntax">(</span><span class="reserved-syntax">grammar_verb</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_understanding</span><span class="plain-syntax">) }</span>
<span class="reserved-syntax">grammar_verb</span><span class="plain-syntax"> *</span><span class="function-syntax">ARvalues::to_grammar_verb</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">ARvalues::to_grammar_verb</span></span>:<br/>Parsing Plugin - <a href="5-pp.html#SP2">&#167;2</a><br/>Grammar Tokens - <a href="5-gt2.html#SP11">&#167;11</a></span></button><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="identifier-syntax">CONV_TO</span><span class="plain-syntax">(</span><span class="reserved-syntax">grammar_verb</span><span class="plain-syntax">) }</span>
<span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="function-syntax">ARvalues::from_scene</span><span class="plain-syntax">(</span><span class="reserved-syntax">scene</span><span class="plain-syntax"> *</span><span class="identifier-syntax">val</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CONV_FROM</span><span class="plain-syntax">(</span><span class="reserved-syntax">scene</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_scene</span><span class="plain-syntax">) }</span>
<span class="reserved-syntax">scene</span><span class="plain-syntax"> *</span><span class="function-syntax">ARvalues::to_scene</span><button class="popup" onclick="togglePopup('usagePopup12')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup12">Usage of <span class="code-font"><span class="function-syntax">ARvalues::to_scene</span></span>:<br/>Scenes - <a href="3-scn.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">spec</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CONV_TO</span><span class="plain-syntax">(</span><span class="reserved-syntax">scene</span><span class="plain-syntax">) }</span>
</pre>
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>&#167;8. </b>It's not useful to be able to compare description of action constants for
equality in this sense. There would be a case for doing so with stored actions,
but in practice there seems little need, so for the moment we do not.
</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">ARvalues::compare_CONSTANT</span><button class="popup" onclick="togglePopup('usagePopup13')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup13">Usage of <span class="code-font"><span class="function-syntax">ARvalues::compare_CONSTANT</span></span>:<br/>Actions Plugin - <a href="4-ap.html#SP1">&#167;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">spec1</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">spec2</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> *</span><span class="identifier-syntax">rv</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::get_kind_of_value</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec1</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::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_action_name</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-ak.html#SP5" class="function-link"><span class="function-syntax">ARvalues::to_action_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">spec1</span><span class="plain-syntax">) == </span><a href="4-ak.html#SP5" class="function-link"><span class="function-syntax">ARvalues::to_action_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">spec2</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> *</span><span class="identifier-syntax">rv</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="identifier-syntax">rv</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">TRUE</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">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="4-anaa.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-im.html">1</a></li><li class="progresschapter"><a href="2-bd.html">2</a></li><li class="progresschapter"><a href="3-sm.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresssection"><a href="4-ap.html">ap</a></li><li class="progresssection"><a href="4-anaa.html">anaa</a></li><li class="progresscurrent">ak</li><li class="progresssection"><a href="4-ac.html">ac</a></li><li class="progresssection"><a href="4-act.html">act</a></li><li class="progresssection"><a href="4-as.html">as</a></li><li class="progresssection"><a href="4-av.html">av</a></li><li class="progresssection"><a href="4-ann.html">ann</a></li><li class="progresssection"><a href="4-anl.html">anl</a></li><li class="progresssection"><a href="4-ap2.html">ap2</a></li><li class="progresssection"><a href="4-ea.html">ea</a></li><li class="progresssection"><a href="4-apc.html">apc</a></li><li class="progresssection"><a href="4-gng.html">gng</a></li><li class="progresssection"><a href="4-pap.html">pap</a></li><li class="progresssection"><a href="4-nap.html">nap</a></li><li class="progresschapter"><a href="5-pp.html">5</a></li><li class="progressnext"><a href="4-ac.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>
</body>
</html>

View file

@ -103,15 +103,15 @@ function togglePopup(material_id) {
<span class="plain-syntax"> </span><span class="identifier-syntax">NodeType::new</span><span class="plain-syntax">(</span><span class="constant-syntax">ACTION_NT</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"ACTION_NT"</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">INFTY</span><span class="plain-syntax">, </span><span class="identifier-syntax">L3_NCAT</span><span class="plain-syntax">, </span><span class="identifier-syntax">ASSERT_NFLAG</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::declare_type</span><span class="plain-syntax">(</span><span class="constant-syntax">action_meaning_ANNOT</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><a href="4-anaa.html#SP3" class="function-link"><span class="function-syntax">ActionsNodes::write_action_meaning_ANNOT</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="4-anaa.html#SP5" class="function-link"><span class="function-syntax">ActionsNodes::write_action_meaning_ANNOT</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::declare_type</span><span class="plain-syntax">(</span><span class="constant-syntax">constant_action_name_ANNOT</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><a href="4-anaa.html#SP3" class="function-link"><span class="function-syntax">ActionsNodes::write_constant_action_name_ANNOT</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="4-anaa.html#SP5" class="function-link"><span class="function-syntax">ActionsNodes::write_constant_action_name_ANNOT</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::declare_type</span><span class="plain-syntax">(</span><span class="constant-syntax">constant_action_pattern_ANNOT</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><a href="4-anaa.html#SP3" class="function-link"><span class="function-syntax">ActionsNodes::write_constant_action_pattern_ANNOT</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="4-anaa.html#SP5" class="function-link"><span class="function-syntax">ActionsNodes::write_constant_action_pattern_ANNOT</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::declare_type</span><span class="plain-syntax">(</span><span class="constant-syntax">constant_explicit_action_ANNOT</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><a href="4-anaa.html#SP3" class="function-link"><span class="function-syntax">ActionsNodes::write_constant_explicit_action_ANNOT</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="4-anaa.html#SP5" class="function-link"><span class="function-syntax">ActionsNodes::write_constant_explicit_action_ANNOT</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::declare_type</span><span class="plain-syntax">(</span><span class="constant-syntax">constant_named_action_pattern_ANNOT</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><a href="4-anaa.html#SP3" class="function-link"><span class="function-syntax">ActionsNodes::write_constant_named_action_pattern_ANNOT</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="4-anaa.html#SP5" class="function-link"><span class="function-syntax">ActionsNodes::write_constant_named_action_pattern_ANNOT</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::allow</span><span class="plain-syntax">(</span><span class="constant-syntax">ACTION_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">action_meaning_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::allow</span><span class="plain-syntax">(</span><span class="identifier-syntax">COMMON_NOUN_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">action_meaning_ANNOT</span><span class="plain-syntax">);</span>
@ -121,36 +121,119 @@ function togglePopup(material_id) {
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::allow</span><span class="plain-syntax">(</span><span class="identifier-syntax">CONSTANT_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">constant_explicit_action_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b>And for the debugging log:
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b>ACTION nodes are converted from existing ones, not born:
</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">ActionsNodes::write_action_meaning_ANNOT</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">ActionsNodes::write_action_meaning_ANNOT</span></span>:<br/><a href="4-anaa.html#SP2">&#167;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="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ActionsNodes::convert_to_ACTION_node</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="reserved-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ap</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Node::set_type</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="constant-syntax">ACTION_NT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Node::set_action_meaning</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="identifier-syntax">ap</span><span class="plain-syntax">);</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"> = </span><span class="identifier-syntax">NULL</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">ActionsNodes::is_actionlike</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">ActionsNodes::is_actionlike</span></span>:<br/><a href="4-anaa.html#SP4">&#167;4</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">Node::get_type</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">) == </span><span class="constant-syntax">ACTION_NT</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">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">K_stored_action</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">PROPER_NOUN_NT</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">spec</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::get_evaluation</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">Rvalues::is_CONSTANT_of_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_stored_action</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><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">void</span><span class="plain-syntax"> </span><span class="function-syntax">ActionsNodes::convert_stored_action_constant</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">ActionsNodes::convert_stored_action_constant</span></span>:<br/><a href="4-anaa.html#SP4">&#167;4</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">Node::get_type</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">) == </span><span class="identifier-syntax">PROPER_NOUN_NT</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">spec</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::get_evaluation</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">Rvalues::is_CONSTANT_of_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_stored_action</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">explicit_action</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ea</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::get_constant_explicit_action</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-anaa.html#SP3" class="function-link"><span class="function-syntax">ActionsNodes::convert_to_ACTION_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="identifier-syntax">ea</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_described</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>
</pre>
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. </b>The first case here is to take care of a sentence like:
</p>
<blockquote>
<p>Taking something is proactive behaviour.</p>
</blockquote>
<p class="commentary">Here <span class="extract"><span class="extract-syntax">Refiner::refine</span></span> will correctly report that "proactive behaviour" is
a new term, and give it a <span class="extract"><span class="extract-syntax">CREATED_NT</span></span> node. But we don't want it to become an
object or a value &mdash; it will become a named kind of action instead. So we
amend the node to <span class="extract"><span class="extract-syntax">ACTION_NT</span></span>.
</p>
<p class="commentary">The second case occurs much less often &mdash; for instance, the only time it comes
up in the test suite is in the example "Chronic Hinting Syndrome":
</p>
<blockquote>
<p>Setting is a kind of value. The settings are bright and dull.</p>
</blockquote>
<p class="commentary">Here the first sentence wants to create something called "setting", which
ought to have a <span class="extract"><span class="extract-syntax">CREATED_NT</span></span> node type, but doesn't because it has been read
as an action instead. We correct the spurious <span class="extract"><span class="extract-syntax">ACTION_NT</span></span> to a <span class="extract"><span class="extract-syntax">CREATED_NT</span></span>.
</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">ActionsNodes::creation</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">ActionsNodes::creation</span></span>:<br/>Actions Plugin - <a href="4-ap.html#SP1">&#167;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="reserved-syntax">if</span><span class="plain-syntax"> ((</span><a href="4-anaa.html#SP3" class="function-link"><span class="function-syntax">ActionsNodes::is_actionlike</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">px</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">py</span><span class="plain-syntax">) == </span><span class="identifier-syntax">CREATED_NT</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Node::set_type</span><span class="plain-syntax">(</span><span class="identifier-syntax">py</span><span class="plain-syntax">, </span><span class="constant-syntax">ACTION_NT</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-anaa.html#SP3" class="function-link"><span class="function-syntax">ActionsNodes::is_actionlike</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">px</span><span class="plain-syntax">)) &amp;&amp; (</span><a href="4-anaa.html#SP3" class="function-link"><span class="function-syntax">ActionsNodes::is_actionlike</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-anaa.html#SP3" class="function-link"><span class="function-syntax">ActionsNodes::convert_stored_action_constant</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">px</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="4-anaa.html#SP3" class="function-link"><span class="function-syntax">ActionsNodes::convert_stored_action_constant</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">py</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">Node::get_type</span><span class="plain-syntax">(</span><span class="identifier-syntax">px</span><span class="plain-syntax">) == </span><span class="constant-syntax">ACTION_NT</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">py</span><span class="plain-syntax">) == </span><span class="identifier-syntax">KIND_NT</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Node::set_type</span><span class="plain-syntax">(</span><span class="identifier-syntax">px</span><span class="plain-syntax">, </span><span class="identifier-syntax">CREATED_NT</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">ActionsNodes::unusual_property_value_node</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">ActionsNodes::unusual_property_value_node</span></span>:<br/>Actions Plugin - <a href="4-ap.html#SP1">&#167;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">py</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">py</span><span class="plain-syntax">) == </span><span class="constant-syntax">ACTION_NT</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ap</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::get_action_meaning</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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ap</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">val</span><span class="plain-syntax"> = </span><a href="4-ak.html#SP6" class="function-link"><span class="function-syntax">ARvalues::from_action_pattern</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ap</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">Rvalues::is_CONSTANT_of_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">val</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_stored_action</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Refiner::give_spec_to_noun</span><span class="plain-syntax">(</span><span class="identifier-syntax">py</span><span class="plain-syntax">, </span><span class="identifier-syntax">val</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>&#167;5. </b>And for the debugging log:
</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">ActionsNodes::write_action_meaning_ANNOT</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">ActionsNodes::write_action_meaning_ANNOT</span></span>:<br/><a href="4-anaa.html#SP2">&#167;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_action_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">" {action meaning: "</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="4-ap2.html#SP3" class="function-link"><span class="function-syntax">ActionPatterns::write</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">Node::get_action_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>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ActionsNodes::write_constant_action_name_ANNOT</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">ActionsNodes::write_constant_action_name_ANNOT</span></span>:<br/><a href="4-anaa.html#SP2">&#167;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="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ActionsNodes::write_constant_action_name_ANNOT</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">ActionsNodes::write_constant_action_name_ANNOT</span></span>:<br/><a href="4-anaa.html#SP2">&#167;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_constant_action_name</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">" {action name: %W}"</span><span class="plain-syntax">, </span><a href="4-ann.html#SP5" class="function-link"><span class="function-syntax">ActionNameNames::tensed</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">Node::get_constant_action_name</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">), </span><span class="identifier-syntax">IS_TENSE</span><span class="plain-syntax">));</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ActionsNodes::write_constant_action_pattern_ANNOT</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">ActionsNodes::write_constant_action_pattern_ANNOT</span></span>:<br/><a href="4-anaa.html#SP2">&#167;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="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ActionsNodes::write_constant_action_pattern_ANNOT</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">ActionsNodes::write_constant_action_pattern_ANNOT</span></span>:<br/><a href="4-anaa.html#SP2">&#167;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_constant_action_pattern</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">" {action pattern: "</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="4-ap2.html#SP3" class="function-link"><span class="function-syntax">ActionPatterns::write</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">Node::get_constant_action_pattern</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>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ActionsNodes::write_constant_explicit_action_ANNOT</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">ActionsNodes::write_constant_explicit_action_ANNOT</span></span>:<br/><a href="4-anaa.html#SP2">&#167;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="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ActionsNodes::write_constant_explicit_action_ANNOT</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">ActionsNodes::write_constant_explicit_action_ANNOT</span></span>:<br/><a href="4-anaa.html#SP2">&#167;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_constant_explicit_action</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">" {explicit action: "</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="4-ap2.html#SP3" class="function-link"><span class="function-syntax">ActionPatterns::write</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">Node::get_constant_explicit_action</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">)-&gt;</span><span class="element-syntax">as_described</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>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ActionsNodes::write_constant_named_action_pattern_ANNOT</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">ActionsNodes::write_constant_named_action_pattern_ANNOT</span></span>:<br/><a href="4-anaa.html#SP2">&#167;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="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ActionsNodes::write_constant_named_action_pattern_ANNOT</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">ActionsNodes::write_constant_named_action_pattern_ANNOT</span></span>:<br/><a href="4-anaa.html#SP2">&#167;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="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_constant_named_action_pattern</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">" {named action pattern: "</span><span class="plain-syntax">);</span>
@ -160,7 +243,7 @@ function togglePopup(material_id) {
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="4-ap.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-im.html">1</a></li><li class="progresschapter"><a href="2-bd.html">2</a></li><li class="progresschapter"><a href="3-sm.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresssection"><a href="4-ap.html">ap</a></li><li class="progresscurrent">anaa</li><li class="progresssection"><a href="4-act.html">act</a></li><li class="progresssection"><a href="4-as.html">as</a></li><li class="progresssection"><a href="4-av.html">av</a></li><li class="progresssection"><a href="4-ann.html">ann</a></li><li class="progresssection"><a href="4-anl.html">anl</a></li><li class="progresssection"><a href="4-ap2.html">ap2</a></li><li class="progresssection"><a href="4-apc.html">apc</a></li><li class="progresssection"><a href="4-gng.html">gng</a></li><li class="progresssection"><a href="4-pap.html">pap</a></li><li class="progresssection"><a href="4-nap.html">nap</a></li><li class="progresschapter"><a href="5-pp.html">5</a></li><li class="progressnext"><a href="4-act.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="4-ap.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-im.html">1</a></li><li class="progresschapter"><a href="2-bd.html">2</a></li><li class="progresschapter"><a href="3-sm.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresssection"><a href="4-ap.html">ap</a></li><li class="progresscurrent">anaa</li><li class="progresssection"><a href="4-ak.html">ak</a></li><li class="progresssection"><a href="4-ac.html">ac</a></li><li class="progresssection"><a href="4-act.html">act</a></li><li class="progresssection"><a href="4-as.html">as</a></li><li class="progresssection"><a href="4-av.html">av</a></li><li class="progresssection"><a href="4-ann.html">ann</a></li><li class="progresssection"><a href="4-anl.html">anl</a></li><li class="progresssection"><a href="4-ap2.html">ap2</a></li><li class="progresssection"><a href="4-ea.html">ea</a></li><li class="progresssection"><a href="4-apc.html">apc</a></li><li class="progresssection"><a href="4-gng.html">gng</a></li><li class="progresssection"><a href="4-pap.html">pap</a></li><li class="progresssection"><a href="4-nap.html">nap</a></li><li class="progresschapter"><a href="5-pp.html">5</a></li><li class="progressnext"><a href="4-ak.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -183,12 +183,12 @@ is removed.
</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">ActionNameLists::mark_for_deletion</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">ActionNameLists::mark_for_deletion</span></span>:<br/>Parse Action Patterns - <a href="4-pap.html#SP23_5">&#167;23.5</a>, <a href="4-pap.html#SP23_5_6">&#167;23.5.6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">anl_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">X</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ActionNameLists::mark_for_deletion</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">ActionNameLists::mark_for_deletion</span></span>:<br/>Parse Action Patterns - <a href="4-pap.html#SP24_5">&#167;24.5</a>, <a href="4-pap.html#SP24_5_6">&#167;24.5.6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">anl_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">X</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">X</span><span class="plain-syntax">) </span><span class="identifier-syntax">X</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">marked_for_deletion</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">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"tried to mark null entry for deletion"</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">ActionNameLists::marked_for_deletion</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">ActionNameLists::marked_for_deletion</span></span>:<br/>Parse Action Patterns - <a href="4-pap.html#SP23_5_6">&#167;23.5.6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">anl_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">X</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ActionNameLists::marked_for_deletion</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">ActionNameLists::marked_for_deletion</span></span>:<br/>Parse Action Patterns - <a href="4-pap.html#SP24_5_6">&#167;24.5.6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">anl_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">X</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">X</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">X</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">marked_for_deletion</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>
@ -198,7 +198,7 @@ entries which fail to change the word position.
</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">ActionNameLists::remove_entries_marked_for_deletion</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">ActionNameLists::remove_entries_marked_for_deletion</span></span>:<br/>Parse Action Patterns - <a href="4-pap.html#SP23_5_7">&#167;23.5.7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">list</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ActionNameLists::remove_entries_marked_for_deletion</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">ActionNameLists::remove_entries_marked_for_deletion</span></span>:<br/>Parse Action Patterns - <a href="4-pap.html#SP24_5_7">&#167;24.5.7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">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">list</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">pos</span><span class="plain-syntax"> = -1;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">anl_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">entry</span><span class="plain-syntax"> = </span><span class="identifier-syntax">list</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">entries</span><span class="plain-syntax">, *</span><span class="identifier-syntax">prev</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="identifier-syntax">entry</span><span class="plain-syntax">; </span><span class="identifier-syntax">entry</span><span class="plain-syntax"> = </span><span class="identifier-syntax">entry</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next_entry</span><span class="plain-syntax">) {</span>
@ -325,7 +325,7 @@ anything" &mdash; a completely unrestricted action.
<span class="plain-syntax"> </span><span class="identifier-syntax">entry</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">item</span><span class="plain-syntax">.</span><span class="element-syntax">nap_listed</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">anl_item</span><span class="plain-syntax"> *</span><span class="function-syntax">ActionNameLists::first_item</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">ActionNameLists::first_item</span></span>:<br/><a href="4-anl.html#SP14">&#167;14</a><br/>Action Patterns - <a href="4-ap2.html#SP3">&#167;3</a><br/>Parse Action Patterns - <a href="4-pap.html#SP23_1">&#167;23.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">list</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">anl_item</span><span class="plain-syntax"> *</span><span class="function-syntax">ActionNameLists::first_item</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">ActionNameLists::first_item</span></span>:<br/><a href="4-anl.html#SP14">&#167;14</a><br/>Action Patterns - <a href="4-ap2.html#SP3">&#167;3</a><br/>Parse Action Patterns - <a href="4-pap.html#SP24_1">&#167;24.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">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">list</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">list</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">entries</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> &amp;(</span><span class="identifier-syntax">list</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">entries</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">item</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>
<span class="plain-syntax">}</span>
@ -361,12 +361,12 @@ used in sorting algorithms.
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">k</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">named_action_pattern</span><span class="plain-syntax"> *</span><span class="function-syntax">ActionNameLists::nap</span><button class="popup" onclick="togglePopup('usagePopup19')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup19">Usage of <span class="code-font"><span class="function-syntax">ActionNameLists::nap</span></span>:<br/>Parse Action Patterns - <a href="4-pap.html#SP23_6">&#167;23.6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">anl_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">entry</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">named_action_pattern</span><span class="plain-syntax"> *</span><span class="function-syntax">ActionNameLists::nap</span><button class="popup" onclick="togglePopup('usagePopup19')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup19">Usage of <span class="code-font"><span class="function-syntax">ActionNameLists::nap</span></span>:<br/>Parse Action Patterns - <a href="4-pap.html#SP24_6">&#167;24.6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">anl_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">entry</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">entry</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">entry</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">item</span><span class="plain-syntax">.</span><span class="element-syntax">nap_listed</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>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="function-syntax">ActionNameLists::action</span><button class="popup" onclick="togglePopup('usagePopup20')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup20">Usage of <span class="code-font"><span class="function-syntax">ActionNameLists::action</span></span>:<br/>Parse Action Patterns - <a href="4-pap.html#SP23_5_4">&#167;23.5.4</a>, <a href="4-pap.html#SP23_5_5">&#167;23.5.5</a>, <a href="4-pap.html#SP23_5_6">&#167;23.5.6</a>, <a href="4-pap.html#SP23_6">&#167;23.6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">anl_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">entry</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="function-syntax">ActionNameLists::action</span><button class="popup" onclick="togglePopup('usagePopup20')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup20">Usage of <span class="code-font"><span class="function-syntax">ActionNameLists::action</span></span>:<br/>Parse Action Patterns - <a href="4-pap.html#SP24_5_4">&#167;24.5.4</a>, <a href="4-pap.html#SP24_5_5">&#167;24.5.5</a>, <a href="4-pap.html#SP24_5_6">&#167;24.5.6</a>, <a href="4-pap.html#SP24_6">&#167;24.6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">anl_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">entry</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">entry</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">entry</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">item</span><span class="plain-syntax">.</span><span class="element-syntax">action_listed</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>
<span class="plain-syntax">}</span>
@ -424,17 +424,17 @@ the text leading to a list:
<span class="plain-syntax"> </span><span class="identifier-syntax">entry</span><span class="plain-syntax">-&gt;</span><span class="reserved-syntax">parsing_data</span><span class="plain-syntax">.</span><span class="element-syntax">abbreviation_level</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ActionNameLists::parc</span><button class="popup" onclick="togglePopup('usagePopup24')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup24">Usage of <span class="code-font"><span class="function-syntax">ActionNameLists::parc</span></span>:<br/>Parse Action Patterns - <a href="4-pap.html#SP23_5">&#167;23.5</a>, <a href="4-pap.html#SP23_5_1">&#167;23.5.1</a>, <a href="4-pap.html#SP23_6">&#167;23.6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">anl_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">entry</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ActionNameLists::parc</span><button class="popup" onclick="togglePopup('usagePopup24')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup24">Usage of <span class="code-font"><span class="function-syntax">ActionNameLists::parc</span></span>:<br/>Parse Action Patterns - <a href="4-pap.html#SP24_5">&#167;24.5</a>, <a href="4-pap.html#SP24_5_1">&#167;24.5.1</a>, <a href="4-pap.html#SP24_6">&#167;24.6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">anl_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">entry</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">entry</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">entry</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parsing_data</span><span class="plain-syntax">.</span><span class="element-syntax">parc</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="function-syntax">ActionNameLists::par</span><button class="popup" onclick="togglePopup('usagePopup25')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup25">Usage of <span class="code-font"><span class="function-syntax">ActionNameLists::par</span></span>:<br/>Parse Action Patterns - <a href="4-pap.html#SP23_5_4">&#167;23.5.4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">anl_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">entry</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="function-syntax">ActionNameLists::par</span><button class="popup" onclick="togglePopup('usagePopup25')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup25">Usage of <span class="code-font"><span class="function-syntax">ActionNameLists::par</span></span>:<br/>Parse Action Patterns - <a href="4-pap.html#SP24_5_4">&#167;24.5.4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">anl_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">entry</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">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">entry</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">entry</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parsing_data</span><span class="plain-syntax">.</span><span class="element-syntax">parc</span><span class="plain-syntax"> &gt; </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="identifier-syntax">entry</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parsing_data</span><span class="plain-syntax">.</span><span class="element-syntax">parameter</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">EMPTY_WORDING</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="function-syntax">ActionNameLists::in_clause</span><button class="popup" onclick="togglePopup('usagePopup26')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup26">Usage of <span class="code-font"><span class="function-syntax">ActionNameLists::in_clause</span></span>:<br/>Parse Action Patterns - <a href="4-pap.html#SP23_5_4">&#167;23.5.4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">anl_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">entry</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="function-syntax">ActionNameLists::in_clause</span><button class="popup" onclick="togglePopup('usagePopup26')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup26">Usage of <span class="code-font"><span class="function-syntax">ActionNameLists::in_clause</span></span>:<br/>Parse Action Patterns - <a href="4-pap.html#SP24_5_4">&#167;24.5.4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">anl_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">entry</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">entry</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">entry</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parsing_data</span><span class="plain-syntax">.</span><span class="element-syntax">in_clause</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">EMPTY_WORDING</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
@ -453,17 +453,17 @@ the text leading to a list:
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">entry</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">ActionNameLists::first_position</span><button class="popup" onclick="togglePopup('usagePopup29')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup29">Usage of <span class="code-font"><span class="function-syntax">ActionNameLists::first_position</span></span>:<br/>Parse Action Patterns - <a href="4-pap.html#SP23_5">&#167;23.5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">list</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ActionNameLists::first_position</span><button class="popup" onclick="togglePopup('usagePopup29')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup29">Usage of <span class="code-font"><span class="function-syntax">ActionNameLists::first_position</span></span>:<br/>Parse Action Patterns - <a href="4-pap.html#SP24_5">&#167;24.5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">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">list</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="4-anl.html#SP13" class="function-link"><span class="function-syntax">ActionNameLists::word_position</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">list</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">entries</span><span class="plain-syntax">);</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">int</span><span class="plain-syntax"> </span><span class="function-syntax">ActionNameLists::word_position</span><button class="popup" onclick="togglePopup('usagePopup30')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup30">Usage of <span class="code-font"><span class="function-syntax">ActionNameLists::word_position</span></span>:<br/>Parse Action Patterns - <a href="4-pap.html#SP23_5">&#167;23.5</a>, <a href="4-pap.html#SP23_5_1_1">&#167;23.5.1.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">anl_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">entry</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ActionNameLists::word_position</span><button class="popup" onclick="togglePopup('usagePopup30')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup30">Usage of <span class="code-font"><span class="function-syntax">ActionNameLists::word_position</span></span>:<br/>Parse Action Patterns - <a href="4-pap.html#SP24_5">&#167;24.5</a>, <a href="4-pap.html#SP24_5_1_1">&#167;24.5.1.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">anl_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">entry</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">entry</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">entry</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parsing_data</span><span class="plain-syntax">.</span><span class="element-syntax">word_position</span><span class="plain-syntax">;</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">int</span><span class="plain-syntax"> </span><span class="function-syntax">ActionNameLists::same_word_position</span><button class="popup" onclick="togglePopup('usagePopup31')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup31">Usage of <span class="code-font"><span class="function-syntax">ActionNameLists::same_word_position</span></span>:<br/>Parse Action Patterns - <a href="4-pap.html#SP23_5_6">&#167;23.5.6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">anl_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">entry</span><span class="plain-syntax">, </span><span class="reserved-syntax">anl_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">Y</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ActionNameLists::same_word_position</span><button class="popup" onclick="togglePopup('usagePopup31')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup31">Usage of <span class="code-font"><span class="function-syntax">ActionNameLists::same_word_position</span></span>:<br/>Parse Action Patterns - <a href="4-pap.html#SP24_5_6">&#167;24.5.6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">anl_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">entry</span><span class="plain-syntax">, </span><span class="reserved-syntax">anl_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">Y</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">entry</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">Y</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">entry</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parsing_data</span><span class="plain-syntax">.</span><span class="element-syntax">word_position</span><span class="plain-syntax"> == </span><span class="identifier-syntax">Y</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parsing_data</span><span class="plain-syntax">.</span><span class="element-syntax">word_position</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
@ -487,7 +487,7 @@ not a NAP.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="function-syntax">ActionNameLists::get_the_one_true_action</span><button class="popup" onclick="togglePopup('usagePopup33')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup33">Usage of <span class="code-font"><span class="function-syntax">ActionNameLists::get_the_one_true_action</span></span>:<br/>Action Patterns - <a href="4-ap2.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">list</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="function-syntax">ActionNameLists::get_the_one_true_action</span><button class="popup" onclick="togglePopup('usagePopup33')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup33">Usage of <span class="code-font"><span class="function-syntax">ActionNameLists::get_the_one_true_action</span></span>:<br/>Explicit Actions - <a href="4-ea.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">list</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax"> = </span><a href="4-anl.html#SP14" class="function-link"><span class="function-syntax">ActionNameLists::single_positive_action</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">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">an</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">"Singleton ANL points to null AN"</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">an</span><span class="plain-syntax">;</span>
@ -505,7 +505,7 @@ is no best action. (For example, in "throwing or removing something".)
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="function-syntax">ActionNameLists::get_best_action</span><button class="popup" onclick="togglePopup('usagePopup34')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup34">Usage of <span class="code-font"><span class="function-syntax">ActionNameLists::get_best_action</span></span>:<br/>Parse Action Patterns - <a href="4-pap.html#SP23_3">&#167;23.3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">list</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="function-syntax">ActionNameLists::get_best_action</span><button class="popup" onclick="togglePopup('usagePopup34')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup34">Usage of <span class="code-font"><span class="function-syntax">ActionNameLists::get_best_action</span></span>:<br/>Parse Action Patterns - <a href="4-pap.html#SP24_3">&#167;24.3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">list</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">posn</span><span class="plain-syntax"> = -1, </span><span class="identifier-syntax">best_score</span><span class="plain-syntax"> = -1;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">best</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">if</span><span class="plain-syntax"> (</span><a href="4-anl.html#SP2" class="function-link"><span class="function-syntax">ActionNameLists::positive</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">list</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</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>
@ -616,7 +616,7 @@ something other than something &mdash; or <span class="extract"><span class="ext
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">anl_parsing_tense</span><span class="plain-syntax"> = </span><span class="identifier-syntax">IS_TENSE</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">action_name_list</span><span class="plain-syntax"> *</span><span class="function-syntax">ActionNameLists::parse</span><button class="popup" onclick="togglePopup('usagePopup38')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup38">Usage of <span class="code-font"><span class="function-syntax">ActionNameLists::parse</span></span>:<br/>Parse Action Patterns - <a href="4-pap.html#SP20">&#167;20</a>, <a href="4-pap.html#SP23_3">&#167;23.3</a>, <a href="4-pap.html#SP23_4">&#167;23.4</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">tense</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sense</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">action_name_list</span><span class="plain-syntax"> *</span><span class="function-syntax">ActionNameLists::parse</span><button class="popup" onclick="togglePopup('usagePopup38')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup38">Usage of <span class="code-font"><span class="function-syntax">ActionNameLists::parse</span></span>:<br/>Parse Action Patterns - <a href="4-pap.html#SP21">&#167;21</a>, <a href="4-pap.html#SP24_3">&#167;24.3</a>, <a href="4-pap.html#SP24_4">&#167;24.4</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">tense</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sense</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">Wordings::mismatched_brackets</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</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">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">t</span><span class="plain-syntax"> = </span><span class="identifier-syntax">anl_parsing_tense</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">anl_parsing_tense</span><span class="plain-syntax"> = </span><span class="identifier-syntax">tense</span><span class="plain-syntax">;</span>
@ -905,7 +905,7 @@ the trial entry for future trials.
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-anl.html#SP24_1_3">&#167;24.1.3</a> (three times).</li></ul>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="4-ann.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-im.html">1</a></li><li class="progresschapter"><a href="2-bd.html">2</a></li><li class="progresschapter"><a href="3-sm.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresssection"><a href="4-ap.html">ap</a></li><li class="progresssection"><a href="4-anaa.html">anaa</a></li><li class="progresssection"><a href="4-act.html">act</a></li><li class="progresssection"><a href="4-as.html">as</a></li><li class="progresssection"><a href="4-av.html">av</a></li><li class="progresssection"><a href="4-ann.html">ann</a></li><li class="progresscurrent">anl</li><li class="progresssection"><a href="4-ap2.html">ap2</a></li><li class="progresssection"><a href="4-apc.html">apc</a></li><li class="progresssection"><a href="4-gng.html">gng</a></li><li class="progresssection"><a href="4-pap.html">pap</a></li><li class="progresssection"><a href="4-nap.html">nap</a></li><li class="progresschapter"><a href="5-pp.html">5</a></li><li class="progressnext"><a href="4-ap2.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="4-ann.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-im.html">1</a></li><li class="progresschapter"><a href="2-bd.html">2</a></li><li class="progresschapter"><a href="3-sm.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresssection"><a href="4-ap.html">ap</a></li><li class="progresssection"><a href="4-anaa.html">anaa</a></li><li class="progresssection"><a href="4-ak.html">ak</a></li><li class="progresssection"><a href="4-ac.html">ac</a></li><li class="progresssection"><a href="4-act.html">act</a></li><li class="progresssection"><a href="4-as.html">as</a></li><li class="progresssection"><a href="4-av.html">av</a></li><li class="progresssection"><a href="4-ann.html">ann</a></li><li class="progresscurrent">anl</li><li class="progresssection"><a href="4-ap2.html">ap2</a></li><li class="progresssection"><a href="4-ea.html">ea</a></li><li class="progresssection"><a href="4-apc.html">apc</a></li><li class="progresssection"><a href="4-gng.html">gng</a></li><li class="progresssection"><a href="4-pap.html">pap</a></li><li class="progresssection"><a href="4-nap.html">nap</a></li><li class="progresschapter"><a href="5-pp.html">5</a></li><li class="progressnext"><a href="4-ap2.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -111,7 +111,7 @@ action".
<span class="plain-syntax"> </span><span class="identifier-syntax">WordAssemblages::from_wording</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">AW</span><span class="plain-syntax"> = </span><span class="identifier-syntax">WordAssemblages::to_wording</span><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">wa</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">an</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">naming_data</span><span class="plain-syntax">.</span><span class="element-syntax">as_noun</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Nouns::new_proper_noun</span><span class="plain-syntax">(</span><span class="identifier-syntax">AW</span><span class="plain-syntax">, </span><span class="identifier-syntax">NEUTER_GENDER</span><span class="plain-syntax">, </span><span class="identifier-syntax">ADD_TO_LEXICON_NTOPT</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">MISCELLANEOUS_MC</span><span class="plain-syntax">, </span><span class="identifier-syntax">Rvalues::from_action_name</span><span class="plain-syntax">(</span><span class="identifier-syntax">an</span><span class="plain-syntax">), </span><span class="identifier-syntax">Task::language_of_syntax</span><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">MISCELLANEOUS_MC</span><span class="plain-syntax">, </span><a href="4-ak.html#SP5" class="function-link"><span class="function-syntax">ARvalues::from_action_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">an</span><span class="plain-syntax">), </span><span class="identifier-syntax">Task::language_of_syntax</span><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Vocabulary::set_flags</span><span class="plain-syntax">(</span><span class="identifier-syntax">Lexer::word</span><span class="plain-syntax">(</span><span class="identifier-syntax">Wordings::first_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">)), </span><span class="identifier-syntax">ACTION_PARTICIPLE_MC</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an2</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER</span><span class="plain-syntax">(</span><span class="identifier-syntax">an2</span><span class="plain-syntax">, </span><span class="reserved-syntax">action_name</span><span class="plain-syntax">)</span>
@ -120,7 +120,7 @@ action".
<span class="plain-syntax"> </span><span class="identifier-syntax">an</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">naming_data</span><span class="plain-syntax">.</span><span class="element-syntax">it_optional</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">an2</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">naming_data</span><span class="plain-syntax">.</span><span class="identifier-syntax">it_optional</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><a href="4-ap.html#SP8" class="function-link"><span class="function-syntax">ActionsPlugin::notice_new_action_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">an</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="4-ap.html#SP4" class="function-link"><span class="function-syntax">ActionsPlugin::notice_new_action_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">an</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. </b>In the early days of Inform, past participles had to be set explicitly, and
@ -129,7 +129,7 @@ enough that this is almost never used.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ActionNameNames::set_irregular_past</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">ActionNameNames::set_irregular_past</span></span>:<br/>Actions Plugin - <a href="4-ap.html#SP13_3">&#167;13.3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">C</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ActionNameNames::set_irregular_past</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">ActionNameNames::set_irregular_past</span></span>:<br/>Actions Plugin - <a href="4-ap.html#SP9_3">&#167;9.3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">C</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">Wordings::length</span><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">) != </span><span class="constant-syntax">1</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="plain-syntax"> </span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_MultiwordPastParticiple</span><span class="plain-syntax">),</span>
@ -148,7 +148,7 @@ enough that this is almost never used.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="function-syntax">ActionNameNames::tensed</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">ActionNameNames::tensed</span></span>:<br/><a href="4-ann.html#SP10">&#167;10</a>, <a href="4-ann.html#SP11">&#167;11</a>, <a href="4-ann.html#SP13">&#167;13</a><br/>Actions Plugin - <a href="4-ap.html#SP8">&#167;8</a><br/>Actions-Only Nodes and Annotations - <a href="4-anaa.html#SP3">&#167;3</a><br/>Actions - <a href="4-act.html#SP3">&#167;3</a><br/>Action Semantics - <a href="4-as.html#SP6_1">&#167;6.1</a><br/>Action Name Lists - <a href="4-anl.html#SP17">&#167;17</a>, <a href="4-anl.html#SP24_1_2">&#167;24.1.2</a><br/>Going - <a href="4-gng.html#SP2">&#167;2</a><br/>Grammar Lines - <a href="5-gl.html#SP21">&#167;21</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">tense</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="function-syntax">ActionNameNames::tensed</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">ActionNameNames::tensed</span></span>:<br/><a href="4-ann.html#SP10">&#167;10</a>, <a href="4-ann.html#SP11">&#167;11</a>, <a href="4-ann.html#SP13">&#167;13</a><br/>Actions Plugin - <a href="4-ap.html#SP4">&#167;4</a><br/>Actions-Only Nodes and Annotations - <a href="4-anaa.html#SP5">&#167;5</a><br/>Actions - <a href="4-act.html#SP3">&#167;3</a><br/>Action Semantics - <a href="4-as.html#SP6_1">&#167;6.1</a><br/>Action Name Lists - <a href="4-anl.html#SP17">&#167;17</a>, <a href="4-anl.html#SP24_1_2">&#167;24.1.2</a><br/>Going - <a href="4-gng.html#SP2">&#167;2</a><br/>Grammar Lines - <a href="5-gl.html#SP21">&#167;21</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">tense</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">tense</span><span class="plain-syntax"> == </span><span class="identifier-syntax">IS_TENSE</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">an</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">naming_data</span><span class="plain-syntax">.</span><span class="element-syntax">present_name</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">tense</span><span class="plain-syntax"> == </span><span class="identifier-syntax">HASBEEN_TENSE</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">an</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">naming_data</span><span class="plain-syntax">.</span><span class="element-syntax">past_name</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"action tense unsupported"</span><span class="plain-syntax">);</span>
@ -215,7 +215,7 @@ preposition can be abbreviated is under the author's control:
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">an</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">naming_data</span><span class="plain-syntax">.</span><span class="element-syntax">it_optional</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ActionNameNames::make_abbreviable</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">ActionNameNames::make_abbreviable</span></span>:<br/>Actions Plugin - <a href="4-ap.html#SP13_2">&#167;13.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ActionNameNames::make_abbreviable</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">ActionNameNames::make_abbreviable</span></span>:<br/>Actions Plugin - <a href="4-ap.html#SP9_2">&#167;9.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">an</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">naming_data</span><span class="plain-syntax">.</span><span class="element-syntax">abbreviable</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
@ -304,7 +304,7 @@ number of words.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="function-syntax">ActionNameNames::longest_nounless</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">ActionNameNames::longest_nounless</span></span>:<br/>Parse Action Patterns - <a href="4-pap.html#SP23_3">&#167;23.3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">tense</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> *</span><span class="identifier-syntax">posn</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="function-syntax">ActionNameNames::longest_nounless</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">ActionNameNames::longest_nounless</span></span>:<br/>Parse Action Patterns - <a href="4-pap.html#SP24_3">&#167;24.3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">tense</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> *</span><span class="identifier-syntax">posn</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER</span><span class="plain-syntax">(</span><span class="identifier-syntax">an</span><span class="plain-syntax">, </span><span class="reserved-syntax">action_name</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-as.html#SP5" class="function-link"><span class="function-syntax">ActionSemantics::can_have_noun</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">an</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) {</span>
@ -318,7 +318,7 @@ number of words.
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="4-av.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-im.html">1</a></li><li class="progresschapter"><a href="2-bd.html">2</a></li><li class="progresschapter"><a href="3-sm.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresssection"><a href="4-ap.html">ap</a></li><li class="progresssection"><a href="4-anaa.html">anaa</a></li><li class="progresssection"><a href="4-act.html">act</a></li><li class="progresssection"><a href="4-as.html">as</a></li><li class="progresssection"><a href="4-av.html">av</a></li><li class="progresscurrent">ann</li><li class="progresssection"><a href="4-anl.html">anl</a></li><li class="progresssection"><a href="4-ap2.html">ap2</a></li><li class="progresssection"><a href="4-apc.html">apc</a></li><li class="progresssection"><a href="4-gng.html">gng</a></li><li class="progresssection"><a href="4-pap.html">pap</a></li><li class="progresssection"><a href="4-nap.html">nap</a></li><li class="progresschapter"><a href="5-pp.html">5</a></li><li class="progressnext"><a href="4-anl.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="4-av.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-im.html">1</a></li><li class="progresschapter"><a href="2-bd.html">2</a></li><li class="progresschapter"><a href="3-sm.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresssection"><a href="4-ap.html">ap</a></li><li class="progresssection"><a href="4-anaa.html">anaa</a></li><li class="progresssection"><a href="4-ak.html">ak</a></li><li class="progresssection"><a href="4-ac.html">ac</a></li><li class="progresssection"><a href="4-act.html">act</a></li><li class="progresssection"><a href="4-as.html">as</a></li><li class="progresssection"><a href="4-av.html">av</a></li><li class="progresscurrent">ann</li><li class="progresssection"><a href="4-anl.html">anl</a></li><li class="progresssection"><a href="4-ap2.html">ap2</a></li><li class="progresssection"><a href="4-ea.html">ea</a></li><li class="progresssection"><a href="4-apc.html">apc</a></li><li class="progresssection"><a href="4-gng.html">gng</a></li><li class="progresssection"><a href="4-pap.html">pap</a></li><li class="progresssection"><a href="4-nap.html">nap</a></li><li class="progresschapter"><a href="5-pp.html">5</a></li><li class="progressnext"><a href="4-anl.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -77,16 +77,42 @@ function togglePopup(material_id) {
entire chapter. The test group <span class="extract"><span class="extract-syntax">:actions</span></span> may be helpful in trouble-shooting here.
</p>
<p class="commentary">It may be helpful to distinguish these ideas right from the outset:
</p>
<ul class="items"><li>&#9679; An "action" (or "explicit action", for the sake of clarity) is a specific
impulse by a person in the model world to effect some change within it: for
example, "Henry taking the brick". Here Henry is the "actor", and the brick is
"the noun". Actions can be "stored" so that they are values in their own
right; thus, a variable could be set to the value "Henry taking the brick",
and this would have kind <span class="extract"><span class="extract-syntax">K_stored_action</span></span>. Inside the compiler they are
represented by <a href="4-ea.html#SP1" class="internal">explicit_action</a> objects.
</li><li>&#9679; An "action name" &mdash; not an ideal thing to call it, but traditional &mdash; is the
type of action involved, taken in isolation: for example, "taking". These can
also be values at run-time, they have kind <span class="extract"><span class="extract-syntax">K_action_name</span></span>, and they are
represented in the comoiler by <a href="4-act.html#SP1" class="internal">action_name</a> objections.
</li><li>&#9679; An "action pattern" is a textual description which matches some actions but
not others, and can be vague or specific: for example, "wearing or examining
something". Action patterns become values of the kind <span class="extract"><span class="extract-syntax">K_description_of_action</span></span>.
They can also be aggregated into "named action patterns", which characterise
behaviour; see <a href="4-ap2.html#SP1" class="internal">action_pattern</a> and <a href="4-nap.html#SP1" class="internal">named_action_pattern</a>.
</li><li>&#9679; A "past action pattern", which can never in any way be a value, is a
description of an action which have happened in the past: for example, "dropped
the hat". These are just a special case of action patterns.
</li></ul>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ActionsPlugin::start</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">ActionsPlugin::start</span></span>:<br/>IF Module - <a href="1-im.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="4-anaa.html#SP2" class="function-link"><span class="function-syntax">ActionsNodes::nodes_and_annotations</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">MAKE_SPECIAL_MEANINGS_PLUG</span><span class="plain-syntax">, </span><a href="4-ap.html#SP10" class="function-link"><span class="function-syntax">ActionsPlugin::make_special_meanings</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_BASE_KIND_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="4-ap.html#SP4" class="function-link"><span class="function-syntax">ActionsPlugin::new_base_kind_notify</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">MAKE_SPECIAL_MEANINGS_PLUG</span><span class="plain-syntax">, </span><a href="4-ap.html#SP6" class="function-link"><span class="function-syntax">ActionsPlugin::make_special_meanings</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_BASE_KIND_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="4-ak.html#SP3" class="function-link"><span class="function-syntax">ARvalues::new_base_kind_notify</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">COMPARE_CONSTANT_PLUG</span><span class="plain-syntax">, </span><a href="4-ak.html#SP8" class="function-link"><span class="function-syntax">ARvalues::compare_CONSTANT</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">COMPILE_CONSTANT_PLUG</span><span class="plain-syntax">, </span><span class="identifier-syntax">RTActions::actions_compile_constant</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">CREATION_PLUG</span><span class="plain-syntax">, </span><a href="4-anaa.html#SP4" class="function-link"><span class="function-syntax">ActionsNodes::creation</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">UNUSUAL_PROPERTY_VALUE_PLUG</span><span class="plain-syntax">, </span><a href="4-anaa.html#SP4" class="function-link"><span class="function-syntax">ActionsNodes::unusual_property_value_node</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">OFFERED_PROPERTY_PLUG</span><span class="plain-syntax">, </span><a href="4-av.html#SP1" class="function-link"><span class="function-syntax">ActionVariables::actions_offered_property</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">OFFERED_SPECIFICATION_PLUG</span><span class="plain-syntax">, </span><a href="4-ap.html#SP9" class="function-link"><span class="function-syntax">ActionsPlugin::actions_offered_specification</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">TYPECHECK_EQUALITY_PLUG</span><span class="plain-syntax">, </span><a href="4-ap.html#SP5" class="function-link"><span class="function-syntax">ActionsPlugin::actions_typecheck_equality</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">OFFERED_SPECIFICATION_PLUG</span><span class="plain-syntax">, </span><a href="4-ap.html#SP5" class="function-link"><span class="function-syntax">ActionsPlugin::actions_offered_specification</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">TYPECHECK_EQUALITY_PLUG</span><span class="plain-syntax">, </span><a href="4-ak.html#SP4" class="function-link"><span class="function-syntax">ARvalues::actions_typecheck_equality</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">PRODUCTION_LINE_PLUG</span><span class="plain-syntax">, </span><a href="4-ap.html#SP1" class="function-link"><span class="function-syntax">ActionsPlugin::production_line</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Vocabulary::set_flags</span><span class="plain-syntax">(</span><span class="identifier-syntax">Vocabulary::entry_for_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">L</span><span class="string-syntax">"doing"</span><span class="plain-syntax">), </span><span class="identifier-syntax">ACTION_PARTICIPLE_MC</span><span class="plain-syntax">);</span>
@ -104,67 +130,7 @@ entire chapter. The test group <span class="extract"><span class="extract-syntax
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b>It may be useful to distinguish three ideas right from the outset:
</p>
<ul class="items"><li>&#9679; An "action" is a specific impulse by a person in the model world to effect
some change within it: for example, "Henry taking the brick". Here Henry is the
"actor", and the brick is "the noun". Actions can be "stored" so that they
are values in their own right; thus, a variable could be set to the value
"Henry taking the brick", and this would have kind <span class="extract"><span class="extract-syntax">K_stored_action</span></span>.
</li><li>&#9679; An "action name" &mdash; not an ideal thing to call it, but traditional &mdash; is the
type of action involved, taken in isolation: for example, "taking". These can
also be values at run-time, and have kind <span class="extract"><span class="extract-syntax">K_action_name</span></span>.
</li><li>&#9679; An "action pattern" is a textual description which matches some actions but
not others, and can be vague or specific: for example, "wearing or examining
something". Action patterns are in general not values, but names can be given
to them so that they are &mdash; see <a href="4-nap.html" class="internal">Named Action Patterns</a> &mdash; and then they
have the kind <span class="extract"><span class="extract-syntax">K_description_of_action</span></span>.
</li><li>&#9679; A "past action pattern", which can never in any way be a value, is a
description of an action which have happened in the past: for example, "dropped
the hat".
</li></ul>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K_action_name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K_stored_action</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K_description_of_action</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
</pre>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b>These are created by a Neptune file inside <a href="../WorldModelKit/index.html" class="internal">WorldModelKit</a>, and are
recognised by their Inter identifiers:
</p>
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ActionsPlugin::new_base_kind_notify</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">ActionsPlugin::new_base_kind_notify</span></span>:<br/><a href="4-ap.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">new_base</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq_wide_string</span><span class="plain-syntax">(</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"ACTION_NAME_TY"</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">K_action_name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">new_base</span><span class="plain-syntax">; </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq_wide_string</span><span class="plain-syntax">(</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"DESCRIPTION_OF_ACTION_TY"</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">K_description_of_action</span><span class="plain-syntax"> = </span><span class="identifier-syntax">new_base</span><span class="plain-syntax">; </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq_wide_string</span><span class="plain-syntax">(</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"STORED_ACTION_TY"</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">K_stored_action</span><span class="plain-syntax"> = </span><span class="identifier-syntax">new_base</span><span class="plain-syntax">; </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><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>
</pre>
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>&#167;5. </b>A stored action can always be compared to a gerund: for instance,
</p>
<blockquote>
<p>if the current action is taking something...</p>
</blockquote>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ActionsPlugin::actions_typecheck_equality</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">ActionsPlugin::actions_typecheck_equality</span></span>:<br/><a href="4-ap.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K1</span><span class="plain-syntax">, </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K2</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::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">K1</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_stored_action</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">K2</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_description_of_action</span><span class="plain-syntax">)))</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="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>
</pre>
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>&#167;6. </b>Though <span class="extract"><span class="extract-syntax">K_action_name</span></span> is very like an enumeration kind, its possible values,
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b>Though <span class="extract"><span class="extract-syntax">K_action_name</span></span> is very like an enumeration kind, its possible values,
which correspond to <a href="4-act.html#SP1" class="internal">action_name</a> objects, are not strictly speaking instances
in the Inform world model. (Because they do not have properties: see <a href="4-av.html" class="internal">Action Variables</a>
for what they have instead.)
@ -177,7 +143,7 @@ for what they have instead.)
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">waiting_action</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
</pre>
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>&#167;7. </b>These are recognised by their English names when defined by the Standard Rules.
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b>These are recognised by their English names when defined by the Standard Rules.
(So there is no need to translate this to other languages.)
</p>
@ -186,13 +152,13 @@ for what they have instead.)
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">waiting</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>
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>&#167;8. </b>Because <a href="4-act.html#SP1" class="internal">action_name</a> values are not instances, we cannot recognise them
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. </b>Because <a href="4-act.html#SP1" class="internal">action_name</a> values are not instances, we cannot recognise them
when instances are created, and instead have to do it directly when this is
called by the function creating them:
</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">ActionsPlugin::notice_new_action_name</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">ActionsPlugin::notice_new_action_name</span></span>:<br/>Action Name Names - <a href="4-ann.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ActionsPlugin::notice_new_action_name</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">ActionsPlugin::notice_new_action_name</span></span>:<br/>Action Name Names - <a href="4-ann.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="function-syntax">&lt;waiting-action&gt;</span><span class="plain-syntax">(</span><a href="4-ann.html#SP5" class="function-link"><span class="function-syntax">ActionNameNames::tensed</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">an</span><span class="plain-syntax">, </span><span class="identifier-syntax">IS_TENSE</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">waiting_action</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">waiting_action</span><span class="plain-syntax"> = </span><span class="identifier-syntax">an</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
@ -204,21 +170,21 @@ called by the function creating them:
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">waiting_action</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>&#167;9. </b>And because <span class="extract"><span class="extract-syntax">K_action_name</span></span> values have no properties, they cannot store
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>&#167;5. </b>And because <span class="extract"><span class="extract-syntax">K_action_name</span></span> values have no properties, they cannot store
a "specification" text as one, and have to make their own arrangements:
</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">ActionsPlugin::actions_offered_specification</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">ActionsPlugin::actions_offered_specification</span></span>:<br/><a href="4-ap.html#SP1">&#167;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">owner</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ActionsPlugin::actions_offered_specification</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">ActionsPlugin::actions_offered_specification</span></span>:<br/><a href="4-ap.html#SP1">&#167;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">owner</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Rvalues::is_CONSTANT_of_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">owner</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_action_name</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">IXActions::actions_set_specification_text</span><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Rvalues::to_action_name</span><span class="plain-syntax">(</span><span class="identifier-syntax">owner</span><span class="plain-syntax">), </span><span class="identifier-syntax">Wordings::first_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><a href="4-ak.html#SP5" class="function-link"><span class="function-syntax">ARvalues::to_action_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">owner</span><span class="plain-syntax">), </span><span class="identifier-syntax">Wordings::first_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><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>
</pre>
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>&#167;10. </b>The rest of this section is given over to the Preform grammar for dealing
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>&#167;6. </b>The rest of this section is given over to the Preform grammar for dealing
with the special meaning "X is an action...", which creates new action names.
These can be quite complicated:
</p>
@ -232,8 +198,8 @@ These can be quite complicated:
</blockquote>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ActionsPlugin::make_special_meanings</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">ActionsPlugin::make_special_meanings</span></span>:<br/><a href="4-ap.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">SpecialMeanings::declare</span><span class="plain-syntax">(</span><a href="4-ap.html#SP10" class="function-link"><span class="function-syntax">ActionsPlugin::new_action_SMF</span></a><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"new-action"</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">);</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ActionsPlugin::make_special_meanings</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">ActionsPlugin::make_special_meanings</span></span>:<br/><a href="4-ap.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">SpecialMeanings::declare</span><span class="plain-syntax">(</span><a href="4-ap.html#SP6" class="function-link"><span class="function-syntax">ActionsPlugin::new_action_SMF</span></a><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"new-action"</span><span class="plain-syntax">, </span><span class="constant-syntax">2</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>
@ -242,13 +208,13 @@ These can be quite complicated:
<span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">SW</span><span class="plain-syntax"> = (</span><span class="identifier-syntax">NPs</span><span class="plain-syntax">)?(</span><span class="identifier-syntax">NPs</span><span class="plain-syntax">[0]):</span><span class="identifier-syntax">EMPTY_WORDING</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">OW</span><span class="plain-syntax"> = (</span><span class="identifier-syntax">NPs</span><span class="plain-syntax">)?(</span><span class="identifier-syntax">NPs</span><span class="plain-syntax">[1]):</span><span class="identifier-syntax">EMPTY_WORDING</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">task</span><span class="plain-syntax">) { </span><span class="comment-syntax"> "Taking something is an action."</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">ACCEPT_SMFT:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-ap.html#SP10_1" class="named-paragraph-link"><span class="named-paragraph">Check that this validly declares an action</span><span class="named-paragraph-number">10.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">PASS_1_SMFT:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-ap.html#SP10_2" class="named-paragraph-link"><span class="named-paragraph">Parse the subject and object phrases</span><span class="named-paragraph-number">10.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">ACCEPT_SMFT:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-ap.html#SP6_1" class="named-paragraph-link"><span class="named-paragraph">Check that this validly declares an action</span><span class="named-paragraph-number">6.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">PASS_1_SMFT:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-ap.html#SP6_2" class="named-paragraph-link"><span class="named-paragraph">Parse the subject and object phrases</span><span class="named-paragraph-number">6.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="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>
</pre>
<p class="commentary firstcommentary"><a id="SP10_1" class="paragraph-anchor"></a><b>&#167;10.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Check that this validly declares an action</span><span class="named-paragraph-number">10.1</span></span><span class="comment-syntax"> =</span>
<p class="commentary firstcommentary"><a id="SP6_1" class="paragraph-anchor"></a><b>&#167;6.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Check that this validly declares an action</span><span class="named-paragraph-number">6.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -261,8 +227,8 @@ These can be quite complicated:
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-ap.html#SP10">&#167;10</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP11" class="paragraph-anchor"></a><b>&#167;11. </b>&lt;nounphrase-actionable&gt; here is an awkward necessity, designed to prevent the
<ul class="endnotetexts"><li>This code is used in <a href="4-ap.html#SP6">&#167;6</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>&#167;7. </b>&lt;nounphrase-actionable&gt; here is an awkward necessity, designed to prevent the
regular sentence "The impulse is an action name that varies" from being parsed
as an instance of "... is an action ...", creating a new action.
</p>
@ -274,7 +240,7 @@ as an instance of "... is an action ...", creating a new action.
<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-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#SP11_1" class="named-paragraph-link"><span class="named-paragraph">Issue PM_BadActionDeclaration problem</span><span class="named-paragraph-number">11.1</span></a></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#SP7_1" class="named-paragraph-link"><span class="named-paragraph">Issue PM_BadActionDeclaration problem</span><span class="named-paragraph-number">7.1</span></a></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-constant-syntax">^&lt;variable-creation-tail&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { 0, Diagrams::new_UNPARSED_NOUN(W) }</span>
@ -284,7 +250,7 @@ as an instance of "... is an action ...", creating a new action.
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">***</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">variable</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>
<p class="commentary firstcommentary"><a id="SP11_1" class="paragraph-anchor"></a><b>&#167;11.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_BadActionDeclaration problem</span><span class="named-paragraph-number">11.1</span></span><span class="Preform-comment-syntax"> =</span>
<p class="commentary firstcommentary"><a id="SP7_1" class="paragraph-anchor"></a><b>&#167;7.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_BadActionDeclaration problem</span><span class="named-paragraph-number">7.1</span></span><span class="Preform-comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -294,12 +260,12 @@ as an instance of "... is an action ...", creating a new action.
<span class="plain-syntax"> </span><span class="string-syntax">"is an action applying to one thing.'"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> ==&gt; { </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax"> };</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-ap.html#SP11">&#167;11</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP10_2" class="paragraph-anchor"></a><b>&#167;10.2. </b>Supposing that all that worked, the SP of the sentence is the name for the
<ul class="endnotetexts"><li>This code is used in <a href="4-ap.html#SP7">&#167;7</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6_2" class="paragraph-anchor"></a><b>&#167;6.2. </b>Supposing that all that worked, the SP of the sentence is the name for the
new action, and the OP can include a wide range of details about it.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Parse the subject and object phrases</span><span class="named-paragraph-number">10.2</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Parse the subject and object phrases</span><span class="named-paragraph-number">6.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -307,23 +273,23 @@ new action, and the OP can include a wide range of details about it.
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="function-syntax">&lt;action-sentence-subject&gt;(Node::get_text(V-&gt;</span><span class="element-syntax">next</span><span class="plain-syntax">))) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">an_being_parsed</span><span class="plain-syntax"> = </span><span class="function-syntax">&lt;&lt;rp&gt;&gt;</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">an_being_parsed</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">indexing_data</span><span class="plain-syntax">.</span><span class="identifier-syntax">designers_specification</span><span class="plain-syntax"> = </span><span class="identifier-syntax">V</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><a href="4-ap.html#SP14" class="function-link"><span class="function-syntax">ActionsPlugin::clear_clauses</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><a href="4-ap.html#SP10" class="function-link"><span class="function-syntax">ActionsPlugin::clear_clauses</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="function-syntax">&lt;action-sentence-object&gt;(Node::get_text(V-&gt;next-&gt;</span><span class="element-syntax">next</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-ap.html#SP10">&#167;10</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP12" class="paragraph-anchor"></a><b>&#167;12. </b>The subject noun phrase needs little further parsing &mdash; it's the name of the
<ul class="endnotetexts"><li>This code is used in <a href="4-ap.html#SP6">&#167;6</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>&#167;8. </b>The subject noun phrase needs little further parsing &mdash; it's the name of the
action-to-be. A successful match here causes the new <a href="4-act.html#SP1" class="internal">action_name</a> structure
to be created.
</p>
<pre class="Preform-displayed-code all-displayed-code code-font">
<span class="Preform-function-syntax">&lt;action-sentence-subject&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;action-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"> </span><span class="named-paragraph-container code-font"><a href="4-ap.html#SP12_1" class="named-paragraph-link"><span class="named-paragraph">Issue PM_ActionAlreadyExists problem</span><span class="named-paragraph-number">12.1</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;action-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"> </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_ActionAlreadyExists problem</span><span class="named-paragraph-number">8.1</span></a></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, PL::Actions::act_new(W) }</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>
<p class="commentary firstcommentary"><a id="SP12_1" class="paragraph-anchor"></a><b>&#167;12.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_ActionAlreadyExists problem</span><span class="named-paragraph-number">12.1</span></span><span class="Preform-comment-syntax"> =</span>
<p class="commentary firstcommentary"><a id="SP8_1" class="paragraph-anchor"></a><b>&#167;8.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_ActionAlreadyExists problem</span><span class="named-paragraph-number">8.1</span></span><span class="Preform-comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -338,8 +304,8 @@ to be created.
<span class="plain-syntax"> </span><span class="string-syntax">"('Understand \"unlock [something]\" as keyless unlocking.')."</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> ==&gt; { </span><span class="identifier-syntax">fail</span><span class="plain-syntax"> </span><span class="identifier-syntax">nonterminal</span><span class="plain-syntax"> };</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-ap.html#SP12">&#167;12</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP13" class="paragraph-anchor"></a><b>&#167;13. </b>The object NP is a sequence of "action clauses" which can occur in any order,
<ul class="endnotetexts"><li>This code is used in <a href="4-ap.html#SP8">&#167;8</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>&#167;9. </b>The object NP is a sequence of "action clauses" which can occur in any order,
which are allowed but not required to be delimited as a list, and which can
inconveniently contain the word "and"; not only that, but note that in
</p>
@ -354,7 +320,7 @@ inconveniently contain the word "and"; not only that, but note that in
<pre class="Preform-displayed-code all-displayed-code code-font">
<span class="Preform-function-syntax">&lt;action-sentence-object&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;action-clauses&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="4-ap.html#SP13_9" class="named-paragraph-link"><span class="named-paragraph">Issue PM_ActionClauseUnknown problem</span><span class="named-paragraph-number">13.9</span></a></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="4-ap.html#SP9_9" class="named-paragraph-link"><span class="named-paragraph">Issue PM_ActionClauseUnknown problem</span><span class="named-paragraph-number">9.9</span></a></span>
<span class="Preform-function-syntax">&lt;action-clauses&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>
@ -368,26 +334,26 @@ inconveniently contain the word "and"; not only that, but note that in
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;action-clause&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;action-clause&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">out</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">of</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">world</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"> { OOW_ACT_CLAUSE, - }; </span><span class="named-paragraph-container code-font"><a href="4-ap.html#SP13_1" class="named-paragraph-link"><span class="named-paragraph">Make out of world</span><span class="named-paragraph-number">13.1</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">abbreviable</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"> { ABBREV_ACT_CLAUSE, - }; </span><span class="named-paragraph-container code-font"><a href="4-ap.html#SP13_2" class="named-paragraph-link"><span class="named-paragraph">Make abbreviable</span><span class="named-paragraph-number">13.2</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-constant-syntax">past</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">participle</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"> { PP_ACT_CLAUSE, - }; </span><span class="named-paragraph-container code-font"><a href="4-ap.html#SP13_3" class="named-paragraph-link"><span class="named-paragraph">Give irregular participle</span><span class="named-paragraph-number">13.3</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">out</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">of</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">world</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"> { OOW_ACT_CLAUSE, - }; </span><span class="named-paragraph-container code-font"><a href="4-ap.html#SP9_1" class="named-paragraph-link"><span class="named-paragraph">Make out of world</span><span class="named-paragraph-number">9.1</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">abbreviable</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"> { ABBREV_ACT_CLAUSE, - }; </span><span class="named-paragraph-container code-font"><a href="4-ap.html#SP9_2" class="named-paragraph-link"><span class="named-paragraph">Make abbreviable</span><span class="named-paragraph-number">9.2</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-constant-syntax">past</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">participle</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"> { PP_ACT_CLAUSE, - }; </span><span class="named-paragraph-container code-font"><a href="4-ap.html#SP9_3" class="named-paragraph-link"><span class="named-paragraph">Give irregular participle</span><span class="named-paragraph-number">9.3</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">applying</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">to</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;action-applications&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"> { APPLYING_ACT_CLAUSE, - }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">requiring</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">light</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { LIGHT_ACT_CLAUSE, - }; </span><span class="named-paragraph-container code-font"><a href="4-ap.html#SP13_4" class="named-paragraph-link"><span class="named-paragraph">Require light</span><span class="named-paragraph-number">13.4</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">requiring</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">light</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { LIGHT_ACT_CLAUSE, - }; </span><span class="named-paragraph-container code-font"><a href="4-ap.html#SP9_4" class="named-paragraph-link"><span class="named-paragraph">Require light</span><span class="named-paragraph-number">9.4</span></a></span>
<span class="Preform-function-syntax">&lt;action-applications&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">nothing</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">one</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;act-req&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">and</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">one</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;act-req&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="4-ap.html#SP13_7" class="named-paragraph-link"><span class="named-paragraph">Set kind and access for two</span><span class="named-paragraph-number">13.7</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">one</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;act-req&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">and</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;act-req&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="4-ap.html#SP13_7" class="named-paragraph-link"><span class="named-paragraph">Set kind and access for two</span><span class="named-paragraph-number">13.7</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;act-req&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">and</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">one</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;act-req&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="4-ap.html#SP13_7" class="named-paragraph-link"><span class="named-paragraph">Set kind and access for two</span><span class="named-paragraph-number">13.7</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;act-req&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">and</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;act-req&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="4-ap.html#SP13_7" class="named-paragraph-link"><span class="named-paragraph">Set kind and access for two</span><span class="named-paragraph-number">13.7</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">nothing</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">or</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">one</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;act-req&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="4-ap.html#SP13_5" class="named-paragraph-link"><span class="named-paragraph">Set kind and access for an optional one</span><span class="named-paragraph-number">13.5</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">one</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;act-req&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="4-ap.html#SP13_6" class="named-paragraph-link"><span class="named-paragraph">Set kind and access for one</span><span class="named-paragraph-number">13.6</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">two</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;act-req&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="4-ap.html#SP13_8" class="named-paragraph-link"><span class="named-paragraph">Set kind and access for one, doubling up</span><span class="named-paragraph-number">13.8</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;act-req&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="4-ap.html#SP13_6" class="named-paragraph-link"><span class="named-paragraph">Set kind and access for one</span><span class="named-paragraph-number">13.6</span></a></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="4-ap.html#SP13_10" class="named-paragraph-link"><span class="named-paragraph">Issue PM_ActionMisapplied problem</span><span class="named-paragraph-number">13.10</span></a></span><span class="Preform-constant-syntax">;</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">one</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;act-req&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">and</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">one</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;act-req&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="4-ap.html#SP9_7" class="named-paragraph-link"><span class="named-paragraph">Set kind and access for two</span><span class="named-paragraph-number">9.7</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">one</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;act-req&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">and</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;act-req&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="4-ap.html#SP9_7" class="named-paragraph-link"><span class="named-paragraph">Set kind and access for two</span><span class="named-paragraph-number">9.7</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;act-req&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">and</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">one</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;act-req&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="4-ap.html#SP9_7" class="named-paragraph-link"><span class="named-paragraph">Set kind and access for two</span><span class="named-paragraph-number">9.7</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;act-req&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">and</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;act-req&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="4-ap.html#SP9_7" class="named-paragraph-link"><span class="named-paragraph">Set kind and access for two</span><span class="named-paragraph-number">9.7</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">nothing</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">or</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">one</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;act-req&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="4-ap.html#SP9_5" class="named-paragraph-link"><span class="named-paragraph">Set kind and access for an optional one</span><span class="named-paragraph-number">9.5</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">one</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;act-req&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="4-ap.html#SP9_6" class="named-paragraph-link"><span class="named-paragraph">Set kind and access for one</span><span class="named-paragraph-number">9.6</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">two</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;act-req&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="4-ap.html#SP9_8" class="named-paragraph-link"><span class="named-paragraph">Set kind and access for one, doubling up</span><span class="named-paragraph-number">9.8</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;act-req&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="4-ap.html#SP9_6" class="named-paragraph-link"><span class="named-paragraph">Set kind and access for one</span><span class="named-paragraph-number">9.6</span></a></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="4-ap.html#SP9_10" class="named-paragraph-link"><span class="named-paragraph">Issue PM_ActionMisapplied problem</span><span class="named-paragraph-number">9.10</span></a></span><span class="Preform-constant-syntax">;</span>
<span class="Preform-function-syntax">&lt;act-req&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;act-req-inner&gt;</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#SP13_11" class="named-paragraph-link"><span class="named-paragraph">Check action kind</span><span class="named-paragraph-number">13.11</span></a></span><span class="Preform-constant-syntax">;</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;act-req-inner&gt;</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#SP9_11" class="named-paragraph-link"><span class="named-paragraph">Check action kind</span><span class="named-paragraph-number">9.11</span></a></span><span class="Preform-constant-syntax">;</span>
<span class="Preform-function-syntax">&lt;act-req-inner&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;action-access&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;k-kind&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"> { R[1], RP[2] }</span>
@ -399,63 +365,63 @@ inconveniently contain the word "and"; not only that, but note that in
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">carried</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { REQUIRES_POSSESSION, - }</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>
<p class="commentary firstcommentary"><a id="SP13_1" class="paragraph-anchor"></a><b>&#167;13.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Make out of world</span><span class="named-paragraph-number">13.1</span></span><span class="Preform-comment-syntax"> =</span>
<p class="commentary firstcommentary"><a id="SP9_1" class="paragraph-anchor"></a><b>&#167;9.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Make out of world</span><span class="named-paragraph-number">9.1</span></span><span class="Preform-comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><a href="4-as.html#SP4" class="function-link"><span class="function-syntax">ActionSemantics::make_action_out_of_world</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">an_being_parsed</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-ap.html#SP13">&#167;13</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP13_2" class="paragraph-anchor"></a><b>&#167;13.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Make abbreviable</span><span class="named-paragraph-number">13.2</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="4-ap.html#SP9">&#167;9</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP9_2" class="paragraph-anchor"></a><b>&#167;9.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Make abbreviable</span><span class="named-paragraph-number">9.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><a href="4-ann.html#SP8" class="function-link"><span class="function-syntax">ActionNameNames::make_abbreviable</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">an_being_parsed</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-ap.html#SP13">&#167;13</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP13_3" class="paragraph-anchor"></a><b>&#167;13.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Give irregular participle</span><span class="named-paragraph-number">13.3</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="4-ap.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">Give irregular participle</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><a href="4-ann.html#SP4" class="function-link"><span class="function-syntax">ActionNameNames::set_irregular_past</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">an_being_parsed</span><span class="plain-syntax">, </span><span class="identifier-syntax">GET_RW</span><span class="plain-syntax">(</span><span class="function-syntax">&lt;action-clause&gt;</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">));</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-ap.html#SP13">&#167;13</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP13_4" class="paragraph-anchor"></a><b>&#167;13.4. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Require light</span><span class="named-paragraph-number">13.4</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="4-ap.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">Require light</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">
<span class="plain-syntax"> </span><a href="4-as.html#SP4" class="function-link"><span class="function-syntax">ActionSemantics::make_action_require_light</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">an_being_parsed</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-ap.html#SP13">&#167;13</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP13_5" class="paragraph-anchor"></a><b>&#167;13.5. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Set kind and access for an optional one</span><span class="named-paragraph-number">13.5</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="4-ap.html#SP9">&#167;9</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP9_5" class="paragraph-anchor"></a><b>&#167;9.5. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Set kind and access for an optional one</span><span class="named-paragraph-number">9.5</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><a href="4-as.html#SP4" class="function-link"><span class="function-syntax">ActionSemantics::give_action_an_optional_noun</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">an_being_parsed</span><span class="plain-syntax">, </span><span class="identifier-syntax">R</span><span class="plain-syntax">[1], </span><span class="identifier-syntax">RP</span><span class="plain-syntax">[1]);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-ap.html#SP13">&#167;13</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP13_6" class="paragraph-anchor"></a><b>&#167;13.6. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Set kind and access for one</span><span class="named-paragraph-number">13.6</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="4-ap.html#SP9">&#167;9</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP9_6" class="paragraph-anchor"></a><b>&#167;9.6. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Set kind and access for one</span><span class="named-paragraph-number">9.6</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><a href="4-as.html#SP4" class="function-link"><span class="function-syntax">ActionSemantics::give_action_one_noun</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">an_being_parsed</span><span class="plain-syntax">, </span><span class="identifier-syntax">R</span><span class="plain-syntax">[1], </span><span class="identifier-syntax">RP</span><span class="plain-syntax">[1]);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-ap.html#SP13">&#167;13</a> (twice).</li></ul>
<p class="commentary firstcommentary"><a id="SP13_7" class="paragraph-anchor"></a><b>&#167;13.7. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Set kind and access for two</span><span class="named-paragraph-number">13.7</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="4-ap.html#SP9">&#167;9</a> (twice).</li></ul>
<p class="commentary firstcommentary"><a id="SP9_7" class="paragraph-anchor"></a><b>&#167;9.7. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Set kind and access for two</span><span class="named-paragraph-number">9.7</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><a href="4-as.html#SP4" class="function-link"><span class="function-syntax">ActionSemantics::give_action_two_nouns</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">an_being_parsed</span><span class="plain-syntax">, </span><span class="identifier-syntax">R</span><span class="plain-syntax">[1], </span><span class="identifier-syntax">RP</span><span class="plain-syntax">[1], </span><span class="identifier-syntax">R</span><span class="plain-syntax">[2], </span><span class="identifier-syntax">RP</span><span class="plain-syntax">[2]);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-ap.html#SP13">&#167;13</a> (four times).</li></ul>
<p class="commentary firstcommentary"><a id="SP13_8" class="paragraph-anchor"></a><b>&#167;13.8. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Set kind and access for one, doubling up</span><span class="named-paragraph-number">13.8</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="4-ap.html#SP9">&#167;9</a> (four times).</li></ul>
<p class="commentary firstcommentary"><a id="SP9_8" class="paragraph-anchor"></a><b>&#167;9.8. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Set kind and access for one, doubling up</span><span class="named-paragraph-number">9.8</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><a href="4-as.html#SP4" class="function-link"><span class="function-syntax">ActionSemantics::give_action_two_nouns</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">an_being_parsed</span><span class="plain-syntax">, </span><span class="identifier-syntax">R</span><span class="plain-syntax">[1], </span><span class="identifier-syntax">RP</span><span class="plain-syntax">[1], </span><span class="identifier-syntax">R</span><span class="plain-syntax">[1], </span><span class="identifier-syntax">RP</span><span class="plain-syntax">[1]);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-ap.html#SP13">&#167;13</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP13_9" class="paragraph-anchor"></a><b>&#167;13.9. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_ActionClauseUnknown problem</span><span class="named-paragraph-number">13.9</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="4-ap.html#SP9">&#167;9</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP9_9" class="paragraph-anchor"></a><b>&#167;9.9. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_ActionClauseUnknown problem</span><span class="named-paragraph-number">9.9</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -464,8 +430,8 @@ inconveniently contain the word "and"; not only that, but note that in
<span class="plain-syntax"> </span><span class="string-syntax">"the action definition contained text I couldn't follow"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="string-syntax">"and may be too complicated."</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-ap.html#SP13">&#167;13</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP13_10" class="paragraph-anchor"></a><b>&#167;13.10. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_ActionMisapplied problem</span><span class="named-paragraph-number">13.10</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="4-ap.html#SP9">&#167;9</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP9_10" class="paragraph-anchor"></a><b>&#167;9.10. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_ActionMisapplied problem</span><span class="named-paragraph-number">9.10</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -476,8 +442,8 @@ inconveniently contain the word "and"; not only that, but note that in
<span class="plain-syntax"> </span><span class="string-syntax">"one visible thing'."</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> ==&gt; { </span><span class="constant-syntax">REQUIRES_ACCESS</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_thing</span><span class="plain-syntax"> };</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-ap.html#SP13">&#167;13</a>, <a href="4-ap.html#SP13_11">&#167;13.11</a> (twice).</li></ul>
<p class="commentary firstcommentary"><a id="SP13_11" class="paragraph-anchor"></a><b>&#167;13.11. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Check action kind</span><span class="named-paragraph-number">13.11</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="4-ap.html#SP9">&#167;9</a>, <a href="4-ap.html#SP9_11">&#167;9.11</a> (twice).</li></ul>
<p class="commentary firstcommentary"><a id="SP9_11" class="paragraph-anchor"></a><b>&#167;9.11. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Check action kind</span><span class="named-paragraph-number">9.11</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -486,15 +452,15 @@ inconveniently contain the word "and"; not only that, but note that in
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">A</span><span class="plain-syntax"> == </span><span class="constant-syntax">UNRESTRICTED_ACCESS</span><span class="plain-syntax">) </span><span class="identifier-syntax">A</span><span class="plain-syntax"> = </span><span class="constant-syntax">REQUIRES_ACCESS</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> ==&gt; { </span><span class="identifier-syntax">A</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="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Kinds::Behaviour::is_subkind_of_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-ap.html#SP13_10" class="named-paragraph-link"><span class="named-paragraph">Issue PM_ActionMisapplied problem</span><span class="named-paragraph-number">13.10</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-ap.html#SP9_10" class="named-paragraph-link"><span class="named-paragraph">Issue PM_ActionMisapplied problem</span><span class="named-paragraph-number">9.10</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="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">A</span><span class="plain-syntax"> != </span><span class="constant-syntax">UNRESTRICTED_ACCESS</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-ap.html#SP13_10" class="named-paragraph-link"><span class="named-paragraph">Issue PM_ActionMisapplied problem</span><span class="named-paragraph-number">13.10</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-ap.html#SP9_10" class="named-paragraph-link"><span class="named-paragraph">Issue PM_ActionMisapplied problem</span><span class="named-paragraph-number">9.10</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="plain-syntax"> ==&gt; { </span><span class="identifier-syntax">A</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax"> };</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-ap.html#SP13">&#167;13</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP14" class="paragraph-anchor"></a><b>&#167;14. </b>For years this was not erroneous, but you now can't write, say, "X is an
<ul class="endnotetexts"><li>This code is used in <a href="4-ap.html#SP9">&#167;9</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>&#167;10. </b>For years this was not erroneous, but you now can't write, say, "X is an
action applying to nothing, applying to nothing, requiring light and applying
to nothing".
</p>
@ -507,10 +473,10 @@ to nothing".
</pre>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">an_clauses_filled</span><span class="plain-syntax">[6];</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ActionsPlugin::clear_clauses</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">ActionsPlugin::clear_clauses</span></span>:<br/><a href="4-ap.html#SP10_2">&#167;10.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ActionsPlugin::clear_clauses</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">ActionsPlugin::clear_clauses</span></span>:<br/><a href="4-ap.html#SP6_2">&#167;6.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</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">=1; </span><span class="identifier-syntax">i</span><span class="plain-syntax">&lt;=5; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) </span><span class="identifier-syntax">an_clauses_filled</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="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ActionsPlugin::clause</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">ActionsPlugin::clause</span></span>:<br/><a href="4-ap.html#SP13">&#167;13</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">N</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ActionsPlugin::clause</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">ActionsPlugin::clause</span></span>:<br/><a href="4-ap.html#SP9">&#167;9</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">N</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">an_clauses_filled</span><span class="plain-syntax">[</span><span class="identifier-syntax">N</span><span class="plain-syntax">])</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">StandardProblems::sentence_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_ActionClauseRepeated</span><span class="plain-syntax">),</span>
@ -520,7 +486,7 @@ to nothing".
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="3-ts.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-im.html">1</a></li><li class="progresschapter"><a href="2-bd.html">2</a></li><li class="progresschapter"><a href="3-sm.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresscurrent">ap</li><li class="progresssection"><a href="4-anaa.html">anaa</a></li><li class="progresssection"><a href="4-act.html">act</a></li><li class="progresssection"><a href="4-as.html">as</a></li><li class="progresssection"><a href="4-av.html">av</a></li><li class="progresssection"><a href="4-ann.html">ann</a></li><li class="progresssection"><a href="4-anl.html">anl</a></li><li class="progresssection"><a href="4-ap2.html">ap2</a></li><li class="progresssection"><a href="4-apc.html">apc</a></li><li class="progresssection"><a href="4-gng.html">gng</a></li><li class="progresssection"><a href="4-pap.html">pap</a></li><li class="progresssection"><a href="4-nap.html">nap</a></li><li class="progresschapter"><a href="5-pp.html">5</a></li><li class="progressnext"><a href="4-anaa.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="3-ts.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-im.html">1</a></li><li class="progresschapter"><a href="2-bd.html">2</a></li><li class="progresschapter"><a href="3-sm.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresscurrent">ap</li><li class="progresssection"><a href="4-anaa.html">anaa</a></li><li class="progresssection"><a href="4-ak.html">ak</a></li><li class="progresssection"><a href="4-ac.html">ac</a></li><li class="progresssection"><a href="4-act.html">act</a></li><li class="progresssection"><a href="4-as.html">as</a></li><li class="progresssection"><a href="4-av.html">av</a></li><li class="progresssection"><a href="4-ann.html">ann</a></li><li class="progresssection"><a href="4-anl.html">anl</a></li><li class="progresssection"><a href="4-ap2.html">ap2</a></li><li class="progresssection"><a href="4-ea.html">ea</a></li><li class="progresssection"><a href="4-apc.html">apc</a></li><li class="progresssection"><a href="4-gng.html">gng</a></li><li class="progresssection"><a href="4-pap.html">pap</a></li><li class="progresssection"><a href="4-nap.html">nap</a></li><li class="progresschapter"><a href="5-pp.html">5</a></li><li class="progressnext"><a href="4-anaa.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -101,11 +101,11 @@ object instead of an action &mdash; "reaching inside the cabinet".
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">valid</span><span class="plain-syntax">; </span><span class="comment-syntax"> recording success or failure in parsing to an AP</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">action_pattern</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>The structure action_pattern is accessed in 4/apc, 4/pap and here.</li></ul>
<ul class="endnotetexts"><li>The structure action_pattern is accessed in 4/ea, 4/apc, 4/pap and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> </span><span class="function-syntax">ActionPatterns::new</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">ActionPatterns::new</span></span>:<br/>Parse Action Patterns - <a href="4-pap.html#SP3">&#167;3</a>, <a href="4-pap.html#SP19_1">&#167;19.1</a>, <a href="4-pap.html#SP20">&#167;20</a>, <a href="4-pap.html#SP23">&#167;23</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> </span><span class="function-syntax">ActionPatterns::new</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">ActionPatterns::new</span></span>:<br/>Parse Action Patterns - <a href="4-pap.html#SP4">&#167;4</a>, <a href="4-pap.html#SP20_1">&#167;20.1</a>, <a href="4-pap.html#SP21">&#167;21</a>, <a href="4-pap.html#SP24">&#167;24</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> </span><span class="identifier-syntax">ap</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ap</span><span class="plain-syntax">.</span><span class="element-syntax">ap_clauses</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">ap</span><span class="plain-syntax">.</span><span class="element-syntax">text_of_pattern</span><span class="plain-syntax"> = </span><span class="identifier-syntax">EMPTY_WORDING</span><span class="plain-syntax">;</span>
@ -119,21 +119,11 @@ object instead of an action &mdash; "reaching inside the cabinet".
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<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">explicit_action</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">request</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">action</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">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">actor</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">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">first_noun</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">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">second_noun</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">as_described</span><span class="plain-syntax">;</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">explicit_action</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ActionPatterns::log</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">ActionPatterns::log</span></span>:<br/>IF Module - <a href="1-im.html#SP2">&#167;2</a>, <a href="1-im.html#SP2_3">&#167;2.3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ap</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="4-ap2.html#SP3" class="function-link"><span class="function-syntax">ActionPatterns::write</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">DL</span><span class="plain-syntax">, </span><span class="identifier-syntax">ap</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ActionPatterns::write</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">ActionPatterns::write</span></span>:<br/>Actions-Only Nodes and Annotations - <a href="4-anaa.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ap</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ActionPatterns::write</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">ActionPatterns::write</span></span>:<br/>Actions-Only Nodes and Annotations - <a href="4-anaa.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ap</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">ap</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"&lt;null-ap&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="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ap</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">valid</span><span class="plain-syntax"> != </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"&lt;invalid&gt;"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
@ -146,7 +136,7 @@ object instead of an action &mdash; "reaching inside the cabinet".
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="function-syntax">ActionPatterns::ap_store</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">ActionPatterns::ap_store</span></span>:<br/>Parse Action Patterns - <a href="4-pap.html#SP19_1">&#167;19.1</a>, <a href="4-pap.html#SP20">&#167;20</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> </span><span class="identifier-syntax">ap</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="function-syntax">ActionPatterns::ap_store</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">ActionPatterns::ap_store</span></span>:<br/>Parse Action Patterns - <a href="4-pap.html#SP20_1">&#167;20.1</a>, <a href="4-pap.html#SP21">&#167;21</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> </span><span class="identifier-syntax">ap</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sap</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">action_pattern</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> *</span><span class="identifier-syntax">sap</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ap</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">sap</span><span class="plain-syntax">;</span>
@ -160,7 +150,7 @@ object instead of an action &mdash; "reaching inside the cabinet".
<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">ActionPatterns::is_valid</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">ActionPatterns::is_valid</span></span>:<br/>Parse Action Patterns - <a href="4-pap.html#SP20">&#167;20</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ap</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ActionPatterns::is_valid</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">ActionPatterns::is_valid</span></span>:<br/>Parse Action Patterns - <a href="4-pap.html#SP21">&#167;21</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ap</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">ap</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">ap</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">valid</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
@ -170,12 +160,12 @@ object instead of an action &mdash; "reaching inside the cabinet".
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="4-anl.html#SP12" class="function-link"><span class="function-syntax">ActionNameLists::covers_action</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ap</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">action_list</span><span class="plain-syntax">, </span><span class="identifier-syntax">an</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">action_name_list</span><span class="plain-syntax"> *</span><span class="function-syntax">ActionPatterns::list</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">ActionPatterns::list</span></span>:<br/>Parse Action Patterns - <a href="4-pap.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ap</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">action_name_list</span><span class="plain-syntax"> *</span><span class="function-syntax">ActionPatterns::list</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">ActionPatterns::list</span></span>:<br/>Parse Action Patterns - <a href="4-pap.html#SP6">&#167;6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ap</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">ap</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">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">ap</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">action_list</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="function-syntax">ActionPatterns::required_action</span><span class="plain-syntax">(</span><span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ap</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="function-syntax">ActionPatterns::required_action</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">ActionPatterns::required_action</span></span>:<br/>Explicit Actions - <a href="4-ea.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ap</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">ap</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="4-anl.html#SP14" class="function-link"><span class="function-syntax">ActionNameLists::single_positive_action</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ap</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">action_list</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>
<span class="plain-syntax">}</span>
@ -185,54 +175,6 @@ object instead of an action &mdash; "reaching inside the cabinet".
<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">explicit_action</span><span class="plain-syntax"> *</span><span class="function-syntax">ActionPatterns::to_explicit_action</span><span class="plain-syntax">(</span><span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ap</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="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="4-ap2.html#SP3" class="function-link"><span class="function-syntax">ActionPatterns::is_unspecific</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ap</span><span class="plain-syntax">)) { *</span><span class="identifier-syntax">reason</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</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">if</span><span class="plain-syntax"> (</span><a href="4-ap2.html#SP3" class="function-link"><span class="function-syntax">ActionPatterns::is_overspecific</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ap</span><span class="plain-syntax">)) { *</span><span class="identifier-syntax">reason</span><span class="plain-syntax"> = </span><span class="constant-syntax">2</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="identifier-syntax">reason</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">explicit_action</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ea</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">explicit_action</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ea</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">action</span><span class="plain-syntax"> = </span><a href="4-anl.html#SP15" class="function-link"><span class="function-syntax">ActionNameLists::get_the_one_true_action</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ap</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">action_list</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ea</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">request</span><span class="plain-syntax"> = </span><a href="4-apc.html#SP3" class="function-link"><span class="function-syntax">APClauses::is_request</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ap</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ea</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">actor</span><span class="plain-syntax"> = </span><a href="4-apc.html#SP3" class="function-link"><span class="function-syntax">APClauses::get_val</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ap</span><span class="plain-syntax">, </span><span class="constant-syntax">ACTOR_AP_CLAUSE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ea</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">first_noun</span><span class="plain-syntax"> = </span><a href="4-apc.html#SP3" class="function-link"><span class="function-syntax">APClauses::get_val</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ap</span><span class="plain-syntax">, </span><span class="constant-syntax">NOUN_AP_CLAUSE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ea</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">second_noun</span><span class="plain-syntax"> = </span><a href="4-apc.html#SP3" class="function-link"><span class="function-syntax">APClauses::get_val</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ap</span><span class="plain-syntax">, </span><span class="constant-syntax">SECOND_AP_CLAUSE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ea</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_described</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ap</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">ea</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ActionPatterns::make_ACTION_node</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="reserved-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ap</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Node::set_type</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="constant-syntax">ACTION_NT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Node::set_action_meaning</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="identifier-syntax">ap</span><span class="plain-syntax">);</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"> = </span><span class="identifier-syntax">NULL</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">ActionPatterns::is_unspecific</span><span class="plain-syntax">(</span><span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ap</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax"> = </span><a href="4-ap2.html#SP3" class="function-link"><span class="function-syntax">ActionPatterns::required_action</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ap</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">an</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">TRUE</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-as.html#SP5" class="function-link"><span class="function-syntax">ActionSemantics::must_have_noun</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">an</span><span class="plain-syntax">)) &amp;&amp; (</span><a href="4-apc.html#SP3" class="function-link"><span class="function-syntax">APClauses::get_val</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ap</span><span class="plain-syntax">, </span><span class="constant-syntax">NOUN_AP_CLAUSE</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">TRUE</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-as.html#SP5" class="function-link"><span class="function-syntax">ActionSemantics::must_have_second</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">an</span><span class="plain-syntax">)) &amp;&amp; (</span><a href="4-apc.html#SP3" class="function-link"><span class="function-syntax">APClauses::get_val</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ap</span><span class="plain-syntax">, </span><span class="constant-syntax">SECOND_AP_CLAUSE</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">TRUE</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-as.html#SP5" class="function-link"><span class="function-syntax">ActionSemantics::can_have_noun</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">an</span><span class="plain-syntax">)) &amp;&amp;</span>
<span class="plain-syntax"> (</span><a href="4-ap2.html#SP3" class="function-link"><span class="function-syntax">ActionPatterns::ap_clause_is_unspecific</span></a><span class="plain-syntax">(</span><a href="4-apc.html#SP3" class="function-link"><span class="function-syntax">APClauses::get_val</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ap</span><span class="plain-syntax">, </span><span class="constant-syntax">NOUN_AP_CLAUSE</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">if</span><span class="plain-syntax"> ((</span><a href="4-as.html#SP5" class="function-link"><span class="function-syntax">ActionSemantics::can_have_second</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">an</span><span class="plain-syntax">)) &amp;&amp;</span>
<span class="plain-syntax"> (</span><a href="4-ap2.html#SP3" class="function-link"><span class="function-syntax">ActionPatterns::ap_clause_is_unspecific</span></a><span class="plain-syntax">(</span><a href="4-apc.html#SP3" class="function-link"><span class="function-syntax">APClauses::get_val</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ap</span><span class="plain-syntax">, </span><span class="constant-syntax">SECOND_AP_CLAUSE</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">if</span><span class="plain-syntax"> (</span><a href="4-ap2.html#SP3" class="function-link"><span class="function-syntax">ActionPatterns::ap_clause_is_unspecific</span></a><span class="plain-syntax">(</span><a href="4-apc.html#SP3" class="function-link"><span class="function-syntax">APClauses::get_val</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ap</span><span class="plain-syntax">, </span><span class="constant-syntax">ACTOR_AP_CLAUSE</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">ActionPatterns::ap_clause_is_unspecific</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">spec</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">Specifications::is_description</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</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">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">ActionPatterns::is_overspecific</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">ActionPatterns::is_overspecific</span></span>:<br/>Action Pattern Clauses - <a href="4-apc.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ap</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">ap_clause</span><span class="plain-syntax"> *</span><span class="identifier-syntax">apoc</span><span class="plain-syntax"> = (</span><span class="identifier-syntax">ap</span><span class="plain-syntax">)?(</span><span class="identifier-syntax">ap</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">ap_clauses</span><span class="plain-syntax">):</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="identifier-syntax">apoc</span><span class="plain-syntax">; </span><span class="identifier-syntax">apoc</span><span class="plain-syntax"> = </span><span class="identifier-syntax">apoc</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="reserved-syntax">if</span><span class="plain-syntax"> ((</span><a href="4-apc.html#SP5" class="function-link"><span class="function-syntax">APClauses::aspect</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">apoc</span><span class="plain-syntax">) != </span><span class="constant-syntax">PRIMARY_APCA</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">apoc</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">clause_spec</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="4-apc.html#SP3" class="function-link"><span class="function-syntax">APClauses::has_any_actor</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ap</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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ap</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">duration</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">void</span><span class="plain-syntax"> </span><span class="function-syntax">ActionPatterns::suppress_action_testing</span><span class="plain-syntax">(</span><span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ap</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">ap</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">duration</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">ap</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">action_list</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><a href="4-anl.html#SP3" class="function-link"><span class="function-syntax">ActionNameLists::suppress_action_testing</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ap</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">action_list</span><span class="plain-syntax">);</span>
@ -244,7 +186,6 @@ object instead of an action &mdash; "reaching inside the cabinet".
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">spec</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<ul class="endnotetexts"><li>The structure explicit_action is accessed in 4/anaa and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. </b></p>
<pre class="displayed-code all-displayed-code code-font">
@ -264,6 +205,19 @@ object instead of an action &mdash; "reaching inside the cabinet".
<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">action_pattern</span><span class="plain-syntax"> *</span><span class="function-syntax">ActionPatterns::action_from_TEST</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><a href="4-ac.html#SP1" class="function-link"><span class="function-syntax">AConditions::is_action_TEST_VALUE</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="reserved-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ap</span><span class="plain-syntax"> = </span><a href="4-ak.html#SP6" class="function-link"><span class="function-syntax">ARvalues::to_action_pattern</span></a><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><a href="4-ac.html#SP1" class="function-link"><span class="function-syntax">AConditions::action_tested</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="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ap</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">explicit_action</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ea</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::get_constant_explicit_action</span><span class="plain-syntax">(</span><a href="4-ac.html#SP1" class="function-link"><span class="function-syntax">AConditions::action_tested</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="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ea</span><span class="plain-syntax">) </span><span class="identifier-syntax">ap</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ea</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_described</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">ap</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">NULL</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">ActionPatterns::compare_specificity</span><span class="plain-syntax">(</span><span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ap1</span><span class="plain-syntax">, </span><span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ap2</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">ap1</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">ap2</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">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">ap1</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">ap2</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="constant-syntax">1</span><span class="plain-syntax">;</span>
@ -304,7 +258,7 @@ object instead of an action &mdash; "reaching inside the cabinet".
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="4-anl.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-im.html">1</a></li><li class="progresschapter"><a href="2-bd.html">2</a></li><li class="progresschapter"><a href="3-sm.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresssection"><a href="4-ap.html">ap</a></li><li class="progresssection"><a href="4-anaa.html">anaa</a></li><li class="progresssection"><a href="4-act.html">act</a></li><li class="progresssection"><a href="4-as.html">as</a></li><li class="progresssection"><a href="4-av.html">av</a></li><li class="progresssection"><a href="4-ann.html">ann</a></li><li class="progresssection"><a href="4-anl.html">anl</a></li><li class="progresscurrent">ap2</li><li class="progresssection"><a href="4-apc.html">apc</a></li><li class="progresssection"><a href="4-gng.html">gng</a></li><li class="progresssection"><a href="4-pap.html">pap</a></li><li class="progresssection"><a href="4-nap.html">nap</a></li><li class="progresschapter"><a href="5-pp.html">5</a></li><li class="progressnext"><a href="4-apc.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="4-anl.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-im.html">1</a></li><li class="progresschapter"><a href="2-bd.html">2</a></li><li class="progresschapter"><a href="3-sm.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresssection"><a href="4-ap.html">ap</a></li><li class="progresssection"><a href="4-anaa.html">anaa</a></li><li class="progresssection"><a href="4-ak.html">ak</a></li><li class="progresssection"><a href="4-ac.html">ac</a></li><li class="progresssection"><a href="4-act.html">act</a></li><li class="progresssection"><a href="4-as.html">as</a></li><li class="progresssection"><a href="4-av.html">av</a></li><li class="progresssection"><a href="4-ann.html">ann</a></li><li class="progresssection"><a href="4-anl.html">anl</a></li><li class="progresscurrent">ap2</li><li class="progresssection"><a href="4-ea.html">ea</a></li><li class="progresssection"><a href="4-apc.html">apc</a></li><li class="progresssection"><a href="4-gng.html">gng</a></li><li class="progresssection"><a href="4-pap.html">pap</a></li><li class="progresssection"><a href="4-nap.html">nap</a></li><li class="progresschapter"><a href="5-pp.html">5</a></li><li class="progressnext"><a href="4-ea.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -108,7 +108,7 @@ MathJax = {
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">ap_clause</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>The structure ap_clause is accessed in 2/ri, 3/tm, 3/scn, 3/ts, 4/ap, 4/av, 4/ap2, 4/gng, 5/tfg, 5/gl and here.</li></ul>
<ul class="endnotetexts"><li>The structure ap_clause is accessed in 2/ri, 3/tm, 3/scn, 3/ts, 4/ap, 4/av, 4/ap2, 4/ea, 4/gng, 5/tfg, 5/gl and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b>The clause options are a bitmap. Some are meaningful only for one or two
clauses.
</p>
@ -127,49 +127,49 @@ clauses.
<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">void</span><span class="plain-syntax"> </span><span class="function-syntax">APClauses::set_opt</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">APClauses::set_opt</span></span>:<br/>Going - <a href="4-gng.html#SP4">&#167;4</a><br/>Parse Action Patterns - <a href="4-pap.html#SP24">&#167;24</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">ap_clause</span><span class="plain-syntax"> *</span><span class="identifier-syntax">apoc</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">opt</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">APClauses::set_opt</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">APClauses::set_opt</span></span>:<br/>Going - <a href="4-gng.html#SP4">&#167;4</a><br/>Parse Action Patterns - <a href="4-pap.html#SP25">&#167;25</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">ap_clause</span><span class="plain-syntax"> *</span><span class="identifier-syntax">apoc</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">opt</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">apoc</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"no such apoc"</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">apoc</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">clause_options</span><span class="plain-syntax"> &amp; </span><span class="identifier-syntax">opt</span><span class="plain-syntax">) == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">apoc</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">clause_options</span><span class="plain-syntax"> += </span><span class="identifier-syntax">opt</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">APClauses::clear_opt</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">APClauses::clear_opt</span></span>:<br/>Parse Action Patterns - <a href="4-pap.html#SP24">&#167;24</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">ap_clause</span><span class="plain-syntax"> *</span><span class="identifier-syntax">apoc</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">opt</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">APClauses::clear_opt</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">APClauses::clear_opt</span></span>:<br/>Parse Action Patterns - <a href="4-pap.html#SP25">&#167;25</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">ap_clause</span><span class="plain-syntax"> *</span><span class="identifier-syntax">apoc</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">opt</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">apoc</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"no such apoc"</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">apoc</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">clause_options</span><span class="plain-syntax"> &amp; </span><span class="identifier-syntax">opt</span><span class="plain-syntax">) </span><span class="identifier-syntax">apoc</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">clause_options</span><span class="plain-syntax"> -= </span><span class="identifier-syntax">opt</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">APClauses::any_actor</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">APClauses::any_actor</span></span>:<br/>Parse Action Patterns - <a href="4-pap.html#SP8">&#167;8</a>, <a href="4-pap.html#SP9">&#167;9</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ap</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">APClauses::any_actor</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">APClauses::any_actor</span></span>:<br/>Parse Action Patterns - <a href="4-pap.html#SP9">&#167;9</a>, <a href="4-pap.html#SP10">&#167;10</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ap</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">ap_clause</span><span class="plain-syntax"> *</span><span class="identifier-syntax">apoc</span><span class="plain-syntax"> = </span><a href="4-apc.html#SP3" class="function-link"><span class="function-syntax">APClauses::ensure_clause</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ap</span><span class="plain-syntax">, </span><span class="constant-syntax">ACTOR_AP_CLAUSE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="4-apc.html#SP3" class="function-link"><span class="function-syntax">APClauses::set_opt</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">apoc</span><span class="plain-syntax">, </span><span class="constant-syntax">ACTOR_IS_NOT_PLAYER_APCOPT</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">APClauses::has_any_actor</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">APClauses::has_any_actor</span></span>:<br/>Action Patterns - <a href="4-ap2.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ap</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">APClauses::has_any_actor</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">APClauses::has_any_actor</span></span>:<br/>Explicit Actions - <a href="4-ea.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ap</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">ap_clause</span><span class="plain-syntax"> *</span><span class="identifier-syntax">apoc</span><span class="plain-syntax"> = </span><a href="4-apc.html#SP3" class="function-link"><span class="function-syntax">APClauses::clause</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ap</span><span class="plain-syntax">, </span><span class="constant-syntax">ACTOR_AP_CLAUSE</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-apc.html#SP3" class="function-link"><span class="function-syntax">APClauses::opt</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">apoc</span><span class="plain-syntax">, </span><span class="constant-syntax">ACTOR_IS_NOT_PLAYER_APCOPT</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">void</span><span class="plain-syntax"> </span><span class="function-syntax">APClauses::set_request</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">APClauses::set_request</span></span>:<br/>Parse Action Patterns - <a href="4-pap.html#SP8">&#167;8</a>, <a href="4-pap.html#SP9">&#167;9</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ap</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">APClauses::set_request</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">APClauses::set_request</span></span>:<br/>Parse Action Patterns - <a href="4-pap.html#SP9">&#167;9</a>, <a href="4-pap.html#SP10">&#167;10</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ap</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">ap_clause</span><span class="plain-syntax"> *</span><span class="identifier-syntax">apoc</span><span class="plain-syntax"> = </span><a href="4-apc.html#SP3" class="function-link"><span class="function-syntax">APClauses::ensure_clause</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ap</span><span class="plain-syntax">, </span><span class="constant-syntax">ACTOR_AP_CLAUSE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="4-apc.html#SP3" class="function-link"><span class="function-syntax">APClauses::set_opt</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">apoc</span><span class="plain-syntax">, </span><span class="constant-syntax">REQUEST_APCOPT</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">APClauses::clear_request</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">APClauses::clear_request</span></span>:<br/>Parse Action Patterns - <a href="4-pap.html#SP8">&#167;8</a>, <a href="4-pap.html#SP9">&#167;9</a>, <a href="4-pap.html#SP10">&#167;10</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ap</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">APClauses::clear_request</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">APClauses::clear_request</span></span>:<br/>Parse Action Patterns - <a href="4-pap.html#SP9">&#167;9</a>, <a href="4-pap.html#SP10">&#167;10</a>, <a href="4-pap.html#SP11">&#167;11</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ap</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">ap_clause</span><span class="plain-syntax"> *</span><span class="identifier-syntax">apoc</span><span class="plain-syntax"> = </span><a href="4-apc.html#SP3" class="function-link"><span class="function-syntax">APClauses::ensure_clause</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ap</span><span class="plain-syntax">, </span><span class="constant-syntax">ACTOR_AP_CLAUSE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="4-apc.html#SP3" class="function-link"><span class="function-syntax">APClauses::clear_opt</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">apoc</span><span class="plain-syntax">, </span><span class="constant-syntax">REQUEST_APCOPT</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">APClauses::is_request</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">APClauses::is_request</span></span>:<br/>Action Patterns - <a href="4-ap2.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ap</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">APClauses::is_request</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">APClauses::is_request</span></span>:<br/>Explicit Actions - <a href="4-ea.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ap</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">ap_clause</span><span class="plain-syntax"> *</span><span class="identifier-syntax">apoc</span><span class="plain-syntax"> = </span><a href="4-apc.html#SP3" class="function-link"><span class="function-syntax">APClauses::clause</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ap</span><span class="plain-syntax">, </span><span class="constant-syntax">ACTOR_AP_CLAUSE</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-apc.html#SP3" class="function-link"><span class="function-syntax">APClauses::opt</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">apoc</span><span class="plain-syntax">, </span><span class="constant-syntax">REQUEST_APCOPT</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="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="function-syntax">APClauses::get_val</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">APClauses::get_val</span></span>:<br/><a href="4-apc.html#SP5">&#167;5</a><br/>Action Patterns - <a href="4-ap2.html#SP3">&#167;3</a>, <a href="4-ap2.html#SP4">&#167;4</a><br/>Going - <a href="4-gng.html#SP4">&#167;4</a>, <a href="4-gng.html#SP5">&#167;5</a>, <a href="4-gng.html#SP6">&#167;6</a><br/>Parse Action Patterns - <a href="4-pap.html#SP23_5">&#167;23.5</a><br/>Named Action Patterns - <a href="4-nap.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ap</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">C</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="function-syntax">APClauses::get_val</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">APClauses::get_val</span></span>:<br/><a href="4-apc.html#SP5">&#167;5</a><br/>Action Patterns - <a href="4-ap2.html#SP4">&#167;4</a><br/>Explicit Actions - <a href="4-ea.html#SP2">&#167;2</a><br/>Going - <a href="4-gng.html#SP4">&#167;4</a>, <a href="4-gng.html#SP5">&#167;5</a>, <a href="4-gng.html#SP6">&#167;6</a><br/>Parse Action Patterns - <a href="4-pap.html#SP1">&#167;1</a>, <a href="4-pap.html#SP24_5">&#167;24.5</a><br/>Named Action Patterns - <a href="4-nap.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ap</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">C</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">ap_clause</span><span class="plain-syntax"> *</span><span class="identifier-syntax">apoc</span><span class="plain-syntax"> = </span><a href="4-apc.html#SP3" class="function-link"><span class="function-syntax">APClauses::clause</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ap</span><span class="plain-syntax">, </span><span class="identifier-syntax">C</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">apoc</span><span class="plain-syntax">)?(</span><span class="identifier-syntax">apoc</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">clause_spec</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">void</span><span class="plain-syntax"> </span><span class="function-syntax">APClauses::set_val</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">APClauses::set_val</span></span>:<br/>Going - <a href="4-gng.html#SP5">&#167;5</a><br/>Parse Action Patterns - <a href="4-pap.html#SP3">&#167;3</a>, <a href="4-pap.html#SP8">&#167;8</a>, <a href="4-pap.html#SP9">&#167;9</a>, <a href="4-pap.html#SP10">&#167;10</a>, <a href="4-pap.html#SP16">&#167;16</a>, <a href="4-pap.html#SP18">&#167;18</a>, <a href="4-pap.html#SP19_1">&#167;19.1</a>, <a href="4-pap.html#SP23_5">&#167;23.5</a>, <a href="4-pap.html#SP23_5_4">&#167;23.5.4</a>, <a href="4-pap.html#SP24">&#167;24</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ap</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">val</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">APClauses::set_val</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">APClauses::set_val</span></span>:<br/>Going - <a href="4-gng.html#SP5">&#167;5</a><br/>Parse Action Patterns - <a href="4-pap.html#SP4">&#167;4</a>, <a href="4-pap.html#SP9">&#167;9</a>, <a href="4-pap.html#SP10">&#167;10</a>, <a href="4-pap.html#SP11">&#167;11</a>, <a href="4-pap.html#SP17">&#167;17</a>, <a href="4-pap.html#SP19">&#167;19</a>, <a href="4-pap.html#SP20_1">&#167;20.1</a>, <a href="4-pap.html#SP24_5">&#167;24.5</a>, <a href="4-pap.html#SP24_5_4">&#167;24.5.4</a>, <a href="4-pap.html#SP25">&#167;25</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ap</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">val</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">val</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">ap_clause</span><span class="plain-syntax"> *</span><span class="identifier-syntax">apoc</span><span class="plain-syntax"> = </span><a href="4-apc.html#SP3" class="function-link"><span class="function-syntax">APClauses::clause</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ap</span><span class="plain-syntax">, </span><span class="identifier-syntax">C</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">apoc</span><span class="plain-syntax">) </span><span class="identifier-syntax">apoc</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">clause_spec</span><span class="plain-syntax"> = </span><span class="identifier-syntax">val</span><span class="plain-syntax">;</span>
@ -179,12 +179,12 @@ clauses.
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">APClauses::nullify_nonspecific</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">APClauses::nullify_nonspecific</span></span>:<br/>Parse Action Patterns - <a href="4-pap.html#SP23_1">&#167;23.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ap</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">C</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">APClauses::nullify_nonspecific</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">APClauses::nullify_nonspecific</span></span>:<br/>Parse Action Patterns - <a href="4-pap.html#SP24_1">&#167;24.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ap</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">C</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">ap_clause</span><span class="plain-syntax"> *</span><span class="identifier-syntax">apoc</span><span class="plain-syntax"> = </span><a href="4-apc.html#SP3" class="function-link"><span class="function-syntax">APClauses::clause</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ap</span><span class="plain-syntax">, </span><span class="identifier-syntax">C</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">apoc</span><span class="plain-syntax">) </span><span class="identifier-syntax">apoc</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">clause_spec</span><span class="plain-syntax"> = </span><a href="4-ap2.html#SP3" class="function-link"><span class="function-syntax">ActionPatterns::nullify_nonspecific_references</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">apoc</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">clause_spec</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">ap_clause</span><span class="plain-syntax"> *</span><span class="function-syntax">APClauses::clause</span><button class="popup" onclick="togglePopup('usagePopup12')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup12">Usage of <span class="code-font"><span class="function-syntax">APClauses::clause</span></span>:<br/>Parse Action Patterns - <a href="4-pap.html#SP23_5_5">&#167;23.5.5</a>, <a href="4-pap.html#SP24">&#167;24</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ap</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">C</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">ap_clause</span><span class="plain-syntax"> *</span><span class="function-syntax">APClauses::clause</span><button class="popup" onclick="togglePopup('usagePopup12')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup12">Usage of <span class="code-font"><span class="function-syntax">APClauses::clause</span></span>:<br/>Parse Action Patterns - <a href="4-pap.html#SP24_5_5">&#167;24.5.5</a>, <a href="4-pap.html#SP25">&#167;25</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ap</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">C</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-apc.html#SP3" class="function-link"><span class="function-syntax">APClauses::find_clause</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ap</span><span class="plain-syntax">, </span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
@ -230,10 +230,10 @@ clauses.
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. </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">APClauses::ap_add_optional_clause</span><button class="popup" onclick="togglePopup('usagePopup14')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup14">Usage of <span class="code-font"><span class="function-syntax">APClauses::ap_add_optional_clause</span></span>:<br/>Parse Action Patterns - <a href="4-pap.html#SP23_3">&#167;23.3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ap</span><span class="plain-syntax">, </span><span class="identifier-syntax">stacked_variable</span><span class="plain-syntax"> *</span><span class="identifier-syntax">stv</span><span class="plain-syntax">,</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">APClauses::ap_add_optional_clause</span><button class="popup" onclick="togglePopup('usagePopup14')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup14">Usage of <span class="code-font"><span class="function-syntax">APClauses::ap_add_optional_clause</span></span>:<br/>Parse Action Patterns - <a href="4-pap.html#SP24_3">&#167;24.3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ap</span><span class="plain-syntax">, </span><span class="identifier-syntax">stacked_variable</span><span class="plain-syntax"> *</span><span class="identifier-syntax">stv</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">stv</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"no stacked variable for apoc"</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">spec</span><span class="plain-syntax"> = </span><a href="4-pap.html#SP4" class="function-link"><span class="function-syntax">ParseActionPatterns::verified_action_parameter</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</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">spec</span><span class="plain-syntax"> = </span><a href="4-pap.html#SP5" class="function-link"><span class="function-syntax">ParseActionPatterns::verified_action_parameter</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">oid</span><span class="plain-syntax"> = </span><span class="identifier-syntax">StackedVariables::get_owner_id</span><span class="plain-syntax">(</span><span class="identifier-syntax">stv</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">off</span><span class="plain-syntax"> = </span><span class="identifier-syntax">StackedVariables::get_offset</span><span class="plain-syntax">(</span><span class="identifier-syntax">stv</span><span class="plain-syntax">);</span>
@ -289,7 +289,7 @@ clauses.
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">apoc</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">APClauses::validate</span><button class="popup" onclick="togglePopup('usagePopup16')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup16">Usage of <span class="code-font"><span class="function-syntax">APClauses::validate</span></span>:<br/>Parse Action Patterns - <a href="4-pap.html#SP23_5_5">&#167;23.5.5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">ap_clause</span><span class="plain-syntax"> *</span><span class="identifier-syntax">apoc</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="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">APClauses::validate</span><button class="popup" onclick="togglePopup('usagePopup16')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup16">Usage of <span class="code-font"><span class="function-syntax">APClauses::validate</span></span>:<br/>Parse Action Patterns - <a href="4-pap.html#SP24_5_5">&#167;24.5.5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">ap_clause</span><span class="plain-syntax"> *</span><span class="identifier-syntax">apoc</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="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">apoc</span><span class="plain-syntax">) &amp;&amp;</span>
<span class="plain-syntax"> (</span><a href="4-apc.html#SP3" class="function-link"><span class="function-syntax">APClauses::opt</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">apoc</span><span class="plain-syntax">, </span><span class="constant-syntax">DO_NOT_VALIDATE_APCOPT</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">Dash::validate_parameter</span><span class="plain-syntax">(</span><span class="identifier-syntax">apoc</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">clause_spec</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">))</span>
@ -338,7 +338,7 @@ used in sorting algorithms.
<span class="definition-keyword">enum</span> <span class="constant-syntax">MISC_APCA</span>
</pre>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">APClauses::aspect</span><button class="popup" onclick="togglePopup('usagePopup18')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup18">Usage of <span class="code-font"><span class="function-syntax">APClauses::aspect</span></span>:<br/>Action Patterns - <a href="4-ap2.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">ap_clause</span><span class="plain-syntax"> *</span><span class="identifier-syntax">apoc</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">APClauses::aspect</span><button class="popup" onclick="togglePopup('usagePopup18')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup18">Usage of <span class="code-font"><span class="function-syntax">APClauses::aspect</span></span>:<br/>Explicit Actions - <a href="4-ea.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">ap_clause</span><span class="plain-syntax"> *</span><span class="identifier-syntax">apoc</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">apoc</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">clause_ID</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">PARAMETRIC_AP_CLAUSE:</span><span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">PARAMETRIC_APCA</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">ACTOR_AP_CLAUSE:</span><span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">PRIMARY_APCA</span><span class="plain-syntax">;</span>
@ -416,7 +416,7 @@ used in sorting algorithms.
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">APClauses::viable_in_past_tense</span><span class="plain-syntax">(</span><span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ap</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-ap2.html#SP3" class="function-link"><span class="function-syntax">ActionPatterns::is_overspecific</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ap</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><a href="4-ea.html#SP2" class="function-link"><span class="function-syntax">ExplicitActions::ap_overspecific</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ap</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><a href="4-apc.html#SP5" class="function-link"><span class="function-syntax">APClauses::pta_acceptable</span></a><span class="plain-syntax">(</span><a href="4-apc.html#SP3" class="function-link"><span class="function-syntax">APClauses::get_val</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ap</span><span class="plain-syntax">, </span><span class="constant-syntax">ACTOR_AP_CLAUSE</span><span class="plain-syntax">)) == </span><span class="identifier-syntax">FALSE</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><a href="4-apc.html#SP5" class="function-link"><span class="function-syntax">APClauses::pta_acceptable</span></a><span class="plain-syntax">(</span><a href="4-apc.html#SP3" class="function-link"><span class="function-syntax">APClauses::get_val</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ap</span><span class="plain-syntax">, </span><span class="constant-syntax">NOUN_AP_CLAUSE</span><span class="plain-syntax">)) == </span><span class="identifier-syntax">FALSE</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><a href="4-apc.html#SP5" class="function-link"><span class="function-syntax">APClauses::pta_acceptable</span></a><span class="plain-syntax">(</span><a href="4-apc.html#SP3" class="function-link"><span class="function-syntax">APClauses::get_val</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ap</span><span class="plain-syntax">, </span><span class="constant-syntax">SECOND_AP_CLAUSE</span><span class="plain-syntax">)) == </span><span class="identifier-syntax">FALSE</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>
@ -432,7 +432,7 @@ used in sorting algorithms.
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="4-ap2.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-im.html">1</a></li><li class="progresschapter"><a href="2-bd.html">2</a></li><li class="progresschapter"><a href="3-sm.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresssection"><a href="4-ap.html">ap</a></li><li class="progresssection"><a href="4-anaa.html">anaa</a></li><li class="progresssection"><a href="4-act.html">act</a></li><li class="progresssection"><a href="4-as.html">as</a></li><li class="progresssection"><a href="4-av.html">av</a></li><li class="progresssection"><a href="4-ann.html">ann</a></li><li class="progresssection"><a href="4-anl.html">anl</a></li><li class="progresssection"><a href="4-ap2.html">ap2</a></li><li class="progresscurrent">apc</li><li class="progresssection"><a href="4-gng.html">gng</a></li><li class="progresssection"><a href="4-pap.html">pap</a></li><li class="progresssection"><a href="4-nap.html">nap</a></li><li class="progresschapter"><a href="5-pp.html">5</a></li><li class="progressnext"><a href="4-gng.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="4-ea.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-im.html">1</a></li><li class="progresschapter"><a href="2-bd.html">2</a></li><li class="progresschapter"><a href="3-sm.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresssection"><a href="4-ap.html">ap</a></li><li class="progresssection"><a href="4-anaa.html">anaa</a></li><li class="progresssection"><a href="4-ak.html">ak</a></li><li class="progresssection"><a href="4-ac.html">ac</a></li><li class="progresssection"><a href="4-act.html">act</a></li><li class="progresssection"><a href="4-as.html">as</a></li><li class="progresssection"><a href="4-av.html">av</a></li><li class="progresssection"><a href="4-ann.html">ann</a></li><li class="progresssection"><a href="4-anl.html">anl</a></li><li class="progresssection"><a href="4-ap2.html">ap2</a></li><li class="progresssection"><a href="4-ea.html">ea</a></li><li class="progresscurrent">apc</li><li class="progresssection"><a href="4-gng.html">gng</a></li><li class="progresssection"><a href="4-pap.html">pap</a></li><li class="progresssection"><a href="4-nap.html">nap</a></li><li class="progresschapter"><a href="5-pp.html">5</a></li><li class="progressnext"><a href="4-gng.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -143,19 +143,19 @@ preferred way to do that is to use activities for selecting missing parameters.
</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">ActionSemantics::give_action_an_optional_noun</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">ActionSemantics::give_action_an_optional_noun</span></span>:<br/>Actions Plugin - <a href="4-ap.html#SP13_5">&#167;13.5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">acc</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="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ActionSemantics::give_action_an_optional_noun</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">ActionSemantics::give_action_an_optional_noun</span></span>:<br/>Actions Plugin - <a href="4-ap.html#SP9_5">&#167;9.5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">acc</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="plain-syntax"> </span><span class="identifier-syntax">an</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">semantics</span><span class="plain-syntax">.</span><span class="element-syntax">min_parameters</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">an</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">semantics</span><span class="plain-syntax">.</span><span class="identifier-syntax">max_parameters</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">an</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">semantics</span><span class="plain-syntax">.</span><span class="element-syntax">noun_access</span><span class="plain-syntax"> = </span><span class="identifier-syntax">acc</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">an</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">semantics</span><span class="plain-syntax">.</span><span class="element-syntax">noun_kind</span><span class="plain-syntax"> = </span><span class="identifier-syntax">K</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ActionSemantics::give_action_one_noun</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">ActionSemantics::give_action_one_noun</span></span>:<br/>Actions Plugin - <a href="4-ap.html#SP13_6">&#167;13.6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">acc</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="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ActionSemantics::give_action_one_noun</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">ActionSemantics::give_action_one_noun</span></span>:<br/>Actions Plugin - <a href="4-ap.html#SP9_6">&#167;9.6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">acc</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="plain-syntax"> </span><span class="identifier-syntax">an</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">semantics</span><span class="plain-syntax">.</span><span class="element-syntax">min_parameters</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">an</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">semantics</span><span class="plain-syntax">.</span><span class="identifier-syntax">max_parameters</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">an</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">semantics</span><span class="plain-syntax">.</span><span class="element-syntax">noun_access</span><span class="plain-syntax"> = </span><span class="identifier-syntax">acc</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">an</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">semantics</span><span class="plain-syntax">.</span><span class="element-syntax">noun_kind</span><span class="plain-syntax"> = </span><span class="identifier-syntax">K</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ActionSemantics::give_action_two_nouns</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">ActionSemantics::give_action_two_nouns</span></span>:<br/>Actions Plugin - <a href="4-ap.html#SP13_7">&#167;13.7</a>, <a href="4-ap.html#SP13_8">&#167;13.8</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">acc1</span><span class="plain-syntax">, </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K1</span><span class="plain-syntax">,</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ActionSemantics::give_action_two_nouns</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">ActionSemantics::give_action_two_nouns</span></span>:<br/>Actions Plugin - <a href="4-ap.html#SP9_7">&#167;9.7</a>, <a href="4-ap.html#SP9_8">&#167;9.8</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">acc1</span><span class="plain-syntax">, </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K1</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">acc2</span><span class="plain-syntax">, </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K2</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">an</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">semantics</span><span class="plain-syntax">.</span><span class="element-syntax">min_parameters</span><span class="plain-syntax"> = </span><span class="constant-syntax">2</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">an</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">semantics</span><span class="plain-syntax">.</span><span class="identifier-syntax">max_parameters</span><span class="plain-syntax"> = </span><span class="constant-syntax">2</span><span class="plain-syntax">;</span>
@ -174,10 +174,10 @@ preferred way to do that is to use activities for selecting missing parameters.
<span class="plain-syntax"> </span><span class="string-syntax">"value, but not to two values. Sorry about that."</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ActionSemantics::make_action_out_of_world</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">ActionSemantics::make_action_out_of_world</span></span>:<br/>Actions Plugin - <a href="4-ap.html#SP13_1">&#167;13.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ActionSemantics::make_action_out_of_world</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">ActionSemantics::make_action_out_of_world</span></span>:<br/>Actions Plugin - <a href="4-ap.html#SP9_1">&#167;9.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">an</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">semantics</span><span class="plain-syntax">.</span><span class="element-syntax">out_of_world</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ActionSemantics::make_action_require_light</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">ActionSemantics::make_action_require_light</span></span>:<br/>Actions Plugin - <a href="4-ap.html#SP13_4">&#167;13.4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ActionSemantics::make_action_require_light</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">ActionSemantics::make_action_require_light</span></span>:<br/>Actions Plugin - <a href="4-ap.html#SP9_4">&#167;9.4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">an</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">semantics</span><span class="plain-syntax">.</span><span class="element-syntax">requires_light</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
@ -185,22 +185,22 @@ preferred way to do that is to use activities for selecting missing parameters.
</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">ActionSemantics::can_have_noun</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">ActionSemantics::can_have_noun</span></span>:<br/><a href="4-as.html#SP7">&#167;7</a><br/>Action Name Names - <a href="4-ann.html#SP13">&#167;13</a><br/>Action Name Lists - <a href="4-anl.html#SP20_2">&#167;20.2</a>, <a href="4-anl.html#SP24_1_3">&#167;24.1.3</a><br/>Action Patterns - <a href="4-ap2.html#SP3">&#167;3</a><br/>Parse Action Patterns - <a href="4-pap.html#SP23_5_6">&#167;23.5.6</a>, <a href="4-pap.html#SP23_6">&#167;23.6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ActionSemantics::can_have_noun</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">ActionSemantics::can_have_noun</span></span>:<br/><a href="4-as.html#SP7">&#167;7</a><br/>Action Name Names - <a href="4-ann.html#SP13">&#167;13</a><br/>Action Name Lists - <a href="4-anl.html#SP20_2">&#167;20.2</a>, <a href="4-anl.html#SP24_1_3">&#167;24.1.3</a><br/>Explicit Actions - <a href="4-ea.html#SP2">&#167;2</a><br/>Parse Action Patterns - <a href="4-pap.html#SP24_5_6">&#167;24.5.6</a>, <a href="4-pap.html#SP24_6">&#167;24.6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</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">an</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">semantics</span><span class="plain-syntax">.</span><span class="identifier-syntax">max_parameters</span><span class="plain-syntax"> &gt;= </span><span class="constant-syntax">1</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">ActionSemantics::can_have_second</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">ActionSemantics::can_have_second</span></span>:<br/><a href="4-as.html#SP7">&#167;7</a><br/>Action Patterns - <a href="4-ap2.html#SP3">&#167;3</a><br/>Parse Action Patterns - <a href="4-pap.html#SP23_5_6">&#167;23.5.6</a>, <a href="4-pap.html#SP23_6">&#167;23.6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ActionSemantics::can_have_second</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">ActionSemantics::can_have_second</span></span>:<br/><a href="4-as.html#SP7">&#167;7</a><br/>Explicit Actions - <a href="4-ea.html#SP2">&#167;2</a><br/>Parse Action Patterns - <a href="4-pap.html#SP24_5_6">&#167;24.5.6</a>, <a href="4-pap.html#SP24_6">&#167;24.6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</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">an</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">semantics</span><span class="plain-syntax">.</span><span class="identifier-syntax">max_parameters</span><span class="plain-syntax"> &gt;= </span><span class="constant-syntax">2</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">ActionSemantics::must_have_noun</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">ActionSemantics::must_have_noun</span></span>:<br/>Action Patterns - <a href="4-ap2.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ActionSemantics::must_have_noun</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">ActionSemantics::must_have_noun</span></span>:<br/>Explicit Actions - <a href="4-ea.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</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">an</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">semantics</span><span class="plain-syntax">.</span><span class="element-syntax">min_parameters</span><span class="plain-syntax"> &gt;= </span><span class="constant-syntax">1</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">ActionSemantics::must_have_second</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">ActionSemantics::must_have_second</span></span>:<br/>Action Patterns - <a href="4-ap2.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ActionSemantics::must_have_second</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">ActionSemantics::must_have_second</span></span>:<br/>Explicit Actions - <a href="4-ea.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</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">an</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">semantics</span><span class="plain-syntax">.</span><span class="element-syntax">min_parameters</span><span class="plain-syntax"> &gt;= </span><span class="constant-syntax">2</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>
@ -214,7 +214,7 @@ preferred way to do that is to use activities for selecting missing parameters.
<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">ActionSemantics::is_out_of_world</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">ActionSemantics::is_out_of_world</span></span>:<br/>Parse Action Patterns - <a href="4-pap.html#SP23_6">&#167;23.6</a><br/>Grammar Lines - <a href="5-gl.html#SP21">&#167;21</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ActionSemantics::is_out_of_world</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">ActionSemantics::is_out_of_world</span></span>:<br/>Parse Action Patterns - <a href="4-pap.html#SP24_6">&#167;24.6</a><br/>Grammar Lines - <a href="5-gl.html#SP21">&#167;21</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</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">an</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">semantics</span><span class="plain-syntax">.</span><span class="element-syntax">out_of_world</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>
@ -227,11 +227,11 @@ preferred way to do that is to use activities for selecting missing parameters.
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">an</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">semantics</span><span class="plain-syntax">.</span><span class="element-syntax">second_access</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="function-syntax">ActionSemantics::kind_of_noun</span><button class="popup" onclick="togglePopup('usagePopup14')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup14">Usage of <span class="code-font"><span class="function-syntax">ActionSemantics::kind_of_noun</span></span>:<br/><a href="4-as.html#SP6">&#167;6</a>, <a href="4-as.html#SP7">&#167;7</a><br/>Parse Action Patterns - <a href="4-pap.html#SP23_5_5">&#167;23.5.5</a>, <a href="4-pap.html#SP23_5_6">&#167;23.5.6</a>, <a href="4-pap.html#SP23_6">&#167;23.6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="function-syntax">ActionSemantics::kind_of_noun</span><button class="popup" onclick="togglePopup('usagePopup14')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup14">Usage of <span class="code-font"><span class="function-syntax">ActionSemantics::kind_of_noun</span></span>:<br/><a href="4-as.html#SP6">&#167;6</a>, <a href="4-as.html#SP7">&#167;7</a><br/>Parse Action Patterns - <a href="4-pap.html#SP24_5_5">&#167;24.5.5</a>, <a href="4-pap.html#SP24_5_6">&#167;24.5.6</a>, <a href="4-pap.html#SP24_6">&#167;24.6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</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">an</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">semantics</span><span class="plain-syntax">.</span><span class="element-syntax">noun_kind</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="function-syntax">ActionSemantics::kind_of_second</span><button class="popup" onclick="togglePopup('usagePopup15')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup15">Usage of <span class="code-font"><span class="function-syntax">ActionSemantics::kind_of_second</span></span>:<br/><a href="4-as.html#SP6">&#167;6</a><br/>Parse Action Patterns - <a href="4-pap.html#SP23_5_4">&#167;23.5.4</a>, <a href="4-pap.html#SP23_5_5">&#167;23.5.5</a>, <a href="4-pap.html#SP23_5_6">&#167;23.5.6</a>, <a href="4-pap.html#SP23_6">&#167;23.6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="function-syntax">ActionSemantics::kind_of_second</span><button class="popup" onclick="togglePopup('usagePopup15')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup15">Usage of <span class="code-font"><span class="function-syntax">ActionSemantics::kind_of_second</span></span>:<br/><a href="4-as.html#SP6">&#167;6</a><br/>Parse Action Patterns - <a href="4-pap.html#SP24_5_4">&#167;24.5.4</a>, <a href="4-pap.html#SP24_5_5">&#167;24.5.5</a>, <a href="4-pap.html#SP24_5_6">&#167;24.5.6</a>, <a href="4-pap.html#SP24_6">&#167;24.6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</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">an</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">semantics</span><span class="plain-syntax">.</span><span class="element-syntax">second_kind</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
@ -356,7 +356,7 @@ clear from the implementation in <a href="../runtime-module/5-act.html" class="i
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="4-act.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-im.html">1</a></li><li class="progresschapter"><a href="2-bd.html">2</a></li><li class="progresschapter"><a href="3-sm.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresssection"><a href="4-ap.html">ap</a></li><li class="progresssection"><a href="4-anaa.html">anaa</a></li><li class="progresssection"><a href="4-act.html">act</a></li><li class="progresscurrent">as</li><li class="progresssection"><a href="4-av.html">av</a></li><li class="progresssection"><a href="4-ann.html">ann</a></li><li class="progresssection"><a href="4-anl.html">anl</a></li><li class="progresssection"><a href="4-ap2.html">ap2</a></li><li class="progresssection"><a href="4-apc.html">apc</a></li><li class="progresssection"><a href="4-gng.html">gng</a></li><li class="progresssection"><a href="4-pap.html">pap</a></li><li class="progresssection"><a href="4-nap.html">nap</a></li><li class="progresschapter"><a href="5-pp.html">5</a></li><li class="progressnext"><a href="4-av.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="4-act.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-im.html">1</a></li><li class="progresschapter"><a href="2-bd.html">2</a></li><li class="progresschapter"><a href="3-sm.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresssection"><a href="4-ap.html">ap</a></li><li class="progresssection"><a href="4-anaa.html">anaa</a></li><li class="progresssection"><a href="4-ak.html">ak</a></li><li class="progresssection"><a href="4-ac.html">ac</a></li><li class="progresssection"><a href="4-act.html">act</a></li><li class="progresscurrent">as</li><li class="progresssection"><a href="4-av.html">av</a></li><li class="progresssection"><a href="4-ann.html">ann</a></li><li class="progresssection"><a href="4-anl.html">anl</a></li><li class="progresssection"><a href="4-ap2.html">ap2</a></li><li class="progresssection"><a href="4-ea.html">ea</a></li><li class="progresssection"><a href="4-apc.html">apc</a></li><li class="progresssection"><a href="4-gng.html">gng</a></li><li class="progresssection"><a href="4-pap.html">pap</a></li><li class="progresssection"><a href="4-nap.html">nap</a></li><li class="progresschapter"><a href="5-pp.html">5</a></li><li class="progressnext"><a href="4-av.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -81,7 +81,7 @@ into creations of action variables:
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ActionVariables::actions_offered_property</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">ActionVariables::actions_offered_property</span></span>:<br/>Actions Plugin - <a href="4-ap.html#SP1">&#167;1</a></span></button><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">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">owner</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prop</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::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_action_name</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Rvalues::to_action_name</span><span class="plain-syntax">(</span><span class="identifier-syntax">owner</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax"> = </span><a href="4-ak.html#SP5" class="function-link"><span class="function-syntax">ARvalues::to_action_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">owner</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">an</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">"failed to extract action-name structure"</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="identifier-syntax">pass</span><span class="plain-syntax"> == </span><span class="constant-syntax">1</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-av.html#SP1_1" class="named-paragraph-link"><span class="named-paragraph">Require the variable to have an explicit name</span><span class="named-paragraph-number">1.1</span></a></span><span class="plain-syntax">;</span>
@ -297,12 +297,12 @@ action patterns. For example, the Standard Rules define:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">stacked_variable</span><span class="plain-syntax"> *</span><span class="function-syntax">ActionVariables::parse_match_clause</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">ActionVariables::parse_match_clause</span></span>:<br/>Parse Action Patterns - <a href="4-pap.html#SP23_3">&#167;23.3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">stacked_variable</span><span class="plain-syntax"> *</span><span class="function-syntax">ActionVariables::parse_match_clause</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">ActionVariables::parse_match_clause</span></span>:<br/>Parse Action Patterns - <a href="4-pap.html#SP24_3">&#167;24.3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">StackedVariables::parse_match_clause</span><span class="plain-syntax">(</span><span class="identifier-syntax">an</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">action_variables</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="4-as.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-im.html">1</a></li><li class="progresschapter"><a href="2-bd.html">2</a></li><li class="progresschapter"><a href="3-sm.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresssection"><a href="4-ap.html">ap</a></li><li class="progresssection"><a href="4-anaa.html">anaa</a></li><li class="progresssection"><a href="4-act.html">act</a></li><li class="progresssection"><a href="4-as.html">as</a></li><li class="progresscurrent">av</li><li class="progresssection"><a href="4-ann.html">ann</a></li><li class="progresssection"><a href="4-anl.html">anl</a></li><li class="progresssection"><a href="4-ap2.html">ap2</a></li><li class="progresssection"><a href="4-apc.html">apc</a></li><li class="progresssection"><a href="4-gng.html">gng</a></li><li class="progresssection"><a href="4-pap.html">pap</a></li><li class="progresssection"><a href="4-nap.html">nap</a></li><li class="progresschapter"><a href="5-pp.html">5</a></li><li class="progressnext"><a href="4-ann.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="4-as.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-im.html">1</a></li><li class="progresschapter"><a href="2-bd.html">2</a></li><li class="progresschapter"><a href="3-sm.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresssection"><a href="4-ap.html">ap</a></li><li class="progresssection"><a href="4-anaa.html">anaa</a></li><li class="progresssection"><a href="4-ak.html">ak</a></li><li class="progresssection"><a href="4-ac.html">ac</a></li><li class="progresssection"><a href="4-act.html">act</a></li><li class="progresssection"><a href="4-as.html">as</a></li><li class="progresscurrent">av</li><li class="progresssection"><a href="4-ann.html">ann</a></li><li class="progresssection"><a href="4-anl.html">anl</a></li><li class="progresssection"><a href="4-ap2.html">ap2</a></li><li class="progresssection"><a href="4-ea.html">ea</a></li><li class="progresssection"><a href="4-apc.html">apc</a></li><li class="progresssection"><a href="4-gng.html">gng</a></li><li class="progresssection"><a href="4-pap.html">pap</a></li><li class="progresssection"><a href="4-nap.html">nap</a></li><li class="progresschapter"><a href="5-pp.html">5</a></li><li class="progressnext"><a href="4-ann.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

149
docs/if-module/4-ea.html Normal file
View file

@ -0,0 +1,149 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Explicit Actions</title>
<link href="../docs-assets/Breadcrumbs.css" rel="stylesheet" rev="stylesheet" type="text/css">
<meta name="viewport" content="width=device-width initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Content-Language" content="en-gb">
<link href="../docs-assets/Contents.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Progress.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Navigation.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Fonts.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Base.css" rel="stylesheet" rev="stylesheet" type="text/css">
<script>
function togglePopup(material_id) {
var popup = document.getElementById(material_id);
popup.classList.toggle("show");
}
</script>
<link href="../docs-assets/Popups.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
</head>
<body class="commentary-font">
<nav role="navigation">
<h1><a href="../index.html">
<img src="../docs-assets/Inform.png" height=72">
</a></h1>
<ul><li><a href="../compiler.html">compiler tools</a></li>
<li><a href="../other.html">other tools</a></li>
<li><a href="../extensions.html">extensions and kits</a></li>
<li><a href="../units.html">unit test tools</a></li>
</ul><h2>Compiler Webs</h2><ul>
<li><a href="../inbuild/index.html">inbuild</a></li>
<li><a href="../inform7/index.html">inform7</a></li>
<li><a href="../inter/index.html">inter</a></li>
</ul><h2>Inbuild Modules</h2><ul>
<li><a href="../supervisor-module/index.html">supervisor</a></li>
</ul><h2>Inform7 Modules</h2><ul>
<li><a href="../core-module/index.html">core</a></li>
<li><a href="../assertions-module/index.html">assertions</a></li>
<li><a href="../values-module/index.html">values</a></li>
<li><a href="../knowledge-module/index.html">knowledge</a></li>
<li><a href="../imperative-module/index.html">imperative</a></li>
<li><a href="../runtime-module/index.html">runtime</a></li>
<li><a href="index.html"><span class="selectedlink">if</span></a></li>
<li><a href="../multimedia-module/index.html">multimedia</a></li>
<li><a href="../index-module/index.html">index</a></li>
</ul><h2>Inter Modules</h2><ul>
<li><a href="../bytecode-module/index.html">bytecode</a></li>
<li><a href="../building-module/index.html">building</a></li>
<li><a href="../codegen-module/index.html">codegen</a></li>
</ul><h2>Services</h2><ul>
<li><a href="../arch-module/index.html">arch</a></li>
<li><a href="../calculus-module/index.html">calculus</a></li>
<li><a href="../html-module/index.html">html</a></li>
<li><a href="../inflections-module/index.html">inflections</a></li>
<li><a href="../kinds-module/index.html">kinds</a></li>
<li><a href="../linguistics-module/index.html">linguistics</a></li>
<li><a href="../problems-module/index.html">problems</a></li>
<li><a href="../syntax-module/index.html">syntax</a></li>
<li><a href="../words-module/index.html">words</a></li>
<li><a href="../../../inweb/docs/foundation-module/index.html">foundation</a></li>
</ul>
</nav>
<main role="main">
<!--Weave of 'Explicit Actions' generated by Inweb-->
<div class="breadcrumbs">
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../compiler.html">Inform7</a></li><li><a href="index.html">if</a></li><li><a href="index.html#4">Chapter 4: Actions</a></li><li><b>Explicit Actions</b></li></ul></div>
<p class="purpose">An exactly specified action is called "explicit".</p>
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. </b>Explicit actions are used inside the compiler whenever we kmow exactly what
action we are talking about; stored action constants are <a href="4-ea.html#SP1" class="internal">explicit_action</a>
objects in a thin wrapper &mdash; see <a href="4-ak.html" class="internal">Action Kinds</a>.
</p>
<pre class="displayed-code all-displayed-code code-font">
<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">explicit_action</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">request</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">action</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">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">actor</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">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">first_noun</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">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">second_noun</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">as_described</span><span class="plain-syntax">;</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">explicit_action</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>The structure explicit_action is accessed in 4/anaa, 4/ap2 and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b></p>
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">UNDERSPECIFIC_EA_FAILURE</span><span class="plain-syntax"> </span><span class="constant-syntax">1</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">OVERSPECIFIC_EA_FAILURE</span><span class="plain-syntax"> </span><span class="constant-syntax">2</span>
</pre>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">explicit_action</span><span class="plain-syntax"> *</span><span class="function-syntax">ExplicitActions::from_action_pattern</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">ExplicitActions::from_action_pattern</span></span>:<br/>Action Kinds - <a href="4-ak.html#SP6">&#167;6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ap</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="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="4-ea.html#SP2" class="function-link"><span class="function-syntax">ExplicitActions::ap_underspecific</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ap</span><span class="plain-syntax">)) { *</span><span class="identifier-syntax">reason</span><span class="plain-syntax"> = </span><span class="constant-syntax">UNDERSPECIFIC_EA_FAILURE</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">if</span><span class="plain-syntax"> (</span><a href="4-ea.html#SP2" class="function-link"><span class="function-syntax">ExplicitActions::ap_overspecific</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ap</span><span class="plain-syntax">)) { *</span><span class="identifier-syntax">reason</span><span class="plain-syntax"> = </span><span class="constant-syntax">OVERSPECIFIC_EA_FAILURE</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="identifier-syntax">reason</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">explicit_action</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ea</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">explicit_action</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ea</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">action</span><span class="plain-syntax"> = </span><a href="4-anl.html#SP15" class="function-link"><span class="function-syntax">ActionNameLists::get_the_one_true_action</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ap</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">action_list</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ea</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">request</span><span class="plain-syntax"> = </span><a href="4-apc.html#SP3" class="function-link"><span class="function-syntax">APClauses::is_request</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ap</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ea</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">actor</span><span class="plain-syntax"> = </span><a href="4-apc.html#SP3" class="function-link"><span class="function-syntax">APClauses::get_val</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ap</span><span class="plain-syntax">, </span><span class="constant-syntax">ACTOR_AP_CLAUSE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ea</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">first_noun</span><span class="plain-syntax"> = </span><a href="4-apc.html#SP3" class="function-link"><span class="function-syntax">APClauses::get_val</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ap</span><span class="plain-syntax">, </span><span class="constant-syntax">NOUN_AP_CLAUSE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ea</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">second_noun</span><span class="plain-syntax"> = </span><a href="4-apc.html#SP3" class="function-link"><span class="function-syntax">APClauses::get_val</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ap</span><span class="plain-syntax">, </span><span class="constant-syntax">SECOND_AP_CLAUSE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ea</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_described</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ap</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">ea</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">ExplicitActions::ap_underspecific</span><span class="plain-syntax">(</span><span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ap</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax"> = </span><a href="4-ap2.html#SP3" class="function-link"><span class="function-syntax">ActionPatterns::required_action</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ap</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">an</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">TRUE</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-as.html#SP5" class="function-link"><span class="function-syntax">ActionSemantics::must_have_noun</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">an</span><span class="plain-syntax">)) &amp;&amp;</span>
<span class="plain-syntax"> (</span><a href="4-apc.html#SP3" class="function-link"><span class="function-syntax">APClauses::get_val</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ap</span><span class="plain-syntax">, </span><span class="constant-syntax">NOUN_AP_CLAUSE</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">TRUE</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-as.html#SP5" class="function-link"><span class="function-syntax">ActionSemantics::must_have_second</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">an</span><span class="plain-syntax">)) &amp;&amp;</span>
<span class="plain-syntax"> (</span><a href="4-apc.html#SP3" class="function-link"><span class="function-syntax">APClauses::get_val</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ap</span><span class="plain-syntax">, </span><span class="constant-syntax">SECOND_AP_CLAUSE</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">TRUE</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-as.html#SP5" class="function-link"><span class="function-syntax">ActionSemantics::can_have_noun</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">an</span><span class="plain-syntax">)) &amp;&amp;</span>
<span class="plain-syntax"> (</span><a href="4-ea.html#SP2" class="function-link"><span class="function-syntax">ExplicitActions::clause_unspecific</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ap</span><span class="plain-syntax">, </span><span class="constant-syntax">NOUN_AP_CLAUSE</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">if</span><span class="plain-syntax"> ((</span><a href="4-as.html#SP5" class="function-link"><span class="function-syntax">ActionSemantics::can_have_second</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">an</span><span class="plain-syntax">)) &amp;&amp;</span>
<span class="plain-syntax"> (</span><a href="4-ea.html#SP2" class="function-link"><span class="function-syntax">ExplicitActions::clause_unspecific</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ap</span><span class="plain-syntax">, </span><span class="constant-syntax">SECOND_AP_CLAUSE</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">if</span><span class="plain-syntax"> (</span><a href="4-ea.html#SP2" class="function-link"><span class="function-syntax">ExplicitActions::clause_unspecific</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ap</span><span class="plain-syntax">, </span><span class="constant-syntax">ACTOR_AP_CLAUSE</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">ExplicitActions::clause_unspecific</span><span class="plain-syntax">(</span><span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ap</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">C</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">spec</span><span class="plain-syntax"> = </span><a href="4-apc.html#SP3" class="function-link"><span class="function-syntax">APClauses::get_val</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ap</span><span class="plain-syntax">, </span><span class="identifier-syntax">C</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">spec</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">Specifications::is_description</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</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">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">ExplicitActions::ap_overspecific</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">ExplicitActions::ap_overspecific</span></span>:<br/>Action Pattern Clauses - <a href="4-apc.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ap</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">ap_clause</span><span class="plain-syntax"> *</span><span class="identifier-syntax">apoc</span><span class="plain-syntax"> = (</span><span class="identifier-syntax">ap</span><span class="plain-syntax">)?(</span><span class="identifier-syntax">ap</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">ap_clauses</span><span class="plain-syntax">):</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="identifier-syntax">apoc</span><span class="plain-syntax">; </span><span class="identifier-syntax">apoc</span><span class="plain-syntax"> = </span><span class="identifier-syntax">apoc</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="reserved-syntax">if</span><span class="plain-syntax"> ((</span><a href="4-apc.html#SP5" class="function-link"><span class="function-syntax">APClauses::aspect</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">apoc</span><span class="plain-syntax">) != </span><span class="constant-syntax">PRIMARY_APCA</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">apoc</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">clause_spec</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="4-apc.html#SP3" class="function-link"><span class="function-syntax">APClauses::has_any_actor</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ap</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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ap</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">duration</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>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="4-ap2.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-im.html">1</a></li><li class="progresschapter"><a href="2-bd.html">2</a></li><li class="progresschapter"><a href="3-sm.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresssection"><a href="4-ap.html">ap</a></li><li class="progresssection"><a href="4-anaa.html">anaa</a></li><li class="progresssection"><a href="4-ak.html">ak</a></li><li class="progresssection"><a href="4-ac.html">ac</a></li><li class="progresssection"><a href="4-act.html">act</a></li><li class="progresssection"><a href="4-as.html">as</a></li><li class="progresssection"><a href="4-av.html">av</a></li><li class="progresssection"><a href="4-ann.html">ann</a></li><li class="progresssection"><a href="4-anl.html">anl</a></li><li class="progresssection"><a href="4-ap2.html">ap2</a></li><li class="progresscurrent">ea</li><li class="progresssection"><a href="4-apc.html">apc</a></li><li class="progresssection"><a href="4-gng.html">gng</a></li><li class="progresssection"><a href="4-pap.html">pap</a></li><li class="progresssection"><a href="4-nap.html">nap</a></li><li class="progresschapter"><a href="5-pp.html">5</a></li><li class="progressnext"><a href="4-apc.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>
</body>
</html>

View file

@ -84,7 +84,7 @@ function togglePopup(material_id) {
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">going_action</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Going::notice_new_action_name</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">Going::notice_new_action_name</span></span>:<br/>Actions Plugin - <a href="4-ap.html#SP8">&#167;8</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Going::notice_new_action_name</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">Going::notice_new_action_name</span></span>:<br/>Actions Plugin - <a href="4-ap.html#SP4">&#167;4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="function-syntax">&lt;going-action&gt;</span><span class="plain-syntax">(</span><a href="4-ann.html#SP5" class="function-link"><span class="function-syntax">ActionNameNames::tensed</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">an</span><span class="plain-syntax">, </span><span class="identifier-syntax">IS_TENSE</span><span class="plain-syntax">))) </span><span class="identifier-syntax">going_action</span><span class="plain-syntax"> = </span><span class="identifier-syntax">an</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
@ -198,7 +198,7 @@ function togglePopup(material_id) {
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>&#167;5. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Going::check</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">Going::check</span></span>:<br/>Parse Action Patterns - <a href="4-pap.html#SP23_1">&#167;23.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ap</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Going::check</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">Going::check</span></span>:<br/>Parse Action Patterns - <a href="4-pap.html#SP24_1">&#167;24.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ap</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-gng.html#SP5" class="function-link"><span class="function-syntax">Going::check_clause</span></a><span class="plain-syntax">(</span><a href="4-apc.html#SP3" class="function-link"><span class="function-syntax">APClauses::get_val</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ap</span><span class="plain-syntax">, </span><span class="constant-syntax">GOING_FROM_AP_CLAUSE</span><span class="plain-syntax">), </span><span class="string-syntax">"from"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">K_room</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_region</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</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><a href="4-gng.html#SP5" class="function-link"><span class="function-syntax">Going::check_clause</span></a><span class="plain-syntax">(</span><a href="4-apc.html#SP3" class="function-link"><span class="function-syntax">APClauses::get_val</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ap</span><span class="plain-syntax">, </span><span class="constant-syntax">GOING_TO_AP_CLAUSE</span><span class="plain-syntax">), </span><span class="string-syntax">"to"</span><span class="plain-syntax">,</span>
@ -249,20 +249,20 @@ function togglePopup(material_id) {
<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">void</span><span class="plain-syntax"> </span><span class="function-syntax">Going::go_nowhere</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">Going::go_nowhere</span></span>:<br/><a href="4-gng.html#SP8">&#167;8</a><br/>Parse Action Patterns - <a href="4-pap.html#SP23_5">&#167;23.5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ap</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Going::go_nowhere</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">Going::go_nowhere</span></span>:<br/><a href="4-gng.html#SP8">&#167;8</a><br/>Parse Action Patterns - <a href="4-pap.html#SP24_5">&#167;24.5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ap</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="4-apc.html#SP3" class="function-link"><span class="function-syntax">APClauses::set_val</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ap</span><span class="plain-syntax">, </span><span class="constant-syntax">GOING_TO_AP_CLAUSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">Rvalues::new_nothing_object_constant</span><span class="plain-syntax">());</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Going::go_somewhere</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">Going::go_somewhere</span></span>:<br/><a href="4-gng.html#SP8">&#167;8</a><br/>Parse Action Patterns - <a href="4-pap.html#SP23_5">&#167;23.5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ap</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Going::go_somewhere</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">Going::go_somewhere</span></span>:<br/><a href="4-gng.html#SP8">&#167;8</a><br/>Parse Action Patterns - <a href="4-pap.html#SP24_5">&#167;24.5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ap</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="4-apc.html#SP3" class="function-link"><span class="function-syntax">APClauses::set_val</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ap</span><span class="plain-syntax">, </span><span class="constant-syntax">GOING_TO_AP_CLAUSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">Descriptions::from_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_room</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">Going::going_nowhere</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">Going::going_nowhere</span></span>:<br/>Parse Action Patterns - <a href="4-pap.html#SP23_5">&#167;23.5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ap</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Going::going_nowhere</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">Going::going_nowhere</span></span>:<br/>Parse Action Patterns - <a href="4-pap.html#SP24_5">&#167;24.5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ap</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">Rvalues::is_nothing_object_constant</span><span class="plain-syntax">(</span><a href="4-apc.html#SP3" class="function-link"><span class="function-syntax">APClauses::get_val</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ap</span><span class="plain-syntax">, </span><span class="constant-syntax">GOING_TO_AP_CLAUSE</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">Going::going_somewhere</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">Going::going_somewhere</span></span>:<br/>Parse Action Patterns - <a href="4-pap.html#SP23_5">&#167;23.5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ap</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Going::going_somewhere</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">Going::going_somewhere</span></span>:<br/>Parse Action Patterns - <a href="4-pap.html#SP24_5">&#167;24.5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ap</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">val</span><span class="plain-syntax"> = </span><a href="4-apc.html#SP3" class="function-link"><span class="function-syntax">APClauses::get_val</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ap</span><span class="plain-syntax">, </span><span class="constant-syntax">GOING_TO_AP_CLAUSE</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">Descriptions::is_kind_like</span><span class="plain-syntax">(</span><span class="identifier-syntax">val</span><span class="plain-syntax">)) &amp;&amp; (</span><span class="identifier-syntax">Kinds::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">Descriptions::explicit_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">val</span><span class="plain-syntax">), </span><span class="identifier-syntax">K_room</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>
@ -296,7 +296,7 @@ to make sure it actually exists. So this can be used to see if the need arises:
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>&#167;8. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Going::claim_noun</span><button class="popup" onclick="togglePopup('usagePopup12')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup12">Usage of <span class="code-font"><span class="function-syntax">Going::claim_noun</span></span>:<br/>Parse Action Patterns - <a href="4-pap.html#SP23_5_4">&#167;23.5.4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax">, </span><span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ap</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Going::claim_noun</span><button class="popup" onclick="togglePopup('usagePopup12')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup12">Usage of <span class="code-font"><span class="function-syntax">Going::claim_noun</span></span>:<br/>Parse Action Patterns - <a href="4-pap.html#SP24_5_4">&#167;24.5.4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax">, </span><span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ap</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">an</span><span class="plain-syntax"> == </span><span class="identifier-syntax">going_action</span><span class="plain-syntax">) &amp;&amp; (</span><span class="function-syntax">&lt;going-action-irregular-operand&gt;</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">))) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="function-syntax">&lt;&lt;r&gt;&gt;</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) </span><a href="4-gng.html#SP5" class="function-link"><span class="function-syntax">Going::go_nowhere</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ap</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><a href="4-gng.html#SP5" class="function-link"><span class="function-syntax">Going::go_somewhere</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ap</span><span class="plain-syntax">);</span>
@ -306,7 +306,7 @@ to make sure it actually exists. So this can be used to see if the need arises:
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="4-apc.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-im.html">1</a></li><li class="progresschapter"><a href="2-bd.html">2</a></li><li class="progresschapter"><a href="3-sm.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresssection"><a href="4-ap.html">ap</a></li><li class="progresssection"><a href="4-anaa.html">anaa</a></li><li class="progresssection"><a href="4-act.html">act</a></li><li class="progresssection"><a href="4-as.html">as</a></li><li class="progresssection"><a href="4-av.html">av</a></li><li class="progresssection"><a href="4-ann.html">ann</a></li><li class="progresssection"><a href="4-anl.html">anl</a></li><li class="progresssection"><a href="4-ap2.html">ap2</a></li><li class="progresssection"><a href="4-apc.html">apc</a></li><li class="progresscurrent">gng</li><li class="progresssection"><a href="4-pap.html">pap</a></li><li class="progresssection"><a href="4-nap.html">nap</a></li><li class="progresschapter"><a href="5-pp.html">5</a></li><li class="progressnext"><a href="4-pap.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="4-apc.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-im.html">1</a></li><li class="progresschapter"><a href="2-bd.html">2</a></li><li class="progresschapter"><a href="3-sm.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresssection"><a href="4-ap.html">ap</a></li><li class="progresssection"><a href="4-anaa.html">anaa</a></li><li class="progresssection"><a href="4-ak.html">ak</a></li><li class="progresssection"><a href="4-ac.html">ac</a></li><li class="progresssection"><a href="4-act.html">act</a></li><li class="progresssection"><a href="4-as.html">as</a></li><li class="progresssection"><a href="4-av.html">av</a></li><li class="progresssection"><a href="4-ann.html">ann</a></li><li class="progresssection"><a href="4-anl.html">anl</a></li><li class="progresssection"><a href="4-ap2.html">ap2</a></li><li class="progresssection"><a href="4-ea.html">ea</a></li><li class="progresssection"><a href="4-apc.html">apc</a></li><li class="progresscurrent">gng</li><li class="progresssection"><a href="4-pap.html">pap</a></li><li class="progresssection"><a href="4-nap.html">nap</a></li><li class="progresschapter"><a href="5-pp.html">5</a></li><li class="progressnext"><a href="4-pap.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -135,7 +135,7 @@ an action.
<span class="reserved-syntax">named_action_pattern</span><span class="plain-syntax"> *</span><span class="function-syntax">NamedActionPatterns::by_name</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">NamedActionPatterns::by_name</span></span>:<br/><a href="4-nap.html#SP4">&#167;4</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</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">p</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Lexicon::retrieve</span><span class="plain-syntax">(</span><span class="identifier-syntax">NAMED_AP_MC</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">p</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">Rvalues::to_named_action_pattern</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">return</span><span class="plain-syntax"> </span><a href="4-ak.html#SP7" class="function-link"><span class="function-syntax">ARvalues::to_named_action_pattern</span></a><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><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
@ -145,7 +145,7 @@ an action.
<span class="plain-syntax"> </span><span class="identifier-syntax">nap</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">text_of_declaration</span><span class="plain-syntax"> = </span><span class="identifier-syntax">W</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">nap</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">compilation_data</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RTNamedActionPatterns::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">nap</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">nap</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_noun</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Nouns::new_proper_noun</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">NEUTER_GENDER</span><span class="plain-syntax">, </span><span class="identifier-syntax">ADD_TO_LEXICON_NTOPT</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">NAMED_AP_MC</span><span class="plain-syntax">, </span><span class="identifier-syntax">Rvalues::from_named_action_pattern</span><span class="plain-syntax">(</span><span class="identifier-syntax">nap</span><span class="plain-syntax">), </span><span class="identifier-syntax">Task::language_of_syntax</span><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">NAMED_AP_MC</span><span class="plain-syntax">, </span><a href="4-ak.html#SP7" class="function-link"><span class="function-syntax">ARvalues::from_named_action_pattern</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nap</span><span class="plain-syntax">), </span><span class="identifier-syntax">Task::language_of_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">nap</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
@ -177,7 +177,7 @@ if and only if it appears in one of the patterns in the list:
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="4-pap.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-im.html">1</a></li><li class="progresschapter"><a href="2-bd.html">2</a></li><li class="progresschapter"><a href="3-sm.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresssection"><a href="4-ap.html">ap</a></li><li class="progresssection"><a href="4-anaa.html">anaa</a></li><li class="progresssection"><a href="4-act.html">act</a></li><li class="progresssection"><a href="4-as.html">as</a></li><li class="progresssection"><a href="4-av.html">av</a></li><li class="progresssection"><a href="4-ann.html">ann</a></li><li class="progresssection"><a href="4-anl.html">anl</a></li><li class="progresssection"><a href="4-ap2.html">ap2</a></li><li class="progresssection"><a href="4-apc.html">apc</a></li><li class="progresssection"><a href="4-gng.html">gng</a></li><li class="progresssection"><a href="4-pap.html">pap</a></li><li class="progresscurrent">nap</li><li class="progresschapter"><a href="5-pp.html">5</a></li><li class="progressnext"><a href="5-pp.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="4-pap.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-im.html">1</a></li><li class="progresschapter"><a href="2-bd.html">2</a></li><li class="progresschapter"><a href="3-sm.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresssection"><a href="4-ap.html">ap</a></li><li class="progresssection"><a href="4-anaa.html">anaa</a></li><li class="progresssection"><a href="4-ak.html">ak</a></li><li class="progresssection"><a href="4-ac.html">ac</a></li><li class="progresssection"><a href="4-act.html">act</a></li><li class="progresssection"><a href="4-as.html">as</a></li><li class="progresssection"><a href="4-av.html">av</a></li><li class="progresssection"><a href="4-ann.html">ann</a></li><li class="progresssection"><a href="4-anl.html">anl</a></li><li class="progresssection"><a href="4-ap2.html">ap2</a></li><li class="progresssection"><a href="4-ea.html">ea</a></li><li class="progresssection"><a href="4-apc.html">apc</a></li><li class="progresssection"><a href="4-gng.html">gng</a></li><li class="progresssection"><a href="4-pap.html">pap</a></li><li class="progresscurrent">nap</li><li class="progresschapter"><a href="5-pp.html">5</a></li><li class="progressnext"><a href="5-pp.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -73,26 +73,53 @@ function togglePopup(material_id) {
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../compiler.html">Inform7</a></li><li><a href="index.html">if</a></li><li><a href="index.html#4">Chapter 4: Actions</a></li><li><b>Parse Action Patterns</b></li></ul></div>
<p class="purpose">Turning text into APs.</p>
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. </b>When we parse action patterns, we record why they fail, in order to make
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. </b>Action patterns, such as "taking a container" or "opening a closed door",
are wrapped up as values here:
</p>
<pre class="Preform-displayed-code all-displayed-code code-font">
<span class="Preform-function-syntax">&lt;s-action-pattern-as-value&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">internal</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">{</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">if</span><span class="Preform-plain-syntax"> (</span><span class="Preform-identifier-syntax">Wordings::mismatched_brackets</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">W</span><span class="Preform-plain-syntax">)) { ==&gt; { </span><span class="Preform-identifier-syntax">fail</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">nonterminal</span><span class="Preform-plain-syntax"> }; }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">if</span><span class="Preform-plain-syntax"> (</span><span class="Preform-identifier-syntax">Lexer::word</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">Wordings::first_wn</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">W</span><span class="Preform-plain-syntax">)) == </span><span class="Preform-identifier-syntax">OPENBRACE_V</span><span class="Preform-plain-syntax">) { ==&gt; { </span><span class="Preform-identifier-syntax">fail</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">nonterminal</span><span class="Preform-plain-syntax"> }; }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">int</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">pto</span><span class="Preform-plain-syntax"> = </span><span class="Preform-identifier-syntax">permit_trying_omission</span><span class="Preform-plain-syntax">;</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">if</span><span class="Preform-plain-syntax"> (</span><span class="Preform-function-syntax">&lt;definite-article&gt;</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">Wordings::first_word</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">W</span><span class="Preform-plain-syntax">)) == </span><span class="Preform-identifier-syntax">FALSE</span><span class="Preform-plain-syntax">) </span><span class="Preform-identifier-syntax">permit_trying_omission</span><span class="Preform-plain-syntax"> = </span><span class="Preform-identifier-syntax">TRUE</span><span class="Preform-plain-syntax">;</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">int</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">r</span><span class="Preform-plain-syntax"> = </span><span class="Preform-function-syntax">&lt;action-pattern&gt;</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">W</span><span class="Preform-plain-syntax">);</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">permit_trying_omission</span><span class="Preform-plain-syntax"> = </span><span class="Preform-identifier-syntax">pto</span><span class="Preform-plain-syntax">;</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">if</span><span class="Preform-plain-syntax"> (</span><span class="Preform-identifier-syntax">r</span><span class="Preform-plain-syntax">) {</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">action_pattern</span><span class="Preform-plain-syntax"> *</span><span class="Preform-identifier-syntax">ap</span><span class="Preform-plain-syntax"> = </span><span class="Preform-function-syntax">&lt;&lt;rp&gt;&gt;</span><span class="Preform-plain-syntax">;</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">if</span><span class="Preform-plain-syntax"> ((</span><a href="4-apc.html#SP3" class="function-link"><span class="Preform-function-syntax">APClauses::get_val</span></a><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">ap</span><span class="Preform-plain-syntax">, </span><span class="Preform-constant-syntax">ACTOR_AP_CLAUSE</span><span class="Preform-plain-syntax">)) &amp;&amp;</span>
<span class="Preform-plain-syntax"> (</span><span class="Preform-identifier-syntax">Dash::validate_parameter</span><span class="Preform-plain-syntax">(</span><a href="4-apc.html#SP3" class="function-link"><span class="Preform-function-syntax">APClauses::get_val</span></a><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">ap</span><span class="Preform-plain-syntax">, </span><span class="Preform-constant-syntax">ACTOR_AP_CLAUSE</span><span class="Preform-plain-syntax">), </span><span class="Preform-identifier-syntax">K_person</span><span class="Preform-plain-syntax">) == </span><span class="Preform-identifier-syntax">FALSE</span><span class="Preform-plain-syntax">)) {</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">r</span><span class="Preform-plain-syntax"> = </span><span class="Preform-function-syntax">&lt;action-pattern&gt;</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">W</span><span class="Preform-plain-syntax">);</span>
<span class="Preform-plain-syntax"> }</span>
<span class="Preform-plain-syntax"> }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">if</span><span class="Preform-plain-syntax"> (</span><span class="Preform-identifier-syntax">r</span><span class="Preform-plain-syntax">) {</span>
<span class="Preform-plain-syntax"> ==&gt; { -, </span><a href="4-ac.html#SP1" class="function-link"><span class="Preform-function-syntax">AConditions::new_action_TEST_VALUE</span></a><span class="Preform-plain-syntax">(</span><span class="Preform-function-syntax">&lt;&lt;rp&gt;&gt;</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">W</span><span class="Preform-plain-syntax">) };</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">return</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">TRUE</span><span class="Preform-plain-syntax">;</span>
<span class="Preform-plain-syntax"> }</span>
<span class="Preform-plain-syntax"> ==&gt; { </span><span class="Preform-identifier-syntax">fail</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">nonterminal</span><span class="Preform-plain-syntax"> };</span>
<span class="Preform-plain-syntax">}</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>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b>When we parse action patterns, we record why they fail, in order to make
it easier to produce helpful error messages. (We can't simply fire off
errors at the time they occur, because text is often parsed in several
contexts at once, so just because it fails this one does not mean it is
wrong.) PAPF stands for "parse action pattern failure".
</p>
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">MISC_PAPF</span><span class="plain-syntax"> </span><span class="constant-syntax">1</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">NOPARTICIPLE_PAPF</span><span class="plain-syntax"> </span><span class="constant-syntax">2</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">MIXEDNOUNS_PAPF</span><span class="plain-syntax"> </span><span class="constant-syntax">3</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">WHEN_PAPF</span><span class="plain-syntax"> </span><span class="constant-syntax">4</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">WHENOKAY_PAPF</span><span class="plain-syntax"> </span><span class="constant-syntax">5</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">IMMISCIBLE_PAPF</span><span class="plain-syntax"> </span><span class="constant-syntax">6</span>
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="Preform-constant-syntax">MISC_PAPF</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">1</span>
<span class="definition-keyword">define</span> <span class="Preform-constant-syntax">NOPARTICIPLE_PAPF</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">2</span>
<span class="definition-keyword">define</span> <span class="Preform-constant-syntax">MIXEDNOUNS_PAPF</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">3</span>
<span class="definition-keyword">define</span> <span class="Preform-constant-syntax">WHEN_PAPF</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">4</span>
<span class="definition-keyword">define</span> <span class="Preform-constant-syntax">WHENOKAY_PAPF</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">5</span>
<span class="definition-keyword">define</span> <span class="Preform-constant-syntax">IMMISCIBLE_PAPF</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">6</span>
</pre>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">pap_failure_reason</span><span class="plain-syntax">; </span><span class="comment-syntax"> one of the above</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">permit_trying_omission</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">; </span><span class="comment-syntax"> allow the keyword 'trying' to be omitted</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">permit_nonconstant_action_parameters</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
</pre>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b>NB: Next time this is rewritten - (1) handle in, in the presence of, with
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b>NB: Next time this is rewritten - (1) handle in, in the presence of, with
STV clauses; (2) get this right:
</p>
@ -103,7 +130,7 @@ STV clauses; (2) get this right:
say "Where did you want to go?"
</p>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b>First a much easier, parametric form of parsing, used for the APs which
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. </b>First a much easier, parametric form of parsing, used for the APs which
form the usage conditions for rules in object-based rulebooks.
</p>
@ -111,23 +138,23 @@ form the usage conditions for rules in object-based rulebooks.
<span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> </span><span class="function-syntax">ParseActionPatterns::parametric</span><span class="plain-syntax">(</span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</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="plain-syntax"> </span><span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> </span><span class="identifier-syntax">ap</span><span class="plain-syntax"> = </span><a href="4-ap2.html#SP2" class="function-link"><span class="function-syntax">ActionPatterns::new</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ap</span><span class="plain-syntax">.</span><span class="element-syntax">parameter_kind</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">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">spec</span><span class="plain-syntax"> = </span><a href="4-pap.html#SP4" class="function-link"><span class="function-syntax">ParseActionPatterns::parameter</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</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">spec</span><span class="plain-syntax"> = </span><a href="4-pap.html#SP5" class="function-link"><span class="function-syntax">ParseActionPatterns::parameter</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="4-apc.html#SP3" class="function-link"><span class="function-syntax">APClauses::set_val</span></a><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">ap</span><span class="plain-syntax">, </span><span class="constant-syntax">PARAMETRIC_AP_CLAUSE</span><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">ap</span><span class="plain-syntax">.</span><span class="element-syntax">valid</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Dash::validate_parameter</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">ap</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. </b>A useful utility: parsing a parameter in an action pattern.
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>&#167;5. </b>A useful utility: parsing a parameter in an action pattern.
</p>
<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">ParseActionPatterns::parameter</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">ParseActionPatterns::parameter</span></span>:<br/><a href="4-pap.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="function-syntax">ParseActionPatterns::parameter</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">ParseActionPatterns::parameter</span></span>:<br/><a href="4-pap.html#SP4">&#167;4</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="function-syntax">&lt;action-parameter&gt;</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="function-syntax">&lt;&lt;rp&gt;&gt;</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">Specifications::new_UNKNOWN</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</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">ParseActionPatterns::verified_action_parameter</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">ParseActionPatterns::verified_action_parameter</span></span>:<br/>Action Pattern Clauses - <a href="4-apc.html#SP4">&#167;4</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</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">spec</span><span class="plain-syntax"> = </span><a href="4-pap.html#SP4" class="function-link"><span class="function-syntax">ParseActionPatterns::parameter</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</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">spec</span><span class="plain-syntax"> = </span><a href="4-pap.html#SP5" class="function-link"><span class="function-syntax">ParseActionPatterns::parameter</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Node::is</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</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_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_wording</span><span class="plain-syntax">(2, </span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
@ -141,7 +168,7 @@ form the usage conditions for rules in object-based rulebooks.
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">spec</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>&#167;5. </b></p>
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>&#167;6. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">scanning_anl_only_mode</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
@ -164,7 +191,7 @@ form the usage conditions for rules in object-based rulebooks.
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">anl</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>&#167;6. </b>The main action pattern parser is called only by the following shell
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>&#167;7. </b>The main action pattern parser is called only by the following shell
routine, which exists in order to change some parsing rules.
</p>
@ -177,7 +204,7 @@ matched action pattern.
<span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">last_successful_wording</span><span class="plain-syntax"> = </span><span class="identifier-syntax">EMPTY_WORDING_INIT</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">prevailing_ap_tense</span><span class="plain-syntax"> = </span><span class="identifier-syntax">IS_TENSE</span><span class="plain-syntax">;</span>
</pre>
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>&#167;7. </b>In fact these codes aren't used any more:
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>&#167;8. </b>In fact these codes aren't used any more:
</p>
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">ACTOR_REQUESTED</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span>
@ -186,7 +213,7 @@ matched action pattern.
<span class="definition-keyword">define</span> <span class="constant-syntax">ACTOR_EXPLICITLY_PLAYER</span><span class="plain-syntax"> </span><span class="constant-syntax">3</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">ACTOR_IMPLICITLY_PLAYER</span><span class="plain-syntax"> </span><span class="constant-syntax">4</span>
</pre>
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>&#167;8. </b>Action patterns are textual descriptions which act as predicates on actions,
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>&#167;9. </b>Action patterns are textual descriptions which act as predicates on actions,
that is, they are descriptions which are true of some actions and false of
others. For example,
</p>
@ -234,7 +261,7 @@ These are always present tense, and can't be negated.
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;action-pattern-core-actor&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { ACTOR_IMPLICITLY_PLAYER, RP[1] };</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>
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>&#167;9. </b>The second version is for contexts where the AP occurs as a condition: e.g.,
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>&#167;10. </b>The second version is for contexts where the AP occurs as a condition: e.g.,
in a sentence like "if we have taken a jewel". Since these can occur in
both tenses and can be negated ("if we are not taking a jewel"), there are
four combinations:
@ -280,7 +307,7 @@ four combinations:
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">we</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">have</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">not</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;action-pattern-past-core&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { ACTOR_EXPLICITLY_PLAYER, RP[1] };</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>
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>&#167;10. </b>There is one more tweak at this top level. Inform allows an ambiguous but
<p class="commentary firstcommentary"><a id="SP11" class="paragraph-anchor"></a><b>&#167;11. </b>There is one more tweak at this top level. Inform allows an ambiguous but
shorter and more natural syntax in which the actor's name simply appears at
the front of the AP:
</p>
@ -302,7 +329,7 @@ actorless possibility can always be written.
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;actor-description&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;action-pattern-core&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { ACTOR_NAMED, RP[2] }; action_pattern *ap = *XP; APClauses::clear_request(ap); APClauses::set_val(ap, ACTOR_AP_CLAUSE, RP[1]);</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>
<p class="commentary firstcommentary"><a id="SP11" class="paragraph-anchor"></a><b>&#167;11. </b>And this voracious token matches the actor's name as an initial excerpt,
<p class="commentary firstcommentary"><a id="SP12" class="paragraph-anchor"></a><b>&#167;12. </b>And this voracious token matches the actor's name as an initial excerpt,
which is much faster than exhaustive searching. It tries to break just before
any "-ing" word (i.e., participle) which is not inside parentheses; but only
if the resulting name matches &lt;action-parameter&gt; as a constant,
@ -332,9 +359,9 @@ would match as an abbreviated form of the name of "angry waiting man".
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">if</span><span class="Preform-plain-syntax"> (</span><span class="Preform-function-syntax">&lt;k-kind&gt;</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">Wordings::up_to</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">W</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">i</span><span class="Preform-plain-syntax">-1))) </span><span class="Preform-reserved-syntax">continue</span><span class="Preform-plain-syntax">;</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">parse_node</span><span class="Preform-plain-syntax"> *</span><span class="Preform-identifier-syntax">try_stem</span><span class="Preform-plain-syntax"> = </span><span class="Preform-identifier-syntax">NULL</span><span class="Preform-plain-syntax">;</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">instance</span><span class="Preform-plain-syntax"> *</span><span class="Preform-identifier-syntax">I</span><span class="Preform-plain-syntax">;</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">int</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">old_state</span><span class="Preform-plain-syntax"> = </span><a href="4-pap.html#SP12" class="function-link"><span class="Preform-function-syntax">ParseActionPatterns::suppress</span></a><span class="Preform-plain-syntax">();</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">int</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">old_state</span><span class="Preform-plain-syntax"> = </span><a href="4-pap.html#SP13" class="function-link"><span class="Preform-function-syntax">ParseActionPatterns::suppress</span></a><span class="Preform-plain-syntax">();</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">if</span><span class="Preform-plain-syntax"> (</span><span class="Preform-function-syntax">&lt;action-parameter&gt;</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">Wordings::up_to</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">W</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">i</span><span class="Preform-plain-syntax">-1))) </span><span class="Preform-identifier-syntax">try_stem</span><span class="Preform-plain-syntax"> = </span><span class="Preform-function-syntax">&lt;&lt;rp&gt;&gt;</span><span class="Preform-plain-syntax">;</span>
<span class="Preform-plain-syntax"> </span><a href="4-pap.html#SP12" class="function-link"><span class="Preform-function-syntax">ParseActionPatterns::resume</span></a><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">old_state</span><span class="Preform-plain-syntax">);</span>
<span class="Preform-plain-syntax"> </span><a href="4-pap.html#SP13" class="function-link"><span class="Preform-function-syntax">ParseActionPatterns::resume</span></a><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">old_state</span><span class="Preform-plain-syntax">);</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">int</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">k</span><span class="Preform-plain-syntax"> = </span><span class="Preform-constant-syntax">0</span><span class="Preform-plain-syntax">;</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">LOOP_THROUGH_WORDING</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">j</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">Wordings::up_to</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">W</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">i</span><span class="Preform-plain-syntax">-1))</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">if</span><span class="Preform-plain-syntax"> (</span><span class="Preform-identifier-syntax">Vocabulary::test_flags</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">j</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">ACTION_PARTICIPLE_MC</span><span class="Preform-plain-syntax">)) </span><span class="Preform-identifier-syntax">k</span><span class="Preform-plain-syntax">++;</span>
@ -358,20 +385,20 @@ would match as an abbreviated form of the name of "angry waiting man".
<span class="Preform-plain-syntax">}</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>
<p class="commentary firstcommentary"><a id="SP12" class="paragraph-anchor"></a><b>&#167;12. </b></p>
<p class="commentary firstcommentary"><a id="SP13" class="paragraph-anchor"></a><b>&#167;13. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ParseActionPatterns::suppress</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">ParseActionPatterns::suppress</span></span>:<br/><a href="4-pap.html#SP11">&#167;11</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ParseActionPatterns::suppress</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">ParseActionPatterns::suppress</span></span>:<br/><a href="4-pap.html#SP12">&#167;12</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</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">old_state</span><span class="plain-syntax"> = </span><span class="identifier-syntax">suppress_ap_parsing</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">suppress_ap_parsing</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">old_state</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ParseActionPatterns::resume</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">ParseActionPatterns::resume</span></span>:<br/><a href="4-pap.html#SP11">&#167;11</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">old_state</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ParseActionPatterns::resume</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">ParseActionPatterns::resume</span></span>:<br/><a href="4-pap.html#SP12">&#167;12</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">old_state</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">suppress_ap_parsing</span><span class="plain-syntax"> = </span><span class="identifier-syntax">old_state</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP13" class="paragraph-anchor"></a><b>&#167;13. </b>That completes the top level, and we can forget about actors. All of those
<p class="commentary firstcommentary"><a id="SP14" class="paragraph-anchor"></a><b>&#167;14. </b>That completes the top level, and we can forget about actors. All of those
productions come down now to just two nonterminals, one for the present tense,
</p>
@ -399,19 +426,19 @@ trimmed away;
<pre class="Preform-displayed-code all-displayed-code code-font">
<span class="Preform-function-syntax">&lt;action-pattern-core&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">internal</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">{</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">if</span><span class="Preform-plain-syntax"> (</span><span class="Preform-identifier-syntax">suppress_ap_parsing</span><span class="Preform-plain-syntax">) </span><span class="Preform-reserved-syntax">return</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">FALSE</span><span class="Preform-plain-syntax">;</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">action_pattern</span><span class="Preform-plain-syntax"> *</span><span class="Preform-identifier-syntax">ap</span><span class="Preform-plain-syntax"> = </span><a href="4-pap.html#SP15" class="function-link"><span class="Preform-function-syntax">ParseActionPatterns::inner</span></a><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">W</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">IS_TENSE</span><span class="Preform-plain-syntax">);</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">action_pattern</span><span class="Preform-plain-syntax"> *</span><span class="Preform-identifier-syntax">ap</span><span class="Preform-plain-syntax"> = </span><a href="4-pap.html#SP16" class="function-link"><span class="Preform-function-syntax">ParseActionPatterns::inner</span></a><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">W</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">IS_TENSE</span><span class="Preform-plain-syntax">);</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">if</span><span class="Preform-plain-syntax"> (</span><span class="Preform-identifier-syntax">ap</span><span class="Preform-plain-syntax">) { ==&gt; { -, </span><span class="Preform-identifier-syntax">ap</span><span class="Preform-plain-syntax"> }; </span><span class="Preform-reserved-syntax">return</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">TRUE</span><span class="Preform-plain-syntax">; }</span>
<span class="Preform-plain-syntax"> ==&gt; { </span><span class="Preform-identifier-syntax">fail</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">nonterminal</span><span class="Preform-plain-syntax"> };</span>
<span class="Preform-plain-syntax">}</span>
<span class="Preform-function-syntax">&lt;action-pattern-past-core&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">internal</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">{</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">action_pattern</span><span class="Preform-plain-syntax"> *</span><span class="Preform-identifier-syntax">ap</span><span class="Preform-plain-syntax"> = </span><a href="4-pap.html#SP15" class="function-link"><span class="Preform-function-syntax">ParseActionPatterns::inner</span></a><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">W</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">HASBEEN_TENSE</span><span class="Preform-plain-syntax">);</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">action_pattern</span><span class="Preform-plain-syntax"> *</span><span class="Preform-identifier-syntax">ap</span><span class="Preform-plain-syntax"> = </span><a href="4-pap.html#SP16" class="function-link"><span class="Preform-function-syntax">ParseActionPatterns::inner</span></a><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">W</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">HASBEEN_TENSE</span><span class="Preform-plain-syntax">);</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">if</span><span class="Preform-plain-syntax"> (</span><span class="Preform-identifier-syntax">ap</span><span class="Preform-plain-syntax">) { ==&gt; { -, </span><span class="Preform-identifier-syntax">ap</span><span class="Preform-plain-syntax"> }; </span><span class="Preform-reserved-syntax">return</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">TRUE</span><span class="Preform-plain-syntax">; }</span>
<span class="Preform-plain-syntax"> ==&gt; { </span><span class="Preform-identifier-syntax">fail</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">nonterminal</span><span class="Preform-plain-syntax"> };</span>
<span class="Preform-plain-syntax">}</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>
<p class="commentary firstcommentary"><a id="SP14" class="paragraph-anchor"></a><b>&#167;14. </b>"Doing it" is not the happiest of syntaxes. The idea is for this to be
<p class="commentary firstcommentary"><a id="SP15" class="paragraph-anchor"></a><b>&#167;15. </b>"Doing it" is not the happiest of syntaxes. The idea is for this to be
a sort of pronoun for actions, allowing for anaphora, but to parse such things
naturally in all cases is wishful thinking. It enables us to write, e.g.:
</p>
@ -429,10 +456,10 @@ possibility for confusion is too great; perhaps we should just cut this idea.
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">doing</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">it</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>
<p class="commentary firstcommentary"><a id="SP15" class="paragraph-anchor"></a><b>&#167;15. </b></p>
<p class="commentary firstcommentary"><a id="SP16" class="paragraph-anchor"></a><b>&#167;16. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="function-syntax">ParseActionPatterns::inner</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">ParseActionPatterns::inner</span></span>:<br/><a href="4-pap.html#SP13">&#167;13</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">tense</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="function-syntax">ParseActionPatterns::inner</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">ParseActionPatterns::inner</span></span>:<br/><a href="4-pap.html#SP14">&#167;14</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">tense</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">Lexer::word</span><span class="plain-syntax">(</span><span class="identifier-syntax">Wordings::first_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">)) == </span><span class="identifier-syntax">OPENBRACE_V</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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Wordings::empty</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">)) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"PAP on illegal word range"</span><span class="plain-syntax">);</span>
@ -472,7 +499,7 @@ possibility for confusion is too great; perhaps we should just cut this idea.
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">ap</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP16" class="paragraph-anchor"></a><b>&#167;16. </b>Anyway, we are now down to level 3: all action patterns have been whittled
<p class="commentary firstcommentary"><a id="SP17" class="paragraph-anchor"></a><b>&#167;17. </b>Anyway, we are now down to level 3: all action patterns have been whittled
down to a single use of &lt;ap-common-core&gt;. Our next step is to recognise
a condition attached with "when":
</p>
@ -485,7 +512,7 @@ a condition attached with "when":
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">when/while</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, NULL }; if (pap_failure_reason != WHENOKAY_PAPF) pap_failure_reason = WHEN_PAPF; return FALSE; </span><span class="Preform-comment-syntax"> used only to diagnose problems</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>
<p class="commentary firstcommentary"><a id="SP17" class="paragraph-anchor"></a><b>&#167;17. </b>&lt;condition-in-ap&gt; is really just &lt;spec-condition&gt; in disguise &mdash; i.e.,
<p class="commentary firstcommentary"><a id="SP18" class="paragraph-anchor"></a><b>&#167;18. </b>&lt;condition-in-ap&gt; is really just &lt;spec-condition&gt; in disguise &mdash; i.e.,
it matches a standard Inform condition &mdash; but it's implemented as an internal
to enable Inform to set up a stack frame if there isn't one already, and so on.
</p>
@ -515,7 +542,7 @@ to enable Inform to set up a stack frame if there isn't one already, and so on.
<span class="Preform-plain-syntax">}</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>
<p class="commentary firstcommentary"><a id="SP18" class="paragraph-anchor"></a><b>&#167;18. </b>Level 4 now. The optional "in the presence of":
<p class="commentary firstcommentary"><a id="SP19" class="paragraph-anchor"></a><b>&#167;19. </b>Level 4 now. The optional "in the presence of":
</p>
<pre class="Preform-displayed-code all-displayed-code code-font">
@ -524,7 +551,7 @@ to enable Inform to set up a stack frame if there isn't one already, and so on.
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;ap-common-core-inner-inner&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { 0, RP[1] };</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>
<p class="commentary firstcommentary"><a id="SP19" class="paragraph-anchor"></a><b>&#167;19. </b>Level 5 now. The initial "in" clause, e.g., "in the Pantry", requires
<p class="commentary firstcommentary"><a id="SP20" class="paragraph-anchor"></a><b>&#167;20. </b>Level 5 now. The initial "in" clause, e.g., "in the Pantry", requires
special handling to prevent it from clashing with other interpretations of
"in" elsewhere in the grammar. It's perhaps unexpected that "in the Pantry"
is valid as an AP, but this enables many natural-looking rules to be written
@ -533,11 +560,11 @@ is valid as an AP, but this enables many natural-looking rules to be written
<pre class="Preform-displayed-code all-displayed-code code-font">
<span class="Preform-function-syntax">&lt;ap-common-core-inner-inner&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;action-parameter&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="4-pap.html#SP19_1" class="named-paragraph-link"><span class="named-paragraph">Make an actionless action pattern, specifying room only</span><span class="named-paragraph-number">19.1</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-function-syntax">&lt;action-parameter&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="4-pap.html#SP20_1" class="named-paragraph-link"><span class="named-paragraph">Make an actionless action pattern, specifying room only</span><span class="named-paragraph-number">20.1</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;ap-common-core-inner-inner-inner&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { 0, RP[1] };</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>
<p class="commentary firstcommentary"><a id="SP19_1" class="paragraph-anchor"></a><b>&#167;19.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Make an actionless action pattern, specifying room only</span><span class="named-paragraph-number">19.1</span></span><span class="Preform-comment-syntax"> =</span>
<p class="commentary firstcommentary"><a id="SP20_1" class="paragraph-anchor"></a><b>&#167;20.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Make an actionless action pattern, specifying room only</span><span class="named-paragraph-number">20.1</span></span><span class="Preform-comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -549,8 +576,8 @@ is valid as an AP, but this enables many natural-looking rules to be written
<span class="plain-syntax"> </span><a href="4-apc.html#SP3" class="function-link"><span class="function-syntax">APClauses::set_val</span></a><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">ap</span><span class="plain-syntax">, </span><span class="constant-syntax">IN_AP_CLAUSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">RP</span><span class="plain-syntax">[1]);</span>
<span class="plain-syntax"> ==&gt; { </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><a href="4-ap2.html#SP3" class="function-link"><span class="function-syntax">ActionPatterns::ap_store</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ap</span><span class="plain-syntax">) };</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-pap.html#SP19">&#167;19</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP20" class="paragraph-anchor"></a><b>&#167;20. </b>And that's as far down as we go: to level 6. Most of the complexity is gone
<ul class="endnotetexts"><li>This code is used in <a href="4-pap.html#SP20">&#167;20</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP21" class="paragraph-anchor"></a><b>&#167;21. </b>And that's as far down as we go: to level 6. Most of the complexity is gone
now, but what's left can't very efficiently be written in Preform. Essentially
we apply &lt;action-list&gt; to the text and then parse the operands using
&lt;action-operand&gt;, though it's a bit more involved because we also recognise
@ -574,7 +601,7 @@ box" makes no sense since only one is transitive).
<span class="Preform-plain-syntax"> } </span><span class="Preform-reserved-syntax">else</span><span class="Preform-plain-syntax"> {</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">LOGIF</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">ACTION_PATTERN_PARSING</span><span class="Preform-plain-syntax">, </span><span class="Preform-string-syntax">"Parsing action pattern: %W\n"</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">W</span><span class="Preform-plain-syntax">);</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">LOG_INDENT</span><span class="Preform-plain-syntax">;</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">action_pattern</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">ap</span><span class="Preform-plain-syntax"> = </span><a href="4-pap.html#SP23" class="function-link"><span class="Preform-function-syntax">ParseActionPatterns::dash</span></a><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">W</span><span class="Preform-plain-syntax">);</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">action_pattern</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">ap</span><span class="Preform-plain-syntax"> = </span><a href="4-pap.html#SP24" class="function-link"><span class="Preform-function-syntax">ParseActionPatterns::dash</span></a><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">W</span><span class="Preform-plain-syntax">);</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">LOG_OUTDENT</span><span class="Preform-plain-syntax">;</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">if</span><span class="Preform-plain-syntax"> (</span><a href="4-ap2.html#SP3" class="function-link"><span class="Preform-function-syntax">ActionPatterns::is_valid</span></a><span class="Preform-plain-syntax">(&amp;</span><span class="Preform-identifier-syntax">ap</span><span class="Preform-plain-syntax">)) {</span>
<span class="Preform-plain-syntax"> ==&gt; { -, </span><a href="4-ap2.html#SP3" class="function-link"><span class="Preform-function-syntax">ActionPatterns::ap_store</span></a><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">ap</span><span class="Preform-plain-syntax">) };</span>
@ -585,7 +612,7 @@ box" makes no sense since only one is transitive).
<span class="Preform-plain-syntax">}</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>
<p class="commentary firstcommentary"><a id="SP21" class="paragraph-anchor"></a><b>&#167;21. </b>The "operands" of an action pattern are the nouns to which it applies: for
<p class="commentary firstcommentary"><a id="SP22" class="paragraph-anchor"></a><b>&#167;22. </b>The "operands" of an action pattern are the nouns to which it applies: for
example, in "Kevin taking or dropping something", the operand is "something".
We treat words like "something" specially to avoid them being read as
"some thing" and thus forcing the kind of the operand to be "thing".
@ -602,7 +629,7 @@ We treat words like "something" specially to avoid them being read as
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">it</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { FALSE, - }</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>
<p class="commentary firstcommentary"><a id="SP22" class="paragraph-anchor"></a><b>&#167;22. </b>Finally, then, &lt;action-parameter&gt;. Almost anything syntactically matches
<p class="commentary firstcommentary"><a id="SP23" class="paragraph-anchor"></a><b>&#167;23. </b>Finally, then, &lt;action-parameter&gt;. Almost anything syntactically matches
here &mdash; a constant, a description, a table entry, a variable, and so on.
</p>
@ -619,11 +646,11 @@ here &mdash; a constant, a description, a table entry, a variable, and so on.
<span class="Preform-plain-syntax">}</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>
<p class="commentary firstcommentary"><a id="SP23" class="paragraph-anchor"></a><b>&#167;23. </b>We can't put it off any longer. Here goes.
<p class="commentary firstcommentary"><a id="SP24" class="paragraph-anchor"></a><b>&#167;24. </b>We can't put it off any longer. Here goes.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> </span><span class="function-syntax">ParseActionPatterns::dash</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">ParseActionPatterns::dash</span></span>:<br/><a href="4-pap.html#SP20">&#167;20</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> </span><span class="function-syntax">ParseActionPatterns::dash</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">ParseActionPatterns::dash</span></span>:<br/><a href="4-pap.html#SP21">&#167;21</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">failure_this_call</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pap_failure_reason</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">i</span><span class="plain-syntax">, </span><span class="identifier-syntax">j</span><span class="plain-syntax">, </span><span class="identifier-syntax">k</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">action_name_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">list</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
@ -632,19 +659,19 @@ here &mdash; a constant, a description, a table entry, a variable, and so on.
<span class="plain-syntax"> </span><span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> </span><span class="identifier-syntax">ap</span><span class="plain-syntax"> = </span><a href="4-ap2.html#SP2" class="function-link"><span class="function-syntax">ActionPatterns::new</span></a><span class="plain-syntax">(); </span><span class="identifier-syntax">ap</span><span class="plain-syntax">.</span><span class="element-syntax">valid</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">ap</span><span class="plain-syntax">.</span><span class="element-syntax">text_of_pattern</span><span class="plain-syntax"> = </span><span class="identifier-syntax">W</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-pap.html#SP23_3" class="named-paragraph-link"><span class="named-paragraph">PAR - (f) Parse Special Going Clauses</span><span class="named-paragraph-number">23.3</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-pap.html#SP23_4" class="named-paragraph-link"><span class="named-paragraph">PAR - (i) Parse Initial Action Name List</span><span class="named-paragraph-number">23.4</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-pap.html#SP23_5" class="named-paragraph-link"><span class="named-paragraph">PAR - (j) Parse Parameters</span><span class="named-paragraph-number">23.5</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-pap.html#SP23_6" class="named-paragraph-link"><span class="named-paragraph">PAR - (k) Verify Mixed Action</span><span class="named-paragraph-number">23.6</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-pap.html#SP23_1" class="named-paragraph-link"><span class="named-paragraph">With one small proviso, a valid action pattern has been parsed</span><span class="named-paragraph-number">23.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-pap.html#SP24_3" class="named-paragraph-link"><span class="named-paragraph">PAR - (f) Parse Special Going Clauses</span><span class="named-paragraph-number">24.3</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-pap.html#SP24_4" class="named-paragraph-link"><span class="named-paragraph">PAR - (i) Parse Initial Action Name List</span><span class="named-paragraph-number">24.4</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-pap.html#SP24_5" class="named-paragraph-link"><span class="named-paragraph">PAR - (j) Parse Parameters</span><span class="named-paragraph-number">24.5</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-pap.html#SP24_6" class="named-paragraph-link"><span class="named-paragraph">PAR - (k) Verify Mixed Action</span><span class="named-paragraph-number">24.6</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-pap.html#SP24_1" class="named-paragraph-link"><span class="named-paragraph">With one small proviso, a valid action pattern has been parsed</span><span class="named-paragraph-number">24.1</span></a></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">ap</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Failed:</span><span class="plain-syntax"> ;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-pap.html#SP23_2" class="named-paragraph-link"><span class="named-paragraph">No valid action pattern has been parsed</span><span class="named-paragraph-number">23.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-pap.html#SP24_2" class="named-paragraph-link"><span class="named-paragraph">No valid action pattern has been parsed</span><span class="named-paragraph-number">24.2</span></a></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">ap</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP23_1" class="paragraph-anchor"></a><b>&#167;23.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">With one small proviso, a valid action pattern has been parsed</span><span class="named-paragraph-number">23.1</span></span><span class="comment-syntax"> =</span>
<p class="commentary firstcommentary"><a id="SP24_1" class="paragraph-anchor"></a><b>&#167;24.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">With one small proviso, a valid action pattern has been parsed</span><span class="named-paragraph-number">24.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -666,8 +693,8 @@ here &mdash; a constant, a description, a table entry, a variable, and so on.
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ap</span><span class="plain-syntax">.</span><span class="identifier-syntax">valid</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) </span><span class="reserved-syntax">goto</span><span class="plain-syntax"> </span><span class="identifier-syntax">Failed</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">ACTION_PATTERN_PARSING</span><span class="plain-syntax">, </span><span class="string-syntax">"Matched action pattern: $A\n"</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">ap</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-pap.html#SP23">&#167;23</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP23_2" class="paragraph-anchor"></a><b>&#167;23.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">No valid action pattern has been parsed</span><span class="named-paragraph-number">23.2</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="4-pap.html#SP24">&#167;24</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP24_2" class="paragraph-anchor"></a><b>&#167;24.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">No valid action pattern has been parsed</span><span class="named-paragraph-number">24.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -676,12 +703,12 @@ here &mdash; a constant, a description, a table entry, a variable, and so on.
<span class="plain-syntax"> </span><span class="identifier-syntax">ap</span><span class="plain-syntax">.</span><span class="element-syntax">ap_clauses</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">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">ACTION_PATTERN_PARSING</span><span class="plain-syntax">, </span><span class="string-syntax">"Parse action failed: %W\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-pap.html#SP23">&#167;23</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP23_3" class="paragraph-anchor"></a><b>&#167;23.3. </b>Special clauses are allowed after "going..."; trim them
<ul class="endnotetexts"><li>This code is used in <a href="4-pap.html#SP24">&#167;24</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP24_3" class="paragraph-anchor"></a><b>&#167;24.3. </b>Special clauses are allowed after "going..."; trim them
away as they are recorded.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">PAR - (f) Parse Special Going Clauses</span><span class="named-paragraph-number">23.3</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">PAR - (f) Parse Special Going Clauses</span><span class="named-paragraph-number">24.3</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -714,13 +741,13 @@ away as they are recorded.
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">j</span><span class="plain-syntax"> &gt;= </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">W</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Wordings::up_to</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">j</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-pap.html#SP23">&#167;23</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP23_4" class="paragraph-anchor"></a><b>&#167;23.4. </b>Extract the information as to which actions are intended:
<ul class="endnotetexts"><li>This code is used in <a href="4-pap.html#SP24">&#167;24</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP24_4" class="paragraph-anchor"></a><b>&#167;24.4. </b>Extract the information as to which actions are intended:
e.g., from "taking or dropping something", that it will be
taking or dropping.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">PAR - (i) Parse Initial Action Name List</span><span class="named-paragraph-number">23.4</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">PAR - (i) Parse Initial Action Name List</span><span class="named-paragraph-number">24.4</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -729,8 +756,8 @@ taking or dropping.
<span class="plain-syntax"> </span><span class="identifier-syntax">list</span><span class="plain-syntax"> = </span><span class="identifier-syntax">try_list</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">ACTION_PATTERN_PARSING</span><span class="plain-syntax">, </span><span class="string-syntax">"ANL from PAR(i):\n$L\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">list</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-pap.html#SP23">&#167;23</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP23_5" class="paragraph-anchor"></a><b>&#167;23.5. </b>Now to fill in the gaps. At this point we have the action name
<ul class="endnotetexts"><li>This code is used in <a href="4-pap.html#SP24">&#167;24</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP24_5" class="paragraph-anchor"></a><b>&#167;24.5. </b>Now to fill in the gaps. At this point we have the action name
list as a linked list of all possible lexical matches, but want to
whittle it down to remove those which do not semantically make
sense. For instance, "taking inventory" has two possible lexical
@ -748,23 +775,23 @@ crucial word position except for the one matched.
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">MAX_AP_POSITIONS</span><span class="plain-syntax"> </span><span class="constant-syntax">100</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">UNTHINKABLE_POSITION</span><span class="plain-syntax"> -1</span>
</pre>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">PAR - (j) Parse Parameters</span><span class="named-paragraph-number">23.5</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">PAR - (j) Parse Parameters</span><span class="named-paragraph-number">24.5</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">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">no_positions</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">position_at</span><span class="plain-syntax">[</span><span class="constant-syntax">MAX_AP_POSITIONS</span><span class="plain-syntax">], </span><span class="identifier-syntax">position_min_parc</span><span class="plain-syntax">[</span><span class="constant-syntax">MAX_AP_POSITIONS</span><span class="plain-syntax">];</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-pap.html#SP23_5_1" class="named-paragraph-link"><span class="named-paragraph">Find the positions of individual action names, and their minimum parameter counts</span><span class="named-paragraph-number">23.5.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-pap.html#SP23_5_2" class="named-paragraph-link"><span class="named-paragraph">Report to the debugging log on the action decomposition</span><span class="named-paragraph-number">23.5.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-pap.html#SP23_5_3" class="named-paragraph-link"><span class="named-paragraph">Find how many different positions have each possible minimum count</span><span class="named-paragraph-number">23.5.3</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-pap.html#SP24_5_1" class="named-paragraph-link"><span class="named-paragraph">Find the positions of individual action names, and their minimum parameter counts</span><span class="named-paragraph-number">24.5.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-pap.html#SP24_5_2" class="named-paragraph-link"><span class="named-paragraph">Report to the debugging log on the action decomposition</span><span class="named-paragraph-number">24.5.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-pap.html#SP24_5_3" class="named-paragraph-link"><span class="named-paragraph">Find how many different positions have each possible minimum count</span><span class="named-paragraph-number">24.5.3</span></a></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">first_position</span><span class="plain-syntax"> = </span><a href="4-anl.html#SP13" class="function-link"><span class="function-syntax">ActionNameLists::first_position</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">list</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">one_was_valid</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">action_pattern</span><span class="plain-syntax"> </span><span class="identifier-syntax">trial_ap</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_THROUGH_ANL</span><span class="plain-syntax">(</span><span class="identifier-syntax">entry</span><span class="plain-syntax">, </span><span class="identifier-syntax">list</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">ACTION_PATTERN_PARSING</span><span class="plain-syntax">, </span><span class="string-syntax">"Entry (%d):\n$8\n"</span><span class="plain-syntax">, </span><a href="4-anl.html#SP13" class="function-link"><span class="function-syntax">ActionNameLists::parc</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">entry</span><span class="plain-syntax">), </span><span class="identifier-syntax">entry</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-pap.html#SP23_5_4" class="named-paragraph-link"><span class="named-paragraph">Fill out the noun, second, room and nowhere fields of the AP as if this action were right</span><span class="named-paragraph-number">23.5.4</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-pap.html#SP23_5_5" class="named-paragraph-link"><span class="named-paragraph">Check the validity of this speculative AP</span><span class="named-paragraph-number">23.5.5</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-pap.html#SP24_5_4" class="named-paragraph-link"><span class="named-paragraph">Fill out the noun, second, room and nowhere fields of the AP as if this action were right</span><span class="named-paragraph-number">24.5.4</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-pap.html#SP24_5_5" class="named-paragraph-link"><span class="named-paragraph">Check the validity of this speculative AP</span><span class="named-paragraph-number">24.5.5</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">trial_ap</span><span class="plain-syntax">.</span><span class="element-syntax">valid</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">one_was_valid</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) &amp;&amp; (</span><a href="4-anl.html#SP13" class="function-link"><span class="function-syntax">ActionNameLists::word_position</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">entry</span><span class="plain-syntax">) == </span><span class="identifier-syntax">first_position</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">one_was_valid</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="4-apc.html#SP3" class="function-link"><span class="function-syntax">APClauses::set_val</span></a><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">ap</span><span class="plain-syntax">, </span><span class="constant-syntax">NOUN_AP_CLAUSE</span><span class="plain-syntax">, </span><a href="4-apc.html#SP3" class="function-link"><span class="function-syntax">APClauses::get_val</span></a><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">trial_ap</span><span class="plain-syntax">, </span><span class="constant-syntax">NOUN_AP_CLAUSE</span><span class="plain-syntax">));</span>
@ -778,32 +805,32 @@ crucial word position except for the one matched.
<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">one_was_valid</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) </span><span class="reserved-syntax">goto</span><span class="plain-syntax"> </span><span class="identifier-syntax">Failed</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-pap.html#SP23_5_6" class="named-paragraph-link"><span class="named-paragraph">Adjudicate between topic and other actions</span><span class="named-paragraph-number">23.5.6</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-pap.html#SP24_5_6" class="named-paragraph-link"><span class="named-paragraph">Adjudicate between topic and other actions</span><span class="named-paragraph-number">24.5.6</span></a></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">ACTION_PATTERN_PARSING</span><span class="plain-syntax">, </span><span class="string-syntax">"List before action winnowing:\n$L\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">list</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-pap.html#SP23_5_7" class="named-paragraph-link"><span class="named-paragraph">Delete those action names which are to be deleted</span><span class="named-paragraph-number">23.5.7</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-pap.html#SP24_5_7" class="named-paragraph-link"><span class="named-paragraph">Delete those action names which are to be deleted</span><span class="named-paragraph-number">24.5.7</span></a></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">ACTION_PATTERN_PARSING</span><span class="plain-syntax">, </span><span class="string-syntax">"List after action winnowing:\n$L\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">list</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-pap.html#SP23">&#167;23</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP23_5_1" class="paragraph-anchor"></a><b>&#167;23.5.1. </b>For example, "taking inventory or waiting" produces two positions, words
<ul class="endnotetexts"><li>This code is used in <a href="4-pap.html#SP24">&#167;24</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP24_5_1" class="paragraph-anchor"></a><b>&#167;24.5.1. </b>For example, "taking inventory or waiting" produces two positions, words
0 and 3, and minimum parameter count 0 in each case. ("Taking inventory"
can be read as "taking (inventory)", par-count 1, or "taking inventory",
par-count 0, so the minimum is 0.)
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Find the positions of individual action names, and their minimum parameter counts</span><span class="named-paragraph-number">23.5.1</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Find the positions of individual action names, and their minimum parameter counts</span><span class="named-paragraph-number">24.5.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_THROUGH_ANL</span><span class="plain-syntax">(</span><span class="identifier-syntax">entry</span><span class="plain-syntax">, </span><span class="identifier-syntax">list</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">pos</span><span class="plain-syntax"> = -1;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-pap.html#SP23_5_1_1" class="named-paragraph-link"><span class="named-paragraph">Find the position word of this particular action name</span><span class="named-paragraph-number">23.5.1.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-pap.html#SP24_5_1_1" class="named-paragraph-link"><span class="named-paragraph">Find the position word of this particular action name</span><span class="named-paragraph-number">24.5.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">position_min_parc</span><span class="plain-syntax">[</span><span class="identifier-syntax">pos</span><span class="plain-syntax">] == </span><span class="constant-syntax">UNTHINKABLE_POSITION</span><span class="plain-syntax">) ||</span>
<span class="plain-syntax"> (</span><a href="4-anl.html#SP13" class="function-link"><span class="function-syntax">ActionNameLists::parc</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">entry</span><span class="plain-syntax">) &lt; </span><span class="identifier-syntax">position_min_parc</span><span class="plain-syntax">[</span><span class="identifier-syntax">pos</span><span class="plain-syntax">]))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">position_min_parc</span><span class="plain-syntax">[</span><span class="identifier-syntax">pos</span><span class="plain-syntax">] = </span><a href="4-anl.html#SP13" class="function-link"><span class="function-syntax">ActionNameLists::parc</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">entry</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-pap.html#SP23_5">&#167;23.5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP23_5_1_1" class="paragraph-anchor"></a><b>&#167;23.5.1.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Find the position word of this particular action name</span><span class="named-paragraph-number">23.5.1.1</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="4-pap.html#SP24_5">&#167;24.5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP24_5_1_1" class="paragraph-anchor"></a><b>&#167;24.5.1.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Find the position word of this particular action name</span><span class="named-paragraph-number">24.5.1.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -818,8 +845,8 @@ par-count 0, so the minimum is 0.)
<span class="plain-syntax"> </span><span class="identifier-syntax">pos</span><span class="plain-syntax"> = </span><span class="identifier-syntax">no_positions</span><span class="plain-syntax">++;</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-pap.html#SP23_5_1">&#167;23.5.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP23_5_2" class="paragraph-anchor"></a><b>&#167;23.5.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Report to the debugging log on the action decomposition</span><span class="named-paragraph-number">23.5.2</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="4-pap.html#SP24_5_1">&#167;24.5.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP24_5_2" class="paragraph-anchor"></a><b>&#167;24.5.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Report to the debugging log on the action decomposition</span><span class="named-paragraph-number">24.5.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -830,14 +857,14 @@ par-count 0, so the minimum is 0.)
<span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">, </span><span class="identifier-syntax">position_at</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">], </span><span class="identifier-syntax">min</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-pap.html#SP23_5">&#167;23.5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP23_5_3" class="paragraph-anchor"></a><b>&#167;23.5.3. </b>The following test is done to reject patterns like "taking ball or dropping
<ul class="endnotetexts"><li>This code is used in <a href="4-pap.html#SP24_5">&#167;24.5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP24_5_3" class="paragraph-anchor"></a><b>&#167;24.5.3. </b>The following test is done to reject patterns like "taking ball or dropping
bat", which have a positive minimum parameter count in more than one position;
which means there couldn't be an action pattern which shared the same noun
description.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Find how many different positions have each possible minimum count</span><span class="named-paragraph-number">23.5.3</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Find how many different positions have each possible minimum count</span><span class="named-paragraph-number">24.5.3</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -853,15 +880,15 @@ description.
<span class="plain-syntax"> </span><span class="identifier-syntax">failure_this_call</span><span class="plain-syntax"> = </span><span class="constant-syntax">MIXEDNOUNS_PAPF</span><span class="plain-syntax">; </span><span class="reserved-syntax">goto</span><span class="plain-syntax"> </span><span class="identifier-syntax">Failed</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-pap.html#SP23_5">&#167;23.5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP23_5_4" class="paragraph-anchor"></a><b>&#167;23.5.4. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Fill out the noun, second, room and nowhere fields of the AP as if this action were right</span><span class="named-paragraph-number">23.5.4</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="4-pap.html#SP24_5">&#167;24.5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP24_5_4" class="paragraph-anchor"></a><b>&#167;24.5.4. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Fill out the noun, second, room and nowhere fields of the AP as if this action were right</span><span class="named-paragraph-number">24.5.4</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">trial_ap</span><span class="plain-syntax">.</span><span class="element-syntax">ap_clauses</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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Wordings::nonempty</span><span class="plain-syntax">(</span><a href="4-anl.html#SP13" class="function-link"><span class="function-syntax">ActionNameLists::par</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">entry</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">))) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="4-gng.html#SP8" class="function-link"><span class="function-syntax">Going::claim_noun</span></a><span class="plain-syntax">(</span><a href="4-anl.html#SP11" class="function-link"><span class="function-syntax">ActionNameLists::action</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">entry</span><span class="plain-syntax">), &amp;</span><span class="identifier-syntax">trial_ap</span><span class="plain-syntax">, </span><a href="4-anl.html#SP13" class="function-link"><span class="function-syntax">ActionNameLists::par</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">entry</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">)) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="4-pap.html#SP24" class="function-link"><span class="function-syntax">ParseActionPatterns::put_action_object_into_ap</span></a><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">trial_ap</span><span class="plain-syntax">, </span><span class="constant-syntax">NOUN_AP_CLAUSE</span><span class="plain-syntax">, </span><a href="4-anl.html#SP13" class="function-link"><span class="function-syntax">ActionNameLists::par</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">entry</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><a href="4-pap.html#SP25" class="function-link"><span class="function-syntax">ParseActionPatterns::put_action_object_into_ap</span></a><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">trial_ap</span><span class="plain-syntax">, </span><span class="constant-syntax">NOUN_AP_CLAUSE</span><span class="plain-syntax">, </span><a href="4-anl.html#SP13" class="function-link"><span class="function-syntax">ActionNameLists::par</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">entry</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Wordings::nonempty</span><span class="plain-syntax">(</span><a href="4-anl.html#SP13" class="function-link"><span class="function-syntax">ActionNameLists::par</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">entry</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">))) {</span>
@ -869,20 +896,20 @@ description.
<span class="plain-syntax"> &amp;&amp; (</span><span class="identifier-syntax">K_understanding</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> &amp;&amp; (</span><span class="identifier-syntax">Kinds::eq</span><span class="plain-syntax">(</span><a href="4-as.html#SP5" class="function-link"><span class="function-syntax">ActionSemantics::kind_of_second</span></a><span class="plain-syntax">(</span><a href="4-anl.html#SP11" class="function-link"><span class="function-syntax">ActionNameLists::action</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">entry</span><span class="plain-syntax">)), </span><span class="identifier-syntax">K_understanding</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> &amp;&amp; (</span><span class="function-syntax">&lt;understanding-action-irregular-operand&gt;</span><span class="plain-syntax">(</span><a href="4-anl.html#SP13" class="function-link"><span class="function-syntax">ActionNameLists::par</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">entry</span><span class="plain-syntax">, </span><span class="constant-syntax">1</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">val</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Rvalues::from_grammar_verb</span><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">); </span><span class="comment-syntax"> Why no GV here?</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">val</span><span class="plain-syntax"> = </span><a href="4-ak.html#SP7" class="function-link"><span class="function-syntax">ARvalues::from_grammar_verb</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">); </span><span class="comment-syntax"> Why no GV here?</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Node::set_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">val</span><span class="plain-syntax">, </span><a href="4-anl.html#SP13" class="function-link"><span class="function-syntax">ActionNameLists::par</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">entry</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><a href="4-apc.html#SP3" class="function-link"><span class="function-syntax">APClauses::set_val</span></a><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">trial_ap</span><span class="plain-syntax">, </span><span class="constant-syntax">SECOND_AP_CLAUSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">val</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><a href="4-pap.html#SP24" class="function-link"><span class="function-syntax">ParseActionPatterns::put_action_object_into_ap</span></a><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">trial_ap</span><span class="plain-syntax">, </span><span class="constant-syntax">SECOND_AP_CLAUSE</span><span class="plain-syntax">, </span><a href="4-anl.html#SP13" class="function-link"><span class="function-syntax">ActionNameLists::par</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">entry</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><a href="4-pap.html#SP25" class="function-link"><span class="function-syntax">ParseActionPatterns::put_action_object_into_ap</span></a><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">trial_ap</span><span class="plain-syntax">, </span><span class="constant-syntax">SECOND_AP_CLAUSE</span><span class="plain-syntax">, </span><a href="4-anl.html#SP13" class="function-link"><span class="function-syntax">ActionNameLists::par</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">entry</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Wordings::nonempty</span><span class="plain-syntax">(</span><a href="4-anl.html#SP13" class="function-link"><span class="function-syntax">ActionNameLists::in_clause</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">entry</span><span class="plain-syntax">)))</span>
<span class="plain-syntax"> </span><a href="4-pap.html#SP24" class="function-link"><span class="function-syntax">ParseActionPatterns::put_action_object_into_ap</span></a><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">trial_ap</span><span class="plain-syntax">, </span><span class="constant-syntax">IN_AP_CLAUSE</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><a href="4-pap.html#SP25" class="function-link"><span class="function-syntax">ParseActionPatterns::put_action_object_into_ap</span></a><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">trial_ap</span><span class="plain-syntax">, </span><span class="constant-syntax">IN_AP_CLAUSE</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><a href="4-anl.html#SP13" class="function-link"><span class="function-syntax">ActionNameLists::in_clause</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">entry</span><span class="plain-syntax">));</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-pap.html#SP23_5">&#167;23.5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP23_5_5" class="paragraph-anchor"></a><b>&#167;23.5.5. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Check the validity of this speculative AP</span><span class="named-paragraph-number">23.5.5</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="4-pap.html#SP24_5">&#167;24.5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP24_5_5" class="paragraph-anchor"></a><b>&#167;24.5.5. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Check the validity of this speculative AP</span><span class="named-paragraph-number">24.5.5</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -900,8 +927,8 @@ description.
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="4-apc.html#SP4" class="function-link"><span class="function-syntax">APClauses::validate</span></a><span class="plain-syntax">(</span><a href="4-apc.html#SP3" class="function-link"><span class="function-syntax">APClauses::clause</span></a><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">trial_ap</span><span class="plain-syntax">, </span><span class="constant-syntax">IN_AP_CLAUSE</span><span class="plain-syntax">), </span><span class="identifier-syntax">K_object</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">trial_ap</span><span class="plain-syntax">.</span><span class="element-syntax">valid</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-pap.html#SP23_5">&#167;23.5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP23_5_6" class="paragraph-anchor"></a><b>&#167;23.5.6. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Adjudicate between topic and other actions</span><span class="named-paragraph-number">23.5.6</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="4-pap.html#SP24_5">&#167;24.5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP24_5_6" class="paragraph-anchor"></a><b>&#167;24.5.6. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Adjudicate between topic and other actions</span><span class="named-paragraph-number">24.5.6</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -942,15 +969,15 @@ description.
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-pap.html#SP23_5">&#167;23.5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP23_5_7" class="paragraph-anchor"></a><b>&#167;23.5.7. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Delete those action names which are to be deleted</span><span class="named-paragraph-number">23.5.7</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="4-pap.html#SP24_5">&#167;24.5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP24_5_7" class="paragraph-anchor"></a><b>&#167;24.5.7. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Delete those action names which are to be deleted</span><span class="named-paragraph-number">24.5.7</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><a href="4-anl.html#SP6" class="function-link"><span class="function-syntax">ActionNameLists::remove_entries_marked_for_deletion</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">list</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-pap.html#SP23_5">&#167;23.5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP23_6" class="paragraph-anchor"></a><b>&#167;23.6. </b>Not all actions can cohabit. We require that as far as the user has
<ul class="endnotetexts"><li>This code is used in <a href="4-pap.html#SP24_5">&#167;24.5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP24_6" class="paragraph-anchor"></a><b>&#167;24.6. </b>Not all actions can cohabit. We require that as far as the user has
specified the parameters, the actions in the list must all agree (i) to be
allowed to have such a parameter, and (ii) to be allowed to have a
parameter of the same type. Thus "waiting or taking something" fails
@ -960,7 +987,7 @@ that the "doing anything" action is always allowed a parameter (this is
the case when the first action name in the list is <span class="extract"><span class="extract-syntax">NULL</span></span>).
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">PAR - (k) Verify Mixed Action</span><span class="named-paragraph-number">23.6</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">PAR - (k) Verify Mixed Action</span><span class="named-paragraph-number">24.6</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -1010,13 +1037,13 @@ the case when the first action name in the list is <span class="extract"><span c
<span class="plain-syntax"> </span><span class="reserved-syntax">goto</span><span class="plain-syntax"> </span><span class="identifier-syntax">Failed</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-pap.html#SP23">&#167;23</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP24" class="paragraph-anchor"></a><b>&#167;24. </b>And an anticlimactic little routine for putting objects
<ul class="endnotetexts"><li>This code is used in <a href="4-pap.html#SP24">&#167;24</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP25" class="paragraph-anchor"></a><b>&#167;25. </b>And an anticlimactic little routine for putting objects
into action patterns in the noun or second noun position.
</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">ParseActionPatterns::put_action_object_into_ap</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">ParseActionPatterns::put_action_object_into_ap</span></span>:<br/><a href="4-pap.html#SP23_5_4">&#167;23.5.4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ap</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ParseActionPatterns::put_action_object_into_ap</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">ParseActionPatterns::put_action_object_into_ap</span></span>:<br/><a href="4-pap.html#SP24_5_4">&#167;24.5.4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ap</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</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">spec</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">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">any_flag</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="function-syntax">&lt;action-operand&gt;</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">)) {</span>
@ -1034,7 +1061,7 @@ into action patterns in the noun or second noun position.
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="4-gng.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-im.html">1</a></li><li class="progresschapter"><a href="2-bd.html">2</a></li><li class="progresschapter"><a href="3-sm.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresssection"><a href="4-ap.html">ap</a></li><li class="progresssection"><a href="4-anaa.html">anaa</a></li><li class="progresssection"><a href="4-act.html">act</a></li><li class="progresssection"><a href="4-as.html">as</a></li><li class="progresssection"><a href="4-av.html">av</a></li><li class="progresssection"><a href="4-ann.html">ann</a></li><li class="progresssection"><a href="4-anl.html">anl</a></li><li class="progresssection"><a href="4-ap2.html">ap2</a></li><li class="progresssection"><a href="4-apc.html">apc</a></li><li class="progresssection"><a href="4-gng.html">gng</a></li><li class="progresscurrent">pap</li><li class="progresssection"><a href="4-nap.html">nap</a></li><li class="progresschapter"><a href="5-pp.html">5</a></li><li class="progressnext"><a href="4-nap.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="4-gng.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-im.html">1</a></li><li class="progresschapter"><a href="2-bd.html">2</a></li><li class="progresschapter"><a href="3-sm.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresssection"><a href="4-ap.html">ap</a></li><li class="progresssection"><a href="4-anaa.html">anaa</a></li><li class="progresssection"><a href="4-ak.html">ak</a></li><li class="progresssection"><a href="4-ac.html">ac</a></li><li class="progresssection"><a href="4-act.html">act</a></li><li class="progresssection"><a href="4-as.html">as</a></li><li class="progresssection"><a href="4-av.html">av</a></li><li class="progresssection"><a href="4-ann.html">ann</a></li><li class="progresssection"><a href="4-anl.html">anl</a></li><li class="progresssection"><a href="4-ap2.html">ap2</a></li><li class="progresssection"><a href="4-ea.html">ea</a></li><li class="progresssection"><a href="4-apc.html">apc</a></li><li class="progresssection"><a href="4-gng.html">gng</a></li><li class="progresscurrent">pap</li><li class="progresssection"><a href="4-nap.html">nap</a></li><li class="progresschapter"><a href="5-pp.html">5</a></li><li class="progressnext"><a href="4-nap.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -169,7 +169,7 @@ will simply compile a <span class="extract"><span class="extract-syntax">parse_n
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">gv</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">gv_parse_name_iname</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="function-syntax">PL::Parsing::Tokens::General::compile_parse_name_property</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">PL::Parsing::Tokens::General::compile_parse_name_property</span></span>:<br/>Parsing Plugin - <a href="5-pp.html#SP5_2">&#167;5.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">inference_subject</span><span class="plain-syntax"> *</span><span class="identifier-syntax">subj</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="function-syntax">PL::Parsing::Tokens::General::compile_parse_name_property</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">PL::Parsing::Tokens::General::compile_parse_name_property</span></span>:<br/>Parsing Plugin - <a href="5-pp.html#SP6_2">&#167;6.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">inference_subject</span><span class="plain-syntax"> *</span><span class="identifier-syntax">subj</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">symb</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">grammar_verb</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gv</span><span class="plain-syntax"> = </span><span class="identifier-syntax">PARSING_DATA_FOR_SUBJ</span><span class="plain-syntax">(</span><span class="identifier-syntax">subj</span><span class="plain-syntax">)-&gt;</span><span class="element-syntax">understand_as_this_object</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-gv.html#SP19" class="function-link"><span class="function-syntax">PL::Parsing::Verbs::is_empty</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gv</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) {</span>

View file

@ -507,7 +507,7 @@ look seriously at tokens is in Phase II.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">val</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Rvalues::from_grammar_verb</span><span class="plain-syntax">(</span><span class="function-syntax">&lt;&lt;grammar_verb:named&gt;&gt;</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">val</span><span class="plain-syntax"> = </span><a href="4-ak.html#SP7" class="function-link"><span class="function-syntax">ARvalues::from_grammar_verb</span></a><span class="plain-syntax">(</span><span class="function-syntax">&lt;&lt;grammar_verb:named&gt;&gt;</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">spec</span><span class="plain-syntax"> = </span><a href="5-gv.html#SP24" class="function-link"><span class="function-syntax">PL::Parsing::Verbs::determine</span></a><span class="plain-syntax">(</span><span class="function-syntax">&lt;&lt;grammar_verb:named&gt;&gt;</span><span class="plain-syntax">, </span><span class="identifier-syntax">depth</span><span class="plain-syntax">+1); </span><span class="comment-syntax"> this is where Phase II recurses</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Node::set_grammar_value</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">, </span><span class="identifier-syntax">val</span><span class="plain-syntax">);</span>
</pre>
@ -1387,7 +1387,7 @@ nothing else.
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Node::is</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">, </span><span class="identifier-syntax">CONSTANT_NT</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_understanding</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">Rvalues::is_CONSTANT_of_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_understanding</span><span class="plain-syntax">))) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">gv</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Rvalues::to_grammar_verb</span><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">gv</span><span class="plain-syntax"> = </span><a href="4-ak.html#SP7" class="function-link"><span class="function-syntax">ARvalues::to_grammar_verb</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="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">code_mode</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::inv_primitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</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">Produce::down</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>

View file

@ -84,10 +84,11 @@ chapter.
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">PRODUCTION_LINE_PLUG</span><span class="plain-syntax">, </span><a href="5-pp.html#SP1" class="function-link"><span class="function-syntax">ParsingPlugin::production_line</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">MAKE_SPECIAL_MEANINGS_PLUG</span><span class="plain-syntax">, </span><a href="5-pp.html#SP1" class="function-link"><span class="function-syntax">ParsingPlugin::make_special_meanings</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_VARIABLE_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="5-pp.html#SP4" class="function-link"><span class="function-syntax">ParsingPlugin::new_variable_notify</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">COMPARE_CONSTANT_PLUG</span><span class="plain-syntax">, </span><a href="5-pp.html#SP2" class="function-link"><span class="function-syntax">ParsingPlugin::compare_CONSTANT</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_VARIABLE_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="5-pp.html#SP5" class="function-link"><span class="function-syntax">ParsingPlugin::new_variable_notify</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_SUBJECT_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="5-pp.html#SP1" class="function-link"><span class="function-syntax">ParsingPlugin::new_subject_notify</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">NEW_PERMISSION_NOTIFY_PLUG</span><span class="plain-syntax">, </span><a href="5-gp.html#SP5" class="function-link"><span class="function-syntax">Visibility::new_permission_notify</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">COMPLETE_MODEL_PLUG</span><span class="plain-syntax">, </span><a href="5-pp.html#SP5" class="function-link"><span class="function-syntax">ParsingPlugin::complete_model</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">COMPLETE_MODEL_PLUG</span><span class="plain-syntax">, </span><a href="5-pp.html#SP6" class="function-link"><span class="function-syntax">ParsingPlugin::complete_model</span></a><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">ParsingPlugin::production_line</span><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">stage</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">debugging</span><span class="plain-syntax">,</span>
@ -128,7 +129,22 @@ chapter.
<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>
</pre>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b>A number of global variables are given special treatment here, including
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ParsingPlugin::compare_CONSTANT</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">ParsingPlugin::compare_CONSTANT</span></span>:<br/><a href="5-pp.html#SP1">&#167;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">spec1</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">spec2</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> *</span><span class="identifier-syntax">rv</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::get_kind_of_value</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec1</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::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_understanding</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-ak.html#SP7" class="function-link"><span class="function-syntax">ARvalues::to_grammar_verb</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">spec1</span><span class="plain-syntax">) == </span><a href="4-ak.html#SP7" class="function-link"><span class="function-syntax">ARvalues::to_grammar_verb</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">spec2</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> *</span><span class="identifier-syntax">rv</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="identifier-syntax">rv</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">TRUE</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">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b>A number of global variables are given special treatment here, including
a whole family with names like "the K understood", for different kinds K.
This is an awkward contrivance to bridge Inform 7, which is typed, with the
original Inform 6 parser at runtime, whose data is typeless.
@ -144,7 +160,7 @@ original Inform 6 parser at runtime, whose data is typeless.
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">person</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">asked</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { 5, - }</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>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b></p>
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">nonlocal_variable</span><span class="plain-syntax"> *</span><span class="identifier-syntax">real_location_VAR</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
@ -154,10 +170,10 @@ original Inform 6 parser at runtime, whose data is typeless.
<span class="identifier-syntax">nonlocal_variable</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I6_second_VAR</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="identifier-syntax">nonlocal_variable</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I6_actor_VAR</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
</pre>
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. </b></p>
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>&#167;5. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ParsingPlugin::new_variable_notify</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">ParsingPlugin::new_variable_notify</span></span>:<br/><a href="5-pp.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">nonlocal_variable</span><span class="plain-syntax"> *</span><span class="identifier-syntax">var</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ParsingPlugin::new_variable_notify</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">ParsingPlugin::new_variable_notify</span></span>:<br/><a href="5-pp.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">nonlocal_variable</span><span class="plain-syntax"> *</span><span class="identifier-syntax">var</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="function-syntax">&lt;notable-parsing-variables&gt;(var-&gt;</span><span class="element-syntax">name</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><span class="function-syntax">&lt;&lt;r&gt;&gt;</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax">:</span>
@ -176,7 +192,7 @@ original Inform 6 parser at runtime, whose data is typeless.
<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>
</pre>
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>&#167;5. </b>Once the traverse is done, we can infer values for the two key Inter properties
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>&#167;6. </b>Once the traverse is done, we can infer values for the two key Inter properties
for parsing:
</p>
@ -188,7 +204,7 @@ for parsing:
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">P_name</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">ParsingPlugin::complete_model</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">ParsingPlugin::complete_model</span></span>:<br/><a href="5-pp.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">stage</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ParsingPlugin::complete_model</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">ParsingPlugin::complete_model</span></span>:<br/><a href="5-pp.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">stage</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">stage</span><span class="plain-syntax"> == </span><span class="identifier-syntax">WORLD_STAGE_V</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-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="identifier-syntax">P_name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ValueProperties::new_nameless</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"name"</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_text</span><span class="plain-syntax">);</span>
@ -199,25 +215,25 @@ for parsing:
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_INSTANCES</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</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">inference_subject</span><span class="plain-syntax"> *</span><span class="identifier-syntax">subj</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="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-pp.html#SP5_1" class="named-paragraph-link"><span class="named-paragraph">Assert the Inter name property</span><span class="named-paragraph-number">5.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-pp.html#SP5_2" class="named-paragraph-link"><span class="named-paragraph">Assert the Inter parse-name property</span><span class="named-paragraph-number">5.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-pp.html#SP5_3" class="named-paragraph-link"><span class="named-paragraph">Assert the Inter action-bitmap property</span><span class="named-paragraph-number">5.3</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-pp.html#SP6_1" class="named-paragraph-link"><span class="named-paragraph">Assert the Inter name property</span><span class="named-paragraph-number">6.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-pp.html#SP6_2" class="named-paragraph-link"><span class="named-paragraph">Assert the Inter parse-name property</span><span class="named-paragraph-number">6.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-pp.html#SP6_3" class="named-paragraph-link"><span class="named-paragraph">Assert the Inter action-bitmap property</span><span class="named-paragraph-number">6.3</span></a></span><span class="plain-syntax">;</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="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_BASE_KINDS</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Kinds::Behaviour::is_subkind_of_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inference_subject</span><span class="plain-syntax"> *</span><span class="identifier-syntax">subj</span><span class="plain-syntax"> = </span><span class="identifier-syntax">KindSubjects::from_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-pp.html#SP5_2" class="named-paragraph-link"><span class="named-paragraph">Assert the Inter parse-name property</span><span class="named-paragraph-number">5.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-pp.html#SP6_2" class="named-paragraph-link"><span class="named-paragraph">Assert the Inter parse-name property</span><span class="named-paragraph-number">6.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inference_subject</span><span class="plain-syntax"> *</span><span class="identifier-syntax">subj</span><span class="plain-syntax"> = </span><span class="identifier-syntax">KindSubjects::from_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_thing</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-pp.html#SP5_3" class="named-paragraph-link"><span class="named-paragraph">Assert the Inter action-bitmap property</span><span class="named-paragraph-number">5.3</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-pp.html#SP6_3" class="named-paragraph-link"><span class="named-paragraph">Assert the Inter action-bitmap property</span><span class="named-paragraph-number">6.3</span></a></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">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP5_1" class="paragraph-anchor"></a><b>&#167;5.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Assert the Inter name property</span><span class="named-paragraph-number">5.1</span></span><span class="comment-syntax"> =</span>
<p class="commentary firstcommentary"><a id="SP6_1" class="paragraph-anchor"></a><b>&#167;6.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Assert the Inter name property</span><span class="named-paragraph-number">6.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -238,12 +254,12 @@ for parsing:
<span class="plain-syntax"> </span><span class="identifier-syntax">RTParsing::name_property_array</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">PW</span><span class="plain-syntax">, </span><span class="identifier-syntax">from_kind</span><span class="plain-syntax">), </span><span class="identifier-syntax">CERTAIN_CE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="5-pp.html#SP5">&#167;5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5_2" class="paragraph-anchor"></a><b>&#167;5.2. </b>We attach numbered parse name routines as properties for any object
<ul class="endnotetexts"><li>This code is used in <a href="5-pp.html#SP6">&#167;6</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6_2" class="paragraph-anchor"></a><b>&#167;6.2. </b>We attach numbered parse name routines as properties for any object
where grammar has specified a need. (By default, this will not happen.)
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Assert the Inter parse-name property</span><span class="named-paragraph-number">5.2</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Assert the Inter parse-name property</span><span class="named-paragraph-number">6.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -252,8 +268,8 @@ where grammar has specified a need. (By default, this will not happen.)
<span class="plain-syntax"> </span><span class="identifier-syntax">ValueProperties::assert</span><span class="plain-syntax">(</span><span class="identifier-syntax">P_parse_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">subj</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Rvalues::from_iname</span><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">), </span><span class="identifier-syntax">CERTAIN_CE</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="5-pp.html#SP5">&#167;5</a> (twice).</li></ul>
<p class="commentary firstcommentary"><a id="SP5_3" class="paragraph-anchor"></a><b>&#167;5.3. </b>The action bitmap is an array of bits attached to each object, one
<ul class="endnotetexts"><li>This code is used in <a href="5-pp.html#SP6">&#167;6</a> (twice).</li></ul>
<p class="commentary firstcommentary"><a id="SP6_3" class="paragraph-anchor"></a><b>&#167;6.3. </b>The action bitmap is an array of bits attached to each object, one
for each action, which records whether that action has yet applied
successfully to that object. This is used at run-time to handle past
tense conditions such as "the jewels have been taken". Note that
@ -262,7 +278,7 @@ to ensure that it will be inherited by all Inter objects of this class,
i.e., all Inter objects corresponding to I7 things.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Assert the Inter action-bitmap property</span><span class="named-paragraph-number">5.3</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Assert the Inter action-bitmap property</span><span class="named-paragraph-number">6.3</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -274,7 +290,7 @@ i.e., all Inter objects corresponding to I7 things.
<span class="plain-syntax"> </span><span class="identifier-syntax">ValueProperties::assert</span><span class="plain-syntax">(</span><span class="identifier-syntax">P_action_bitmap</span><span class="plain-syntax">, </span><span class="identifier-syntax">subj</span><span class="plain-syntax">, </span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="identifier-syntax">CERTAIN_CE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="5-pp.html#SP5">&#167;5</a> (twice).</li></ul>
<ul class="endnotetexts"><li>This code is used in <a href="5-pp.html#SP6">&#167;6</a> (twice).</li></ul>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="4-nap.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-im.html">1</a></li><li class="progresschapter"><a href="2-bd.html">2</a></li><li class="progresschapter"><a href="3-sm.html">3</a></li><li class="progresschapter"><a href="4-ap.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresscurrent">pp</li><li class="progresssection"><a href="5-pnaa.html">pnaa</a></li><li class="progresssection"><a href="5-itg.html">itg</a></li><li class="progresssection"><a href="5-tfg.html">tfg</a></li><li class="progresssection"><a href="5-gp.html">gp</a></li><li class="progresssection"><a href="5-gv.html">gv</a></li><li class="progresssection"><a href="5-gl.html">gl</a></li><li class="progresssection"><a href="5-gt.html">gt</a></li><li class="progresssection"><a href="5-gt2.html">gt2</a></li><li class="progresssection"><a href="5-nft.html">nft</a></li><li class="progresssection"><a href="5-tpv.html">tpv</a></li><li class="progresssection"><a href="5-gpr.html">gpr</a></li><li class="progressnext"><a href="5-pnaa.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->

View file

@ -108,7 +108,7 @@ function togglePopup(material_id) {
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">understanding_reference</span><span class="plain-syntax"> *</span><span class="identifier-syntax">next</span><span class="plain-syntax">;</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">understanding_reference</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>The structure understanding_item is accessed in 2/ri, 3/tm, 3/scn, 3/ts, 4/ap, 4/av, 4/ap2, 4/apc, 5/gl and here.</li><li>The structure understanding_reference is accessed in 2/ri, 3/tm, 3/scn, 3/ts, 4/ap, 4/av, 4/ap2, 4/apc, 5/gl and here.</li></ul>
<ul class="endnotetexts"><li>The structure understanding_item is accessed in 2/ri, 3/tm, 3/scn, 3/ts, 4/ap, 4/av, 4/ap2, 4/ea, 4/apc, 5/gl and here.</li><li>The structure understanding_reference is accessed in 2/ri, 3/tm, 3/scn, 3/ts, 4/ap, 4/av, 4/ap2, 4/ea, 4/apc, 5/gl and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b>New grammar arrives in the system in two ways: primarily by means of explicit
Understand sentences in the source text, but also secondarily in the form
of table entries or other values used to match against snippets. For example:

View file

@ -198,6 +198,16 @@
<spon class="sectiontitle">Actions-Only Nodes and Annotations</span></a> -
<span class="sectionpurpose">Additional syntax tree node and annotation types used by the actions plugin.</span></p>
</li>
<li>
<p class="sectionentry"><a href="4-ak.html">
<spon class="sectiontitle">Action Kinds</span></a> -
<span class="sectionpurpose">Three action-related kinds of value.</span></p>
</li>
<li>
<p class="sectionentry"><a href="4-ac.html">
<spon class="sectiontitle">Action Conditions</span></a> -
<span class="sectionpurpose">A special condition for testing against action patterns.</span></p>
</li>
<li>
<p class="sectionentry"><a href="4-act.html">
<spon class="sectiontitle">Actions</span></a> -
@ -228,6 +238,11 @@
<spon class="sectiontitle">Action Patterns</span></a> -
<span class="sectionpurpose">An action pattern is a description which may match many actions or none. The text "doing something" matches every action, while "throwing something at a door in a dark room" is seldom matched.</span></p>
</li>
<li>
<p class="sectionentry"><a href="4-ea.html">
<spon class="sectiontitle">Explicit Actions</span></a> -
<span class="sectionpurpose">An exactly specified action is called "explicit".</span></p>
</li>
<li>
<p class="sectionentry"><a href="4-apc.html">
<spon class="sectiontitle">Action Pattern Clauses</span></a> -

View file

@ -267,8 +267,9 @@ storage: the following simple structures are used for this.
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">IF_MODULE</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ap</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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Node::is</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">, </span><span class="identifier-syntax">TEST_VALUE_NT</span><span class="plain-syntax">)) </span><span class="identifier-syntax">ap</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Rvalues::to_action_pattern</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</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="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">AConditions::is_action_TEST_VALUE</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">)) </span><span class="identifier-syntax">ap</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ActionPatterns::action_from_TEST</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">ap</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">tense</span><span class="plain-syntax"> != </span><span class="identifier-syntax">IS_TENSE</span><span class="plain-syntax">)) {</span>
<span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"Here we go! $A\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">ap</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">duration</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">Occurrence::units</span><span class="plain-syntax">(</span><span class="identifier-syntax">duration</span><span class="plain-syntax">) == </span><span class="identifier-syntax">TIMES_UNIT</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">Occurrence::length</span><span class="plain-syntax">(</span><span class="identifier-syntax">duration</span><span class="plain-syntax">) &gt;= </span><span class="constant-syntax">2</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_NoMoreRonNewcombMoment</span><span class="plain-syntax">),</span>
<span class="plain-syntax"> </span><span class="string-syntax">"a condition like 'we have X', where X is an action, has either "</span>

View file

@ -512,7 +512,7 @@ parser needs our help in the first place.)
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="function-syntax">&lt;action-pattern&gt;</span><span class="plain-syntax">(</span><span class="identifier-syntax">XW</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">as_parsed</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Conditions::new_TEST_ACTION</span><span class="plain-syntax">(</span><span class="function-syntax">&lt;&lt;rp&gt;&gt;</span><span class="plain-syntax">, </span><span class="identifier-syntax">XW</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">as_parsed</span><span class="plain-syntax"> = </span><span class="identifier-syntax">AConditions::new_action_TEST_VALUE</span><span class="plain-syntax">(</span><span class="function-syntax">&lt;&lt;rp&gt;&gt;</span><span class="plain-syntax">, </span><span class="identifier-syntax">XW</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">permit_trying_omission</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="6-pi.html#SP5_2" class="named-paragraph-link"><span class="named-paragraph">Parse any other token</span><span class="named-paragraph-number">5.2</span></a></span><span class="plain-syntax">;</span>

View file

@ -429,7 +429,7 @@ infrastructure, and we access it with a single call.
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">PluginManager::active</span><span class="plain-syntax">(</span><span class="identifier-syntax">actions_plugin</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">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"actions plugin inactive"</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::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_action_name</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Rvalues::to_action_name</span><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">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ARvalues::to_action_name</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">Holsters::data_acceptable</span><span class="plain-syntax">(</span><span class="identifier-syntax">VH</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">N</span><span class="plain-syntax"> = </span><a href="5-act.html#SP1" class="function-link"><span class="function-syntax">RTActions::iname</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">an</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">N</span><span class="plain-syntax">) </span><a href="2-emt.html#SP4" class="function-link"><span class="function-syntax">Emit::holster</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">VH</span><span class="plain-syntax">, </span><span class="identifier-syntax">N</span><span class="plain-syntax">);</span>

View file

@ -428,9 +428,10 @@ and in this case we therefore ignore <span class="extract"><span class="extract-
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">RTActionPatterns::compile_pattern_match</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">RTActionPatterns::compile_pattern_match</span></span>:<br/><a href="5-ap.html#SP5">&#167;5</a><br/>Actions - <a href="5-act.html#SP4">&#167;4</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">value_holster</span><span class="plain-syntax"> *</span><span class="identifier-syntax">VH</span><span class="plain-syntax">, </span><span class="identifier-syntax">action_pattern</span><span class="plain-syntax"> </span><span class="identifier-syntax">ap</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">naming_mode</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">cpm_count</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">needed</span><span class="plain-syntax">[</span><span class="constant-syntax">MAX_CPM_CLAUSES</span><span class="plain-syntax">];</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ap_clause</span><span class="plain-syntax"> *</span><span class="identifier-syntax">needed_apoc</span><span class="plain-syntax">[</span><span class="constant-syntax">MAX_CPM_CLAUSES</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">ACTION_PATTERN_COMPILATION</span><span class="plain-syntax">, </span><span class="string-syntax">"Compiling action pattern:\n $A"</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">ap</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">ACTION_PATTERN_COMPILATION</span><span class="plain-syntax">, </span><span class="string-syntax">"Compiling action pattern:\n $A\n"</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">ap</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">ap</span><span class="plain-syntax">.</span><span class="identifier-syntax">duration</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">ACTION_PATTERN_COMPILATION</span><span class="plain-syntax">, </span><span class="string-syntax">"As past action\n"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Chronology::compile_past_action_pattern</span><span class="plain-syntax">(</span><span class="identifier-syntax">VH</span><span class="plain-syntax">, </span><span class="identifier-syntax">ap</span><span class="plain-syntax">.</span><span class="identifier-syntax">duration</span><span class="plain-syntax">, </span><span class="identifier-syntax">ap</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">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">kind_of_noun</span><span class="plain-syntax"> = </span><span class="identifier-syntax">K_object</span><span class="plain-syntax">;</span>

View file

@ -86,7 +86,7 @@ function togglePopup(material_id) {
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../compiler.html">Inform7</a></li><li><a href="index.html">values</a></li><li><a href="index.html#2">Chapter 2: Specifications</a></li><li><b>Conditions</b></li></ul></div>
<p class="purpose">States of being which at any given point, at run-time, might be true or false.</p>
<ul class="toc"><li><a href="2-cnd.html#SP1">&#167;1. Creation</a></li><li><a href="2-cnd.html#SP12">&#167;12. Pretty-printing</a></li><li><a href="2-cnd.html#SP13">&#167;13. Specificity</a></li><li><a href="2-cnd.html#SP15">&#167;15. Compiling</a></li></ul><hr class="tocbar">
<ul class="toc"><li><a href="2-cnd.html#SP1">&#167;1. Creation</a></li><li><a href="2-cnd.html#SP11">&#167;11. Pretty-printing</a></li><li><a href="2-cnd.html#SP12">&#167;12. Specificity</a></li><li><a href="2-cnd.html#SP14">&#167;14. Compiling</a></li></ul><hr class="tocbar">
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. Creation. </b>In Inform, conditions are not values, nor can values be used directly as
conditions: we therefore need to provide the logical operations of AND, OR,
@ -150,7 +150,7 @@ in any other way.)
<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">Conditions::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">time_period</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tp</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">spec</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">TEST_PROPOSITION_NT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-cnd.html#SP11" class="function-link"><span class="function-syntax">Conditions::attach_historic_requirement</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">, </span><span class="identifier-syntax">tp</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-cnd.html#SP10" class="function-link"><span class="function-syntax">Conditions::attach_historic_requirement</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">, </span><span class="identifier-syntax">tp</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">spec</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
@ -204,54 +204,13 @@ exactly feasible, since the specification data field is 16 bits wide.
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">spec</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>&#167;10. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax">#</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">IF_MODULE</span>
<span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><a href="2-cnd.html#SP10" class="function-link"><span class="function-syntax">Conditions::new_TEST_ACTION</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ap</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ap</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 action pattern"</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">spec</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::new_with_words</span><span class="plain-syntax">(</span><span class="identifier-syntax">TEST_VALUE_NT</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">spec</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</span><span class="plain-syntax"> = </span><a href="2-rvl.html#SP2" class="function-link"><span class="function-syntax">Rvalues::from_action_pattern</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ap</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Node::set_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">spec</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><span class="identifier-syntax">ifndef</span><span class="plain-syntax"> </span><span class="identifier-syntax">IF_MODULE</span>
<span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="function-syntax">Conditions::new_TEST_ACTION</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">Conditions::new_TEST_ACTION</span></span>:<br/>Type Expressions and Values - <a href="4-teav.html#SP22">&#167;22</a><br/>Conditions and Phrases - <a href="4-cap.html#SP3">&#167;3</a>, <a href="4-cap.html#SP7">&#167;7</a>, <a href="4-cap.html#SP8_1">&#167;8.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ap</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"can't make test action without IF module"</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>
<span class="plain-syntax">}</span>
<span class="plain-syntax">#</span><span class="identifier-syntax">endif</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Conditions::is_TEST_ACTION</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">Conditions::is_TEST_ACTION</span></span>:<br/><a href="2-cnd.html#SP15">&#167;15</a><br/>Dash - <a href="2-dsh.html#SP18_5_1">&#167;18.5.1</a><br/>Literal Lists - <a href="3-ll.html#SP8">&#167;8</a><br/>Enter the S-Parser - <a href="4-ets.html#SP11">&#167;11</a></span></button><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="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">IF_MODULE</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">spec</span><span class="plain-syntax">, </span><span class="identifier-syntax">TEST_VALUE_NT</span><span class="plain-syntax">)) &amp;&amp;</span>
<span class="plain-syntax"> ((</span><a href="2-rvl.html#SP3" class="function-link"><span class="function-syntax">Rvalues::to_action_pattern</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</span><span class="plain-syntax">)) ||</span>
<span class="plain-syntax"> (</span><a href="2-rvl.html#SP3" class="function-link"><span class="function-syntax">Rvalues::to_explicit_action</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</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="identifier-syntax">endif</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="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="function-syntax">Conditions::action_tested</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">Conditions::action_tested</span></span>:<br/><a href="2-cnd.html#SP15">&#167;15</a></span></button><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="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">IF_MODULE</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="2-cnd.html#SP10" class="function-link"><span class="function-syntax">Conditions::is_TEST_ACTION</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">spec</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">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"action improperly extracted"</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">spec</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">endif</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifndef</span><span class="plain-syntax"> </span><span class="identifier-syntax">IF_MODULE</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"can't perform action_tested without IF module"</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>
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
<span class="plain-syntax">}</span>
</pre>
<ul class="endnotetexts"><li>The function Conditions::new_TEST_ACTION is used in Type Expressions and Values (<a href="4-teav.html#SP22">&#167;22</a>), Conditions and Phrases (<a href="4-cap.html#SP3">&#167;3</a>, <a href="4-cap.html#SP7">&#167;7</a>, <a href="4-cap.html#SP8_1">&#167;8.1</a>).</li></ul>
<p class="commentary firstcommentary"><a id="SP11" class="paragraph-anchor"></a><b>&#167;11. </b>Since, in principle, any condition might also have a time period attached
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>&#167;10. </b>Since, in principle, any condition might also have a time period attached
to it, we need a follow-up routine to attach this as necessary to a newly
created condition:
</p>
<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">Conditions::attach_tense</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">Conditions::attach_tense</span></span>:<br/>Verbal and Relative Clauses - <a href="4-varc.html#SP11_3">&#167;11.3</a><br/>Conditions and Phrases - <a href="4-cap.html#SP8_1">&#167;8.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">cond</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">t</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="function-syntax">Conditions::attach_tense</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">Conditions::attach_tense</span></span>:<br/>Verbal and Relative Clauses - <a href="4-varc.html#SP11_3">&#167;11.3</a><br/>Conditions and Phrases - <a href="4-cap.html#SP8_1">&#167;8.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">cond</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">t</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">spec</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">grammatical_usage</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gu</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Stock::new_usage</span><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">Task::language_of_syntax</span><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Stock::add_form_to_usage</span><span class="plain-syntax">(</span><span class="identifier-syntax">gu</span><span class="plain-syntax">, </span><span class="identifier-syntax">Lcon::set_tense</span><span class="plain-syntax">(</span><span class="identifier-syntax">Lcon::base</span><span class="plain-syntax">(), </span><span class="identifier-syntax">t</span><span class="plain-syntax">));</span>
@ -265,13 +224,13 @@ created condition:
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><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">parse_node</span><span class="plain-syntax"> *</span><span class="function-syntax">Conditions::attach_historic_requirement</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">Conditions::attach_historic_requirement</span></span>:<br/><a href="2-cnd.html#SP5">&#167;5</a><br/>Conditions and Phrases - <a href="4-cap.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cond</span><span class="plain-syntax">, </span><span class="identifier-syntax">time_period</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tp</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="function-syntax">Conditions::attach_historic_requirement</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">Conditions::attach_historic_requirement</span></span>:<br/><a href="2-cnd.html#SP5">&#167;5</a><br/>Conditions and Phrases - <a href="4-cap.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cond</span><span class="plain-syntax">, </span><span class="identifier-syntax">time_period</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tp</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">cond</span><span class="plain-syntax">, </span><span class="identifier-syntax">AMBIGUITY_NT</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">amb</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">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">cond</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cond</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</span><span class="plain-syntax">; </span><span class="identifier-syntax">cond</span><span class="plain-syntax">; </span><span class="identifier-syntax">cond</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cond</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next_alternative</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">reading</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::duplicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">cond</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">reading</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next_alternative</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">reading</span><span class="plain-syntax"> = </span><a href="2-cnd.html#SP11" class="function-link"><span class="function-syntax">Conditions::attach_historic_requirement</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">reading</span><span class="plain-syntax">, </span><span class="identifier-syntax">tp</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">reading</span><span class="plain-syntax"> = </span><a href="2-cnd.html#SP10" class="function-link"><span class="function-syntax">Conditions::attach_historic_requirement</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">reading</span><span class="plain-syntax">, </span><span class="identifier-syntax">tp</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">reading</span><span class="plain-syntax">, </span><span class="identifier-syntax">UNKNOWN_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">amb</span><span class="plain-syntax"> = </span><span class="identifier-syntax">SyntaxTree::add_reading</span><span class="plain-syntax">(</span><span class="identifier-syntax">amb</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">reading</span><span class="plain-syntax">, </span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">cond</span><span class="plain-syntax">));</span>
@ -289,10 +248,10 @@ created condition:
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">spec</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP12" class="paragraph-anchor"></a><b>&#167;12. Pretty-printing. </b></p>
<p class="commentary firstcommentary"><a id="SP11" class="paragraph-anchor"></a><b>&#167;11. Pretty-printing. </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">Conditions::write_out_in_English</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">Conditions::write_out_in_English</span></span>:<br/>Specifications - <a href="2-spc.html#SP7">&#167;7</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</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="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Conditions::write_out_in_English</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">Conditions::write_out_in_English</span></span>:<br/>Specifications - <a href="2-spc.html#SP7">&#167;7</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</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><a href="2-spc.html#SP3" class="function-link"><span class="function-syntax">Specifications::is_description</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><a href="2-dsc.html#SP11" class="function-link"><span class="function-syntax">Descriptions::write_out_in_English</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</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">else</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">spec</span><span class="plain-syntax">, </span><span class="identifier-syntax">TEST_VALUE_NT</span><span class="plain-syntax">)) &amp;&amp; (</span><span class="identifier-syntax">Node::is</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</span><span class="plain-syntax">, </span><span class="identifier-syntax">CONSTANT_NT</span><span class="plain-syntax">))) {</span>
@ -306,7 +265,7 @@ created condition:
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP13" class="paragraph-anchor"></a><b>&#167;13. Specificity. </b>We will need a way of determining which of two conditions is more complex,
<p class="commentary firstcommentary"><a id="SP12" class="paragraph-anchor"></a><b>&#167;12. Specificity. </b>We will need a way of determining which of two conditions is more complex,
so that action-based rules with "when..." clauses tacked on can be sorted:
the following is used to compare such "when..." conditions.
</p>
@ -318,33 +277,33 @@ beat shorter ones.
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Conditions::compare_specificity_of_CONDITIONs</span><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">spec1</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">spec2</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">spec1</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">spec2</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="constant-syntax">0</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">count1</span><span class="plain-syntax"> = </span><a href="2-cnd.html#SP14" class="function-link"><span class="function-syntax">Conditions::count</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">spec1</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">count2</span><span class="plain-syntax"> = </span><a href="2-cnd.html#SP14" class="function-link"><span class="function-syntax">Conditions::count</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">spec2</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">count1</span><span class="plain-syntax"> = </span><a href="2-cnd.html#SP13" class="function-link"><span class="function-syntax">Conditions::count</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">spec1</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">count2</span><span class="plain-syntax"> = </span><a href="2-cnd.html#SP13" class="function-link"><span class="function-syntax">Conditions::count</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">spec2</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">count1</span><span class="plain-syntax"> &gt; </span><span class="identifier-syntax">count2</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</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">count1</span><span class="plain-syntax"> &lt; </span><span class="identifier-syntax">count2</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="constant-syntax">0</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. </b>The only justification for the following complexity score is that it does
<p class="commentary firstcommentary"><a id="SP13" class="paragraph-anchor"></a><b>&#167;13. </b>The only justification for the following complexity score is that it does
seem to accord well with what people expect. (There's clearly no theoretically
perfect way to define complexity of conditions in a language as complex as
Inform; this bit of scruffy, rather than neat, logic will have to do.)
</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">Conditions::count</span><button class="popup" onclick="togglePopup('usagePopup12')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup12">Usage of <span class="code-font"><span class="function-syntax">Conditions::count</span></span>:<br/><a href="2-cnd.html#SP13">&#167;13</a></span></button><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="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Conditions::count</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">Conditions::count</span></span>:<br/><a href="2-cnd.html#SP12">&#167;12</a></span></button><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">spec</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="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="2-spc.html#SP1" class="function-link"><span class="function-syntax">Specifications::is_condition</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</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">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Node::get_type</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">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">LOGICAL_AND_NT:</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="2-cnd.html#SP14" class="function-link"><span class="function-syntax">Conditions::count</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> + </span><a href="2-cnd.html#SP14" class="function-link"><span class="function-syntax">Conditions::count</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">spec</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">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="2-cnd.html#SP13" class="function-link"><span class="function-syntax">Conditions::count</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> + </span><a href="2-cnd.html#SP13" class="function-link"><span class="function-syntax">Conditions::count</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">spec</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">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">LOGICAL_OR_NT:</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">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">LOGICAL_NOT_NT:</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="2-cnd.html#SP14" class="function-link"><span class="function-syntax">Conditions::count</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">spec</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="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="2-cnd.html#SP13" class="function-link"><span class="function-syntax">Conditions::count</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">spec</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="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">LOGICAL_TENSE_NT:</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="2-cnd.html#SP14" class="function-link"><span class="function-syntax">Conditions::count</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">spec</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="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="2-cnd.html#SP13" class="function-link"><span class="function-syntax">Conditions::count</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">spec</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="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">TEST_PROPOSITION_NT:</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">Propositions::length</span><span class="plain-syntax">(</span><a href="2-spc.html#SP4" class="function-link"><span class="function-syntax">Specifications::to_proposition</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="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">TEST_PHRASE_OPTION_NT:</span>
@ -354,7 +313,7 @@ Inform; this bit of scruffy, rather than neat, logic will have to do.)
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP15" class="paragraph-anchor"></a><b>&#167;15. Compiling. </b>We clear two oddball cases out of the way, and then for the most part we
<p class="commentary firstcommentary"><a id="SP14" class="paragraph-anchor"></a><b>&#167;14. Compiling. </b>We clear two oddball cases out of the way, and then for the most part we
delegate to potent routines elsewhere. Note that in some situations a valid
I6 condition must be enclosed in round brackets, and that a redundant pair
of brackets never does any harm; so we always compile one.
@ -370,13 +329,18 @@ of brackets never does any harm; so we always compile one.
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">LOGICAL_TENSE_NT:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Chronology::compile_past_tense_condition</span><span class="plain-syntax">(</span><span class="identifier-syntax">VH</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec_found</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">LOGICAL_NOT_NT:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-cnd.html#SP15_1" class="named-paragraph-link"><span class="named-paragraph">Compile a logical negation</span><span class="named-paragraph-number">15.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">LOGICAL_AND_NT:</span><span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">LOGICAL_OR_NT:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-cnd.html#SP15_2" class="named-paragraph-link"><span class="named-paragraph">Compile a logical operator</span><span class="named-paragraph-number">15.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">LOGICAL_NOT_NT:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-cnd.html#SP14_1" class="named-paragraph-link"><span class="named-paragraph">Compile a logical negation</span><span class="named-paragraph-number">14.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">LOGICAL_AND_NT:</span><span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">LOGICAL_OR_NT:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-cnd.html#SP14_2" class="named-paragraph-link"><span class="named-paragraph">Compile a logical operator</span><span class="named-paragraph-number">14.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">TEST_VALUE_NT:</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-cnd.html#SP10" class="function-link"><span class="function-syntax">Conditions::is_TEST_ACTION</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">spec_found</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">AConditions::is_action_TEST_VALUE</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec_found</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">IF_MODULE</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ap</span><span class="plain-syntax"> = </span><a href="2-rvl.html#SP3" class="function-link"><span class="function-syntax">Rvalues::to_action_pattern</span></a><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><a href="2-cnd.html#SP10" class="function-link"><span class="function-syntax">Conditions::action_tested</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">spec_found</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ap</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ARvalues::to_action_pattern</span><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">AConditions::action_tested</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec_found</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">ap</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">explicit_action</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ea</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::get_constant_explicit_action</span><span class="plain-syntax">(</span><span class="identifier-syntax">AConditions::action_tested</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec_found</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">ea</span><span class="plain-syntax">) </span><span class="identifier-syntax">ap</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ea</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">as_described</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">ap</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"no action pattern to test"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">RTActionPatterns::compile_pattern_match</span><span class="plain-syntax">(</span><span class="identifier-syntax">VH</span><span class="plain-syntax">, *</span><span class="identifier-syntax">ap</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">endif</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="2-spc.html#SP3" class="function-link"><span class="function-syntax">Specifications::is_description</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">spec_found</span><span class="plain-syntax">)) {</span>
@ -387,14 +351,14 @@ of brackets never does any harm; so we always compile one.
<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="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">TEST_PHRASE_OPTION_NT:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-cnd.html#SP15_3" class="named-paragraph-link"><span class="named-paragraph">Compile a phrase option test</span><span class="named-paragraph-number">15.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">TEST_PHRASE_OPTION_NT:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-cnd.html#SP14_3" class="named-paragraph-link"><span class="named-paragraph">Compile a phrase option test</span><span class="named-paragraph-number">14.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="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP15_1" class="paragraph-anchor"></a><b>&#167;15.1. </b>An easy case, running straight out to I6 operators:
<p class="commentary firstcommentary"><a id="SP14_1" class="paragraph-anchor"></a><b>&#167;14.1. </b>An easy case, running straight out to I6 operators:
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Compile a logical negation</span><span class="named-paragraph-number">15.1</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Compile a logical negation</span><span class="named-paragraph-number">14.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -405,11 +369,11 @@ of brackets never does any harm; so we always compile one.
<span class="plain-syntax"> </span><span class="identifier-syntax">Specifications::Compiler::emit_as_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec_found</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">Produce::up</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="2-cnd.html#SP15">&#167;15</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP15_2" class="paragraph-anchor"></a><b>&#167;15.2. </b>An easy case, running straight out to I6 operators:
<ul class="endnotetexts"><li>This code is used in <a href="2-cnd.html#SP14">&#167;14</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP14_2" class="paragraph-anchor"></a><b>&#167;14.2. </b>An easy case, running straight out to I6 operators:
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Compile a logical operator</span><span class="named-paragraph-number">15.2</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Compile a logical operator</span><span class="named-paragraph-number">14.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -427,15 +391,15 @@ of brackets never does any harm; so we always compile one.
<span class="plain-syntax"> </span><span class="identifier-syntax">Specifications::Compiler::emit_as_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">right_operand</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="2-cnd.html#SP15">&#167;15</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP15_3" class="paragraph-anchor"></a><b>&#167;15.3. </b>Phrase options are stored as bits in a 16-bit map, so that each individual
<ul class="endnotetexts"><li>This code is used in <a href="2-cnd.html#SP14">&#167;14</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP14_3" class="paragraph-anchor"></a><b>&#167;14.3. </b>Phrase options are stored as bits in a 16-bit map, so that each individual
option is a power of two from \(2^0\) to \(2^15\). We test if this is valid by
performing logical-and against the I6 local variable <span class="extract"><span class="extract-syntax">phrase_options</span></span>, which
exists if and only if the enclosing I6 routine takes phrase options. The
type-checker won't allow these specifications to be compiled anywhere else.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Compile a phrase option test</span><span class="named-paragraph-number">15.3</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Compile a phrase option test</span><span class="named-paragraph-number">14.3</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -449,7 +413,7 @@ type-checker won't allow these specifications to be compiled anywhere else.
<span class="plain-syntax"> (</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax">) </span><span class="identifier-syntax">Annotations::read_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec_found</span><span class="plain-syntax">, </span><span class="identifier-syntax">phrase_option_ANNOT</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="2-cnd.html#SP15">&#167;15</a>.</li></ul>
<ul class="endnotetexts"><li>This code is used in <a href="2-cnd.html#SP14">&#167;14</a>.</li></ul>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="2-lvl.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-vm.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresssection"><a href="2-spc.html">spc</a></li><li class="progresssection"><a href="2-rvl.html">rvl</a></li><li class="progresssection"><a href="2-lvl.html">lvl</a></li><li class="progresscurrent">cnd</li><li class="progresssection"><a href="2-dsc.html">dsc</a></li><li class="progresssection"><a href="2-dsh.html">dsh</a></li><li class="progresschapter"><a href="3-pl.html">3</a></li><li class="progresschapter"><a href="4-ets.html">4</a></li><li class="progressnext"><a href="2-dsc.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->

View file

@ -399,7 +399,7 @@ a list. It's sometimes convenient to loop through this list:
<p class="commentary firstcommentary"><a id="SP11" class="paragraph-anchor"></a><b>&#167;11. Pretty-printing. </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">Descriptions::write_out_in_English</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">Descriptions::write_out_in_English</span></span>:<br/>Conditions - <a href="2-cnd.html#SP12">&#167;12</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</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="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Descriptions::write_out_in_English</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">Descriptions::write_out_in_English</span></span>:<br/>Conditions - <a href="2-cnd.html#SP11">&#167;11</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</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="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax"> = </span><a href="2-spc.html#SP1" class="function-link"><span class="function-syntax">Specifications::to_kind</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">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"a description"</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>

View file

@ -3671,17 +3671,15 @@ action value, which is a specific action.
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG_DASH</span><span class="plain-syntax">(</span><span class="string-syntax">"(5.d.1)"</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">"Kind expected %u; ista %d cond %d\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">kind_expected</span><span class="plain-syntax">, </span><a href="2-cnd.html#SP10" class="function-link"><span class="function-syntax">Conditions::is_TEST_ACTION</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">), </span><span class="identifier-syntax">condition_context</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-cnd.html#SP10" class="function-link"><span class="function-syntax">Conditions::is_TEST_ACTION</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">)) &amp;&amp; (</span><span class="identifier-syntax">kind_expected</span><span class="plain-syntax">) &amp;&amp;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">AConditions::is_action_TEST_VALUE</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">)) &amp;&amp; (</span><span class="identifier-syntax">kind_expected</span><span class="plain-syntax">) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">Kinds::compatible</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_stored_action</span><span class="plain-syntax">, </span><span class="identifier-syntax">kind_expected</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">"Madeit\n"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">explicit_action</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ea</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::get_constant_explicit_action</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">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ea</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">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ap</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::get_constant_action_pattern</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">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">failure_code</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">ea</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ActionPatterns::to_explicit_action</span><span class="plain-syntax">(</span><span class="identifier-syntax">ap</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">failure_code</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ea</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ExplicitActions::from_action_pattern</span><span class="plain-syntax">(</span><span class="identifier-syntax">ap</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">failure_code</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">failure_code</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">failure_code</span><span class="plain-syntax"> == </span><span class="identifier-syntax">UNDERSPECIFIC_EA_FAILURE</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_wording</span><span class="plain-syntax">(2, </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>
@ -3694,7 +3692,7 @@ action value, which is a specific action.
<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">failure_code</span><span class="plain-syntax"> == </span><span class="constant-syntax">2</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">failure_code</span><span class="plain-syntax"> == </span><span class="identifier-syntax">OVERSPECIFIC_EA_FAILURE</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_wording</span><span class="plain-syntax">(2, </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>
@ -4206,7 +4204,7 @@ into treating it as such.
<span class="plain-syntax"> </span><span class="identifier-syntax">ap_validation_suspended</span><span class="plain-syntax"> = </span><span class="identifier-syntax">state</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">Dash::validate_parameter</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">Dash::validate_parameter</span></span>:<br/>Type Expressions and Values - <a href="4-teav.html#SP22">&#167;22</a></span></button><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="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Dash::validate_parameter</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="identifier-syntax">kind</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">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vts</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">kind_found</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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">spec</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">TRUE</span><span class="plain-syntax">;</span>
@ -4258,7 +4256,7 @@ into treating it as such.
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">verbose_checking_state</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Dash::tracing_phrases</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">Dash::tracing_phrases</span></span>:<br/><a href="2-dsh.html#SP27">&#167;27</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> *</span><span class="identifier-syntax">text</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Dash::tracing_phrases</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">Dash::tracing_phrases</span></span>:<br/><a href="2-dsh.html#SP27">&#167;27</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> *</span><span class="identifier-syntax">text</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">text</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">text</span><span class="plain-syntax">[0])) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">LT</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">LT</span><span class="plain-syntax">, </span><span class="string-syntax">"%w"</span><span class="plain-syntax">, </span><span class="identifier-syntax">text</span><span class="plain-syntax">);</span>
@ -4286,7 +4284,7 @@ at run time.
</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">Dash::compatible_with_description</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">Dash::compatible_with_description</span></span>:<br/><a href="2-dsh.html#SP10_5">&#167;10.5</a>, <a href="2-dsh.html#SP24">&#167;24</a><br/>Specifications - <a href="2-spc.html#SP8_5">&#167;8.5</a><br/>Descriptions - <a href="2-dsc.html#SP12_2">&#167;12.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">from_spec</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">to_spec</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Dash::compatible_with_description</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">Dash::compatible_with_description</span></span>:<br/><a href="2-dsh.html#SP10_5">&#167;10.5</a>, <a href="2-dsh.html#SP24">&#167;24</a><br/>Specifications - <a href="2-spc.html#SP8_5">&#167;8.5</a><br/>Descriptions - <a href="2-dsc.html#SP12_2">&#167;12.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">from_spec</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">to_spec</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">KIND_CHECKING</span><span class="plain-syntax">, </span><span class="string-syntax">"[Can we match from: $P to: $P?]\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">from_spec</span><span class="plain-syntax">, </span><span class="identifier-syntax">to_spec</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">from</span><span class="plain-syntax"> = </span><a href="2-spc.html#SP1" class="function-link"><span class="function-syntax">Specifications::to_kind</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">from_spec</span><span class="plain-syntax">);</span>

View file

@ -102,36 +102,13 @@ pointers:
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">spec</span><span class="plain-syntax">;</span>
</pre>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax">#</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">IF_MODULE</span>
<span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="function-syntax">Rvalues::from_action_name</span><span class="plain-syntax">(</span><span class="identifier-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">val</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CONV_FROM</span><span class="plain-syntax">(</span><span class="identifier-syntax">action_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_action_name</span><span class="plain-syntax">) }</span>
<span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="function-syntax">Rvalues::from_action_pattern</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">Rvalues::from_action_pattern</span></span>:<br/>Conditions - <a href="2-cnd.html#SP10">&#167;10</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">val</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">failure_code</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">explicit_action</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ea</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ActionPatterns::to_explicit_action</span><span class="plain-syntax">(</span><span class="identifier-syntax">val</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">failure_code</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">ea</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">spec</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">CONSTANT_NT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Node::set_kind_of_value</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_stored_action</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Node::set_constant_action_pattern</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">, </span><span class="identifier-syntax">val</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Node::set_constant_explicit_action</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">, </span><span class="identifier-syntax">ea</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">spec</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">CONV_FROM</span><span class="plain-syntax">(</span><span class="identifier-syntax">action_pattern</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_description_of_action</span><span class="plain-syntax">);</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">Rvalues::from_grammar_verb</span><span class="plain-syntax">(</span><span class="identifier-syntax">grammar_verb</span><span class="plain-syntax"> *</span><span class="identifier-syntax">val</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CONV_FROM</span><span class="plain-syntax">(</span><span class="identifier-syntax">grammar_verb</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_understanding</span><span class="plain-syntax">) }</span>
<span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="function-syntax">Rvalues::from_named_action_pattern</span><span class="plain-syntax">(</span><span class="identifier-syntax">named_action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">val</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CONV_FROM</span><span class="plain-syntax">(</span><span class="identifier-syntax">named_action_pattern</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_nil</span><span class="plain-syntax">) }</span>
<span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="function-syntax">Rvalues::from_scene</span><span class="plain-syntax">(</span><span class="identifier-syntax">scene</span><span class="plain-syntax"> *</span><span class="identifier-syntax">val</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CONV_FROM</span><span class="plain-syntax">(</span><span class="identifier-syntax">scene</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_scene</span><span class="plain-syntax">) }</span>
<span class="plain-syntax">#</span><span class="identifier-syntax">endif</span>
<span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="function-syntax">Rvalues::from_activity</span><span class="plain-syntax">(</span><span class="identifier-syntax">activity</span><span class="plain-syntax"> *</span><span class="identifier-syntax">val</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CONV_FROM</span><span class="plain-syntax">(</span><span class="identifier-syntax">activity</span><span class="plain-syntax">, </span><span class="identifier-syntax">Activities::to_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">val</span><span class="plain-syntax">)) }</span>
<span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="function-syntax">Rvalues::from_binary_predicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">val</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CONV_FROM</span><span class="plain-syntax">(</span><span class="identifier-syntax">binary_predicate</span><span class="plain-syntax">, </span><span class="identifier-syntax">Kinds::base_construction</span><span class="plain-syntax">(</span><span class="identifier-syntax">CON_relation</span><span class="plain-syntax">)) }</span>
<span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="function-syntax">Rvalues::from_constant_phrase</span><span class="plain-syntax">(</span><span class="identifier-syntax">constant_phrase</span><span class="plain-syntax"> *</span><span class="identifier-syntax">val</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CONV_FROM</span><span class="plain-syntax">(</span><span class="identifier-syntax">constant_phrase</span><span class="plain-syntax">, </span><span class="identifier-syntax">Kinds::base_construction</span><span class="plain-syntax">(</span><span class="identifier-syntax">CON_phrase</span><span class="plain-syntax">)) }</span>
<span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="function-syntax">Rvalues::from_equation</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">Rvalues::from_equation</span></span>:<br/>Type Expressions and Values - <a href="4-teav.html#SP11_1">&#167;11.1</a>, <a href="4-teav.html#SP11_3">&#167;11.3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">equation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">val</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="function-syntax">Rvalues::from_equation</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">Rvalues::from_equation</span></span>:<br/>Type Expressions and Values - <a href="4-teav.html#SP11_1">&#167;11.1</a>, <a href="4-teav.html#SP11_3">&#167;11.3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">equation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">val</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CONV_FROM</span><span class="plain-syntax">(</span><span class="identifier-syntax">equation</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_equation</span><span class="plain-syntax">) }</span>
<span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="function-syntax">Rvalues::from_named_rulebook_outcome</span><span class="plain-syntax">(</span><span class="identifier-syntax">named_rulebook_outcome</span><span class="plain-syntax"> *</span><span class="identifier-syntax">val</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CONV_FROM</span><span class="plain-syntax">(</span><span class="identifier-syntax">named_rulebook_outcome</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_rulebook_outcome</span><span class="plain-syntax">) }</span>
@ -147,7 +124,7 @@ pointers:
<span class="plain-syntax"> </span><span class="identifier-syntax">CONV_FROM</span><span class="plain-syntax">(</span><span class="identifier-syntax">table_column</span><span class="plain-syntax">, </span><span class="identifier-syntax">Tables::Columns::to_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">val</span><span class="plain-syntax">)) }</span>
<span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="function-syntax">Rvalues::from_use_option</span><span class="plain-syntax">(</span><span class="identifier-syntax">use_option</span><span class="plain-syntax"> *</span><span class="identifier-syntax">val</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CONV_FROM</span><span class="plain-syntax">(</span><span class="identifier-syntax">use_option</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_use_option</span><span class="plain-syntax">) }</span>
<span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="function-syntax">Rvalues::from_verb_form</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">Rvalues::from_verb_form</span></span>:<br/>Constants and Descriptions - <a href="4-cad.html#SP1_1">&#167;1.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">verb_form</span><span class="plain-syntax"> *</span><span class="identifier-syntax">val</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="function-syntax">Rvalues::from_verb_form</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">Rvalues::from_verb_form</span></span>:<br/>Constants and Descriptions - <a href="4-cad.html#SP1_1">&#167;1.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">verb_form</span><span class="plain-syntax"> *</span><span class="identifier-syntax">val</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CONV_FROM</span><span class="plain-syntax">(</span><span class="identifier-syntax">verb_form</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_verb</span><span class="plain-syntax">) }</span>
</pre>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b>Contrariwise, here's how to get back again:
@ -159,43 +136,29 @@ pointers:
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">val</span><span class="plain-syntax">;</span>
</pre>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax">#</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">IF_MODULE</span>
<span class="identifier-syntax">action_name</span><span class="plain-syntax"> *</span><span class="function-syntax">Rvalues::to_action_name</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="identifier-syntax">CONV_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">action_name</span><span class="plain-syntax">) }</span>
<span class="identifier-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="function-syntax">Rvalues::to_action_pattern</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">Rvalues::to_action_pattern</span></span>:<br/>Conditions - <a href="2-cnd.html#SP10">&#167;10</a>, <a href="2-cnd.html#SP15">&#167;15</a><br/>Conditions and Phrases - <a href="4-cap.html#SP3">&#167;3</a></span></button><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="identifier-syntax">CONV_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">action_pattern</span><span class="plain-syntax">) }</span>
<span class="identifier-syntax">explicit_action</span><span class="plain-syntax"> *</span><span class="function-syntax">Rvalues::to_explicit_action</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">Rvalues::to_explicit_action</span></span>:<br/>Conditions - <a href="2-cnd.html#SP10">&#167;10</a></span></button><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="identifier-syntax">CONV_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">explicit_action</span><span class="plain-syntax">) }</span>
<span class="identifier-syntax">grammar_verb</span><span class="plain-syntax"> *</span><span class="function-syntax">Rvalues::to_grammar_verb</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="identifier-syntax">CONV_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">grammar_verb</span><span class="plain-syntax">) }</span>
<span class="identifier-syntax">named_action_pattern</span><span class="plain-syntax"> *</span><span class="function-syntax">Rvalues::to_named_action_pattern</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="identifier-syntax">CONV_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">named_action_pattern</span><span class="plain-syntax">) }</span>
<span class="identifier-syntax">scene</span><span class="plain-syntax"> *</span><span class="function-syntax">Rvalues::to_scene</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="identifier-syntax">CONV_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">scene</span><span class="plain-syntax">) }</span>
<span class="plain-syntax">#</span><span class="identifier-syntax">endif</span>
<span class="identifier-syntax">activity</span><span class="plain-syntax"> *</span><span class="function-syntax">Rvalues::to_activity</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">Rvalues::to_activity</span></span>:<br/><a href="2-rvl.html#SP22">&#167;22</a>, <a href="2-rvl.html#SP25_3">&#167;25.3</a></span></button><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="identifier-syntax">activity</span><span class="plain-syntax"> *</span><span class="function-syntax">Rvalues::to_activity</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">Rvalues::to_activity</span></span>:<br/><a href="2-rvl.html#SP22">&#167;22</a>, <a href="2-rvl.html#SP25_3">&#167;25.3</a></span></button><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="identifier-syntax">CONV_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">activity</span><span class="plain-syntax">) }</span>
<span class="identifier-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="function-syntax">Rvalues::to_binary_predicate</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">Rvalues::to_binary_predicate</span></span>:<br/><a href="2-rvl.html#SP4">&#167;4</a>, <a href="2-rvl.html#SP22">&#167;22</a>, <a href="2-rvl.html#SP24_2">&#167;24.2</a>, <a href="2-rvl.html#SP25_3">&#167;25.3</a></span></button><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="identifier-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="function-syntax">Rvalues::to_binary_predicate</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">Rvalues::to_binary_predicate</span></span>:<br/><a href="2-rvl.html#SP4">&#167;4</a>, <a href="2-rvl.html#SP22">&#167;22</a>, <a href="2-rvl.html#SP24_2">&#167;24.2</a>, <a href="2-rvl.html#SP25_3">&#167;25.3</a></span></button><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="identifier-syntax">CONV_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">binary_predicate</span><span class="plain-syntax">) }</span>
<span class="identifier-syntax">constant_phrase</span><span class="plain-syntax"> *</span><span class="function-syntax">Rvalues::to_constant_phrase</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">Rvalues::to_constant_phrase</span></span>:<br/><a href="2-rvl.html#SP22">&#167;22</a>, <a href="2-rvl.html#SP24_6">&#167;24.6</a>, <a href="2-rvl.html#SP25_3">&#167;25.3</a></span></button><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="identifier-syntax">constant_phrase</span><span class="plain-syntax"> *</span><span class="function-syntax">Rvalues::to_constant_phrase</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">Rvalues::to_constant_phrase</span></span>:<br/><a href="2-rvl.html#SP22">&#167;22</a>, <a href="2-rvl.html#SP24_6">&#167;24.6</a>, <a href="2-rvl.html#SP25_3">&#167;25.3</a></span></button><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="identifier-syntax">CONV_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">constant_phrase</span><span class="plain-syntax">) }</span>
<span class="identifier-syntax">equation</span><span class="plain-syntax"> *</span><span class="function-syntax">Rvalues::to_equation</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">Rvalues::to_equation</span></span>:<br/><a href="2-rvl.html#SP25_3">&#167;25.3</a><br/>Type Expressions and Values - <a href="4-teav.html#SP11_2">&#167;11.2</a></span></button><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="identifier-syntax">equation</span><span class="plain-syntax"> *</span><span class="function-syntax">Rvalues::to_equation</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">Rvalues::to_equation</span></span>:<br/><a href="2-rvl.html#SP25_3">&#167;25.3</a><br/>Type Expressions and Values - <a href="4-teav.html#SP11_2">&#167;11.2</a></span></button><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="identifier-syntax">CONV_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">equation</span><span class="plain-syntax">) }</span>
<span class="identifier-syntax">named_rulebook_outcome</span><span class="plain-syntax"> *</span><span class="function-syntax">Rvalues::to_named_rulebook_outcome</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">Rvalues::to_named_rulebook_outcome</span></span>:<br/><a href="2-rvl.html#SP25_3">&#167;25.3</a></span></button><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="identifier-syntax">named_rulebook_outcome</span><span class="plain-syntax"> *</span><span class="function-syntax">Rvalues::to_named_rulebook_outcome</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">Rvalues::to_named_rulebook_outcome</span></span>:<br/><a href="2-rvl.html#SP25_3">&#167;25.3</a></span></button><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="identifier-syntax">CONV_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">named_rulebook_outcome</span><span class="plain-syntax">) }</span>
<span class="identifier-syntax">property</span><span class="plain-syntax"> *</span><span class="function-syntax">Rvalues::to_property</span><button class="popup" onclick="togglePopup('usagePopup12')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup12">Usage of <span class="code-font"><span class="function-syntax">Rvalues::to_property</span></span>:<br/><a href="2-rvl.html#SP22">&#167;22</a>, <a href="2-rvl.html#SP24_3">&#167;24.3</a>, <a href="2-rvl.html#SP25_3_1">&#167;25.3.1</a><br/>Lvalues - <a href="2-lvl.html#SP10">&#167;10</a>, <a href="2-lvl.html#SP11_5">&#167;11.5</a>, <a href="2-lvl.html#SP13_3">&#167;13.3</a><br/>Dash - <a href="2-dsh.html#SP10_9_1_1_2_1">&#167;10.9.1.1.2.1</a>, <a href="2-dsh.html#SP10_9_1_1_5_1_2">&#167;10.9.1.1.5.1.2</a>, <a href="2-dsh.html#SP10_9_1_2_3">&#167;10.9.1.2.3</a>, <a href="2-dsh.html#SP12">&#167;12</a>, <a href="2-dsh.html#SP18_3">&#167;18.3</a></span></button><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="identifier-syntax">property</span><span class="plain-syntax"> *</span><span class="function-syntax">Rvalues::to_property</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">Rvalues::to_property</span></span>:<br/><a href="2-rvl.html#SP22">&#167;22</a>, <a href="2-rvl.html#SP24_3">&#167;24.3</a>, <a href="2-rvl.html#SP25_3_1">&#167;25.3.1</a><br/>Lvalues - <a href="2-lvl.html#SP10">&#167;10</a>, <a href="2-lvl.html#SP11_5">&#167;11.5</a>, <a href="2-lvl.html#SP13_3">&#167;13.3</a><br/>Dash - <a href="2-dsh.html#SP10_9_1_1_2_1">&#167;10.9.1.1.2.1</a>, <a href="2-dsh.html#SP10_9_1_1_5_1_2">&#167;10.9.1.1.5.1.2</a>, <a href="2-dsh.html#SP10_9_1_2_3">&#167;10.9.1.2.3</a>, <a href="2-dsh.html#SP12">&#167;12</a>, <a href="2-dsh.html#SP18_3">&#167;18.3</a></span></button><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="identifier-syntax">CONV_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">property</span><span class="plain-syntax">) }</span>
<span class="identifier-syntax">rule</span><span class="plain-syntax"> *</span><span class="function-syntax">Rvalues::to_rule</span><button class="popup" onclick="togglePopup('usagePopup13')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup13">Usage of <span class="code-font"><span class="function-syntax">Rvalues::to_rule</span></span>:<br/><a href="2-rvl.html#SP22">&#167;22</a>, <a href="2-rvl.html#SP25_3">&#167;25.3</a></span></button><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="identifier-syntax">rule</span><span class="plain-syntax"> *</span><span class="function-syntax">Rvalues::to_rule</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">Rvalues::to_rule</span></span>:<br/><a href="2-rvl.html#SP22">&#167;22</a>, <a href="2-rvl.html#SP25_3">&#167;25.3</a></span></button><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="identifier-syntax">CONV_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">rule</span><span class="plain-syntax">) }</span>
<span class="identifier-syntax">rulebook</span><span class="plain-syntax"> *</span><span class="function-syntax">Rvalues::to_rulebook</span><button class="popup" onclick="togglePopup('usagePopup14')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup14">Usage of <span class="code-font"><span class="function-syntax">Rvalues::to_rulebook</span></span>:<br/><a href="2-rvl.html#SP22">&#167;22</a>, <a href="2-rvl.html#SP25_3">&#167;25.3</a></span></button><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="identifier-syntax">rulebook</span><span class="plain-syntax"> *</span><span class="function-syntax">Rvalues::to_rulebook</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">Rvalues::to_rulebook</span></span>:<br/><a href="2-rvl.html#SP22">&#167;22</a>, <a href="2-rvl.html#SP25_3">&#167;25.3</a></span></button><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="identifier-syntax">CONV_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">rulebook</span><span class="plain-syntax">) }</span>
<span class="identifier-syntax">table</span><span class="plain-syntax"> *</span><span class="function-syntax">Rvalues::to_table</span><button class="popup" onclick="togglePopup('usagePopup15')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup15">Usage of <span class="code-font"><span class="function-syntax">Rvalues::to_table</span></span>:<br/><a href="2-rvl.html#SP25_3">&#167;25.3</a></span></button><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="identifier-syntax">table</span><span class="plain-syntax"> *</span><span class="function-syntax">Rvalues::to_table</span><button class="popup" onclick="togglePopup('usagePopup12')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup12">Usage of <span class="code-font"><span class="function-syntax">Rvalues::to_table</span></span>:<br/><a href="2-rvl.html#SP25_3">&#167;25.3</a></span></button><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="identifier-syntax">CONV_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">table</span><span class="plain-syntax">) }</span>
<span class="identifier-syntax">table_column</span><span class="plain-syntax"> *</span><span class="function-syntax">Rvalues::to_table_column</span><button class="popup" onclick="togglePopup('usagePopup16')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup16">Usage of <span class="code-font"><span class="function-syntax">Rvalues::to_table_column</span></span>:<br/><a href="2-rvl.html#SP22">&#167;22</a>, <a href="2-rvl.html#SP24_5">&#167;24.5</a>, <a href="2-rvl.html#SP25_3">&#167;25.3</a><br/>Lvalues - <a href="2-lvl.html#SP11_3">&#167;11.3</a></span></button><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="identifier-syntax">table_column</span><span class="plain-syntax"> *</span><span class="function-syntax">Rvalues::to_table_column</span><button class="popup" onclick="togglePopup('usagePopup13')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup13">Usage of <span class="code-font"><span class="function-syntax">Rvalues::to_table_column</span></span>:<br/><a href="2-rvl.html#SP22">&#167;22</a>, <a href="2-rvl.html#SP24_5">&#167;24.5</a>, <a href="2-rvl.html#SP25_3">&#167;25.3</a><br/>Lvalues - <a href="2-lvl.html#SP11_3">&#167;11.3</a></span></button><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="identifier-syntax">CONV_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">table_column</span><span class="plain-syntax">) }</span>
<span class="identifier-syntax">use_option</span><span class="plain-syntax"> *</span><span class="function-syntax">Rvalues::to_use_option</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">Rvalues::to_use_option</span></span>:<br/><a href="2-rvl.html#SP25_3">&#167;25.3</a></span></button><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="identifier-syntax">use_option</span><span class="plain-syntax"> *</span><span class="function-syntax">Rvalues::to_use_option</span><button class="popup" onclick="togglePopup('usagePopup14')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup14">Usage of <span class="code-font"><span class="function-syntax">Rvalues::to_use_option</span></span>:<br/><a href="2-rvl.html#SP25_3">&#167;25.3</a></span></button><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="identifier-syntax">CONV_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">use_option</span><span class="plain-syntax">) }</span>
<span class="identifier-syntax">verb_form</span><span class="plain-syntax"> *</span><span class="function-syntax">Rvalues::to_verb_form</span><button class="popup" onclick="togglePopup('usagePopup18')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup18">Usage of <span class="code-font"><span class="function-syntax">Rvalues::to_verb_form</span></span>:<br/><a href="2-rvl.html#SP25_3">&#167;25.3</a></span></button><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="identifier-syntax">verb_form</span><span class="plain-syntax"> *</span><span class="function-syntax">Rvalues::to_verb_form</span><button class="popup" onclick="togglePopup('usagePopup15')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup15">Usage of <span class="code-font"><span class="function-syntax">Rvalues::to_verb_form</span></span>:<br/><a href="2-rvl.html#SP25_3">&#167;25.3</a></span></button><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="identifier-syntax">CONV_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">verb_form</span><span class="plain-syntax">) }</span>
</pre>
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. </b></p>
@ -207,7 +170,7 @@ objects.
</p>
<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">Rvalues::from_instance</span><button class="popup" onclick="togglePopup('usagePopup19')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup19">Usage of <span class="code-font"><span class="function-syntax">Rvalues::from_instance</span></span>:<br/>Lvalues - <a href="2-lvl.html#SP13_3_1">&#167;13.3.1</a><br/>Descriptions - <a href="2-dsc.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">instance</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">Rvalues::from_instance</span><button class="popup" onclick="togglePopup('usagePopup16')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup16">Usage of <span class="code-font"><span class="function-syntax">Rvalues::from_instance</span></span>:<br/>Lvalues - <a href="2-lvl.html#SP13_3_1">&#167;13.3.1</a><br/>Descriptions - <a href="2-dsc.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="identifier-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="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">val</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">CONSTANT_NT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Node::set_kind_of_value</span><span class="plain-syntax">(</span><span class="identifier-syntax">val</span><span class="plain-syntax">, </span><span class="identifier-syntax">Instances::to_kind</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">Node::set_constant_instance</span><span class="plain-syntax">(</span><span class="identifier-syntax">val</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="plain-syntax">);</span>
@ -216,21 +179,21 @@ objects.
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">val</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="identifier-syntax">instance</span><span class="plain-syntax"> *</span><span class="function-syntax">Rvalues::to_instance</span><button class="popup" onclick="togglePopup('usagePopup20')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup20">Usage of <span class="code-font"><span class="function-syntax">Rvalues::to_instance</span></span>:<br/><a href="2-rvl.html#SP6">&#167;6</a>, <a href="2-rvl.html#SP22">&#167;22</a>, <a href="2-rvl.html#SP24_1">&#167;24.1</a>, <a href="2-rvl.html#SP25_3">&#167;25.3</a><br/>Specifications - <a href="2-spc.html#SP5">&#167;5</a><br/>Descriptions - <a href="2-dsc.html#SP5">&#167;5</a><br/>Dash - <a href="2-dsh.html#SP10_9_1_1_5_1_1">&#167;10.9.1.1.5.1.1</a><br/>Verbal and Relative Clauses - <a href="4-varc.html#SP6_1">&#167;6.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">spec</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">instance</span><span class="plain-syntax"> *</span><span class="function-syntax">Rvalues::to_instance</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">Rvalues::to_instance</span></span>:<br/><a href="2-rvl.html#SP6">&#167;6</a>, <a href="2-rvl.html#SP22">&#167;22</a>, <a href="2-rvl.html#SP24_1">&#167;24.1</a>, <a href="2-rvl.html#SP25_3">&#167;25.3</a><br/>Specifications - <a href="2-spc.html#SP5">&#167;5</a><br/>Descriptions - <a href="2-dsc.html#SP5">&#167;5</a><br/>Dash - <a href="2-dsh.html#SP10_9_1_1_5_1_1">&#167;10.9.1.1.5.1.1</a><br/>Verbal and Relative Clauses - <a href="4-varc.html#SP6_1">&#167;6.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">spec</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CONV_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">instance</span><span class="plain-syntax">) }</span>
</pre>
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>&#167;6. </b>An instance of a subkind of <span class="extract"><span class="extract-syntax">K_object</span></span> is called an "object":
</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">Rvalues::is_object</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">Rvalues::is_object</span></span>:<br/><a href="2-rvl.html#SP24">&#167;24</a><br/>Specifications - <a href="2-spc.html#SP3">&#167;3</a>, <a href="2-spc.html#SP5">&#167;5</a><br/>Dash - <a href="2-dsh.html#SP10_9_1_2_3">&#167;10.9.1.2.3</a></span></button><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="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Rvalues::is_object</span><button class="popup" onclick="togglePopup('usagePopup18')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup18">Usage of <span class="code-font"><span class="function-syntax">Rvalues::is_object</span></span>:<br/><a href="2-rvl.html#SP24">&#167;24</a><br/>Specifications - <a href="2-spc.html#SP3">&#167;3</a>, <a href="2-spc.html#SP5">&#167;5</a><br/>Dash - <a href="2-dsh.html#SP10_9_1_2_3">&#167;10.9.1.2.3</a></span></button><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">Node::is</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">, </span><span class="identifier-syntax">CONSTANT_NT</span><span class="plain-syntax">)) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">Kinds::Behaviour::is_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">Node::get_kind_of_value</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">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="identifier-syntax">instance</span><span class="plain-syntax"> *</span><span class="function-syntax">Rvalues::to_object_instance</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">Rvalues::to_object_instance</span></span>:<br/><a href="2-rvl.html#SP22">&#167;22</a><br/>Dash - <a href="2-dsh.html#SP10_9_1_1_5_1">&#167;10.9.1.1.5.1</a><br/>Constants and Descriptions - <a href="4-cad.html#SP12">&#167;12</a></span></button><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="identifier-syntax">instance</span><span class="plain-syntax"> *</span><span class="function-syntax">Rvalues::to_object_instance</span><button class="popup" onclick="togglePopup('usagePopup19')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup19">Usage of <span class="code-font"><span class="function-syntax">Rvalues::to_object_instance</span></span>:<br/><a href="2-rvl.html#SP22">&#167;22</a><br/>Dash - <a href="2-dsh.html#SP10_9_1_1_5_1">&#167;10.9.1.1.5.1</a><br/>Constants and Descriptions - <a href="4-cad.html#SP12">&#167;12</a></span></button><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><a href="2-rvl.html#SP6" class="function-link"><span class="function-syntax">Rvalues::is_object</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="2-rvl.html#SP5" class="function-link"><span class="function-syntax">Rvalues::to_instance</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="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>
@ -241,14 +204,14 @@ special annotations.
</p>
<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">Rvalues::new_self_object_constant</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">Rvalues::new_self_object_constant</span></span>:<br/>Dash - <a href="2-dsh.html#SP18_3_1_1">&#167;18.3.1.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="function-syntax">Rvalues::new_self_object_constant</span><button class="popup" onclick="togglePopup('usagePopup20')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup20">Usage of <span class="code-font"><span class="function-syntax">Rvalues::new_self_object_constant</span></span>:<br/>Dash - <a href="2-dsh.html#SP18_3_1_1">&#167;18.3.1.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</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">spec</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">CONSTANT_NT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Node::set_kind_of_value</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</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">Annotations::write_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">, </span><span class="identifier-syntax">self_object_ANNOT</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">spec</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">Rvalues::new_nothing_object_constant</span><button class="popup" onclick="togglePopup('usagePopup24')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup24">Usage of <span class="code-font"><span class="function-syntax">Rvalues::new_nothing_object_constant</span></span>:<br/>Constants and Descriptions - <a href="4-cad.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="function-syntax">Rvalues::new_nothing_object_constant</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">Rvalues::new_nothing_object_constant</span></span>:<br/>Constants and Descriptions - <a href="4-cad.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</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">spec</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">CONSTANT_NT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Node::set_kind_of_value</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</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">Annotations::write_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">, </span><span class="identifier-syntax">nothing_object_ANNOT</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">);</span>
@ -260,12 +223,12 @@ title from "The Big Bang Theory"),
</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">Rvalues::is_nothing_object_constant</span><button class="popup" onclick="togglePopup('usagePopup25')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup25">Usage of <span class="code-font"><span class="function-syntax">Rvalues::is_nothing_object_constant</span></span>:<br/>Specifications - <a href="2-spc.html#SP3">&#167;3</a>, <a href="2-spc.html#SP5">&#167;5</a>, <a href="2-spc.html#SP9">&#167;9</a><br/>Dash - <a href="2-dsh.html#SP18">&#167;18</a></span></button><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="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Rvalues::is_nothing_object_constant</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">Rvalues::is_nothing_object_constant</span></span>:<br/>Specifications - <a href="2-spc.html#SP3">&#167;3</a>, <a href="2-spc.html#SP5">&#167;5</a>, <a href="2-spc.html#SP9">&#167;9</a><br/>Dash - <a href="2-dsh.html#SP18">&#167;18</a></span></button><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">Annotations::read_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">, </span><span class="identifier-syntax">nothing_object_ANNOT</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">Rvalues::is_self_object_constant</span><button class="popup" onclick="togglePopup('usagePopup26')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup26">Usage of <span class="code-font"><span class="function-syntax">Rvalues::is_self_object_constant</span></span>:<br/>Lvalues - <a href="2-lvl.html#SP6">&#167;6</a>, <a href="2-lvl.html#SP13_3_1">&#167;13.3.1</a><br/>Dash - <a href="2-dsh.html#SP10_9_1_2_3">&#167;10.9.1.2.3</a></span></button><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="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Rvalues::is_self_object_constant</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">Rvalues::is_self_object_constant</span></span>:<br/>Lvalues - <a href="2-lvl.html#SP6">&#167;6</a>, <a href="2-lvl.html#SP13_3_1">&#167;13.3.1</a><br/>Dash - <a href="2-dsh.html#SP10_9_1_2_3">&#167;10.9.1.2.3</a></span></button><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">Annotations::read_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">, </span><span class="identifier-syntax">self_object_ANNOT</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>
@ -275,7 +238,7 @@ perhaps 24000, and the following turns that into an rvalue:
</p>
<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">Rvalues::from_encoded_notation</span><button class="popup" onclick="togglePopup('usagePopup27')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup27">Usage of <span class="code-font"><span class="function-syntax">Rvalues::from_encoded_notation</span></span>:<br/>Literal Patterns - <a href="3-lp.html#SP31">&#167;31</a></span></button><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="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">encoded_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="function-syntax">Rvalues::from_encoded_notation</span><button class="popup" onclick="togglePopup('usagePopup24')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup24">Usage of <span class="code-font"><span class="function-syntax">Rvalues::from_encoded_notation</span></span>:<br/>Literal Patterns - <a href="3-lp.html#SP31">&#167;31</a></span></button><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="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">encoded_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</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">spec</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::new_with_words</span><span class="plain-syntax">(</span><span class="identifier-syntax">CONSTANT_NT</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Node::set_kind_of_value</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</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">Annotations::write_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">, </span><span class="identifier-syntax">explicit_literal_ANNOT</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">);</span>
@ -283,7 +246,7 @@ perhaps 24000, and the following turns that into an rvalue:
<span class="plain-syntax"> </span><span class="reserved-syntax">return</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">int</span><span class="plain-syntax"> </span><span class="function-syntax">Rvalues::to_encoded_notation</span><button class="popup" onclick="togglePopup('usagePopup28')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup28">Usage of <span class="code-font"><span class="function-syntax">Rvalues::to_encoded_notation</span></span>:<br/><a href="2-rvl.html#SP22">&#167;22</a><br/>Literal Patterns - <a href="3-lp.html#SP24_3">&#167;24.3</a></span></button><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="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Rvalues::to_encoded_notation</span><button class="popup" onclick="togglePopup('usagePopup25')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup25">Usage of <span class="code-font"><span class="function-syntax">Rvalues::to_encoded_notation</span></span>:<br/><a href="2-rvl.html#SP22">&#167;22</a><br/>Literal Patterns - <a href="3-lp.html#SP24_3">&#167;24.3</a></span></button><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">Annotations::read_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">, </span><span class="identifier-syntax">explicit_literal_ANNOT</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">Annotations::read_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">, </span><span class="identifier-syntax">constant_number_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
@ -294,7 +257,7 @@ annotation, not a pointer one.
</p>
<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">Rvalues::from_int</span><button class="popup" onclick="togglePopup('usagePopup29')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup29">Usage of <span class="code-font"><span class="function-syntax">Rvalues::from_int</span></span>:<br/>Parsing Literals - <a href="3-pl.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">n</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="function-syntax">Rvalues::from_int</span><button class="popup" onclick="togglePopup('usagePopup26')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup26">Usage of <span class="code-font"><span class="function-syntax">Rvalues::from_int</span></span>:<br/>Parsing Literals - <a href="3-pl.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">n</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</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">spec</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::new_with_words</span><span class="plain-syntax">(</span><span class="identifier-syntax">CONSTANT_NT</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Node::set_kind_of_value</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_number</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::write_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">, </span><span class="identifier-syntax">explicit_literal_ANNOT</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">);</span>
@ -302,7 +265,7 @@ annotation, not a pointer one.
<span class="plain-syntax"> </span><span class="reserved-syntax">return</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">int</span><span class="plain-syntax"> </span><span class="function-syntax">Rvalues::to_int</span><button class="popup" onclick="togglePopup('usagePopup30')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup30">Usage of <span class="code-font"><span class="function-syntax">Rvalues::to_int</span></span>:<br/><a href="2-rvl.html#SP25_1">&#167;25.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">spec</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Rvalues::to_int</span><button class="popup" onclick="togglePopup('usagePopup27')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup27">Usage of <span class="code-font"><span class="function-syntax">Rvalues::to_int</span></span>:<br/><a href="2-rvl.html#SP25_1">&#167;25.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">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">spec</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="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Annotations::read_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">, </span><span class="identifier-syntax">explicit_literal_ANNOT</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">Annotations::read_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">, </span><span class="identifier-syntax">constant_number_ANNOT</span><span class="plain-syntax">);</span>
@ -315,7 +278,7 @@ of <span class="extract"><span class="extract-syntax">float</span></span> to be
</p>
<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">Rvalues::from_IEEE_754</span><button class="popup" onclick="togglePopup('usagePopup31')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup31">Usage of <span class="code-font"><span class="function-syntax">Rvalues::from_IEEE_754</span></span>:<br/>Literal Real Numbers - <a href="3-lrn.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">unsigned</span><span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">n</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="function-syntax">Rvalues::from_IEEE_754</span><button class="popup" onclick="togglePopup('usagePopup28')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup28">Usage of <span class="code-font"><span class="function-syntax">Rvalues::from_IEEE_754</span></span>:<br/>Literal Real Numbers - <a href="3-lrn.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">unsigned</span><span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">n</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</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">spec</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::new_with_words</span><span class="plain-syntax">(</span><span class="identifier-syntax">CONSTANT_NT</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Node::set_kind_of_value</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_real_number</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::write_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">, </span><span class="identifier-syntax">explicit_literal_ANNOT</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">);</span>
@ -333,7 +296,7 @@ of <span class="extract"><span class="extract-syntax">float</span></span> to be
</p>
<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">Rvalues::from_boolean</span><button class="popup" onclick="togglePopup('usagePopup32')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup32">Usage of <span class="code-font"><span class="function-syntax">Rvalues::from_boolean</span></span>:<br/>Parsing Literals - <a href="3-pl.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">flag</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="function-syntax">Rvalues::from_boolean</span><button class="popup" onclick="togglePopup('usagePopup29')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup29">Usage of <span class="code-font"><span class="function-syntax">Rvalues::from_boolean</span></span>:<br/>Parsing Literals - <a href="3-pl.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">flag</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</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">spec</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::new_with_words</span><span class="plain-syntax">(</span><span class="identifier-syntax">CONSTANT_NT</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Node::set_kind_of_value</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_truth_state</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::write_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">, </span><span class="identifier-syntax">explicit_literal_ANNOT</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">);</span>
@ -351,7 +314,7 @@ of <span class="extract"><span class="extract-syntax">float</span></span> to be
</p>
<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">Rvalues::from_Unicode</span><button class="popup" onclick="togglePopup('usagePopup33')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup33">Usage of <span class="code-font"><span class="function-syntax">Rvalues::from_Unicode</span></span>:<br/>Unicode Literals - <a href="3-ul.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">code_point</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="function-syntax">Rvalues::from_Unicode</span><button class="popup" onclick="togglePopup('usagePopup30')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup30">Usage of <span class="code-font"><span class="function-syntax">Rvalues::from_Unicode</span></span>:<br/>Unicode Literals - <a href="3-ul.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">code_point</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</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">spec</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::new_with_words</span><span class="plain-syntax">(</span><span class="identifier-syntax">CONSTANT_NT</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Node::set_kind_of_value</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_unicode_character</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::write_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">, </span><span class="identifier-syntax">explicit_literal_ANNOT</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">);</span>
@ -370,7 +333,7 @@ reduced modulo 1440, the number of minutes in a day.
</p>
<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">Rvalues::from_time</span><button class="popup" onclick="togglePopup('usagePopup34')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup34">Usage of <span class="code-font"><span class="function-syntax">Rvalues::from_time</span></span>:<br/>Times of Day - <a href="3-tod.html#SP4">&#167;4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">minutes_since_midnight</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="function-syntax">Rvalues::from_time</span><button class="popup" onclick="togglePopup('usagePopup31')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup31">Usage of <span class="code-font"><span class="function-syntax">Rvalues::from_time</span></span>:<br/>Times of Day - <a href="3-tod.html#SP4">&#167;4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">minutes_since_midnight</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</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">spec</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::new_with_words</span><span class="plain-syntax">(</span><span class="identifier-syntax">CONSTANT_NT</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Node::set_kind_of_value</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">, </span><a href="3-tod.html#SP3" class="function-link"><span class="function-syntax">TimesOfDay::kind</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::write_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">, </span><span class="identifier-syntax">explicit_literal_ANNOT</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">);</span>
@ -389,7 +352,7 @@ together with their kinds:
</p>
<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">Rvalues::from_wording_of_list</span><button class="popup" onclick="togglePopup('usagePopup35')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup35">Usage of <span class="code-font"><span class="function-syntax">Rvalues::from_wording_of_list</span></span>:<br/>Literal Lists - <a href="3-ll.html#SP2">&#167;2</a></span></button><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">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="function-syntax">Rvalues::from_wording_of_list</span><button class="popup" onclick="togglePopup('usagePopup32')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup32">Usage of <span class="code-font"><span class="function-syntax">Rvalues::from_wording_of_list</span></span>:<br/>Literal Lists - <a href="3-ll.html#SP2">&#167;2</a></span></button><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">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</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">spec</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::new_with_words</span><span class="plain-syntax">(</span><span class="identifier-syntax">CONSTANT_NT</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Node::set_kind_of_value</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">spec</span><span class="plain-syntax">;</span>
@ -399,7 +362,7 @@ together with their kinds:
</p>
<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">Rvalues::from_wording</span><button class="popup" onclick="togglePopup('usagePopup36')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup36">Usage of <span class="code-font"><span class="function-syntax">Rvalues::from_wording</span></span>:<br/><a href="2-rvl.html#SP17">&#167;17</a><br/>Parsing Literals - <a href="3-pl.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="function-syntax">Rvalues::from_wording</span><button class="popup" onclick="togglePopup('usagePopup33')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup33">Usage of <span class="code-font"><span class="function-syntax">Rvalues::from_wording</span></span>:<br/><a href="2-rvl.html#SP17">&#167;17</a><br/>Parsing Literals - <a href="3-pl.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</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">spec</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::new_with_words</span><span class="plain-syntax">(</span><span class="identifier-syntax">CONSTANT_NT</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Node::set_kind_of_value</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</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="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">spec</span><span class="plain-syntax">;</span>
@ -433,7 +396,7 @@ an l-value.
</p>
<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">Rvalues::from_pair</span><button class="popup" onclick="togglePopup('usagePopup37')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup37">Usage of <span class="code-font"><span class="function-syntax">Rvalues::from_pair</span></span>:<br/>Verbal and Relative Clauses - <a href="4-varc.html#SP4">&#167;4</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">X</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">Y</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="function-syntax">Rvalues::from_pair</span><button class="popup" onclick="togglePopup('usagePopup34')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup34">Usage of <span class="code-font"><span class="function-syntax">Rvalues::from_pair</span></span>:<br/>Verbal and Relative Clauses - <a href="4-varc.html#SP4">&#167;4</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">X</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">Y</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">X</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">X</span><span class="plain-syntax"> = </span><a href="2-spc.html#SP10" class="function-link"><span class="function-syntax">Specifications::new_UNKNOWN</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">EMPTY_WORDING</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">Y</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">Y</span><span class="plain-syntax"> = </span><a href="2-spc.html#SP10" class="function-link"><span class="function-syntax">Specifications::new_UNKNOWN</span></a><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">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">kX</span><span class="plain-syntax"> = </span><a href="2-spc.html#SP1" class="function-link"><span class="function-syntax">Specifications::to_true_kind_disambiguated</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">X</span><span class="plain-syntax">);</span>
@ -456,7 +419,7 @@ in the proposition.
</p>
<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">Rvalues::constant_description</span><button class="popup" onclick="togglePopup('usagePopup38')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup38">Usage of <span class="code-font"><span class="function-syntax">Rvalues::constant_description</span></span>:<br/>Descriptions - <a href="2-dsc.html#SP1">&#167;1</a></span></button><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">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="function-syntax">Rvalues::constant_description</span><button class="popup" onclick="togglePopup('usagePopup35')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup35">Usage of <span class="code-font"><span class="function-syntax">Rvalues::constant_description</span></span>:<br/>Descriptions - <a href="2-dsc.html#SP1">&#167;1</a></span></button><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">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</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">con</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::new_with_words</span><span class="plain-syntax">(</span><span class="identifier-syntax">CONSTANT_NT</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Node::set_kind_of_value</span><span class="plain-syntax">(</span><span class="identifier-syntax">con</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Kinds::unary_con</span><span class="plain-syntax">(</span><span class="identifier-syntax">CON_description</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_object</span><span class="plain-syntax">));</span>
@ -464,7 +427,7 @@ in the proposition.
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">con</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Rvalues::set_constant_description_proposition</span><button class="popup" onclick="togglePopup('usagePopup39')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup39">Usage of <span class="code-font"><span class="function-syntax">Rvalues::set_constant_description_proposition</span></span>:<br/>Descriptions - <a href="2-dsc.html#SP2">&#167;2</a></span></button><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="identifier-syntax">pcalc_prop</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prop</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Rvalues::set_constant_description_proposition</span><button class="popup" onclick="togglePopup('usagePopup36')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup36">Usage of <span class="code-font"><span class="function-syntax">Rvalues::set_constant_description_proposition</span></span>:<br/>Descriptions - <a href="2-dsc.html#SP2">&#167;2</a></span></button><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="identifier-syntax">pcalc_prop</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prop</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">spec</span><span class="plain-syntax">, </span><span class="identifier-syntax">CON_description</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Node::set_proposition</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">, </span><span class="identifier-syntax">prop</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Node::set_kind_of_value</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">,</span>
@ -476,14 +439,14 @@ in the proposition.
<p class="commentary firstcommentary"><a id="SP21" class="paragraph-anchor"></a><b>&#167;21. Testing. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Rvalues::is_CONSTANT_construction</span><button class="popup" onclick="togglePopup('usagePopup40')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup40">Usage of <span class="code-font"><span class="function-syntax">Rvalues::is_CONSTANT_construction</span></span>:<br/><a href="2-rvl.html#SP20">&#167;20</a>, <a href="2-rvl.html#SP23">&#167;23</a>, <a href="2-rvl.html#SP24">&#167;24</a><br/>Specifications - <a href="2-spc.html#SP3">&#167;3</a><br/>Lvalues - <a href="2-lvl.html#SP10">&#167;10</a><br/>Descriptions - <a href="2-dsc.html#SP1">&#167;1</a>, <a href="2-dsc.html#SP2">&#167;2</a><br/>Dash - <a href="2-dsh.html#SP9_1_1_3_1_3">&#167;9.1.1.3.1.3</a>, <a href="2-dsh.html#SP10_9_1_1_2_1">&#167;10.9.1.1.2.1</a>, <a href="2-dsh.html#SP10_9_1_1_3_1_1">&#167;10.9.1.1.3.1.1</a>, <a href="2-dsh.html#SP10_9_1_1_5_1">&#167;10.9.1.1.5.1</a>, <a href="2-dsh.html#SP10_9_1_1_5_1_2">&#167;10.9.1.1.5.1.2</a>, <a href="2-dsh.html#SP12">&#167;12</a>, <a href="2-dsh.html#SP18_3">&#167;18.3</a><br/>Constants and Descriptions - <a href="4-cad.html#SP3">&#167;3</a>, <a href="4-cad.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">spec</span><span class="plain-syntax">, </span><span class="identifier-syntax">kind_constructor</span><span class="plain-syntax"> *</span><span class="identifier-syntax">con</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Rvalues::is_CONSTANT_construction</span><button class="popup" onclick="togglePopup('usagePopup37')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup37">Usage of <span class="code-font"><span class="function-syntax">Rvalues::is_CONSTANT_construction</span></span>:<br/><a href="2-rvl.html#SP20">&#167;20</a>, <a href="2-rvl.html#SP23">&#167;23</a>, <a href="2-rvl.html#SP24">&#167;24</a><br/>Specifications - <a href="2-spc.html#SP3">&#167;3</a><br/>Lvalues - <a href="2-lvl.html#SP10">&#167;10</a><br/>Descriptions - <a href="2-dsc.html#SP1">&#167;1</a>, <a href="2-dsc.html#SP2">&#167;2</a><br/>Dash - <a href="2-dsh.html#SP9_1_1_3_1_3">&#167;9.1.1.3.1.3</a>, <a href="2-dsh.html#SP10_9_1_1_2_1">&#167;10.9.1.1.2.1</a>, <a href="2-dsh.html#SP10_9_1_1_3_1_1">&#167;10.9.1.1.3.1.1</a>, <a href="2-dsh.html#SP10_9_1_1_5_1">&#167;10.9.1.1.5.1</a>, <a href="2-dsh.html#SP10_9_1_1_5_1_2">&#167;10.9.1.1.5.1.2</a>, <a href="2-dsh.html#SP12">&#167;12</a>, <a href="2-dsh.html#SP18_3">&#167;18.3</a><br/>Constants and Descriptions - <a href="4-cad.html#SP3">&#167;3</a>, <a href="4-cad.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">spec</span><span class="plain-syntax">, </span><span class="identifier-syntax">kind_constructor</span><span class="plain-syntax"> *</span><span class="identifier-syntax">con</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">spec</span><span class="plain-syntax">, </span><span class="identifier-syntax">CONSTANT_NT</span><span class="plain-syntax">)) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">Kinds::get_construct</span><span class="plain-syntax">(</span><span class="identifier-syntax">Node::get_kind_of_value</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">)) == </span><span class="identifier-syntax">con</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="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">Rvalues::is_CONSTANT_of_kind</span><button class="popup" onclick="togglePopup('usagePopup41')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup41">Usage of <span class="code-font"><span class="function-syntax">Rvalues::is_CONSTANT_of_kind</span></span>:<br/><a href="2-rvl.html#SP11">&#167;11</a>, <a href="2-rvl.html#SP12">&#167;12</a>, <a href="2-rvl.html#SP13">&#167;13</a>, <a href="2-rvl.html#SP14">&#167;14</a><br/>Dash - <a href="2-dsh.html#SP16">&#167;16</a>, <a href="2-dsh.html#SP18_5_2">&#167;18.5.2</a><br/>Literal Patterns - <a href="3-lp.html#SP24_3">&#167;24.3</a><br/>Enter the S-Parser - <a href="4-ets.html#SP11">&#167;11</a><br/>Constants and Descriptions - <a href="4-cad.html#SP3">&#167;3</a>, <a href="4-cad.html#SP5">&#167;5</a><br/>Type Expressions and Values - <a href="4-teav.html#SP11_2">&#167;11.2</a><br/>Conditions and Phrases - <a href="4-cap.html#SP12_1">&#167;12.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">spec</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="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Rvalues::is_CONSTANT_of_kind</span><button class="popup" onclick="togglePopup('usagePopup38')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup38">Usage of <span class="code-font"><span class="function-syntax">Rvalues::is_CONSTANT_of_kind</span></span>:<br/><a href="2-rvl.html#SP11">&#167;11</a>, <a href="2-rvl.html#SP12">&#167;12</a>, <a href="2-rvl.html#SP13">&#167;13</a>, <a href="2-rvl.html#SP14">&#167;14</a><br/>Dash - <a href="2-dsh.html#SP16">&#167;16</a>, <a href="2-dsh.html#SP18_5_2">&#167;18.5.2</a><br/>Literal Patterns - <a href="3-lp.html#SP24_3">&#167;24.3</a><br/>Enter the S-Parser - <a href="4-ets.html#SP11">&#167;11</a><br/>Constants and Descriptions - <a href="4-cad.html#SP3">&#167;3</a>, <a href="4-cad.html#SP5">&#167;5</a><br/>Type Expressions and Values - <a href="4-teav.html#SP11_2">&#167;11.2</a><br/>Conditions and Phrases - <a href="4-cap.html#SP12_1">&#167;12.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">spec</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="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">spec</span><span class="plain-syntax">, </span><span class="identifier-syntax">CONSTANT_NT</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">Node::get_kind_of_value</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">), </span><span class="identifier-syntax">K</span><span class="plain-syntax">)))</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
@ -521,7 +484,7 @@ doesn't need to be especially rapid.
<span class="plain-syntax"> </span><span class="identifier-syntax">KCOMPARE_CONSTANTS_USING</span><span class="plain-syntax">(</span><span class="identifier-syntax">DATA</span><span class="plain-syntax">, </span><span class="identifier-syntax">STRUCTURE</span><span class="plain-syntax">, </span><span class="identifier-syntax">Rvalues::to_</span><span class="plain-syntax">##</span><span class="identifier-syntax">STRUCTURE</span><span class="plain-syntax">)</span>
</pre>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Rvalues::compare_CONSTANT</span><button class="popup" onclick="togglePopup('usagePopup42')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup42">Usage of <span class="code-font"><span class="function-syntax">Rvalues::compare_CONSTANT</span></span>:<br/>Dash - <a href="2-dsh.html#SP10_6">&#167;10.6</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">spec1</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">spec2</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Rvalues::compare_CONSTANT</span><button class="popup" onclick="togglePopup('usagePopup39')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup39">Usage of <span class="code-font"><span class="function-syntax">Rvalues::compare_CONSTANT</span></span>:<br/>Dash - <a href="2-dsh.html#SP10_6">&#167;10.6</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">spec1</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">spec2</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">spec1</span><span class="plain-syntax">, </span><span class="identifier-syntax">CONSTANT_NT</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</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">Node::is</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec2</span><span class="plain-syntax">, </span><span class="identifier-syntax">CONSTANT_NT</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</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="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K1</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::get_kind_of_value</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec1</span><span class="plain-syntax">);</span>
@ -557,11 +520,9 @@ doesn't need to be especially rapid.
<span class="plain-syntax"> </span><span class="identifier-syntax">KCOMPARE_CONSTANTS</span><span class="plain-syntax">(</span><span class="identifier-syntax">rulebook_outcome</span><span class="plain-syntax">, </span><span class="identifier-syntax">named_rulebook_outcome</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">KCOMPARE_CONSTANTS</span><span class="plain-syntax">(</span><span class="identifier-syntax">table</span><span class="plain-syntax">, </span><span class="identifier-syntax">table</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">KCOMPARE_CONSTANTS</span><span class="plain-syntax">(</span><span class="identifier-syntax">use_option</span><span class="plain-syntax">, </span><span class="identifier-syntax">use_option</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">IF_MODULE</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">KCOMPARE_CONSTANTS</span><span class="plain-syntax">(</span><span class="identifier-syntax">action_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">action_name</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">KCOMPARE_CONSTANTS</span><span class="plain-syntax">(</span><span class="identifier-syntax">scene</span><span class="plain-syntax">, </span><span class="identifier-syntax">scene</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">KCOMPARE_CONSTANTS</span><span class="plain-syntax">(</span><span class="identifier-syntax">understanding</span><span class="plain-syntax">, </span><span class="identifier-syntax">grammar_verb</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">rv</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NOT_APPLICABLE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::compare_constant</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec1</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec2</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">rv</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">rv</span><span class="plain-syntax"> != </span><span class="identifier-syntax">NOT_APPLICABLE</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">rv</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="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>
@ -570,7 +531,7 @@ doesn't need to be especially rapid.
<p class="commentary firstcommentary"><a id="SP23" class="paragraph-anchor"></a><b>&#167;23. Pretty-printing. </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">Rvalues::write_out_in_English</span><button class="popup" onclick="togglePopup('usagePopup43')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup43">Usage of <span class="code-font"><span class="function-syntax">Rvalues::write_out_in_English</span></span>:<br/>Specifications - <a href="2-spc.html#SP7">&#167;7</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</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="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Rvalues::write_out_in_English</span><button class="popup" onclick="togglePopup('usagePopup40')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup40">Usage of <span class="code-font"><span class="function-syntax">Rvalues::write_out_in_English</span></span>:<br/>Specifications - <a href="2-spc.html#SP7">&#167;7</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</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">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Node::get_type</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">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">PHRASE_TO_DECIDE_VALUE_NT:</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">dtr</span><span class="plain-syntax"> = </span><a href="2-spc.html#SP1" class="function-link"><span class="function-syntax">Specifications::to_kind</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>
@ -604,7 +565,7 @@ result have?
</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">Rvalues::to_kind</span><button class="popup" onclick="togglePopup('usagePopup44')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup44">Usage of <span class="code-font"><span class="function-syntax">Rvalues::to_kind</span></span>:<br/>Specifications - <a href="2-spc.html#SP1">&#167;1</a><br/>Lvalues - <a href="2-lvl.html#SP11">&#167;11</a><br/>Literal Patterns - <a href="3-lp.html#SP24_4">&#167;24.4</a></span></button><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="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="function-syntax">Rvalues::to_kind</span><button class="popup" onclick="togglePopup('usagePopup41')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup41">Usage of <span class="code-font"><span class="function-syntax">Rvalues::to_kind</span></span>:<br/>Specifications - <a href="2-spc.html#SP1">&#167;1</a><br/>Lvalues - <a href="2-lvl.html#SP11">&#167;11</a><br/>Literal Patterns - <a href="3-lp.html#SP24_4">&#167;24.4</a></span></button><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">spec</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">"Rvalues::to_kind on NULL"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Node::get_type</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">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">CONSTANT_NT:</span>

View file

@ -104,7 +104,7 @@ for creating and using them.
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="2-dsc.html#SP3" class="function-link"><span class="function-syntax">Descriptions::from_kind</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K</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">kind</span><span class="plain-syntax"> *</span><span class="function-syntax">Specifications::to_kind</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">Specifications::to_kind</span></span>:<br/><a href="2-spc.html#SP6">&#167;6</a><br/>Rvalues - <a href="2-rvl.html#SP23">&#167;23</a><br/>Lvalues - <a href="2-lvl.html#SP11_4">&#167;11.4</a>, <a href="2-lvl.html#SP13_3">&#167;13.3</a><br/>Conditions - <a href="2-cnd.html#SP12">&#167;12</a><br/>Descriptions - <a href="2-dsc.html#SP11">&#167;11</a><br/>Dash - <a href="2-dsh.html#SP9_1_1_3_1">&#167;9.1.1.3.1</a>, <a href="2-dsh.html#SP10_6">&#167;10.6</a>, <a href="2-dsh.html#SP10_9_1_1_3_1_1">&#167;10.9.1.1.3.1.1</a>, <a href="2-dsh.html#SP10_9_1_1_4">&#167;10.9.1.1.4</a>, <a href="2-dsh.html#SP10_9_1_1_5">&#167;10.9.1.1.5</a>, <a href="2-dsh.html#SP10_9_1_1_5_2">&#167;10.9.1.1.5.2</a>, <a href="2-dsh.html#SP10_9_1_2_2">&#167;10.9.1.2.2</a>, <a href="2-dsh.html#SP10_9_1_2_3">&#167;10.9.1.2.3</a>, <a href="2-dsh.html#SP10_9_1_2_3_3">&#167;10.9.1.2.3.3</a>, <a href="2-dsh.html#SP10_9_1_2_4">&#167;10.9.1.2.4</a>, <a href="2-dsh.html#SP12">&#167;12</a>, <a href="2-dsh.html#SP13_1_1">&#167;13.1.1</a>, <a href="2-dsh.html#SP18_5_1">&#167;18.5.1</a>, <a href="2-dsh.html#SP18_5_3">&#167;18.5.3</a>, <a href="2-dsh.html#SP18_5_4">&#167;18.5.4</a>, <a href="2-dsh.html#SP18_6_1">&#167;18.6.1</a>, <a href="2-dsh.html#SP18_6_1_1">&#167;18.6.1.1</a>, <a href="2-dsh.html#SP18_6_2_1">&#167;18.6.2.1</a>, <a href="2-dsh.html#SP24">&#167;24</a>, <a href="2-dsh.html#SP26">&#167;26</a><br/>Literal Lists - <a href="3-ll.html#SP8_1">&#167;8.1</a><br/>Constants and Descriptions - <a href="4-cad.html#SP18_4">&#167;18.4</a></span></button><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="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="function-syntax">Specifications::to_kind</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">Specifications::to_kind</span></span>:<br/><a href="2-spc.html#SP6">&#167;6</a><br/>Rvalues - <a href="2-rvl.html#SP23">&#167;23</a><br/>Lvalues - <a href="2-lvl.html#SP11_4">&#167;11.4</a>, <a href="2-lvl.html#SP13_3">&#167;13.3</a><br/>Conditions - <a href="2-cnd.html#SP11">&#167;11</a><br/>Descriptions - <a href="2-dsc.html#SP11">&#167;11</a><br/>Dash - <a href="2-dsh.html#SP9_1_1_3_1">&#167;9.1.1.3.1</a>, <a href="2-dsh.html#SP10_6">&#167;10.6</a>, <a href="2-dsh.html#SP10_9_1_1_3_1_1">&#167;10.9.1.1.3.1.1</a>, <a href="2-dsh.html#SP10_9_1_1_4">&#167;10.9.1.1.4</a>, <a href="2-dsh.html#SP10_9_1_1_5">&#167;10.9.1.1.5</a>, <a href="2-dsh.html#SP10_9_1_1_5_2">&#167;10.9.1.1.5.2</a>, <a href="2-dsh.html#SP10_9_1_2_2">&#167;10.9.1.2.2</a>, <a href="2-dsh.html#SP10_9_1_2_3">&#167;10.9.1.2.3</a>, <a href="2-dsh.html#SP10_9_1_2_3_3">&#167;10.9.1.2.3.3</a>, <a href="2-dsh.html#SP10_9_1_2_4">&#167;10.9.1.2.4</a>, <a href="2-dsh.html#SP12">&#167;12</a>, <a href="2-dsh.html#SP13_1_1">&#167;13.1.1</a>, <a href="2-dsh.html#SP18_5_1">&#167;18.5.1</a>, <a href="2-dsh.html#SP18_5_3">&#167;18.5.3</a>, <a href="2-dsh.html#SP18_5_4">&#167;18.5.4</a>, <a href="2-dsh.html#SP18_6_1">&#167;18.6.1</a>, <a href="2-dsh.html#SP18_6_1_1">&#167;18.6.1.1</a>, <a href="2-dsh.html#SP18_6_2_1">&#167;18.6.2.1</a>, <a href="2-dsh.html#SP24">&#167;24</a>, <a href="2-dsh.html#SP26">&#167;26</a><br/>Literal Lists - <a href="3-ll.html#SP8_1">&#167;8.1</a><br/>Constants and Descriptions - <a href="4-cad.html#SP18_4">&#167;18.4</a></span></button><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">Node::is</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">, </span><span class="identifier-syntax">AMBIGUITY_NT</span><span class="plain-syntax">)) </span><span class="identifier-syntax">spec</span><span class="plain-syntax"> = </span><span class="identifier-syntax">spec</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="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="2-spc.html#SP3" class="function-link"><span class="function-syntax">Specifications::is_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="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="2-dsc.html#SP3" class="function-link"><span class="function-syntax">Descriptions::to_kind</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>
@ -141,7 +141,7 @@ for creating and using them.
<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">Specifications::is_condition</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">Specifications::is_condition</span></span>:<br/><a href="2-spc.html#SP7">&#167;7</a><br/>Conditions - <a href="2-cnd.html#SP14">&#167;14</a><br/>Dash - <a href="2-dsh.html#SP18_6_2">&#167;18.6.2</a></span></button><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="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Specifications::is_condition</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">Specifications::is_condition</span></span>:<br/><a href="2-spc.html#SP7">&#167;7</a><br/>Conditions - <a href="2-cnd.html#SP13">&#167;13</a><br/>Dash - <a href="2-dsh.html#SP18_6_2">&#167;18.6.2</a></span></button><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="identifier-syntax">node_type_metadata</span><span class="plain-syntax"> *</span><span class="identifier-syntax">metadata</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NodeType::get_metadata</span><span class="plain-syntax">(</span><span class="identifier-syntax">Node::get_type</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">metadata</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">metadata</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">category</span><span class="plain-syntax"> == </span><span class="identifier-syntax">COND_NCAT</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>
@ -179,7 +179,7 @@ but "12" is not.
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">g</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">Specifications::is_description</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">Specifications::is_description</span></span>:<br/><a href="2-spc.html#SP1">&#167;1</a>, <a href="2-spc.html#SP4">&#167;4</a>, <a href="2-spc.html#SP5">&#167;5</a>, <a href="2-spc.html#SP8">&#167;8</a><br/>Conditions - <a href="2-cnd.html#SP12">&#167;12</a>, <a href="2-cnd.html#SP15">&#167;15</a><br/>Descriptions - <a href="2-dsc.html#SP1">&#167;1</a>, <a href="2-dsc.html#SP2">&#167;2</a>, <a href="2-dsc.html#SP4">&#167;4</a>, <a href="2-dsc.html#SP5">&#167;5</a>, <a href="2-dsc.html#SP6">&#167;6</a>, <a href="2-dsc.html#SP7">&#167;7</a>, <a href="2-dsc.html#SP9">&#167;9</a>, <a href="2-dsc.html#SP10">&#167;10</a><br/>Dash - <a href="2-dsh.html#SP10_9_1_1_3_1_1">&#167;10.9.1.1.3.1.1</a>, <a href="2-dsh.html#SP10_9_1_2_3">&#167;10.9.1.2.3</a>, <a href="2-dsh.html#SP18_5_3">&#167;18.5.3</a>, <a href="2-dsh.html#SP18_6_2">&#167;18.6.2</a>, <a href="2-dsh.html#SP24">&#167;24</a><br/>Constants and Descriptions - <a href="4-cad.html#SP18_5">&#167;18.5</a><br/>Verbal and Relative Clauses - <a href="4-varc.html#SP11_4_1">&#167;11.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">p</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Specifications::is_description</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">Specifications::is_description</span></span>:<br/><a href="2-spc.html#SP1">&#167;1</a>, <a href="2-spc.html#SP4">&#167;4</a>, <a href="2-spc.html#SP5">&#167;5</a>, <a href="2-spc.html#SP8">&#167;8</a><br/>Conditions - <a href="2-cnd.html#SP11">&#167;11</a>, <a href="2-cnd.html#SP14">&#167;14</a><br/>Descriptions - <a href="2-dsc.html#SP1">&#167;1</a>, <a href="2-dsc.html#SP2">&#167;2</a>, <a href="2-dsc.html#SP4">&#167;4</a>, <a href="2-dsc.html#SP5">&#167;5</a>, <a href="2-dsc.html#SP6">&#167;6</a>, <a href="2-dsc.html#SP7">&#167;7</a>, <a href="2-dsc.html#SP9">&#167;9</a>, <a href="2-dsc.html#SP10">&#167;10</a><br/>Dash - <a href="2-dsh.html#SP10_9_1_1_3_1_1">&#167;10.9.1.1.3.1.1</a>, <a href="2-dsh.html#SP10_9_1_2_3">&#167;10.9.1.2.3</a>, <a href="2-dsh.html#SP18_5_3">&#167;18.5.3</a>, <a href="2-dsh.html#SP18_6_2">&#167;18.6.2</a>, <a href="2-dsh.html#SP24">&#167;24</a><br/>Constants and Descriptions - <a href="4-cad.html#SP18_5">&#167;18.5</a><br/>Verbal and Relative Clauses - <a href="4-varc.html#SP11_4_1">&#167;11.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">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::is</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="identifier-syntax">TEST_VALUE_NT</span><span class="plain-syntax">)) &amp;&amp;</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">p</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</span><span class="plain-syntax">, </span><span class="identifier-syntax">CON_description</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>
@ -190,7 +190,7 @@ but "12" is not.
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">NP_TO_PROPOSITION</span><span class="plain-syntax"> </span><a href="2-spc.html#SP4" class="function-link"><span class="function-syntax">Specifications::to_proposition</span></a>
</pre>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">pcalc_prop</span><span class="plain-syntax"> *</span><span class="function-syntax">Specifications::to_proposition</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">Specifications::to_proposition</span></span>:<br/>Conditions - <a href="2-cnd.html#SP14">&#167;14</a>, <a href="2-cnd.html#SP15">&#167;15</a><br/>Descriptions - <a href="2-dsc.html#SP1">&#167;1</a><br/>Dash - <a href="2-dsh.html#SP18_4">&#167;18.4</a><br/>Verbal and Relative Clauses - <a href="4-varc.html#SP11_3">&#167;11.3</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="identifier-syntax">pcalc_prop</span><span class="plain-syntax"> *</span><span class="function-syntax">Specifications::to_proposition</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">Specifications::to_proposition</span></span>:<br/>Conditions - <a href="2-cnd.html#SP13">&#167;13</a>, <a href="2-cnd.html#SP14">&#167;14</a><br/>Descriptions - <a href="2-dsc.html#SP1">&#167;1</a><br/>Dash - <a href="2-dsh.html#SP18_4">&#167;18.4</a><br/>Verbal and Relative Clauses - <a href="4-varc.html#SP11_3">&#167;11.3</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"> == </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">if</span><span class="plain-syntax"> (</span><a href="2-spc.html#SP3" class="function-link"><span class="function-syntax">Specifications::is_description</span></a><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="2-dsc.html#SP1" class="function-link"><span class="function-syntax">Descriptions::to_proposition</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">);</span>
@ -265,7 +265,7 @@ Index; those have to be English language forms.
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">spec</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"something unknown"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="2-lvl.html#SP7" class="function-link"><span class="function-syntax">Lvalues::is_lvalue</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">)) </span><a href="2-lvl.html#SP10" class="function-link"><span class="function-syntax">Lvalues::write_out_in_English</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</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">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="2-rvl.html#SP1" class="function-link"><span class="function-syntax">Rvalues::is_rvalue</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">)) </span><a href="2-rvl.html#SP23" class="function-link"><span class="function-syntax">Rvalues::write_out_in_English</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</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">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="2-spc.html#SP1" class="function-link"><span class="function-syntax">Specifications::is_condition</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">)) </span><a href="2-cnd.html#SP12" class="function-link"><span class="function-syntax">Conditions::write_out_in_English</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</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">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="2-spc.html#SP1" class="function-link"><span class="function-syntax">Specifications::is_condition</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">)) </span><a href="2-cnd.html#SP11" class="function-link"><span class="function-syntax">Conditions::write_out_in_English</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</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">else</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">spec</span><span class="plain-syntax">, </span><span class="identifier-syntax">AMBIGUITY_NT</span><span class="plain-syntax">)) </span><a href="2-spc.html#SP7" class="function-link"><span class="function-syntax">Specifications::write_out_in_English</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec</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="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"something unrecognised"</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>

View file

@ -229,7 +229,7 @@ which happens to be a malformed list.
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">lle</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ll</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">first_llist_entry</span><span class="plain-syntax">; </span><span class="identifier-syntax">lle</span><span class="plain-syntax">; </span><span class="identifier-syntax">lle</span><span class="plain-syntax"> = </span><span class="identifier-syntax">lle</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next_llist_entry</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">spec</span><span class="plain-syntax"> = </span><span class="identifier-syntax">lle</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">llist_entry_value</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">spec</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="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="2-cnd.html#SP10" class="function-link"><span class="function-syntax">Conditions::is_TEST_ACTION</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="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">AConditions::is_action_TEST_VALUE</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><a href="2-dsh.html#SP8" class="function-link"><span class="function-syntax">Dash::check_value_silently</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_stored_action</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span>
<span class="plain-syntax"> </span><a href="2-dsh.html#SP8" class="function-link"><span class="function-syntax">Dash::check_value_silently</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>

View file

@ -135,10 +135,10 @@ following implements this as a hand-coded nonterminal instead.
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">parse_node</span><span class="Preform-plain-syntax"> *</span><span class="Preform-identifier-syntax">atomic_cnd</span><span class="Preform-plain-syntax"> = </span><span class="Preform-function-syntax">&lt;&lt;rp&gt;&gt;</span><span class="Preform-plain-syntax">;</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">parse_node</span><span class="Preform-plain-syntax"> *</span><span class="Preform-identifier-syntax">spec</span><span class="Preform-plain-syntax"> = </span><span class="Preform-identifier-syntax">atomic_cnd</span><span class="Preform-plain-syntax">;</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">if</span><span class="Preform-plain-syntax"> (</span><span class="Preform-identifier-syntax">Node::is</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">spec</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">CONSTANT_NT</span><span class="Preform-plain-syntax">)) {</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">action_pattern</span><span class="Preform-plain-syntax"> *</span><span class="Preform-identifier-syntax">ap</span><span class="Preform-plain-syntax"> = </span><a href="2-rvl.html#SP3" class="function-link"><span class="Preform-function-syntax">Rvalues::to_action_pattern</span></a><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">spec</span><span class="Preform-plain-syntax">);</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">spec</span><span class="Preform-plain-syntax"> = </span><a href="2-cnd.html#SP10" class="function-link"><span class="Preform-function-syntax">Conditions::new_TEST_ACTION</span></a><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">ap</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">W</span><span class="Preform-plain-syntax">);</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">action_pattern</span><span class="Preform-plain-syntax"> *</span><span class="Preform-identifier-syntax">ap</span><span class="Preform-plain-syntax"> = </span><span class="Preform-identifier-syntax">ARvalues::to_action_pattern</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">spec</span><span class="Preform-plain-syntax">);</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">spec</span><span class="Preform-plain-syntax"> = </span><span class="Preform-identifier-syntax">AConditions::new_action_TEST_VALUE</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">ap</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">W</span><span class="Preform-plain-syntax">);</span>
<span class="Preform-plain-syntax"> }</span>
<span class="Preform-plain-syntax"> ==&gt; { -, </span><a href="2-cnd.html#SP11" class="function-link"><span class="Preform-function-syntax">Conditions::attach_historic_requirement</span></a><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">spec</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">tp</span><span class="Preform-plain-syntax">) };</span>
<span class="Preform-plain-syntax"> ==&gt; { -, </span><a href="2-cnd.html#SP10" class="function-link"><span class="Preform-function-syntax">Conditions::attach_historic_requirement</span></a><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">spec</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">tp</span><span class="Preform-plain-syntax">) };</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">return</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">TRUE</span><span class="Preform-plain-syntax">;</span>
<span class="Preform-plain-syntax"> }</span>
<span class="Preform-plain-syntax"> }</span>
@ -272,10 +272,10 @@ conditions, so this is where the condition in
<pre class="Preform-displayed-code all-displayed-code code-font">
<span class="Preform-function-syntax">&lt;s-action-pattern-as-condition&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;we-are-action-pattern&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { -, Conditions::new_TEST_ACTION(RP[1], W) }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;we-are-action-pattern&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { -, AConditions::new_action_TEST_VALUE(RP[1], W) }</span>
<span class="Preform-function-syntax">&lt;s-action-pattern-as-negated-condition&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;action-pattern-negated&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { -, Conditions::new_TEST_ACTION(RP[1], W) }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;action-pattern-negated&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { -, AConditions::new_action_TEST_VALUE(RP[1], W) }</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>
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>&#167;8. </b>And similarly:
@ -303,8 +303,8 @@ conditions, so this is where the condition in
<span class="plain-syntax"> </span><span class="string-syntax">"too much information about past events."</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="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax"> = </span><a href="2-cnd.html#SP10" class="function-link"><span class="function-syntax">Conditions::new_TEST_ACTION</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ap</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">C</span><span class="plain-syntax"> = </span><a href="2-cnd.html#SP11" class="function-link"><span class="function-syntax">Conditions::attach_tense</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><span class="identifier-syntax">HASBEEN_TENSE</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">C</span><span class="plain-syntax"> = </span><span class="identifier-syntax">AConditions::new_action_TEST_VALUE</span><span class="plain-syntax">(</span><span class="identifier-syntax">ap</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">C</span><span class="plain-syntax"> = </span><a href="2-cnd.html#SP10" class="function-link"><span class="function-syntax">Conditions::attach_tense</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><span class="identifier-syntax">HASBEEN_TENSE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> ==&gt; { -, </span><span class="identifier-syntax">C</span><span class="plain-syntax"> };</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifndef</span><span class="plain-syntax"> </span><span class="identifier-syntax">IF_MODULE</span>

View file

@ -257,7 +257,7 @@ back into the original tree but throw away the S-node head.
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">if</span><span class="Preform-plain-syntax"> (</span><a href="2-rvl.html#SP21" class="function-link"><span class="Preform-function-syntax">Rvalues::is_CONSTANT_of_kind</span></a><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">S</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">K_stored_action</span><span class="Preform-plain-syntax">)) {</span>
<span class="Preform-plain-syntax"> ==&gt; { -, </span><span class="Preform-identifier-syntax">S</span><span class="Preform-plain-syntax"> };</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">return</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">TRUE</span><span class="Preform-plain-syntax">;</span>
<span class="Preform-plain-syntax"> } </span><span class="Preform-reserved-syntax">else</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">if</span><span class="Preform-plain-syntax"> (</span><a href="2-cnd.html#SP10" class="function-link"><span class="Preform-function-syntax">Conditions::is_TEST_ACTION</span></a><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">S</span><span class="Preform-plain-syntax">)) {</span>
<span class="Preform-plain-syntax"> } </span><span class="Preform-reserved-syntax">else</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">if</span><span class="Preform-plain-syntax"> (</span><span class="Preform-identifier-syntax">AConditions::is_action_TEST_VALUE</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">S</span><span class="Preform-plain-syntax">)) {</span>
<span class="Preform-plain-syntax"> ==&gt; { -, </span><span class="Preform-identifier-syntax">S</span><span class="Preform-plain-syntax">-&gt;</span><span class="Preform-identifier-syntax">down</span><span class="Preform-plain-syntax"> };</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">return</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">TRUE</span><span class="Preform-plain-syntax">;</span>
<span class="Preform-plain-syntax"> } </span><span class="Preform-reserved-syntax">else</span><span class="Preform-plain-syntax"> {</span>
@ -282,7 +282,7 @@ back into the original tree but throw away the S-node head.
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">if</span><span class="Preform-plain-syntax"> (</span><a href="2-rvl.html#SP21" class="function-link"><span class="Preform-function-syntax">Rvalues::is_CONSTANT_of_kind</span></a><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">S</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">K_stored_action</span><span class="Preform-plain-syntax">)) {</span>
<span class="Preform-plain-syntax"> ==&gt; { -, </span><span class="Preform-identifier-syntax">S</span><span class="Preform-plain-syntax"> };</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">return</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">TRUE</span><span class="Preform-plain-syntax">;</span>
<span class="Preform-plain-syntax"> } </span><span class="Preform-reserved-syntax">else</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">if</span><span class="Preform-plain-syntax"> (</span><a href="2-cnd.html#SP10" class="function-link"><span class="Preform-function-syntax">Conditions::is_TEST_ACTION</span></a><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">S</span><span class="Preform-plain-syntax">)) {</span>
<span class="Preform-plain-syntax"> } </span><span class="Preform-reserved-syntax">else</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">if</span><span class="Preform-plain-syntax"> (</span><span class="Preform-identifier-syntax">AConditions::is_action_TEST_VALUE</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">S</span><span class="Preform-plain-syntax">)) {</span>
<span class="Preform-plain-syntax"> ==&gt; { -, </span><span class="Preform-identifier-syntax">S</span><span class="Preform-plain-syntax">-&gt;</span><span class="Preform-identifier-syntax">down</span><span class="Preform-plain-syntax"> };</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">return</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">TRUE</span><span class="Preform-plain-syntax">;</span>
<span class="Preform-plain-syntax"> } </span><span class="Preform-reserved-syntax">else</span><span class="Preform-plain-syntax"> {</span>

View file

@ -672,36 +672,6 @@ Again, this is part of a condition, and can't evaluate.
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">Node::duplicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">val</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP22" class="paragraph-anchor"></a><b>&#167;22. </b>Action patterns, such as "taking a container" or "opening a closed door",
are parsed by code in the chapter on Actions; all we do here is to wrap the
result.
</p>
<pre class="Preform-displayed-code all-displayed-code code-font">
<span class="Preform-function-syntax">&lt;s-action-pattern-as-value&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">internal</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">{</span>
<span class="Preform-plain-syntax"> #</span><span class="Preform-identifier-syntax">ifdef</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">IF_MODULE</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">if</span><span class="Preform-plain-syntax"> (</span><span class="Preform-identifier-syntax">Wordings::mismatched_brackets</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">W</span><span class="Preform-plain-syntax">)) { ==&gt; { </span><span class="Preform-identifier-syntax">fail</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">nonterminal</span><span class="Preform-plain-syntax"> }; }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">if</span><span class="Preform-plain-syntax"> (</span><span class="Preform-identifier-syntax">Lexer::word</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">Wordings::first_wn</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">W</span><span class="Preform-plain-syntax">)) == </span><span class="Preform-identifier-syntax">OPENBRACE_V</span><span class="Preform-plain-syntax">) { ==&gt; { </span><span class="Preform-identifier-syntax">fail</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">nonterminal</span><span class="Preform-plain-syntax"> }; }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">int</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">pto</span><span class="Preform-plain-syntax"> = </span><span class="Preform-identifier-syntax">permit_trying_omission</span><span class="Preform-plain-syntax">;</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">if</span><span class="Preform-plain-syntax"> (</span><span class="Preform-function-syntax">&lt;definite-article&gt;</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">Wordings::first_word</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">W</span><span class="Preform-plain-syntax">)) == </span><span class="Preform-identifier-syntax">FALSE</span><span class="Preform-plain-syntax">) </span><span class="Preform-identifier-syntax">permit_trying_omission</span><span class="Preform-plain-syntax"> = </span><span class="Preform-identifier-syntax">TRUE</span><span class="Preform-plain-syntax">;</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">int</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">r</span><span class="Preform-plain-syntax"> = </span><span class="Preform-function-syntax">&lt;action-pattern&gt;</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">W</span><span class="Preform-plain-syntax">);</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">permit_trying_omission</span><span class="Preform-plain-syntax"> = </span><span class="Preform-identifier-syntax">pto</span><span class="Preform-plain-syntax">;</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">if</span><span class="Preform-plain-syntax"> (</span><span class="Preform-identifier-syntax">r</span><span class="Preform-plain-syntax">) {</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">action_pattern</span><span class="Preform-plain-syntax"> *</span><span class="Preform-identifier-syntax">ap</span><span class="Preform-plain-syntax"> = </span><span class="Preform-function-syntax">&lt;&lt;rp&gt;&gt;</span><span class="Preform-plain-syntax">;</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">if</span><span class="Preform-plain-syntax"> ((</span><span class="Preform-identifier-syntax">APClauses::get_val</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">ap</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">ACTOR_AP_CLAUSE</span><span class="Preform-plain-syntax">)) &amp;&amp;</span>
<span class="Preform-plain-syntax"> (</span><a href="2-dsh.html#SP24" class="function-link"><span class="Preform-function-syntax">Dash::validate_parameter</span></a><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">APClauses::get_val</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">ap</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">ACTOR_AP_CLAUSE</span><span class="Preform-plain-syntax">), </span><span class="Preform-identifier-syntax">K_person</span><span class="Preform-plain-syntax">) == </span><span class="Preform-identifier-syntax">FALSE</span><span class="Preform-plain-syntax">)) {</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">r</span><span class="Preform-plain-syntax"> = </span><span class="Preform-function-syntax">&lt;action-pattern&gt;</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">W</span><span class="Preform-plain-syntax">);</span>
<span class="Preform-plain-syntax"> }</span>
<span class="Preform-plain-syntax"> }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">if</span><span class="Preform-plain-syntax"> (</span><span class="Preform-identifier-syntax">r</span><span class="Preform-plain-syntax">) {</span>
<span class="Preform-plain-syntax"> ==&gt; { -, </span><a href="2-cnd.html#SP10" class="function-link"><span class="Preform-function-syntax">Conditions::new_TEST_ACTION</span></a><span class="Preform-plain-syntax">(</span><span class="Preform-function-syntax">&lt;&lt;rp&gt;&gt;</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">W</span><span class="Preform-plain-syntax">) };</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">return</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">TRUE</span><span class="Preform-plain-syntax">;</span>
<span class="Preform-plain-syntax"> }</span>
<span class="Preform-plain-syntax"> #</span><span class="Preform-identifier-syntax">endif</span>
<span class="Preform-plain-syntax"> ==&gt; { </span><span class="Preform-identifier-syntax">fail</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">nonterminal</span><span class="Preform-plain-syntax"> };</span>
<span class="Preform-plain-syntax">}</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>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="4-cad.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-vm.html">1</a></li><li class="progresschapter"><a href="2-spc.html">2</a></li><li class="progresschapter"><a href="3-pl.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresssection"><a href="4-ets.html">ets</a></li><li class="progresssection"><a href="4-cad.html">cad</a></li><li class="progresscurrent">teav</li><li class="progresssection"><a href="4-varc.html">varc</a></li><li class="progresssection"><a href="4-cap.html">cap</a></li><li class="progressnext"><a href="4-varc.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->

View file

@ -511,7 +511,7 @@ using a tense other than the present, and all is well.
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">VerbUsages::get_tense_used</span><span class="plain-syntax">(</span><span class="identifier-syntax">vu</span><span class="plain-syntax">) != </span><span class="identifier-syntax">IS_TENSE</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">Binding::detect_locals</span><span class="plain-syntax">(</span><a href="2-spc.html#SP4" class="function-link"><span class="function-syntax">Specifications::to_proposition</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">), </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-varc.html#SP11_3_1" class="named-paragraph-link"><span class="named-paragraph">Issue a problem for referring to temporary values at a time when they did not exist</span><span class="named-paragraph-number">11.3.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">spec</span><span class="plain-syntax"> = </span><a href="2-cnd.html#SP11" class="function-link"><span class="function-syntax">Conditions::attach_tense</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">, </span><span class="identifier-syntax">VerbUsages::get_tense_used</span><span class="plain-syntax">(</span><span class="identifier-syntax">vu</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">spec</span><span class="plain-syntax"> = </span><a href="2-cnd.html#SP10" class="function-link"><span class="function-syntax">Conditions::attach_tense</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">, </span><span class="identifier-syntax">VerbUsages::get_tense_used</span><span class="plain-syntax">(</span><span class="identifier-syntax">vu</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">explicit_negation</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">spec</span><span class="plain-syntax"> = </span><a href="2-cnd.html#SP7" class="function-link"><span class="function-syntax">Conditions::negate</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>

View file

@ -7550,21 +7550,19 @@
<s-table-column-name> of <s-value-uncached> in <s-value-uncached>
(hits 2/579) (matched long text) constraint DS = {26} extremes [5, infinity)
<s-action-pattern-as-value> internal hits 3/19876 nti 10 constraint (none) extremes [1, infinity)
<s-sentence> hits 1074/2238 nti 11 constraint (none) extremes [3, infinity)
<s-sentence> hits 1074/2238 nti 10 constraint (none) extremes [3, infinity)
English:
<np-existential> <s-existential-verb-tail>
(hits 0/737) constraint DS = {19} extremes [3, infinity)
<s-noun-phrase> <s-general-verb-tail>
(hits 1074/1108) (matched long text) constraint (none) extremes [3, infinity)
<s-existential-verb-tail> hits 11/22 nti 12 constraint FS = {7} extremes [2, infinity)
<s-existential-verb-tail> hits 11/22 nti 11 constraint FS = {7} extremes [2, infinity)
English:
<copular-verb> <s-noun-phrase-nounless>
(hits 11/11) (matched long text) constraint FS = {7} extremes [2, infinity)
<s-general-verb-tail> hits 2149/6658 nti 13 constraint (none) extremes [2, infinity)
<s-general-verb-tail> hits 2149/6658 nti 12 constraint (none) extremes [2, infinity)
English:
<universal-verb> <s-universal-term>
(hits 0/660) constraint DS = {29} & FS = {9} extremes [4, infinity)
@ -7578,7 +7576,7 @@
<s-noun-phrase> to <s-noun-phrase>
constraint DS = {29} extremes [3, infinity)
<s-np-with-relative-clause> hits 260/9966 nti 14 constraint (none) extremes [3, infinity)
<s-np-with-relative-clause> hits 260/9966 nti 13 constraint (none) extremes [3, infinity)
English:
<s-noun-phrase-nounless> <s-implied-relative-verb-tail>
(hits 169/4515) (matched long text) constraint DS = {13} extremes [3, infinity)
@ -7592,7 +7590,7 @@
not <copular-preposition> <s-noun-phrase-nounless>
(hits 1/6077) (matched: 'not carried by the person asked') constraint DS = {13, 28} extremes [3, infinity)
<s-relative-verb-tail> hits 183/23360 nti 15 constraint DS = {30} extremes [3, infinity)
<s-relative-verb-tail> hits 183/23360 nti 14 constraint DS = {30} extremes [3, infinity)
English:
<rc-marker> <universal-verb> <s-universal-term>
(hits 0/2196) constraint DS = {29, 30} extremes [5, infinity)
@ -7601,11 +7599,11 @@
<rc-marker> <nonimperative-verb> <s-noun-phrase>
(hits 151/5594) (matched: 'which provide the property initial appearance') constraint DS = {30} extremes [3, infinity)
<s-purely-physical-description> internal hits 791/18290 nti 16 constraint (none) extremes [1, infinity)
<s-purely-physical-description> internal hits 791/18290 nti 15 constraint (none) extremes [1, infinity)
<if-forced-physical> internal hits 1208/34552 nti 17 constraint (none) extremes [0, 0]
<if-forced-physical> internal hits 1208/34552 nti 16 constraint (none) extremes [0, 0]
<s-noun-phrase> hits 4662/9648 nti 18 constraint (none) extremes [1, infinity)
<s-noun-phrase> hits 4662/9648 nti 17 constraint (none) extremes [1, infinity)
English:
<if-forced-physical> <s-variable-as-value>
(hits 30/4824) (matched: 'the person asked') constraint (none) extremes [1, infinity)
@ -7614,7 +7612,7 @@
^<if-forced-physical> <s-value-uncached>
(hits 4602/4764) (matched long text) constraint (none) extremes [1, infinity)
<s-noun-phrase-nounless> hits 797/2188 nti 19 constraint (none) extremes [1, infinity)
<s-noun-phrase-nounless> hits 797/2188 nti 18 constraint (none) extremes [1, infinity)
English:
<if-forced-physical> <s-variable-as-value>
(hits 143/1094) (matched: 'the second noun') constraint (none) extremes [1, infinity)
@ -7634,7 +7632,7 @@
<s-adjective-list-as-desc>
(hits 2/248) (matched: 'switched off') constraint (none) extremes [1, infinity)
<s-condition-uncached> hits 1071/2634 nti 20 constraint (none) extremes [0, infinity)
<s-condition-uncached> hits 1071/2634 nti 19 constraint (none) extremes [0, infinity)
English:
<s-cond-pure>
(hits 1069/1317) (matched long text) constraint (none) extremes [0, infinity)
@ -7658,7 +7656,7 @@
<s-cond-atomic>
(hits 1197/1457) (matched long text) constraint (none) extremes [0, infinity)
<s-cond-with-chronology> internal hits 0/2914 nti 21 constraint (none) extremes [1, infinity)
<s-cond-with-chronology> internal hits 0/2914 nti 20 constraint (none) extremes [1, infinity)
<s-cond-atomic> hits 1197/2914 nti 16 constraint (none) extremes [0, infinity)
English:
@ -7704,26 +7702,26 @@
<np-existential> is/are {...}
(hits 22/802) (matched long text) constraint DS = {9, 19} extremes [3, infinity)
<s-phrase-to-decide> internal hits 94/2912 nti 22 constraint (none) extremes [1, infinity)
<s-phrase-to-decide> internal hits 94/2912 nti 21 constraint (none) extremes [1, infinity)
<s-phrase-option-in-use> internal hits 1/2914 nti 23 constraint (none) extremes [1, infinity)
<s-phrase-option-in-use> internal hits 1/2914 nti 22 constraint (none) extremes [1, infinity)
<s-action-pattern-as-condition> hits 28/2746 nti 24 constraint (none) extremes [1, infinity)
<s-action-pattern-as-condition> hits 28/2746 nti 23 constraint (none) extremes [1, infinity)
English:
<we-are-action-pattern>
(hits 28/1373) (matched long text) constraint (none) extremes [1, infinity)
<s-action-pattern-as-negated-condition> hits 0/2208 nti 25 constraint DS = {14} extremes [2, infinity)
<s-action-pattern-as-negated-condition> hits 0/2208 nti 24 constraint DS = {14} extremes [2, infinity)
English:
<action-pattern-negated>
(hits 0/1104) constraint DS = {14} extremes [2, infinity)
<s-past-action-pattern-as-condition> hits 0/2182 nti 26 constraint DS = {11} extremes [3, infinity)
<s-past-action-pattern-as-condition> hits 0/2182 nti 25 constraint DS = {11} extremes [3, infinity)
English:
<action-pattern-past>
(hits 0/1091) constraint DS = {11} extremes [3, infinity)
<s-past-action-pattern-as-negated-condition> hits 0/1890 nti 27 constraint DS = {12} extremes [4, infinity)
<s-past-action-pattern-as-negated-condition> hits 0/1890 nti 26 constraint DS = {12} extremes [4, infinity)
English:
<action-pattern-past-negated>
(hits 0/945) constraint DS = {12} extremes [4, infinity)
@ -7761,28 +7759,28 @@
<adaptive-adjective>
(hits 0/2342) constraint (none) extremes [1, infinity)
<adaptive-adjective> internal hits 0/4684 nti 28 constraint (none) extremes [1, infinity)
<adaptive-adjective> internal hits 0/4684 nti 27 constraint (none) extremes [1, infinity)
<s-to-phrase> internal hits 1374/2748 nti 29 constraint (none) extremes [1, infinity)
<s-to-phrase> internal hits 1374/2748 nti 28 constraint (none) extremes [1, infinity)
<s-text-substitution> internal hits 2388/4776 nti 30 constraint (none) extremes [1, infinity)
<s-text-substitution> internal hits 2388/4776 nti 29 constraint (none) extremes [1, infinity)
<s-object-instance> internal hits 1102/4644 nti r4 constraint CW = {r2, r4} extremes [1, infinity)
<s-non-object-instance> internal hits 4/252 nti 31 constraint (none) extremes [1, infinity)
<s-non-object-instance> internal hits 4/252 nti 30 constraint (none) extremes [1, infinity)
<s-instance> nti 6 constraint (none) extremes [0, 0]
<s-instance> nti 31 constraint (none) extremes [0, 0]
English:
<s-instance-of-object>
constraint (none) extremes [0, 0]
<s-instance-of-non-object>
constraint (none) extremes [0, 0]
<instance-of-object> internal hits 0/172 nti 7 constraint (none) extremes [1, infinity)
<instance-of-object> internal hits 0/172 nti 6 constraint (none) extremes [1, infinity)
<instance-of-non-object> internal hits 4/252 nti 8 constraint (none) extremes [1, infinity)
<instance-of-non-object> internal hits 4/252 nti 7 constraint (none) extremes [1, infinity)
<instance> nti 9 constraint (none) extremes [1, infinity)
<instance> nti 8 constraint (none) extremes [1, infinity)
English:
<instance-of-object>
constraint (none) extremes [1, infinity)
@ -7805,27 +7803,27 @@
property {...}
(hits 34/176) (matched: 'property initial appearance') constraint DS = {20} extremes [2, infinity)
<property-name> internal hits 69/430 nti 10 constraint (none) extremes [1, infinity)
<property-name> internal hits 69/430 nti 9 constraint (none) extremes [1, infinity)
<either-or-property-name> internal hits 0/44 nti 11 constraint (none) extremes [1, infinity)
<either-or-property-name> internal hits 0/44 nti 10 constraint (none) extremes [1, infinity)
<value-property-name> internal hits 127/2212 nti 12 constraint (none) extremes [1, infinity)
<value-property-name> internal hits 127/2212 nti 11 constraint (none) extremes [1, infinity)
<property-name-v> internal hits 104/392 nti 13 constraint (none) extremes [1, infinity)
<property-name-v> internal hits 104/392 nti 12 constraint (none) extremes [1, infinity)
<name-looking-like-property-test> hits 0/292 nti 22 constraint DS = {22} extremes [1, infinity)
English:
{***} of {***}
(hits 0/1) constraint DS = {22} extremes [1, infinity)
<ambiguous-property-name> internal nti 14 constraint (none) extremes [1, infinity)
<ambiguous-property-name> internal nti 13 constraint (none) extremes [1, infinity)
<same-property-as-construction> nti 23 constraint DS = {23} extremes [4, infinity)
English:
the same {...} as
constraint DS = {23} extremes [4, infinity)
<relation-property-name> hits 22/44 nti 15 constraint (none) extremes [1, infinity)
<relation-property-name> hits 22/44 nti 14 constraint (none) extremes [1, infinity)
English:
<either-or-property-name>
(hits 0/22) constraint (none) extremes [1, infinity)
@ -7880,9 +7878,9 @@
female
(hits 1/1) (matched: 'female') constraint CS = {27} extremes [1, 1]
<rulebook-name> internal hits 82/164 nti 16 constraint (none) extremes [1, infinity)
<rulebook-name> internal hits 82/164 nti 15 constraint (none) extremes [1, infinity)
<rule-name> internal hits 123/246 nti 17 constraint (none) extremes [1, infinity)
<rule-name> internal hits 123/246 nti 16 constraint (none) extremes [1, infinity)
<new-rulebook-name> hits 431/862 nti 28 constraint (none) extremes [1, infinity)
English:
@ -7906,16 +7904,16 @@
{...} rulebook
constraint DS = {29} extremes [2, infinity)
<rulebook-variable-name> hits 7/14 nti 18 constraint (none) extremes [1, infinity)
<rulebook-variable-name> hits 7/14 nti 17 constraint (none) extremes [1, infinity)
English:
<unfortunate-name>
(hits 0/7) constraint (none) extremes [1, infinity)
{...}
(hits 7/7) (matched: 'specific carry out rulebook') constraint (none) extremes [1, infinity)
<rulebook-stem> internal hits 371/790 nti 19 constraint (none) extremes [1, infinity)
<rulebook-stem> internal hits 371/790 nti 18 constraint (none) extremes [1, infinity)
<rulebook-stem-inner> hits 395/790 nti 20 constraint (none) extremes [1, infinity)
<rulebook-stem-inner> hits 395/790 nti 19 constraint (none) extremes [1, infinity)
English:
<indefinite-article> <rulebook-stem-inner-unarticled>
(hits 19/395) (matched: 'a first turn sequence rule') constraint (none) extremes [2, infinity)
@ -7959,7 +7957,7 @@
{...}
constraint (none) extremes [1, infinity)
<rulebook-default-outcome> nti 21 constraint (none) extremes [1, infinity)
<rulebook-default-outcome> nti 20 constraint (none) extremes [1, infinity)
English:
<rule-outcome>
constraint CS = {6} extremes [1, 2]
@ -7975,7 +7973,7 @@
no outcome
constraint CS = {6} extremes [2, 2]
<rulebook-outcome-list> hits 27/54 nti 22 constraint (none) extremes [1, infinity)
<rulebook-outcome-list> hits 27/54 nti 21 constraint (none) extremes [1, infinity)
English:
{...}
(hits 10/27) (matched long text) constraint (none) extremes [1, infinity)
@ -7991,7 +7989,7 @@
_,/and/or <rulebook-outcome-list>
(hits 20/77) (matched long text) constraint DS = {8} extremes [2, infinity)
<rulebook-outcome-setting-entry> hits 27/54 nti 23 constraint (none) extremes [1, infinity)
<rulebook-outcome-setting-entry> hits 27/54 nti 22 constraint (none) extremes [1, infinity)
English:
<form-of-named-rule-outcome>
(hits 27/27) (matched: 'there is sufficient light ( failure )') constraint (none) extremes [1, infinity)
@ -8022,7 +8020,7 @@
it is very unlikely
(hits 1/1) (matched: 'it is very unlikely') constraint CS = {10} extremes [4, 4]
<named-rulebook-outcome> internal hits 8/1226 nti 24 constraint (none) extremes [1, infinity)
<named-rulebook-outcome> internal hits 8/1226 nti 23 constraint (none) extremes [1, infinity)
<activity-sentence-subject> hits 35/70 nti 14 constraint (none) extremes [1, infinity)
English:
@ -8056,7 +8054,7 @@
{...} activity
constraint DS = {15} extremes [2, infinity)
<activity-variable-name> nti 25 constraint (none) extremes [1, infinity)
<activity-variable-name> nti 24 constraint (none) extremes [1, infinity)
English:
<unfortunate-name>
constraint (none) extremes [1, infinity)
@ -8070,7 +8068,7 @@
<activity-list-unnegated>
(hits 40/40) (matched: 'dropping or throwing or inserting or putting') constraint (none) extremes [1, infinity)
<activity-list-unnegated> hits 41/82 nti 26 constraint (none) extremes [1, infinity)
<activity-list-unnegated> hits 41/82 nti 25 constraint (none) extremes [1, infinity)
English:
{...}
(hits 14/41) (matched: 'throwing or inserting or putting') constraint (none) extremes [1, infinity)
@ -8108,9 +8106,9 @@
<s-type-expression-or-value>
(hits 3/15) (matched: 'smelling') constraint (none) extremes [1, infinity)
<activity-name> internal hits 1/88 nti 27 constraint (none) extremes [1, infinity)
<activity-name> internal hits 1/88 nti 26 constraint (none) extremes [1, infinity)
<if-parsing-al-conditions> internal hits 80/160 nti 28 constraint (none) extremes [0, 0]
<if-parsing-al-conditions> internal hits 80/160 nti 27 constraint (none) extremes [0, 0]
<verify-expanded-text-substitution> hits 438/876 nti 20 constraint (none) extremes [1, infinity)
English:
@ -8269,7 +8267,7 @@
<anl-inner-diagnosis>
constraint (none) extremes [1, infinity)
<anl-inner-diagnosis> nti 29 constraint (none) extremes [1, infinity)
<anl-inner-diagnosis> nti 28 constraint (none) extremes [1, infinity)
English:
<anl-entry-diagnosis> <anl-tail-diagnosis>
constraint DS = {8} extremes [3, infinity)
@ -8283,7 +8281,7 @@
_,/or <anl-inner-diagnosis>
constraint DS = {8} extremes [2, infinity)
<anl-entry-diagnosis> nti 30 constraint (none) extremes [1, infinity)
<anl-entry-diagnosis> nti 29 constraint (none) extremes [1, infinity)
English:
{......}
constraint (none) extremes [1, infinity)
@ -8365,7 +8363,7 @@
to {...}
(hits 302/302) (matched long text) constraint DS = {14} extremes [2, infinity)
<return-kind> hits 160/320 nti 31 constraint (none) extremes [1, infinity)
<return-kind> hits 160/320 nti 30 constraint (none) extremes [1, infinity)
English:
<k-kind-for-template>
(hits 160/160) (matched: 'relation of objects') constraint (none) extremes [1, infinity)
@ -8438,9 +8436,9 @@
{......}
(hits 0/5) constraint (none) extremes [1, infinity)
<s-kind-as-name-token> internal hits 24/68 nti 6 constraint (none) extremes [1, infinity)
<s-kind-as-name-token> internal hits 24/68 nti 31 constraint (none) extremes [1, infinity)
<phrase-option-declaration-list> hits 65/130 nti 7 constraint (none) extremes [1, infinity)
<phrase-option-declaration-list> hits 65/130 nti 6 constraint (none) extremes [1, infinity)
English:
{...}
(hits 20/65) (matched long text) constraint (none) extremes [1, infinity)
@ -8460,14 +8458,14 @@
and/or <phrase-option-declaration-list>
(hits 0/37) constraint DS = {17} extremes [2, infinity)
<phrase-option-declaration-setting-entry> hits 65/130 nti 8 constraint (none) extremes [1, infinity)
<phrase-option-declaration-setting-entry> hits 65/130 nti 7 constraint (none) extremes [1, infinity)
English:
{...}
(hits 20/65) (matched: 'without printing a room description') constraint (none) extremes [1, infinity)
{...}
(hits 45/45) (matched: 'without printing a room description') constraint (none) extremes [1, infinity)
<phrase-option-list> hits 102/204 nti 9 constraint (none) extremes [1, infinity)
<phrase-option-list> hits 102/204 nti 8 constraint (none) extremes [1, infinity)
English:
{...}
(hits 43/102) (matched long text) constraint (none) extremes [1, infinity)
@ -8483,14 +8481,14 @@
_,/and <phrase-option-list>
(hits 86/160) (matched long text) constraint DS = {18} extremes [2, infinity)
<phrase-option-setting-entry> hits 102/204 nti 10 constraint (none) extremes [1, infinity)
<phrase-option-setting-entry> hits 102/204 nti 9 constraint (none) extremes [1, infinity)
English:
<phrase-option>
(hits 102/102) (matched: 'giving brief inventory information') constraint (none) extremes [1, infinity)
{...}
constraint (none) extremes [1, infinity)
<phrase-option> internal hits 102/3322 nti 11 constraint (none) extremes [1, infinity)
<phrase-option> internal hits 102/3322 nti 10 constraint (none) extremes [1, infinity)
<heading-with-parenthesis> nti 20 constraint (none) extremes [1, infinity)
English:
@ -8510,7 +8508,7 @@
{...}
constraint (none) extremes [1, infinity)
<new-called-name> hits 209/418 nti 12 constraint (none) extremes [1, infinity)
<new-called-name> hits 209/418 nti 11 constraint (none) extremes [1, infinity)
English:
<definite-article> <new-called-name-unarticled>
(hits 14/74) (matched: 'the current working sack') constraint (none) extremes [2, infinity)
@ -8528,7 +8526,7 @@
{...}
(hits 73/73) (matched: 'item being printed') constraint (none) extremes [1, infinity)
<existing-local-name> internal hits 136/418 nti 13 constraint (none) extremes [1, infinity)
<existing-local-name> internal hits 136/418 nti 12 constraint (none) extremes [1, infinity)
<end-phrase-construction> nti 22 constraint DS = {22} extremes [2, infinity)
English:
@ -8546,7 +8544,7 @@
{...}
constraint (none) extremes [1, infinity)
<name-local-to-inline-stack-frame> internal hits 1559/3118 nti 14 constraint (none) extremes [1, infinity)
<name-local-to-inline-stack-frame> internal hits 1559/3118 nti 13 constraint (none) extremes [1, infinity)
<definition-header> hits 44/1880 nti 24 constraint CS = {24} extremes [1, 1]
English:
@ -8912,14 +8910,14 @@
entire game
(hits 1/1) (matched: 'entire game') constraint CS = {8} extremes [2, 2]
<scene-ends-sentence-subject> hits 4/8 nti 15 constraint (none) extremes [1, infinity)
<scene-ends-sentence-subject> hits 4/8 nti 14 constraint (none) extremes [1, infinity)
English:
<scene-name>
(hits 4/4) (matched: 'the entire game') constraint (none) extremes [1, infinity)
{...}
constraint (none) extremes [1, infinity)
<scene-ends-sentence-adverb> nti 16 constraint (none) extremes [1, infinity)
<scene-ends-sentence-adverb> nti 15 constraint (none) extremes [1, infinity)
English:
<scene-end-name-creating>
constraint (none) extremes [1, infinity)
@ -8943,23 +8941,23 @@
<s-condition>
(hits 0/2) constraint (none) extremes [1, infinity)
<scene-name> hits 4/8 nti 17 constraint (none) extremes [1, infinity)
<scene-name> hits 4/8 nti 16 constraint (none) extremes [1, infinity)
English:
<definite-article> <scene-name-unarticled>
(hits 4/4) (matched: 'the entire game') constraint (none) extremes [2, infinity)
<scene-name-unarticled>
constraint (none) extremes [1, infinity)
<scene-name-unarticled> hits 4/8 nti 18 constraint (none) extremes [1, infinity)
<scene-name-unarticled> hits 4/8 nti 17 constraint (none) extremes [1, infinity)
English:
<instance-of-non-object>
(hits 4/4) (matched: 'entire game') constraint (none) extremes [1, infinity)
<scene-end-name> internal nti 19 constraint (none) extremes [1, infinity)
<scene-end-name> internal nti 18 constraint (none) extremes [1, infinity)
<scene-end-name-creating> internal nti 20 constraint (none) extremes [1, infinity)
<scene-end-name-creating> internal nti 19 constraint (none) extremes [1, infinity)
<s-scene-description> nti 21 constraint (none) extremes [1, infinity)
<s-scene-description> nti 20 constraint (none) extremes [1, infinity)
English:
<s-value>
constraint (none) extremes [1, infinity)
@ -8981,7 +8979,7 @@
waiting
(hits 1/20) (matched: 'waiting') constraint CS = {12} extremes [1, 1]
<new-action-sentence-object> hits 90/1036 nti 22 constraint DS = {13} extremes [1, infinity)
<new-action-sentence-object> hits 90/1036 nti 21 constraint DS = {13} extremes [1, infinity)
English:
<indefinite-article> <new-action-sentence-object-unarticled>
(hits 90/357) (matched long text) constraint DS = {13} extremes [2, infinity)
@ -8995,7 +8993,7 @@
action
(hits 0/3) constraint CS = {13} extremes [1, 1]
<nounphrase-actionable> hits 90/182 nti 23 constraint (none) extremes [0, infinity)
<nounphrase-actionable> hits 90/182 nti 22 constraint (none) extremes [0, infinity)
English:
^<variable-creation-tail>
(hits 90/91) (matched long text) constraint (none) extremes [0, infinity)
@ -9007,21 +9005,21 @@
{***} variable
(hits 0/90) constraint DS = {14} extremes [1, infinity)
<action-sentence-subject> hits 90/180 nti 24 constraint (none) extremes [1, infinity)
<action-sentence-subject> hits 90/180 nti 23 constraint (none) extremes [1, infinity)
English:
<action-name>
(hits 0/90) constraint (none) extremes [1, infinity)
{...}
(hits 90/90) (matched: 'switching the story transcript on') constraint (none) extremes [1, infinity)
<action-sentence-object> hits 90/180 nti 25 constraint (none) extremes [1, infinity)
<action-sentence-object> hits 90/180 nti 24 constraint (none) extremes [1, infinity)
English:
<action-clauses>
(hits 90/90) (matched long text) constraint (none) extremes [1, infinity)
{...}
constraint (none) extremes [1, infinity)
<action-clauses> hits 128/256 nti 26 constraint (none) extremes [1, infinity)
<action-clauses> hits 128/256 nti 25 constraint (none) extremes [1, infinity)
English:
{...}
(hits 19/128) (matched: 'applying to nothing or one thing and') constraint (none) extremes [1, infinity)
@ -9077,12 +9075,12 @@
{...}
constraint (none) extremes [1, infinity)
<act-req> hits 70/140 nti 27 constraint (none) extremes [1, infinity)
<act-req> hits 70/140 nti 26 constraint (none) extremes [1, infinity)
English:
<act-req-inner>
(hits 70/70) (matched: 'visible thing') constraint (none) extremes [1, infinity)
<act-req-inner> hits 70/140 nti 28 constraint (none) extremes [1, infinity)
<act-req-inner> hits 70/140 nti 27 constraint (none) extremes [1, infinity)
English:
<action-access> <k-kind>
(hits 12/12) (matched: 'visible thing') constraint DS = {15} extremes [2, infinity)
@ -9107,7 +9105,7 @@
<action-variable-name>
(hits 7/7) (matched: 'abbreviated form allowed') constraint (none) extremes [1, infinity)
<action-variable-name> hits 13/26 nti 29 constraint (none) extremes [1, infinity)
<action-variable-name> hits 13/26 nti 28 constraint (none) extremes [1, infinity)
English:
<unfortunate-name>
(hits 0/13) constraint (none) extremes [1, infinity)
@ -9128,7 +9126,7 @@
report {...}
constraint DS = {21} extremes [2, infinity)
<action-name> internal hits 227/664 nti 30 constraint (none) extremes [1, infinity)
<action-name> internal hits 227/664 nti 29 constraint (none) extremes [1, infinity)
<action-optional-trailing-prepositions> hits 378/10710 nti 22 constraint DS = {22} extremes [2, infinity)
English:
@ -9166,14 +9164,14 @@
{...}
constraint (none) extremes [1, infinity)
<anl-to-tail> hits 326/652 nti 31 constraint (none) extremes [1, infinity)
<anl-to-tail> hits 326/652 nti 30 constraint (none) extremes [1, infinity)
English:
<anl-operand> <text-of-in-clause>
(hits 0/120) constraint DS = {23} extremes [3, infinity)
<anl-operand>
(hits 326/326) (matched long text) constraint (none) extremes [1, infinity)
<anl-operand> hits 326/652 nti 6 constraint (none) extremes [1, infinity)
<anl-operand> hits 326/652 nti 31 constraint (none) extremes [1, infinity)
English:
{...}
(hits 326/326) (matched long text) constraint (none) extremes [1, infinity)
@ -9187,7 +9185,7 @@
in {...}
(hits 12/1665) (matched: 'in the public library') constraint DS = {23} extremes [2, infinity)
<anl> hits 958/2310 nti 7 constraint (none) extremes [1, infinity)
<anl> hits 958/2310 nti 6 constraint (none) extremes [1, infinity)
English:
<anl-entry> <anl-tail>
(hits 0/549) constraint DS = {24} extremes [3, infinity)
@ -9201,7 +9199,7 @@
_,/or <anl>
(hits 0/1262) constraint DS = {24} extremes [2, infinity)
<anl-entry> hits 958/2310 nti 8 constraint (none) extremes [1, infinity)
<anl-entry> hits 958/2310 nti 7 constraint (none) extremes [1, infinity)
English:
<named-action-pattern>
(hits 0/1155) constraint (none) extremes [1, infinity)
@ -9210,7 +9208,7 @@
<anl-entry-with-action>
(hits 958/1155) (matched long text) constraint (none) extremes [1, infinity)
<anl-entry-with-action> internal hits 958/2310 nti 9 constraint (none) extremes [1, infinity)
<anl-entry-with-action> internal hits 958/2310 nti 8 constraint (none) extremes [1, infinity)
<going-action> hits 1/180 nti 28 constraint CS = {28} extremes [1, 1]
English:
@ -9224,6 +9222,8 @@
somewhere
(hits 0/3) constraint CS = {29} extremes [1, 1]
<s-action-pattern-as-value> internal hits 3/19876 nti 9 constraint (none) extremes [1, infinity)
<action-pattern> hits 556/21224 nti 30 constraint (none) extremes [1, infinity)
English:
asking <action-parameter> to try <action-pattern-core>

View file

@ -23401,7 +23401,7 @@ ROOT_NT
}
LOGICAL_AND_NT'looking and a marked for listing person is not in the locati'
TEST_VALUE_NT'looking'
CONSTANT_NT'looking' {kind: action} {action pattern: <action: looking>} {explicit action: <action: looking>}
CONSTANT_NT'looking' {kind: action} {explicit action: <action: looking>}
TEST_PROPOSITION_NT'a marked for listing person is not in the location' {proposition: << Exists x : kind=person(x) ^ marked for listing(x) ^ NOT< ('the location' == <ContainerOf(*1) : x>) NOT> >>} {term: x}
CODE_BLOCK_NT
INVOCATION_LIST_NT'clear marked people' {indent: 3}

View file

@ -1,13 +1,13 @@
Total memory consumption was 257775K = 252 MB
62.3% was used for 1339896 objects, in 278621 frames in 201 x 800K = 160800K = 157 MB:
62.3% was used for 1339899 objects, in 278624 frames in 201 x 800K = 160800K = 157 MB:
9.8% inter_tree_node_array 36 x 8192 = 294912 objects, 25953408 bytes
5.5% text_stream_array 2595 x 100 = 259500 objects, 14615040 bytes
3.9% parse_node 129996 objects, 10399680 bytes
2.8% verb_conjugation 160 objects, 7425280 bytes
2.6% parse_node_annotation_array 431 x 500 = 215500 objects, 6909792 bytes
2.4% linked_list 11778 objects, 6595680 bytes
2.4% linked_list 11781 objects, 6597360 bytes
2.3% inter_symbol_array 70 x 1024 = 71680 objects, 6310080 bytes
1.2% pcalc_prop_array 24 x 1000 = 24000 objects, 3264768 bytes
1.2% map_data 670 objects, 3178480 bytes
@ -246,5 +246,5 @@ Total memory consumption was 257775K = 252 MB
---- emitter array storage 12320 bytes in 8 claims
---- code generation workspace for objects 9200 bytes in 9 claims
19.7% was overhead - 52176848 bytes = 50953K = 49 MB
19.7% was overhead - 52175168 bytes = 50952K = 49 MB

View file

@ -1,15 +1,15 @@
100.0% in inform7 run
66.9% in compilation to Inter
25.5% in //Phrases::Manager::compile_first_block//
8.5% in //Phrases::Manager::compile_as_needed//
6.8% in //Strings::compile_responses//
6.3% in //InferenceSubjects::emit_all//
4.1% in //MajorNodes::pre_pass//
3.4% in //MajorNodes::pass_1//
1.9% in //Phrases::Manager::RulePrintingRule_routine//
25.4% in //Phrases::Manager::compile_first_block//
8.8% in //Phrases::Manager::compile_as_needed//
7.0% in //Strings::compile_responses//
6.0% in //InferenceSubjects::emit_all//
4.2% in //MajorNodes::pre_pass//
3.3% in //MajorNodes::pass_1//
2.0% in //Phrases::Manager::RulePrintingRule_routine//
1.8% in //Phrases::Manager::rulebooks_array//
0.9% in //Phrases::Manager::traverse//
0.9% in //RTVerbs::ConjugateVerb//
1.1% in //RTVerbs::ConjugateVerb//
0.7% in //Phrases::Manager::traverse//
0.5% in //Phrases::Manager::parse_rule_parameters//
0.5% in //World::stage_V//
0.3% in //MajorNodes::pass_2//
@ -19,11 +19,11 @@
0.1% in //RTKinds::compile_data_type_support_routines//
0.1% in //Task::make_built_in_kind_constructors//
0.1% in //World::stages_II_and_III//
3.4% not specifically accounted for
3.3% not specifically accounted for
30.6% in running Inter pipeline
9.9% in step preparation
9.8% in inter step 2/12: link
7.2% in inter step 12/12: generate inform6 -> auto.inf
9.7% in inter step 2/12: link
7.3% in inter step 12/12: generate inform6 -> auto.inf
0.3% in inter step 9/12: make-identifiers-unique
0.1% in inter step 10/12: reconcile-verbs
0.1% in inter step 11/12: eliminate-redundant-labels
@ -31,6 +31,6 @@
0.1% in inter step 6/12: assimilate
0.1% in inter step 7/12: resolve-external-symbols
0.1% in inter step 8/12: inspect-plugs
2.2% not specifically accounted for
1.9% in supervisor
2.1% not specifically accounted for
2.0% in supervisor
0.4% not specifically accounted for

View file

@ -12,6 +12,8 @@ RelDynamicPointer
ConstantStoredActionsWithTopics
InheritedStoredActions
TableDefinedSAs
ForLengthsOfTime
C9ScenesPastTenseActions
PM_NamedAPIsArticle
PM_NamedAPWithActor
PM_GoingWrongKind

View file

@ -595,19 +595,10 @@ further sub-cases later.
Problems::issue_problem_end();
return;
}
#ifdef IF_MODULE
if (Node::get_type(py) == ACTION_NT) {
action_pattern *ap = Node::get_action_meaning(py);
if (ap) {
parse_node *val = Rvalues::from_action_pattern(ap);
if (Rvalues::is_CONSTANT_of_kind(val, K_stored_action)) {
Refiner::give_spec_to_noun(py, val);
Assertions::make_coupling(px, py);
return;
}
}
if (PluginCalls::unusual_property_value(py)) {
Assertions::make_coupling(px, py);
return;
}
#endif
Problems::Using::assertion_problem(Task::syntax_tree(), _p_(PM_PeculiarProperty),
"that is a very peculiar property value",
"and ought to be something more definite and explicit.");

View file

@ -316,7 +316,7 @@ is allowed to stand.
Wordings::last_wn(Node::get_text(p->down->next)));
if (Wordings::nonempty(W)) {
if (<action-pattern>(W)) {
ActionPatterns::make_ACTION_node(p, <<rp>>);
ActionsNodes::convert_to_ACTION_node(p, <<rp>>);
Node::set_text(p, W);
}
}
@ -601,7 +601,7 @@ here, given that we know we are looking for a noun.
#ifdef IF_MODULE
if (Node::get_article(p) == NULL) {
if (<action-pattern>(Node::get_text(p))) {
ActionPatterns::make_ACTION_node(p, <<rp>>);
ActionsNodes::convert_to_ACTION_node(p, <<rp>>);
return;
}
}

View file

@ -71,41 +71,13 @@ about this kind of value sometimes comes from a particular node somewhere
in |py|, which (if it exists) we'll call its "governing node".
@<Perform creation duties on a copular sentence@> =
@<Take care of two ambiguities to do with actions@>;
PluginCalls::creation(px, py);
parse_node *govx = NULL, *govy = NULL;
kind *kindx = NULL, *kindy = NULL;
@<Work out the kinds of value expressed by each side, and find their governing nodes@>;
Assertions::Creator::noun_creator(px, kindy, govy);
Assertions::Creator::noun_creator(py, kindx, govx);
@ The first case here is to take care of a sentence like:
>> Taking something is proactive behaviour.
Here |Refiner::refine| will correctly report that "proactive behaviour" is
a new term, and give it a |CREATED_NT| node. But we don't want it to become an
object or a value -- it will become a named kind of action instead. So we
amend the node to |ACTION_NT|.
The second case occurs much less often -- for instance, the only time it comes
up in the test suite is in the example "Chronic Hinting Syndrome":
>> Setting is a kind of value. The settings are bright and dull.
Here the first sentence wants to create something called "setting", which
ought to have a |CREATED_NT| node type, but doesn't because it has been read
as an action instead. We correct the spurious |ACTION_NT| to a |CREATED_NT|.
@<Take care of two ambiguities to do with actions@> =
if ((Assertions::Creator::actionlike(px)) && (Node::get_type(py) == CREATED_NT))
Node::set_type(py, ACTION_NT);
if ((Assertions::Creator::actionlike(px)) && (Assertions::Creator::actionlike(py))) {
Assertions::Creator::to_action_node(px);
Assertions::Creator::to_action_node(py);
}
if ((Node::get_type(px) == ACTION_NT) && (Node::get_type(py) == KIND_NT))
Node::set_type(px, CREATED_NT);
@ There are two ways to know the kind being expressed. One is that the sentence
makes unambiguous use of a relation which forces the kinds on each side. For
example,
@ -144,34 +116,6 @@ The other way to find the kinds is to look at what the two sides explicitly say:
kindy = Assertions::Creator::kind_of_subtree(py, &govy);
}
@ =
int Assertions::Creator::actionlike(parse_node *p) {
#ifdef IF_MODULE
if (Node::get_type(p) == ACTION_NT) return TRUE;
if (Node::get_type(p) == PROPER_NOUN_NT) {
parse_node *spec = Node::get_evaluation(p);
if (Rvalues::is_CONSTANT_of_kind(spec, K_stored_action))
return TRUE;
}
#endif
return FALSE;
}
void Assertions::Creator::to_action_node(parse_node *p) {
#ifdef IF_MODULE
if (Node::get_type(p) == ACTION_NT) return;
if (Node::get_type(p) == PROPER_NOUN_NT) {
parse_node *spec = Node::get_evaluation(p);
if (Rvalues::is_CONSTANT_of_kind(spec, K_stored_action)) {
explicit_action *ea = Node::get_constant_explicit_action(spec);
ActionPatterns::make_ACTION_node(p, ea->as_described);
return;
}
}
#endif
internal_error("misapplied to_action_node");
}
@ So that just leaves the algorithms for finding the relation of a subtree:
=

View file

@ -75,6 +75,29 @@ int PluginCalls::intervene_in_assertion(parse_node *px, parse_node *py) {
PLUGINS_CALL(INTERVENE_IN_ASSERTION_PLUG, px, py);
}
@ Called from //assertions: The Creator// when a copular sentence may be
creating something. For example, the actions plugin needs this.
@e CREATION_PLUG
=
int PluginCalls::creation(parse_node *px, parse_node *py) {
PLUGINS_CALL(CREATION_PLUG, px, py);
}
@ Called from //assertions: Assertions// when an unfamiliar node type appears
where a property value might be expected. For example, the actions plugin
uses this to deal with setting a property to an |ACTION_NT| node. To
intervene, set the node specification using //assertions: Refine Parse Tree//
and return |TRUE|; or return |FALSE| to let nature take its course.
@e UNUSUAL_PROPERTY_VALUE_PLUG
=
int PluginCalls::unusual_property_value(parse_node *py) {
PLUGINS_CALL(UNUSUAL_PROPERTY_VALUE_PLUG, py);
}
@ Called from //assertions: The Creator// when an instance is being made in
an assembly, and its name may involve a genitive. For example, if the
assembly says "every person has a nose", then normally this would be called
@ -174,7 +197,20 @@ int PluginCalls::variable_set_warning(nonlocal_variable *q, parse_node *val) {
}
@h Influencing values.
Called from //values: Rvalues// to allow plugins to compile rvalues in
Called from //values: Rvalues// to allow plugins to help decide whether values
of the same kind would be equal if evaluated at runtime. For example, the
"scenes" plugin uses this to determine if two |K_scene| constants are equal.
To make a decision, set |rv| to either |TRUE| or |FALSE| and return |TRUE|.
To make no decision, return |FALSE|.
@e COMPARE_CONSTANT_PLUG
=
int PluginCalls::compare_constant(parse_node *c1, parse_node *c2, int *rv) {
PLUGINS_CALL(COMPARE_CONSTANT_PLUG, c1, c2, rv);
}
@ Called from //values: Rvalues// to allow plugins to compile rvalues in
eccentric ways of their own: not in fact just for the whimsy of it, but to
make it possible for plugins to support base kinds of their own. For example,
the "actions" plugin needs this to deal with the "stored action" kind.

View file

@ -16,6 +16,7 @@ void Scenes::start(void) {
PluginManager::plug(NEW_PROPERTY_NOTIFY_PLUG, Scenes::new_property_notify);
PluginManager::plug(NEW_INSTANCE_NOTIFY_PLUG, Scenes::new_named_instance_notify);
PluginManager::plug(NEW_BASE_KIND_NOTIFY_PLUG, Scenes::new_base_kind_notify);
PluginManager::plug(COMPARE_CONSTANT_PLUG, Scenes::compare_CONSTANT);
PluginManager::plug(MAKE_SPECIAL_MEANINGS_PLUG, Scenes::make_special_meanings);
}
@ -62,6 +63,18 @@ int Scenes::new_base_kind_notify(kind *new_base, text_stream *name, wording W) {
return FALSE;
}
int Scenes::compare_CONSTANT(parse_node *spec1, parse_node *spec2, int *rv) {
kind *K = Node::get_kind_of_value(spec1);
if (Kinds::eq(K, K_scene)) {
if (ARvalues::to_scene(spec1) == ARvalues::to_scene(spec2)) {
*rv = TRUE;
}
*rv = FALSE;
return TRUE;
}
return FALSE;
}
@ //scene// structures are automatically created whenever a new instance of the
kind "scene" is created, and this is where that happens.

View file

@ -0,0 +1,25 @@
[AConditions::] Action Conditions.
A special condition for testing against action patterns.
@ =
parse_node *AConditions::new_action_TEST_VALUE(action_pattern *ap, wording W) {
if (ap == NULL) internal_error("null action pattern");
parse_node *spec = Node::new_with_words(TEST_VALUE_NT, W);
spec->down = ARvalues::from_action_pattern(ap);
Node::set_text(spec->down, W);
return spec;
}
int AConditions::is_action_TEST_VALUE(parse_node *spec) {
if ((Node::is(spec, TEST_VALUE_NT)) &&
((ARvalues::to_action_pattern(spec->down)) ||
(ARvalues::to_explicit_action(spec->down)))) return TRUE;
return FALSE;
}
parse_node *AConditions::action_tested(parse_node *spec) {
if (AConditions::is_action_TEST_VALUE(spec) == FALSE)
internal_error("action improperly extracted");
return spec->down;
}

View file

@ -0,0 +1,115 @@
[ARvalues::] Action Kinds.
Three action-related kinds of value.
@ The following represent action names, stored actions and descriptions of
actions respectively: see //Actions Plugin// for what these terms mean.
= (early code)
kind *K_action_name = NULL;
kind *K_stored_action = NULL;
kind *K_description_of_action = NULL;
@ These are created by a Neptune file inside //WorldModelKit//, and are
recognised by their Inter identifiers:
@ =
int ARvalues::new_base_kind_notify(kind *new_base, text_stream *name, wording W) {
if (Str::eq_wide_string(name, L"ACTION_NAME_TY")) {
K_action_name = new_base; return TRUE;
}
if (Str::eq_wide_string(name, L"DESCRIPTION_OF_ACTION_TY")) {
K_description_of_action = new_base; return TRUE;
}
if (Str::eq_wide_string(name, L"STORED_ACTION_TY")) {
K_stored_action = new_base; return TRUE;
}
return FALSE;
}
@ A stored action can always be compared to a gerund: for instance,
>> if the current action is taking something...
=
int ARvalues::actions_typecheck_equality(kind *K1, kind *K2) {
if ((Kinds::eq(K1, K_stored_action)) && (Kinds::eq(K2, K_description_of_action)))
return TRUE;
return FALSE;
}
@ All three of these kinds can have constant values. For an action name, these
correspond simply to //action_name// objects:
=
parse_node *ARvalues::from_action_name(action_name *val) {
CONV_FROM(action_name, K_action_name) }
action_name *ARvalues::to_action_name(parse_node *spec) {
CONV_TO(action_name) }
@ When text is parsed to an action pattern, the result can be stored as a
constant in two ways. If the pattern unambiguously describes a single explicit
action, the result has the kind "stored action" and corresponds to an
//explicit_action// object; if the pattern is looser than that, the result
is a "description of action" and correspond to an //action_pattern//.
For example, "taking the golden telephone" might be a |K_stored_action|
constant, but "doing something to the golden telephone" or "taking something"
or "taking the golden telephone in the presence of Mr Wu" would all be
|K_description_of_action|.
=
parse_node *ARvalues::from_action_pattern(action_pattern *val) {
int failure_code = 0;
explicit_action *ea = ExplicitActions::from_action_pattern(val, &failure_code);
if (ea) {
parse_node *spec = Node::new(CONSTANT_NT);
Node::set_kind_of_value(spec, K_stored_action);
Node::set_constant_explicit_action(spec, ea);
return spec;
} else {
CONV_FROM(action_pattern, K_description_of_action);
}
}
action_pattern *ARvalues::to_action_pattern(parse_node *spec) {
CONV_TO(action_pattern) }
explicit_action *ARvalues::to_explicit_action(parse_node *spec) {
CONV_TO(explicit_action) }
@ Finally, for a named action pattern, constant values correspond to
//named_action_pattern// objects. These are actually never used at run-time
and do not appear as rvalues in any permanent way inside the compiler, so
the kind |K_description_of_action| is given to them only on principle. If
they were used as values, this is the kind we would probably give them.
=
parse_node *ARvalues::from_named_action_pattern(named_action_pattern *val) {
CONV_FROM(named_action_pattern, K_description_of_action ) }
named_action_pattern *ARvalues::to_named_action_pattern(parse_node *spec) {
CONV_TO(named_action_pattern) }
parse_node *ARvalues::from_grammar_verb(grammar_verb *val) {
CONV_FROM(grammar_verb, K_understanding) }
grammar_verb *ARvalues::to_grammar_verb(parse_node *spec) {
CONV_TO(grammar_verb) }
parse_node *ARvalues::from_scene(scene *val) {
CONV_FROM(scene, K_scene) }
scene *ARvalues::to_scene(parse_node *spec) {
CONV_TO(scene) }
@ It's not useful to be able to compare description of action constants for
equality in this sense. There would be a case for doing so with stored actions,
but in practice there seems little need, so for the moment we do not.
=
int ARvalues::compare_CONSTANT(parse_node *spec1, parse_node *spec2, int *rv) {
kind *K = Node::get_kind_of_value(spec1);
if (Kinds::eq(K, K_action_name)) {
if (ARvalues::to_action_name(spec1) == ARvalues::to_action_name(spec2)) {
*rv = TRUE;
}
*rv = FALSE;
return TRUE;
}
return FALSE;
}

View file

@ -34,7 +34,7 @@ void ActionNameNames::baptise(action_name *an, wording W) {
WordAssemblages::from_wording(W));
wording AW = WordAssemblages::to_wording(&wa);
an->naming_data.as_noun = Nouns::new_proper_noun(AW, NEUTER_GENDER, ADD_TO_LEXICON_NTOPT,
MISCELLANEOUS_MC, Rvalues::from_action_name(an), Task::language_of_syntax());
MISCELLANEOUS_MC, ARvalues::from_action_name(an), Task::language_of_syntax());
Vocabulary::set_flags(Lexer::word(Wordings::first_wn(W)), ACTION_PARTICIPLE_MC);
action_name *an2;
LOOP_OVER(an2, action_name)

View file

@ -320,7 +320,7 @@ int APClauses::cmp_clauses(int C1, action_pattern *ap1, int C2, action_pattern *
}
int APClauses::viable_in_past_tense(action_pattern *ap) {
if (ActionPatterns::is_overspecific(ap)) return FALSE;
if (ExplicitActions::ap_overspecific(ap)) return FALSE;
if (APClauses::pta_acceptable(APClauses::get_val(ap, ACTOR_AP_CLAUSE)) == FALSE) return FALSE;
if (APClauses::pta_acceptable(APClauses::get_val(ap, NOUN_AP_CLAUSE)) == FALSE) return FALSE;
if (APClauses::pta_acceptable(APClauses::get_val(ap, SECOND_AP_CLAUSE)) == FALSE) return FALSE;

View file

@ -43,19 +43,7 @@ action_pattern ActionPatterns::new(void) {
return ap;
}
@
=
typedef struct explicit_action {
int request;
struct action_name *action;
struct parse_node *actor;
struct parse_node *first_noun;
struct parse_node *second_noun;
struct action_pattern *as_described;
} explicit_action;
@ =
void ActionPatterns::log(action_pattern *ap) {
ActionPatterns::write(DL, ap);
}
@ -112,54 +100,6 @@ int ActionPatterns::object_based(action_pattern *ap) {
return FALSE;
}
explicit_action *ActionPatterns::to_explicit_action(action_pattern *ap, int *reason) {
if (ActionPatterns::is_unspecific(ap)) { *reason = 1; return NULL; }
if (ActionPatterns::is_overspecific(ap)) { *reason = 2; return NULL; }
*reason = 0;
explicit_action *ea = CREATE(explicit_action);
ea->action = ActionNameLists::get_the_one_true_action(ap->action_list);
ea->request = APClauses::is_request(ap);
ea->actor = APClauses::get_val(ap, ACTOR_AP_CLAUSE);
ea->first_noun = APClauses::get_val(ap, NOUN_AP_CLAUSE);
ea->second_noun = APClauses::get_val(ap, SECOND_AP_CLAUSE);
ea->as_described = ap;
return ea;
}
void ActionPatterns::make_ACTION_node(parse_node *p, action_pattern *ap) {
Node::set_type(p, ACTION_NT);
Node::set_action_meaning(p, ap);
p->down = NULL;
}
int ActionPatterns::is_unspecific(action_pattern *ap) {
action_name *an = ActionPatterns::required_action(ap);
if (an == NULL) return TRUE;
if ((ActionSemantics::must_have_noun(an)) && (APClauses::get_val(ap, NOUN_AP_CLAUSE) == NULL)) return TRUE;
if ((ActionSemantics::must_have_second(an)) && (APClauses::get_val(ap, SECOND_AP_CLAUSE) == NULL)) return TRUE;
if ((ActionSemantics::can_have_noun(an)) &&
(ActionPatterns::ap_clause_is_unspecific(APClauses::get_val(ap, NOUN_AP_CLAUSE)))) return TRUE;
if ((ActionSemantics::can_have_second(an)) &&
(ActionPatterns::ap_clause_is_unspecific(APClauses::get_val(ap, SECOND_AP_CLAUSE)))) return TRUE;
if (ActionPatterns::ap_clause_is_unspecific(APClauses::get_val(ap, ACTOR_AP_CLAUSE))) return TRUE;
return FALSE;
}
int ActionPatterns::ap_clause_is_unspecific(parse_node *spec) {
if (spec == NULL) return FALSE;
if (Specifications::is_description(spec) == FALSE) return FALSE;
return TRUE;
}
int ActionPatterns::is_overspecific(action_pattern *ap) {
for (ap_clause *apoc = (ap)?(ap->ap_clauses):NULL; apoc; apoc = apoc->next)
if ((APClauses::aspect(apoc) != PRIMARY_APCA) && (apoc->clause_spec))
return TRUE;
if (APClauses::has_any_actor(ap)) return TRUE;
if (ap->duration) return TRUE;
return FALSE;
}
void ActionPatterns::suppress_action_testing(action_pattern *ap) {
if ((ap->duration == NULL) && (ap->action_list))
ActionNameLists::suppress_action_testing(ap->action_list);
@ -188,6 +128,19 @@ int ActionPatterns::makes_callings(action_pattern *ap) {
return FALSE;
}
action_pattern *ActionPatterns::action_from_TEST(parse_node *spec) {
if (AConditions::is_action_TEST_VALUE(spec)) {
action_pattern *ap = ARvalues::to_action_pattern(
AConditions::action_tested(spec));
if (ap == NULL) {
explicit_action *ea = Node::get_constant_explicit_action(AConditions::action_tested(spec));
if (ea) ap = ea->as_described;
}
return ap;
}
return NULL;
}
int ActionPatterns::compare_specificity(action_pattern *ap1, action_pattern *ap2) {
if ((ap1 == NULL) && (ap2)) return -1;
if ((ap1) && (ap2 == NULL)) return 1;

View file

@ -9,7 +9,7 @@ into creations of action variables:
=
int ActionVariables::actions_offered_property(kind *K, parse_node *owner, parse_node *prop) {
if (Kinds::eq(K, K_action_name)) {
action_name *an = Rvalues::to_action_name(owner);
action_name *an = ARvalues::to_action_name(owner);
if (an == NULL) internal_error("failed to extract action-name structure");
if (global_pass_state.pass == 1) {
@<Require the variable to have an explicit name@>;

View file

@ -5,16 +5,41 @@ A plugin for actions, by which animate characters change the world model.
@ Support for actions is contained in the "actions" plugin, which occupies this
entire chapter. The test group |:actions| may be helpful in trouble-shooting here.
It may be helpful to distinguish these ideas right from the outset:
(*) An "action" (or "explicit action", for the sake of clarity) is a specific
impulse by a person in the model world to effect some change within it: for
example, "Henry taking the brick". Here Henry is the "actor", and the brick is
"the noun". Actions can be "stored" so that they are values in their own
right; thus, a variable could be set to the value "Henry taking the brick",
and this would have kind |K_stored_action|. Inside the compiler they are
represented by //explicit_action// objects.
(*) An "action name" -- not an ideal thing to call it, but traditional -- is the
type of action involved, taken in isolation: for example, "taking". These can
also be values at run-time, they have kind |K_action_name|, and they are
represented in the comoiler by //action_name// objections.
(*) An "action pattern" is a textual description which matches some actions but
not others, and can be vague or specific: for example, "wearing or examining
something". Action patterns become values of the kind |K_description_of_action|.
They can also be aggregated into "named action patterns", which characterise
behaviour; see //action_pattern// and //named_action_pattern//.
(*) A "past action pattern", which can never in any way be a value, is a
description of an action which have happened in the past: for example, "dropped
the hat". These are just a special case of action patterns.
=
void ActionsPlugin::start(void) {
ActionsNodes::nodes_and_annotations();
PluginManager::plug(MAKE_SPECIAL_MEANINGS_PLUG, ActionsPlugin::make_special_meanings);
PluginManager::plug(NEW_BASE_KIND_NOTIFY_PLUG, ActionsPlugin::new_base_kind_notify);
PluginManager::plug(NEW_BASE_KIND_NOTIFY_PLUG, ARvalues::new_base_kind_notify);
PluginManager::plug(COMPARE_CONSTANT_PLUG, ARvalues::compare_CONSTANT);
PluginManager::plug(COMPILE_CONSTANT_PLUG, RTActions::actions_compile_constant);
PluginManager::plug(CREATION_PLUG, ActionsNodes::creation);
PluginManager::plug(UNUSUAL_PROPERTY_VALUE_PLUG, ActionsNodes::unusual_property_value_node);
PluginManager::plug(OFFERED_PROPERTY_PLUG, ActionVariables::actions_offered_property);
PluginManager::plug(OFFERED_SPECIFICATION_PLUG, ActionsPlugin::actions_offered_specification);
PluginManager::plug(TYPECHECK_EQUALITY_PLUG, ActionsPlugin::actions_typecheck_equality);
PluginManager::plug(TYPECHECK_EQUALITY_PLUG, ARvalues::actions_typecheck_equality);
PluginManager::plug(PRODUCTION_LINE_PLUG, ActionsPlugin::production_line);
Vocabulary::set_flags(Vocabulary::entry_for_text(L"doing"), ACTION_PARTICIPLE_MC);
@ -32,59 +57,6 @@ int ActionsPlugin::production_line(int stage, int debugging, stopwatch_timer *se
return FALSE;
}
@ It may be useful to distinguish three ideas right from the outset:
(*) An "action" is a specific impulse by a person in the model world to effect
some change within it: for example, "Henry taking the brick". Here Henry is the
"actor", and the brick is "the noun". Actions can be "stored" so that they
are values in their own right; thus, a variable could be set to the value
"Henry taking the brick", and this would have kind |K_stored_action|.
(*) An "action name" -- not an ideal thing to call it, but traditional -- is the
type of action involved, taken in isolation: for example, "taking". These can
also be values at run-time, and have kind |K_action_name|.
(*) An "action pattern" is a textual description which matches some actions but
not others, and can be vague or specific: for example, "wearing or examining
something". Action patterns are in general not values, but names can be given
to them so that they are -- see //Named Action Patterns// -- and then they
have the kind |K_description_of_action|.
(*) A "past action pattern", which can never in any way be a value, is a
description of an action which have happened in the past: for example, "dropped
the hat".
= (early code)
kind *K_action_name = NULL;
kind *K_stored_action = NULL;
kind *K_description_of_action = NULL;
@ These are created by a Neptune file inside //WorldModelKit//, and are
recognised by their Inter identifiers:
@ =
int ActionsPlugin::new_base_kind_notify(kind *new_base, text_stream *name, wording W) {
if (Str::eq_wide_string(name, L"ACTION_NAME_TY")) {
K_action_name = new_base; return TRUE;
}
if (Str::eq_wide_string(name, L"DESCRIPTION_OF_ACTION_TY")) {
K_description_of_action = new_base; return TRUE;
}
if (Str::eq_wide_string(name, L"STORED_ACTION_TY")) {
K_stored_action = new_base; return TRUE;
}
return FALSE;
}
@ A stored action can always be compared to a gerund: for instance,
>> if the current action is taking something...
=
int ActionsPlugin::actions_typecheck_equality(kind *K1, kind *K2) {
if ((Kinds::eq(K1, K_stored_action)) &&
(Kinds::eq(K2, K_description_of_action)))
return TRUE;
return FALSE;
}
@ Though |K_action_name| is very like an enumeration kind, its possible values,
which correspond to //action_name// objects, are not strictly speaking instances
in the Inform world model. (Because they do not have properties: see //Action Variables//
@ -127,7 +99,7 @@ a "specification" text as one, and have to make their own arrangements:
int ActionsPlugin::actions_offered_specification(parse_node *owner, wording W) {
if (Rvalues::is_CONSTANT_of_kind(owner, K_action_name)) {
IXActions::actions_set_specification_text(
Rvalues::to_action_name(owner), Wordings::first_wn(W));
ARvalues::to_action_name(owner), Wordings::first_wn(W));
return TRUE;
}
return FALSE;

View file

@ -48,6 +48,80 @@ void ActionsNodes::nodes_and_annotations(void) {
Annotations::allow(CONSTANT_NT, constant_explicit_action_ANNOT);
}
@ ACTION nodes are converted from existing ones, not born:
=
void ActionsNodes::convert_to_ACTION_node(parse_node *p, action_pattern *ap) {
Node::set_type(p, ACTION_NT);
Node::set_action_meaning(p, ap);
p->down = NULL;
}
int ActionsNodes::is_actionlike(parse_node *p) {
if (Node::get_type(p) == ACTION_NT) return TRUE;
if ((K_stored_action) && (Node::get_type(p) == PROPER_NOUN_NT)) {
parse_node *spec = Node::get_evaluation(p);
if (Rvalues::is_CONSTANT_of_kind(spec, K_stored_action)) return TRUE;
}
return FALSE;
}
void ActionsNodes::convert_stored_action_constant(parse_node *p) {
if (Node::get_type(p) == PROPER_NOUN_NT) {
parse_node *spec = Node::get_evaluation(p);
if (Rvalues::is_CONSTANT_of_kind(spec, K_stored_action)) {
explicit_action *ea = Node::get_constant_explicit_action(spec);
ActionsNodes::convert_to_ACTION_node(p, ea->as_described);
return;
}
}
}
@ The first case here is to take care of a sentence like:
>> Taking something is proactive behaviour.
Here |Refiner::refine| will correctly report that "proactive behaviour" is
a new term, and give it a |CREATED_NT| node. But we don't want it to become an
object or a value -- it will become a named kind of action instead. So we
amend the node to |ACTION_NT|.
The second case occurs much less often -- for instance, the only time it comes
up in the test suite is in the example "Chronic Hinting Syndrome":
>> Setting is a kind of value. The settings are bright and dull.
Here the first sentence wants to create something called "setting", which
ought to have a |CREATED_NT| node type, but doesn't because it has been read
as an action instead. We correct the spurious |ACTION_NT| to a |CREATED_NT|.
=
int ActionsNodes::creation(parse_node *px, parse_node *py) {
if ((ActionsNodes::is_actionlike(px)) && (Node::get_type(py) == CREATED_NT))
Node::set_type(py, ACTION_NT);
if ((ActionsNodes::is_actionlike(px)) && (ActionsNodes::is_actionlike(py))) {
ActionsNodes::convert_stored_action_constant(px);
ActionsNodes::convert_stored_action_constant(py);
}
if ((Node::get_type(px) == ACTION_NT) && (Node::get_type(py) == KIND_NT))
Node::set_type(px, CREATED_NT);
return FALSE;
}
int ActionsNodes::unusual_property_value_node(parse_node *py) {
if (Node::get_type(py) == ACTION_NT) {
action_pattern *ap = Node::get_action_meaning(py);
if (ap) {
parse_node *val = ARvalues::from_action_pattern(ap);
if (Rvalues::is_CONSTANT_of_kind(val, K_stored_action)) {
Refiner::give_spec_to_noun(py, val);
return TRUE;
}
}
}
return FALSE;
}
@ And for the debugging log:
=

View file

@ -0,0 +1,68 @@
[ExplicitActions::] Explicit Actions.
An exactly specified action is called "explicit".
@ Explicit actions are used inside the compiler whenever we kmow exactly what
action we are talking about; stored action constants are //explicit_action//
objects in a thin wrapper -- see //Action Kinds//.
=
typedef struct explicit_action {
int request;
struct action_name *action;
struct parse_node *actor;
struct parse_node *first_noun;
struct parse_node *second_noun;
struct action_pattern *as_described;
} explicit_action;
@
@d UNDERSPECIFIC_EA_FAILURE 1
@d OVERSPECIFIC_EA_FAILURE 2
=
explicit_action *ExplicitActions::from_action_pattern(action_pattern *ap, int *reason) {
if (ExplicitActions::ap_underspecific(ap)) { *reason = UNDERSPECIFIC_EA_FAILURE; return NULL; }
if (ExplicitActions::ap_overspecific(ap)) { *reason = OVERSPECIFIC_EA_FAILURE; return NULL; }
*reason = 0;
explicit_action *ea = CREATE(explicit_action);
ea->action = ActionNameLists::get_the_one_true_action(ap->action_list);
ea->request = APClauses::is_request(ap);
ea->actor = APClauses::get_val(ap, ACTOR_AP_CLAUSE);
ea->first_noun = APClauses::get_val(ap, NOUN_AP_CLAUSE);
ea->second_noun = APClauses::get_val(ap, SECOND_AP_CLAUSE);
ea->as_described = ap;
return ea;
}
int ExplicitActions::ap_underspecific(action_pattern *ap) {
action_name *an = ActionPatterns::required_action(ap);
if (an == NULL) return TRUE;
if ((ActionSemantics::must_have_noun(an)) &&
(APClauses::get_val(ap, NOUN_AP_CLAUSE) == NULL)) return TRUE;
if ((ActionSemantics::must_have_second(an)) &&
(APClauses::get_val(ap, SECOND_AP_CLAUSE) == NULL)) return TRUE;
if ((ActionSemantics::can_have_noun(an)) &&
(ExplicitActions::clause_unspecific(ap, NOUN_AP_CLAUSE))) return TRUE;
if ((ActionSemantics::can_have_second(an)) &&
(ExplicitActions::clause_unspecific(ap, SECOND_AP_CLAUSE))) return TRUE;
if (ExplicitActions::clause_unspecific(ap, ACTOR_AP_CLAUSE)) return TRUE;
return FALSE;
}
int ExplicitActions::clause_unspecific(action_pattern *ap, int C) {
parse_node *spec = APClauses::get_val(ap, C);
if (spec == NULL) return FALSE;
if (Specifications::is_description(spec) == FALSE) return FALSE;
return TRUE;
}
int ExplicitActions::ap_overspecific(action_pattern *ap) {
for (ap_clause *apoc = (ap)?(ap->ap_clauses):NULL; apoc; apoc = apoc->next)
if ((APClauses::aspect(apoc) != PRIMARY_APCA) && (apoc->clause_spec))
return TRUE;
if (APClauses::has_any_actor(ap)) return TRUE;
if (ap->duration) return TRUE;
return FALSE;
}

View file

@ -60,7 +60,7 @@ void NamedActionPatterns::add(action_pattern *ap, wording W) {
named_action_pattern *NamedActionPatterns::by_name(wording W) {
parse_node *p = Lexicon::retrieve(NAMED_AP_MC, W);
if (p) return Rvalues::to_named_action_pattern(p);
if (p) return ARvalues::to_named_action_pattern(p);
return NULL;
}
@ -70,7 +70,7 @@ named_action_pattern *NamedActionPatterns::new(wording W) {
nap->text_of_declaration = W;
nap->compilation_data = RTNamedActionPatterns::new(nap);
nap->as_noun = Nouns::new_proper_noun(W, NEUTER_GENDER, ADD_TO_LEXICON_NTOPT,
NAMED_AP_MC, Rvalues::from_named_action_pattern(nap), Task::language_of_syntax());
NAMED_AP_MC, ARvalues::from_named_action_pattern(nap), Task::language_of_syntax());
return nap;
}

View file

@ -2,6 +2,31 @@
Turning text into APs.
@ Action patterns, such as "taking a container" or "opening a closed door",
are wrapped up as values here:
=
<s-action-pattern-as-value> internal {
if (Wordings::mismatched_brackets(W)) { ==> { fail nonterminal }; }
if (Lexer::word(Wordings::first_wn(W)) == OPENBRACE_V) { ==> { fail nonterminal }; }
int pto = permit_trying_omission;
if (<definite-article>(Wordings::first_word(W)) == FALSE) permit_trying_omission = TRUE;
int r = <action-pattern>(W);
permit_trying_omission = pto;
if (r) {
action_pattern *ap = <<rp>>;
if ((APClauses::get_val(ap, ACTOR_AP_CLAUSE)) &&
(Dash::validate_parameter(APClauses::get_val(ap, ACTOR_AP_CLAUSE), K_person) == FALSE)) {
r = <action-pattern>(W);
}
}
if (r) {
==> { -, AConditions::new_action_TEST_VALUE(<<rp>>, W) };
return TRUE;
}
==> { fail nonterminal };
}
@ When we parse action patterns, we record why they fail, in order to make
it easier to produce helpful error messages. (We can't simply fire off
errors at the time they occur, because text is often parsed in several
@ -686,7 +711,7 @@ description.
&& (K_understanding)
&& (Kinds::eq(ActionSemantics::kind_of_second(ActionNameLists::action(entry)), K_understanding))
&& (<understanding-action-irregular-operand>(ActionNameLists::par(entry, 1)))) {
parse_node *val = Rvalues::from_grammar_verb(NULL); /* Why no GV here? */
parse_node *val = ARvalues::from_grammar_verb(NULL); /* Why no GV here? */
Node::set_text(val, ActionNameLists::par(entry, 1));
APClauses::set_val(&trial_ap, SECOND_AP_CLAUSE, val);
} else {

View file

@ -387,7 +387,7 @@ parse_node *PL::Parsing::Tokens::determine(parse_node *pn, int depth, int *score
}
@<Determine a named grammar token@> =
parse_node *val = Rvalues::from_grammar_verb(<<grammar_verb:named>>);
parse_node *val = ARvalues::from_grammar_verb(<<grammar_verb:named>>);
spec = PL::Parsing::Verbs::determine(<<grammar_verb:named>>, depth+1); /* this is where Phase II recurses */
Node::set_grammar_value(pn, val);
@ -1245,7 +1245,7 @@ kind *PL::Parsing::Tokens::compile(gpr_kit *gprk, parse_node *pn, int code_mode,
} else {
if (Node::is(spec, CONSTANT_NT)) {
if ((K_understanding) && (Rvalues::is_CONSTANT_of_kind(spec, K_understanding))) {
gv = Rvalues::to_grammar_verb(spec);
gv = ARvalues::to_grammar_verb(spec);
if (code_mode) {
Produce::inv_primitive(Emit::tree(), STORE_BIP);
Produce::down(Emit::tree());

View file

@ -12,6 +12,7 @@ void ParsingPlugin::start(void) {
PluginManager::plug(PRODUCTION_LINE_PLUG, ParsingPlugin::production_line);
PluginManager::plug(MAKE_SPECIAL_MEANINGS_PLUG, ParsingPlugin::make_special_meanings);
PluginManager::plug(COMPARE_CONSTANT_PLUG, ParsingPlugin::compare_CONSTANT);
PluginManager::plug(NEW_VARIABLE_NOTIFY_PLUG, ParsingPlugin::new_variable_notify);
PluginManager::plug(NEW_SUBJECT_NOTIFY_PLUG, ParsingPlugin::new_subject_notify);
PluginManager::plug(NEW_PERMISSION_NOTIFY_PLUG, Visibility::new_permission_notify);
@ -56,6 +57,21 @@ int ParsingPlugin::new_subject_notify(inference_subject *subj) {
return FALSE;
}
@
=
int ParsingPlugin::compare_CONSTANT(parse_node *spec1, parse_node *spec2, int *rv) {
kind *K = Node::get_kind_of_value(spec1);
if (Kinds::eq(K, K_understanding)) {
if (ARvalues::to_grammar_verb(spec1) == ARvalues::to_grammar_verb(spec2)) {
*rv = TRUE;
}
*rv = FALSE;
return TRUE;
}
return FALSE;
}
@ A number of global variables are given special treatment here, including
a whole family with names like "the K understood", for different kinds K.
This is an awkward contrivance to bridge Inform 7, which is typed, with the

View file

@ -39,12 +39,15 @@ Chapter 4: Actions
"Actions are impulses to do something within the simulated world."
Actions Plugin
Actions-Only Nodes and Annotations
Action Kinds
Action Conditions
Actions
Action Semantics
Action Variables
Action Name Names
Action Name Lists
Action Patterns
Explicit Actions
Action Pattern Clauses
Going
Parse Action Patterns

View file

@ -188,8 +188,9 @@ void Chronology::compile_past_tense_condition(value_holster *VH, parse_node *spe
#ifdef IF_MODULE
action_pattern *ap = NULL;
if (Node::is(spec, TEST_VALUE_NT)) ap = Rvalues::to_action_pattern(spec->down);
if (AConditions::is_action_TEST_VALUE(spec)) ap = ActionPatterns::action_from_TEST(spec);
if ((ap) && (tense != IS_TENSE)) {
LOG("Here we go! $A\n", ap);
if ((duration) && (Occurrence::units(duration) == TIMES_UNIT) && (Occurrence::length(duration) >= 2)) {
StandardProblems::sentence_problem(Task::syntax_tree(), _p_(PM_NoMoreRonNewcombMoment),
"a condition like 'we have X', where X is an action, has either "

View file

@ -344,7 +344,7 @@ void Phrases::Parser::parse_within_inv(parse_node *inv) {
@<Parse the action in a try phrase@> =
if (<action-pattern>(XW))
as_parsed = Conditions::new_TEST_ACTION(<<rp>>, XW);
as_parsed = AConditions::new_action_TEST_VALUE(<<rp>>, XW);
else {
permit_trying_omission = FALSE;
@<Parse any other token@>;

View file

@ -356,9 +356,10 @@ void RTActionPatterns::emit_pattern_match(action_pattern ap, int naming_mode) {
void RTActionPatterns::compile_pattern_match(value_holster *VH, action_pattern ap, int naming_mode) {
int cpm_count = 0, needed[MAX_CPM_CLAUSES];
ap_clause *needed_apoc[MAX_CPM_CLAUSES];
LOGIF(ACTION_PATTERN_COMPILATION, "Compiling action pattern:\n $A", &ap);
LOGIF(ACTION_PATTERN_COMPILATION, "Compiling action pattern:\n $A\n", &ap);
if (ap.duration) {
LOGIF(ACTION_PATTERN_COMPILATION, "As past action\n");
Chronology::compile_past_action_pattern(VH, ap.duration, ap);
} else {
kind *kind_of_noun = K_object;

View file

@ -350,7 +350,7 @@ int RTActions::actions_compile_constant(value_holster *VH, kind *K, parse_node *
if (PluginManager::active(actions_plugin) == FALSE)
internal_error("actions plugin inactive");
if (Kinds::eq(K, K_action_name)) {
action_name *an = Rvalues::to_action_name(spec);
action_name *an = ARvalues::to_action_name(spec);
if (Holsters::data_acceptable(VH)) {
inter_name *N = RTActions::iname(an);
if (N) Emit::holster(VH, N);

View file

@ -101,44 +101,6 @@ parse_node *Conditions::new_TEST_PHRASE_OPTION(int opt_num) {
return spec;
}
@ =
#ifdef IF_MODULE
parse_node *Conditions::new_TEST_ACTION(action_pattern *ap, wording W) {
if (ap == NULL) internal_error("null action pattern");
parse_node *spec = Node::new_with_words(TEST_VALUE_NT, W);
spec->down = Rvalues::from_action_pattern(ap);
Node::set_text(spec->down, W);
return spec;
}
#endif
#ifndef IF_MODULE
parse_node *Conditions::new_TEST_ACTION(void *ap, wording W) {
internal_error("can't make test action without IF module");
return NULL;
}
#endif
int Conditions::is_TEST_ACTION(parse_node *spec) {
#ifdef IF_MODULE
if ((Node::is(spec, TEST_VALUE_NT)) &&
((Rvalues::to_action_pattern(spec->down)) ||
(Rvalues::to_explicit_action(spec->down)))) return TRUE;
#endif
return FALSE;
}
parse_node *Conditions::action_tested(parse_node *spec) {
#ifdef IF_MODULE
if (Conditions::is_TEST_ACTION(spec) == FALSE)
internal_error("action improperly extracted");
return spec->down;
#endif
#ifndef IF_MODULE
internal_error("can't perform action_tested without IF module");
return NULL;
#endif
}
@ Since, in principle, any condition might also have a time period attached
to it, we need a follow-up routine to attach this as necessary to a newly
created condition:
@ -264,10 +226,15 @@ void Conditions::compile(value_holster *VH, parse_node *spec_found) {
case LOGICAL_NOT_NT: @<Compile a logical negation@>; break;
case LOGICAL_AND_NT: case LOGICAL_OR_NT: @<Compile a logical operator@>; break;
case TEST_VALUE_NT: {
if (Conditions::is_TEST_ACTION(spec_found)) {
if (AConditions::is_action_TEST_VALUE(spec_found)) {
#ifdef IF_MODULE
action_pattern *ap = Rvalues::to_action_pattern(
Conditions::action_tested(spec_found));
action_pattern *ap = ARvalues::to_action_pattern(
AConditions::action_tested(spec_found));
if (ap == NULL) {
explicit_action *ea = Node::get_constant_explicit_action(AConditions::action_tested(spec_found));
if (ea) ap = ea->as_described;
}
if (ap == NULL) internal_error("no action pattern to test");
RTActionPatterns::compile_pattern_match(VH, *ap, FALSE);
#endif
} else if (Specifications::is_description(spec_found)) {

View file

@ -2916,17 +2916,15 @@ action value, which is a specific action.
@<Step (5.d.1) Coerce TEST ACTION to constant action@> =
LOG_DASH("(5.d.1)");
LOGIF(MATCHING, "Kind expected %u; ista %d cond %d\n", kind_expected, Conditions::is_TEST_ACTION(p), condition_context);
if ((Conditions::is_TEST_ACTION(p)) && (kind_expected) &&
if ((AConditions::is_action_TEST_VALUE(p)) && (kind_expected) &&
(Kinds::compatible(K_stored_action, kind_expected))) {
LOGIF(MATCHING, "Madeit\n");
explicit_action *ea = Node::get_constant_explicit_action(p->down);
if (ea == NULL) {
action_pattern *ap = Node::get_constant_action_pattern(p->down);
int failure_code = 0;
ea = ActionPatterns::to_explicit_action(ap, &failure_code);
ea = ExplicitActions::from_action_pattern(ap, &failure_code);
if (failure_code == 1) {
if (failure_code == UNDERSPECIFIC_EA_FAILURE) {
THIS_IS_A_GROSSER_THAN_GROSS_PROBLEM;
Problems::quote_source(1, current_sentence);
Problems::quote_wording(2, Node::get_text(p));
@ -2939,7 +2937,7 @@ LOGIF(MATCHING, "Madeit\n");
Problems::issue_problem_end();
return NEVER_MATCH;
}
if (failure_code == 2) {
if (failure_code == OVERSPECIFIC_EA_FAILURE) {
THIS_IS_A_GROSSER_THAN_GROSS_PROBLEM;
Problems::quote_source(1, current_sentence);
Problems::quote_wording(2, Node::get_text(p));

View file

@ -29,29 +29,6 @@ pointers:
return spec;
=
#ifdef IF_MODULE
parse_node *Rvalues::from_action_name(action_name *val) {
CONV_FROM(action_name, K_action_name) }
parse_node *Rvalues::from_action_pattern(action_pattern *val) {
int failure_code = 0;
explicit_action *ea = ActionPatterns::to_explicit_action(val, &failure_code);
if (ea) {
parse_node *spec = Node::new(CONSTANT_NT);
Node::set_kind_of_value(spec, K_stored_action);
Node::set_constant_action_pattern(spec, val);
Node::set_constant_explicit_action(spec, ea);
return spec;
} else {
CONV_FROM(action_pattern, K_description_of_action);
}
}
parse_node *Rvalues::from_grammar_verb(grammar_verb *val) {
CONV_FROM(grammar_verb, K_understanding) }
parse_node *Rvalues::from_named_action_pattern(named_action_pattern *val) {
CONV_FROM(named_action_pattern, K_nil) }
parse_node *Rvalues::from_scene(scene *val) {
CONV_FROM(scene, K_scene) }
#endif
parse_node *Rvalues::from_activity(activity *val) {
CONV_FROM(activity, Activities::to_kind(val)) }
parse_node *Rvalues::from_binary_predicate(binary_predicate *val) {
@ -85,20 +62,6 @@ parse_node *Rvalues::from_verb_form(verb_form *val) {
return val;
=
#ifdef IF_MODULE
action_name *Rvalues::to_action_name(parse_node *spec) {
CONV_TO(action_name) }
action_pattern *Rvalues::to_action_pattern(parse_node *spec) {
CONV_TO(action_pattern) }
explicit_action *Rvalues::to_explicit_action(parse_node *spec) {
CONV_TO(explicit_action) }
grammar_verb *Rvalues::to_grammar_verb(parse_node *spec) {
CONV_TO(grammar_verb) }
named_action_pattern *Rvalues::to_named_action_pattern(parse_node *spec) {
CONV_TO(named_action_pattern) }
scene *Rvalues::to_scene(parse_node *spec) {
CONV_TO(scene) }
#endif
activity *Rvalues::to_activity(parse_node *spec) {
CONV_TO(activity) }
binary_predicate *Rvalues::to_binary_predicate(parse_node *spec) {
@ -471,11 +434,9 @@ int Rvalues::compare_CONSTANT(parse_node *spec1, parse_node *spec2) {
KCOMPARE_CONSTANTS(rulebook_outcome, named_rulebook_outcome)
KCOMPARE_CONSTANTS(table, table)
KCOMPARE_CONSTANTS(use_option, use_option)
#ifdef IF_MODULE
KCOMPARE_CONSTANTS(action_name, action_name)
KCOMPARE_CONSTANTS(scene, scene)
KCOMPARE_CONSTANTS(understanding, grammar_verb)
#endif
int rv = NOT_APPLICABLE;
PluginCalls::compare_constant(spec1, spec2, &rv);
if (rv != NOT_APPLICABLE) return rv;
}
}
return FALSE;

View file

@ -141,7 +141,7 @@ kind *Lists::kind_of_ll(literal_list *ll, int issue_problems) {
for (lle = ll->first_llist_entry; lle; lle = lle->next_llist_entry) {
parse_node *spec = lle->llist_entry_value;
if (!Node::is(spec, UNKNOWN_NT)) {
if (Conditions::is_TEST_ACTION(spec))
if (AConditions::is_action_TEST_VALUE(spec))
Dash::check_value_silently(spec, K_stored_action);
else
Dash::check_value_silently(spec, NULL);

View file

@ -52,8 +52,8 @@ following implements this as a hand-coded nonterminal instead.
parse_node *atomic_cnd = <<rp>>;
parse_node *spec = atomic_cnd;
if (Node::is(spec, CONSTANT_NT)) {
action_pattern *ap = Rvalues::to_action_pattern(spec);
spec = Conditions::new_TEST_ACTION(ap, W);
action_pattern *ap = ARvalues::to_action_pattern(spec);
spec = AConditions::new_action_TEST_VALUE(ap, W);
}
==> { -, Conditions::attach_historic_requirement(spec, tp) };
return TRUE;
@ -165,10 +165,10 @@ is handled. The following nonterminal exists to enter the AP to the meaning list
=
<s-action-pattern-as-condition> ::=
<we-are-action-pattern> ==> { -, Conditions::new_TEST_ACTION(RP[1], W) }
<we-are-action-pattern> ==> { -, AConditions::new_action_TEST_VALUE(RP[1], W) }
<s-action-pattern-as-negated-condition> ::=
<action-pattern-negated> ==> { -, Conditions::new_TEST_ACTION(RP[1], W) }
<action-pattern-negated> ==> { -, AConditions::new_action_TEST_VALUE(RP[1], W) }
@ And similarly:
@ -190,7 +190,7 @@ is handled. The following nonterminal exists to enter the AP to the meaning list
"too much information about past events.");
return FALSE;
}
parse_node *C = Conditions::new_TEST_ACTION(ap, W);
parse_node *C = AConditions::new_action_TEST_VALUE(ap, W);
C = Conditions::attach_tense(C, HASBEEN_TENSE);
==> { -, C };
#endif

View file

@ -174,7 +174,7 @@ These are meaningful only for interactive fiction, and serve the "if" module:
if (Rvalues::is_CONSTANT_of_kind(S, K_stored_action)) {
==> { -, S };
return TRUE;
} else if (Conditions::is_TEST_ACTION(S)) {
} else if (AConditions::is_action_TEST_VALUE(S)) {
==> { -, S->down };
return TRUE;
} else {
@ -199,7 +199,7 @@ These are meaningful only for interactive fiction, and serve the "if" module:
if (Rvalues::is_CONSTANT_of_kind(S, K_stored_action)) {
==> { -, S };
return TRUE;
} else if (Conditions::is_TEST_ACTION(S)) {
} else if (AConditions::is_action_TEST_VALUE(S)) {
==> { -, S->down };
return TRUE;
} else {

View file

@ -494,31 +494,3 @@ parse_node *SPType::arg(parse_node *val) {
if (val == NULL) return Specifications::new_UNKNOWN(EMPTY_WORDING);
return Node::duplicate(val);
}
@ Action patterns, such as "taking a container" or "opening a closed door",
are parsed by code in the chapter on Actions; all we do here is to wrap the
result.
=
<s-action-pattern-as-value> internal {
#ifdef IF_MODULE
if (Wordings::mismatched_brackets(W)) { ==> { fail nonterminal }; }
if (Lexer::word(Wordings::first_wn(W)) == OPENBRACE_V) { ==> { fail nonterminal }; }
int pto = permit_trying_omission;
if (<definite-article>(Wordings::first_word(W)) == FALSE) permit_trying_omission = TRUE;
int r = <action-pattern>(W);
permit_trying_omission = pto;
if (r) {
action_pattern *ap = <<rp>>;
if ((APClauses::get_val(ap, ACTOR_AP_CLAUSE)) &&
(Dash::validate_parameter(APClauses::get_val(ap, ACTOR_AP_CLAUSE), K_person) == FALSE)) {
r = <action-pattern>(W);
}
}
if (r) {
==> { -, Conditions::new_TEST_ACTION(<<rp>>, W) };
return TRUE;
}
#endif
==> { fail nonterminal };
}

View file

@ -959,9 +959,9 @@ pcalc_prop *Simplifications::convert_gerunds(pcalc_prop *prop, int *changed) {
TRAVERSE_PROPOSITION(pl, prop)
if ((pl->element == PREDICATE_ATOM) && (pl->arity == 2))
for (int i=0; i<2; i++)
if (Conditions::is_TEST_ACTION(pl->terms[i].constant))
if (AConditions::is_action_TEST_VALUE(pl->terms[i].constant))
pl->terms[i].constant =
Conditions::action_tested(pl->terms[i].constant);
AConditions::action_tested(pl->terms[i].constant);
return prop;
}
#endif